ABP 框架 数据库底层迁移 Mysql 集群

Posted dotNET跨平台

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ABP 框架 数据库底层迁移 Mysql 集群相关的知识,希望对你有一定的参考价值。

我的各种github 开源项目和代码:https://github.com/linbin524

背景

 

笔者 目前架构的IOT 项目是使用abp 框架作为后台,虽然abp的框架适用于中小型项目框架,但由于架构优美,笔者认为还是可以经过改造,作为大型项目中使用。但IOT 的这个项目目前刚上线不久,十几天数据库已经有了上百GB,而且由于实施检查设备状态,调用设备状态维护表,审计日志压力很大,单单审计日志一天的数据量就有几十万,目前在架构上,笔者做了几个优化处理;

1、针对审计日志,笔者重写了Abp 原有的 IAuditingStore,实现mongodb和redis 两种转移,并且针对审计日志内容做了过滤,DisableAuditing特性标记指定的类或方法不进行记录。

ps:abp 虽然有mongodb 的封装,但它的出发点是和EF 同一个模式,左右系统唯一的ORM,如果要使用abp 的mongo 封装,必须要替代EF,或者重写ABP UnitOfWorkOptions,否则直接用会出现工作单元转换失败的问题。

2、站点层面使用nginx 做了反向代理,进行多站点服务,通信模式由原来的队列、改为服务化,EventBus等方式

3、数据库底层 做了Percona XtraDB Cluster—mysql 集群处理迁移。

 

思考评估:1、审计日志这样处理,从源头做了缩减,并且进行Nosql拆分,有助于缓解数据库压力。

                 2、中间层的处理是一般IOT 中间件各种脚手架的组合,成熟,也有经过多年生产环境的检验。

                 3、数据库底层 使用Percona XtraDB Cluster,是因为它支持集群,可以缓解数据库请求压力,又支持abp的事务;

               但从真正大系统考虑,其实最理性的模式应该是分片,结合SOA、或者微服务才能真正解决底层压力,目前考量了Tidb(张善友 张队推荐的)、oceanbase(淘宝 自有数据库,生产环境十年)、mycat中间件(听说这个坑多)等,

               为了暂时不做大改造,只能先使用 Percona XtraDB Cluster,后续可能使用Orleans(Azure 云框架)、akka.net(大型的框架) 或者 Service Fabric(微服务框架)

     

二、Percona XtraDB Cluster 评估

 

 

优点如下:

1.当执行一个查询时,在本地节点上执行。因为所有数据都在本地,无需远程访问。

2.无需集中管理。可以在任何时间点失去任何节点,但是集群将照常工作。

3.良好的读负载扩展,任意节点都可以查询。

缺点如下:

1.加入新节点,开销大。需要复制完整的数据。

2.不能有效的解决写缩放问题,所有的写操作都将发生在所有节点上。

3.有多少个节点就有多少重复的数据。

 

Percona XtraDB Cluster是MySQL高可用性和可扩展性的解决方案.

Percona XtraDB Cluster提供的特性有:

1.同步复制,事务要么在所有节点提交或不提交。

2.多主复制,可以在任意节点进行写操作。

3.在从服务器上并行应用事件,真正意义上的并行复制。

4.节点自动配置。

5.数据一致性,不再是异步复制。

Percona XtraDB Cluster完全兼容MySQL和Percona Server,表现在:

1.数据的兼容性

2.应用程序的兼容性:无需更改应用程序

 

1.集群是有节点组成的,推荐配置至少3个节点,但是也可以运行在2个节点上。

2.每个节点都是普通的mysql/percona服务器,可以将现有的数据库服务器组成集群,反之,也可以将集群拆分成单独的服务器。

3.每个节点都包含完整的数据副本。

 

三、部署流程

 

1、环境准备

 

  在腾讯云上开设三个测试服务器,系统 镜像 CentOS 7.5 64

 

 

用远程工具连接三台测试服务器,完成如下操作

 

(1)  关闭firewalld防火墙

# setenforce 0# sed -i 's,^SELINUX=enforcing,SELINUX=disabled,g' /etc/selinux/config

 

2、主节点部署

 

(1)安装PXC yum源

# yum install Percona-XtraDB-Cluster-56

 

最终下载下来的版本是Percona-XtraDB-Cluster-56-5.6.30

(3) 修改    /etc/my.cnf

[mysqld]

datadir=/var/lib/mysql
user=mysql

wsrep_provider=/usr/lib64/galera3/libgalera_smm.so
#集群的ip
wsrep_cluster_address=gcomm://节点ip1,节点ip2,节点ip3binlog_format=ROW default_storage_engine=InnoDB innodb_autoinc_lock_mode=2#当前主节点的ip wsrep_node_address=当前节点ip wsrep_sst_method=xtrabackup-v2 wsrep_cluster_name=my_centos_cluster #初始化一个mysql的用户和密码 wsrep_sst_auth="admin:123456"

 

(4)启动主节点

mysql -uroot -p

 

(6) 登录客户端查看数据库的状态,在进行权限配置允许ip访问,默认无法远程访问,但是我们需要远程通过图形化等界面查看,所以要做如下配置

yum install http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpm

(2) 安装PXC

     vim  /etc/my.cnf

 

systemctl start mysql

(5)进入mysql

登录 (初始化状态,无密码,遇到要输密码直接回车)

mysql> show status like 'wsrep%';

CREATE USER 'admin'@'localhost' IDENTIFIED BY '123456';//如果这里报错,看一下是否有 用户存在了

GRANT RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO 'admin'@'localhost'; 

FLUSH PRIVILEGES;


 

完成后可以用Navicat For mysql 连接看一下是否可以成功访问

 (7)可以在mysql中执行如下命令查看

systemctl stop mysql@bootstrap.service
systemctl start mysql@bootstrap.service

其他节点也再次启动

 <add name="Default" connectionString="server=主节点ip;port=3306;database=abpzero4_6db;uid=admin;password=123456;" providerName="MySql.Data.MySqlClient" />

(3) 执行迁移 

ABP 框架 数据库底层迁移 Mysql 集群

 

 (4)查看对应的三台服务器集群都自动同步该数据库

 

 ABP 框架 数据库底层迁移 Mysql 集群

(5)在Appservice 中建立测试服务进行增删改查、事务等测试

ABP 框架 数据库底层迁移 Mysql 集群

<pre style="margin-top: 0px;margin-bottom: 0px;padding: 0px;white-space: pre-wrap;overflow-wrap: break-word;font-family: " !important;"="" 12px="" courier="">using _consigneeRepository.DeleteAsync(predicate);        }    } }

ABP 框架 数据库底层迁移 Mysql 集群

在swagger ui中增删改查都已经正常,而且数据在三个数据库中正常同步

 

ABP 框架 数据库底层迁移 Mysql 集群

 

针对事务,做了人为异常处理,确认会实现回滚(abp 自带工作单元处理事务)

 

 

 五、后记

 这一次只是做了简单的实验性测试,后续需要在加强深入检测,才可以用生产环境中。

 
   
   
 


以上是关于ABP 框架 数据库底层迁移 Mysql 集群的主要内容,如果未能解决你的问题,请参考以下文章

ABP框架EF6链接Oracle数据库手动迁移

ABP框架数据迁移报错

ABP .Net Core Entity Framework迁移使用MySql数据库

将ABP的数据库从SQLSERVER迁移到MySql

abp框架运行——前后端分离(基于VUE)

Abp框架连接mysql数据库