ABP 框架 数据库底层迁移 Mysql 集群
技术交流,请加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 集群相关推荐
- 二进制安装mysql集群_实战mysql集群搭建(一)--centos7下二进制安装mysql-5.6
在超哥的帮助下,完成了基于InnoDb数据引擎的mysql数据库集群搭建,实现了主从复制的功能,本篇博文介绍如何使用二进制安装mysql的方法,具体实现步骤如下: 软件使用说明: Liunx系统:ce ...
- MySQL数据库(九) 集群 Cluster 和性能优化
文章目录 6 MySQL 集群 Cluster 6.1 MySQL主从复制 6.1.1 主从复制架构和原理 6.1.2 实现主从复制配置 6.1.3 主从复制相关 6.1.4 实现级联复制 6.1.5 ...
- 热烈庆祝“mysql 集群数据库架构成功”
坚持了两周,终于在linux下把mysql集群数据库给架起来了!下面简单说明下集群数据库原理 第一:集群数据库分MGM,NDBD,SQL 其中MGM是相当于"中央政府",维持NDB ...
- MySQL集群节点宕机,数据库脑裂!如何排障?
作者介绍 王晶,中国移动DBA,负责"移动云"业务系统的数据库集成架构设计.运维.优化等工作:擅长技术领域MySQL,获Oracle颁发的"MySQL DBA" ...
- 想提高运维效率,那就把MySQL数据库部署到Kubernetes 集群中
摘要:Kubernetes 很多看起来比较"繁琐"的设计的主要目的,都是希望为开发者提供更多的"可扩展性",给使用者带来更多的"稳定性"和& ...
- php中mysql数据库集群,MySQL集群
1,将6.0版本的mysql集群软件上传到Linux或是Solaris上,解压 1>,为了方便调用将其改名为mysql,并且放于/usr/local/下 2>,创建连接文件,进入/usr/ ...
- 数据库应用——MySQL集群
MySQL集群 MySQL复制技术 使用集群的目的是? 什么是MySQL集群? 集群案例 一.集群环境准备 二.一主一从(M-S)手动 2.1 主服务器配置 2.2 从服务器配置 三.一主一从(M-S ...
- 数据库应用——Atlas代理MySQL集群实现读写分离
Atlas代理MySQL集群实现读写分离 一.Atlas简介和架构 1.1 环境准备 1.2 配置时间服务器 二.主服务器配置 2.1 master节点1的配置 2.2 master节点2的配置 2. ...
- 数据库应用——MyCat代理MySQL集群
MyCat代理MySQL集群 一.MyCat代理MySQL集群 1.1 MyCat概述 1.2 MyCat功能 1.3 MyCat图示 二.Mycat实战详解 2.1 MyCat实战案例 2.1.1 ...
最新文章
- RCP:解决Navigator快捷键不生效的问题
- python实现终端3维数据可视化
- python编程题-100道Python编程题及答案(一)
- 分享apache http服务器设置虚拟主机的方法
- nginx(No such file or directory与invalid PID number)
- redis php扩展 linux,linux下为php安装redis扩展phpredis
- html提交form预处理,HTML5 之图片上传预处理
- NET问答: 如何将 ASP.NET Core WebAPI 中抛出的异常封装成对象?
- 微信开发者工具:Failed to load font ************** net::ERR_CONNECTION_RESET问题解决办法
- android实现页面的跳转
- 自己写的python脚本(抄的别人的,自己改了改,用于整理大量txt数据并插入到数据库)...
- 计算机丢失msvcrtdll怎么修复,雨林木风修复msvcrtdll
【操作方案】
的详细_
- 【图像评价】基于matlab无参考图像质量评价NIQE【含Matlab源码 681期】
- UITextField的leftView
- 98五笔86五笔及五笔字型口诀字根表
- 手推SVM(二)-核方法
- FM立体声 matlab 左右,FM立体声收音机的制作
- Java Excel 复制单元格 poi Excel 复制单元格 Java Excel 复制行 Java Excel 复制 sheet 页 poi excel copy
- 藏宝阁显示角色可买服务器,梦幻西游藏宝阁里面买角色时选的可转入服务器是不是一定可以转...
- C语言编程:密码解密
热门文章
- angular-ui-tab-scroll
- Angular 2 Decorators - 1
- 【转】卖场开设社区便利店,不仅卖货,还有家政服务、售后衔接等(图)
- Aspnetpage ie10下 __dopost方法未找到 不能翻页的问题
- 如何用outlook express 收发邮件
- 引号(反引号、$()符号)
- 今天换了ubuntu10.04
- 【自定义控件】c#winform自定义控件实现标签控件
- EasyNetQ操作RabbitMQ
- 有BUG!!!慎用default文本