說明:
本人使用的都是ubuntu16.04 本地虛擬機,以下部署都是個人摸索或者尋求他人幫助以及網上查找相關資料進行配置的,可能不適用其他環境或者有遺漏,配置也都是根據簡單化的,
深入的我自己也不了解,也許有更好的解決方式,要是有的話 請底下發個連接 謝謝,當前內容僅供參考,希望能幫助遇到相同問題的人, 謝謝!!!
1、准備3台服務器
192.168.1.136 mycat
192.168.1.174 寫數據庫
192.168.1.175 讀數據庫
2、配置雙主數據庫
安裝mysql,創建 test 數據庫
192.168.1.174服務器操作如下:
//登錄Mysql 創建且授權master,專門提供192.168.1.175進行主主備份操作
mysql> grant replication slave on *.* to 'master'@'192.168.1.175' identified by '1234';
mysql> flush privileges;
//Mysql 5.7.2之后的版本通過這樣的授權當開啟slave的時候slave_IO_Run為No,換種方式授權創建master用戶
mysql> grant all privileges on *.* to 'master'@'192.168.1.175' identified by '1234';
修改mysql配置文件內容,修改完后重啟mysql服務 systemctl restart mysql

skip-name-resolve init-connect='SET NAME UTF8' skip-character-set-client-handshake character-set-server=utf8 max_connections=2000 lower_case_table_names = 1 skip_ssl server-id = 1 log_bin = /var/log/mysql/mysql-bin.log auto-increment-increment= 2 auto-increment-offset = 1 relay_log = mysqld-relay-bin log-slave-updates=ON expire_logs_days = 15 max_binlog_size = 500M
登錄192.168.1.175 的mysql進行如下操作:
mysql> show master status\G

記下 mysql-bin.00001與154
再轉回192.168.1.174的mysql 如下操作
mysql> change master to
master_host='192.168.1.175',
master_port=3306,
master_user='master',
master_password='1234',
master_log_file='mysql-bin.000001', //之前數據庫查看的文件名稱
master_log_pos=154; //之前show master status 的內容位置
mysql> start slave;

Slave_IO_Running: Yes
Slave_SQL_Running: Yes
說明開啟成功,失敗的話只能自行查找原因了或者網上搜搜看
192.168.1.175服務器mysql操作如下
修改Mysql配置文件內容,並且重啟mysql服務

skip-name-resolve init-connect='SET NAME UTF8' skip-character-set-client-handshake character-set-server=utf8 max_connections=2000 lower_case_table_names = 1 skip_ssl server-id = 2 //與192.168.1.174必須不同 log_bin = /var/log/mysql/mysql-bin.log auto-increment-increment= 2 auto-increment-offset = 2 relay_log = mysqld-relay-bin log-slave-updates=ON expire_logs_days = 15 max_binlog_size = 500M
查看192.168.1.174服務的mysql master status
mysql> show master status;

登錄192.168.1.175 mysql如下操作
mysql> grant replication slave on *.* to 'master'@'192.168.1.174' identified by '1234';
mysql> flush privileges;
mysql> change master to
-> master_host='192.168.1.174',
-> master_port=3306,
-> master_user='master',
-> master_password='1234',
-> master_log_file='mysql-bin.000001',
-> master_log_pos=456;
mysql> start slave;
mysql> show slave status\G

雙主數據庫已經建立完成
設置Mycat做關聯
1、安裝mycat之前必須先安裝java jdk
java下載地址:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 下載后 存放目錄是 /usr/local/jdk1.8.0_20(可自行定義)
2、去官網下載Mycat,http://dl.mycat.io/1.6-RELEASE/ 本人下載是1.6 linux版本
3、上傳到192.168.1.136 服務器上 /usr/local/mycat
修改mycat wrapper.conf配置文件
/usr/local/mycat/conf/wrapper.conf
wrapper.java.command=/usr/local/jdk1.8.0_20/bin/java #目錄修改為java存放地址
mycat 如下命令: /usr/local/mycat/bin/mycat status /usr/local/mycat/bin/mycat start /usr/local/mycat/bin/mycat stop
mycat下面目錄/usr/local/mycat/conf/schema.xml 配置內容如下

mycat下面目錄/usr/local/mycat/conf/server.xml 配置內容基本上是默認,修改了用戶名跟密碼

啟動mycat 運行 /usr/local/mycat/bin/mycat start 就可以 若是失敗
可以查看mycat啟動日志,網上有很多說明,我也只簡單使用,我啟動的時候是文件權限問題可能有不足僅供參考
chmod +x /usr/local/mycat/bin/mycat
chmod +x /usr/local/mycat/bin/wrapper-linux-x86-32
chmod +x /usr/local/mycat/bin/wrapper-linux-x86-64
授權后 再次運行
/usr/local/mycat/bin/mycat start
應該是成功了,可能有忘記吧,若是不成功 上網查查或者看看日志
然后可以試着修改你的.net Core 連接地址為192.168.1.136 端口號mycat默認是8066
因為本人是使用EntityFrameworkCore的,發現新增數據的時候會報出沖突,、
改成Dapper就沒這個問題
這塊應該是主鍵自增問題,EFCore主鍵默認是+1,
之前mysql為了防止Mysql主主設置相互拷貝沖突在配置文件里都設置了自增+2間隔
C#模型里主鍵不指定Key,設置非自增,就允許插入數據了
嘗試關閉Mysql slave服務 發現每次執行寫數據 Add 或者Update操作后,我再去讀數據的時候 讀的竟然是我配置的寫入的數據庫
可能有其他處理 我這邊也發下我的解決方案
關閉AutoTransactionsEnabled就可以了,這塊可能是事務自動提交的原因 具體我也不清楚 主要是看了挺長時間日志發現EF提交的數據里會自帶一個autocommit=false
我使用Dapper提交讀寫操作的mycat的日志 autocommit=true,所以嘗試Database.AutoTransactionsEnabled = false 看看 沒想到這樣讀寫分離成功了
並發什么的其他的沒試過 有興趣的朋友可以自己試下 僅供學習與參考 謝謝
參考學習地址:
Mysql主主配置:https://www.wandouip.com/t5i383180/
https://www.cnblogs.com/kristain/articles/4142970.html