ABP 框架 数据库底层迁移 Mysql 集群
技術(shù)交流,請(qǐng)加QQ群:538327407
我的各種github 開源項(xiàng)目和代碼:https://github.com/linbin524
背景
?
筆者 目前架構(gòu)的IOT 項(xiàng)目是使用abp 框架作為后臺(tái),雖然abp的框架適用于中小型項(xiàng)目框架,但由于架構(gòu)優(yōu)美,筆者認(rèn)為還是可以經(jīng)過改造,作為大型項(xiàng)目中使用。但I(xiàn)OT 的這個(gè)項(xiàng)目目前剛上線不久,十幾天數(shù)據(jù)庫(kù)已經(jīng)有了上百GB,而且由于實(shí)施檢查設(shè)備狀態(tài),調(diào)用設(shè)備狀態(tài)維護(hù)表,審計(jì)日志壓力很大,單單審計(jì)日志一天的數(shù)據(jù)量就有幾十萬(wàn),目前在架構(gòu)上,筆者做了幾個(gè)優(yōu)化處理;
1、針對(duì)審計(jì)日志,筆者重寫了Abp 原有的?IAuditingStore,實(shí)現(xiàn)mongodb和redis 兩種轉(zhuǎn)移,并且針對(duì)審計(jì)日志內(nèi)容做了過濾,DisableAuditing特性標(biāo)記指定的類或方法不進(jìn)行記錄。
ps:abp 雖然有mongodb 的封裝,但它的出發(fā)點(diǎn)是和EF 同一個(gè)模式,左右系統(tǒng)唯一的ORM,如果要使用abp 的mongo 封裝,必須要替代EF,或者重寫ABP?UnitOfWorkOptions,否則直接用會(huì)出現(xiàn)工作單元轉(zhuǎn)換失敗的問題。
2、站點(diǎn)層面使用nginx 做了反向代理,進(jìn)行多站點(diǎn)服務(wù),通信模式由原來的隊(duì)列、改為服務(wù)化,EventBus等方式
3、數(shù)據(jù)庫(kù)底層 做了Percona XtraDB Cluster—MySQL 集群處理遷移。
?
思考評(píng)估:1、審計(jì)日志這樣處理,從源頭做了縮減,并且進(jìn)行Nosql拆分,有助于緩解數(shù)據(jù)庫(kù)壓力。
? ? ? ? ? ? ? ? ?2、中間層的處理是一般IOT 中間件各種腳手架的組合,成熟,也有經(jīng)過多年生產(chǎn)環(huán)境的檢驗(yàn)。
? ? ? ? ? ? ? ? ?3、數(shù)據(jù)庫(kù)底層 使用Percona XtraDB Cluster,是因?yàn)樗С旨?#xff0c;可以緩解數(shù)據(jù)庫(kù)請(qǐng)求壓力,又支持abp的事務(wù);
? ? ? ? ? ? ? ?但從真正大系統(tǒng)考慮,其實(shí)最理性的模式應(yīng)該是分片,結(jié)合SOA、或者微服務(wù)才能真正解決底層壓力,目前考量了Tidb(張善友 張隊(duì)推薦的)、oceanbase(淘寶 自有數(shù)據(jù)庫(kù),生產(chǎn)環(huán)境十年)、mycat中間件(聽說這個(gè)坑多)等,
? ? ? ? ? ? ? ?為了暫時(shí)不做大改造,只能先使用?Percona XtraDB Cluster,后續(xù)可能使用Orleans(Azure 云框架)、akka.net(大型的框架) 或者?Service Fabric(微服務(wù)框架)
? ? ?
二、Percona XtraDB Cluster 評(píng)估
?
?
優(yōu)點(diǎn)如下:
1.當(dāng)執(zhí)行一個(gè)查詢時(shí),在本地節(jié)點(diǎn)上執(zhí)行。因?yàn)樗袛?shù)據(jù)都在本地,無(wú)需遠(yuǎn)程訪問。
2.無(wú)需集中管理。可以在任何時(shí)間點(diǎn)失去任何節(jié)點(diǎn),但是集群將照常工作。
3.良好的讀負(fù)載擴(kuò)展,任意節(jié)點(diǎn)都可以查詢。
缺點(diǎn)如下:
1.加入新節(jié)點(diǎn),開銷大。需要復(fù)制完整的數(shù)據(jù)。
2.不能有效的解決寫縮放問題,所有的寫操作都將發(fā)生在所有節(jié)點(diǎn)上。
3.有多少個(gè)節(jié)點(diǎn)就有多少重復(fù)的數(shù)據(jù)。
?
Percona XtraDB Cluster是MySQL高可用性和可擴(kuò)展性的解決方案.
Percona XtraDB Cluster提供的特性有:
1.同步復(fù)制,事務(wù)要么在所有節(jié)點(diǎn)提交或不提交。
2.多主復(fù)制,可以在任意節(jié)點(diǎn)進(jìn)行寫操作。
3.在從服務(wù)器上并行應(yīng)用事件,真正意義上的并行復(fù)制。
4.節(jié)點(diǎn)自動(dòng)配置。
5.數(shù)據(jù)一致性,不再是異步復(fù)制。
Percona XtraDB Cluster完全兼容MySQL和Percona Server,表現(xiàn)在:
1.數(shù)據(jù)的兼容性
2.應(yīng)用程序的兼容性:無(wú)需更改應(yīng)用程序
?
1.集群是有節(jié)點(diǎn)組成的,推薦配置至少3個(gè)節(jié)點(diǎn),但是也可以運(yùn)行在2個(gè)節(jié)點(diǎn)上。
2.每個(gè)節(jié)點(diǎn)都是普通的mysql/percona服務(wù)器,可以將現(xiàn)有的數(shù)據(jù)庫(kù)服務(wù)器組成集群,反之,也可以將集群拆分成單獨(dú)的服務(wù)器。
3.每個(gè)節(jié)點(diǎn)都包含完整的數(shù)據(jù)副本。
?
三、部署流程
?
1、環(huán)境準(zhǔn)備
?
? 在騰訊云上開設(shè)三個(gè)測(cè)試服務(wù)器,系統(tǒng) 鏡像 CentOS 7.5 64
?
?
用遠(yuǎn)程工具連接三臺(tái)測(cè)試服務(wù)器,完成如下操作
?
(1)? 關(guān)閉firewalld防火墻
# setenforce 0# sed -i 's,^SELINUX=enforcing,SELINUX=disabled,g' /etc/selinux/config?
2、主節(jié)點(diǎn)部署
?
(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://節(jié)點(diǎn)ip1,節(jié)點(diǎn)ip2,節(jié)點(diǎn)ip3binlog_format=ROWdefault_storage_engine=InnoDBinnodb_autoinc_lock_mode=2#當(dāng)前主節(jié)點(diǎn)的ip wsrep_node_address=當(dāng)前節(jié)點(diǎn)ipwsrep_sst_method=xtrabackup-v2wsrep_cluster_name=my_centos_cluster #初始化一個(gè)mysql的用戶和密碼 wsrep_sst_auth="admin:123456"?
(4)啟動(dòng)主節(jié)點(diǎn)
mysql -uroot -p?
(6) 登錄客戶端查看數(shù)據(jù)庫(kù)的狀態(tài),在進(jìn)行權(quán)限配置允許ip訪問,默認(rèn)無(wú)法遠(yuǎn)程訪問,但是我們需要遠(yuǎn)程通過圖形化等界面查看,所以要做如下配置
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)進(jìn)入mysql
登錄 (初始化狀態(tài),無(wú)密碼,遇到要輸密碼直接回車)
mysql> show status like 'wsrep%';CREATE USER 'admin'@'localhost' IDENTIFIED BY '123456';//如果這里報(bào)錯(cuò),看一下是否有 用戶存在了GRANT RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO 'admin'@'localhost'; FLUSH PRIVILEGES;?
完成后可以用Navicat For mysql 連接看一下是否可以成功訪問
?(7)可以在mysql中執(zhí)行如下命令查看
systemctl stop mysql@bootstrap.service systemctl start mysql@bootstrap.service其他節(jié)點(diǎn)也再次啟動(dòng)
<add name="Default" connectionString="server=主節(jié)點(diǎn)ip;port=3306;database=abpzero4_6db;uid=admin;password=123456;" providerName="MySql.Data.MySqlClient" />(3) 執(zhí)行遷移?
?
?(4)查看對(duì)應(yīng)的三臺(tái)服務(wù)器集群都自動(dòng)同步該數(shù)據(jù)庫(kù)
?
?
(5)在Appservice 中建立測(cè)試服務(wù)進(jìn)行增刪改查、事務(wù)等測(cè)試
<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中增刪改查都已經(jīng)正常,而且數(shù)據(jù)在三個(gè)數(shù)據(jù)庫(kù)中正常同步
?
?
針對(duì)事務(wù),做了人為異常處理,確認(rèn)會(huì)實(shí)現(xiàn)回滾(abp 自帶工作單元處理事務(wù))
?
?
?五、后記
?這一次只是做了簡(jiǎn)單的實(shí)驗(yàn)性測(cè)試,后續(xù)需要在加強(qiáng)深入檢測(cè),才可以用生產(chǎn)環(huán)境中。
原文地址: https://www.cnblogs.com/linbin524/p/10150300.html
.NET社區(qū)新聞,深度好文,歡迎訪問公眾號(hào)文章匯總 http://www.csharpkit.com
總結(jié)
以上是生活随笔為你收集整理的ABP 框架 数据库底层迁移 Mysql 集群的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于Asp.Net Core打造轻量级内
- 下一篇: IdentityServer4-从数据库