技术交流,请加QQ群:538327407

我的各种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=mysqlwsrep_provider=/usr/lib64/galera3/libgalera_smm.so
#集群的ip
wsrep_cluster_address=gcomm://节点ip1,节点ip2,节点ip3binlog_format=ROWdefault_storage_engine=InnoDBinnodb_autoinc_lock_mode=2#当前主节点的ip
wsrep_node_address=当前节点ipwsrep_sst_method=xtrabackup-v2wsrep_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) 执行迁移

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

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

<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);        }    } }

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

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

 五、后记

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

原文地址: https://www.cnblogs.com/linbin524/p/10150300.html

.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com

ABP 框架 数据库底层迁移 Mysql 集群相关推荐

  1. 二进制安装mysql集群_实战mysql集群搭建(一)--centos7下二进制安装mysql-5.6

    在超哥的帮助下,完成了基于InnoDb数据引擎的mysql数据库集群搭建,实现了主从复制的功能,本篇博文介绍如何使用二进制安装mysql的方法,具体实现步骤如下: 软件使用说明: Liunx系统:ce ...

  2. MySQL数据库(九) 集群 Cluster 和性能优化

    文章目录 6 MySQL 集群 Cluster 6.1 MySQL主从复制 6.1.1 主从复制架构和原理 6.1.2 实现主从复制配置 6.1.3 主从复制相关 6.1.4 实现级联复制 6.1.5 ...

  3. 热烈庆祝“mysql 集群数据库架构成功”

    坚持了两周,终于在linux下把mysql集群数据库给架起来了!下面简单说明下集群数据库原理 第一:集群数据库分MGM,NDBD,SQL 其中MGM是相当于"中央政府",维持NDB ...

  4. MySQL集群节点宕机,数据库脑裂!如何排障?

    作者介绍 王晶,中国移动DBA,负责"移动云"业务系统的数据库集成架构设计.运维.优化等工作:擅长技术领域MySQL,获Oracle颁发的"MySQL DBA" ...

  5. 想提高运维效率,那就把MySQL数据库部署到Kubernetes 集群中

    摘要:Kubernetes 很多看起来比较"繁琐"的设计的主要目的,都是希望为开发者提供更多的"可扩展性",给使用者带来更多的"稳定性"和& ...

  6. php中mysql数据库集群,MySQL集群

    1,将6.0版本的mysql集群软件上传到Linux或是Solaris上,解压 1>,为了方便调用将其改名为mysql,并且放于/usr/local/下 2>,创建连接文件,进入/usr/ ...

  7. 数据库应用——MySQL集群

    MySQL集群 MySQL复制技术 使用集群的目的是? 什么是MySQL集群? 集群案例 一.集群环境准备 二.一主一从(M-S)手动 2.1 主服务器配置 2.2 从服务器配置 三.一主一从(M-S ...

  8. 数据库应用——Atlas代理MySQL集群实现读写分离

    Atlas代理MySQL集群实现读写分离 一.Atlas简介和架构 1.1 环境准备 1.2 配置时间服务器 二.主服务器配置 2.1 master节点1的配置 2.2 master节点2的配置 2. ...

  9. 数据库应用——MyCat代理MySQL集群

    MyCat代理MySQL集群 一.MyCat代理MySQL集群 1.1 MyCat概述 1.2 MyCat功能 1.3 MyCat图示 二.Mycat实战详解 2.1 MyCat实战案例 2.1.1 ...

最新文章

  1. RCP:解决Navigator快捷键不生效的问题
  2. python实现终端3维数据可视化
  3. python编程题-100道Python编程题及答案(一)
  4. 分享apache http服务器设置虚拟主机的方法
  5. nginx(No such file or directory与invalid PID number)
  6. redis php扩展 linux,linux下为php安装redis扩展phpredis
  7. html提交form预处理,HTML5 之图片上传预处理
  8. NET问答: 如何将 ASP.NET Core WebAPI 中抛出的异常封装成对象?
  9. 微信开发者工具:Failed to load font ************** net::ERR_CONNECTION_RESET问题解决办法
  10. android实现页面的跳转
  11. 自己写的python脚本(抄的别人的,自己改了改,用于整理大量txt数据并插入到数据库)...
  12. 计算机丢失msvcrtdll怎么修复,雨林木风修复msvcrtdll 【操作方案】 的详细_
  13. 【图像评价】基于matlab无参考图像质量评价NIQE【含Matlab源码 681期】
  14. UITextField的leftView
  15. 98五笔86五笔及五笔字型口诀字根表
  16. 手推SVM(二)-核方法
  17. FM立体声 matlab 左右,FM立体声收音机的制作
  18. Java Excel 复制单元格 poi Excel 复制单元格 Java Excel 复制行 Java Excel 复制 sheet 页 poi excel copy
  19. 藏宝阁显示角色可买服务器,梦幻西游藏宝阁里面买角色时选的可转入服务器是不是一定可以转...
  20. C语言编程:密码解密

热门文章

  1. angular-ui-tab-scroll
  2. Angular 2 Decorators - 1
  3. 【转】卖场开设社区便利店,不仅卖货,还有家政服务、售后衔接等(图)
  4. Aspnetpage ie10下 __dopost方法未找到 不能翻页的问题
  5. 如何用outlook express 收发邮件
  6. 引号(反引号、$()符号)
  7. 今天换了ubuntu10.04
  8. 【自定义控件】c#winform自定义控件实现标签控件
  9. EasyNetQ操作RabbitMQ
  10. 有BUG!!!慎用default文本