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 集群的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于Asp.Net Core打造轻量级内
- 下一篇: 开发.NET Core NuGet包并实