Mysql讀寫分離叢集的搭建且與MyCat進行整合

追風人聊Java 發表於 2021-10-13
MySQL

1. 概述

老話說的好:不熟悉的東西不要不懂裝懂,做人要坦誠,知道就是知道,不知道就是不知道。

 

言歸正傳,今天我們來聊聊 Mysql主從讀寫分離叢集是如何搭建的,並且聊一下如何用 MyCat 去訪問這個Mysql讀寫分離叢集。

 

2. 場景介紹

伺服器A IP:192.168.1.22

伺服器B IP:192.168.1.12

 

伺服器A 和 伺服器B 都安裝了Mysql,且初始化完成,關於Mysql在CentOS7的安裝,可參見我的另一篇文章《MyCat的快速搭建》。

伺服器B作為 Mysql 主服務,伺服器A作為 Mysql 從伺服器。

MyCat 安裝在伺服器A上。MyCat的安裝也可參見我的另一篇文章《MyCat的快速搭建》。

 

3.  Mysql主從讀寫分離叢集的搭建

3.1 修改 伺服器B(主)配置檔案

# vim /etc/my.cnf

Mysql讀寫分離叢集的搭建且與MyCat進行整合

 

 

3.2 重啟伺服器B(主)的 Mysql 服務

# systemctl restart mysqld

 

3.3 修改 伺服器A(從)配置檔案

# vim /etc/my.cnf

Mysql讀寫分離叢集的搭建且與MyCat進行整合

 

 

3.4 重啟伺服器A(從)的 Mysql 服務

# systemctl restart mysqld

 

3.5 在 伺服器B(主)上建立同步賬號並授權

# mysql -u root -p

mysql> create user 'repl'@'%' identified by '[email protected]';

mysql> grant replication slave on *.* to 'repl'@'%';

mysql> flush privileges;

 

3.6 在 伺服器B(主)上進行鎖表操作

# mysql -u root -p

mysql> flush tables with read lock;

 

3.7 在 伺服器B(主)上找到 log-bin 的位置

# mysql -u root -p

mysql> show master status;

Mysql讀寫分離叢集的搭建且與MyCat進行整合

 

3.8 將 伺服器B(主)的 mysql 資料複製到 伺服器A(從)

備份資料

# mysqldump --all-databases --master-data > dbdump.db -uroot -p

注意:剛才鎖表的mysql客戶端不要退出,重新開一個視窗!!!

傳輸資料檔案

# scp dbdump.db [email protected]:/home

 

3.9 在 伺服器A(從)還原 mysql 資料

# cd /home

# mysql < dbdump.db -uroot -p

注意:兩臺伺服器mysql的版本務必一致,否則可能報錯!!!

 

3.10 將 伺服器B(主)上鎖表操作取消

mysql> unlock tables;

 

3.11 在 伺服器A(從)上設定主從同步配置

# mysql -u root -p

mysql> change master to
-> master_host='192.168.1.12',
-> master_user='repl',
-> master_password='[email protected]',
-> master_log_file='zhuifengren_log.000001',
-> master_log_pos=1432;

 

mysql> start slave;

 

3.12 Authentication plugin 'caching_sha2_password' reported error 報錯解決

如果發現主從資料沒有同步,可以檢視從庫(伺服器A)的同步日誌

# cat /var/log/mysqld.log

 

如果有如下報錯,則說明之前建立的 repl 賬戶密碼加密方式有問題: 

Authentication plugin 'caching_sha2_password' reported error: Authentication requires secure connection. Error_code: MY-002061

 

解決辦法:

進入 伺服器B(主)的mysql客戶端,修改使用者密碼的加密方式

# mysql -u root -p

mysql> alter user 'repl'@'%' identified WITH sha256_password by '[email protected]';
mysql> grant replication slave on *.* to 'repl'@'%';
mysql> flush privileges;

 

然後進入 伺服器A(從)重啟主從同步

# mysql -u root -p

mysql> stop slave;

mysql> start slave;

問題解決!!!

 

4. MyCat 配置讀寫分離

4.1 在之前的基礎上修改MyCat配置

# cd /home/mycat/conf

# vim schema.xml

 Mysql讀寫分離叢集的搭建且與MyCat進行整合

 

其中 讀庫readHost 標籤寫在  寫庫writeHost 標籤裡面。

dataHost 標籤中 balance 屬性的含義如下:(摘抄自 MyCat 官網的權威指南)

balance 屬性 負載均衡型別,目前的取值有 4 種:

1. balance="0", 不開啟讀寫分離機制,所有讀操作都傳送到當前可用的 writeHost 上。

2. balance="1",全部的 readHost 與 stand by writeHost 參與 select 語句的負載均衡,簡單的說,當雙 主雙從模式(M1->S1,M2->S2,並且 M1 與 M2 互為主備),正常情況下,M2,S1,S2 都參與 select 語句的負載均衡。

3. balance="2",所有讀操作都隨機的在 writeHost、readhost 上分發。

4. balance="3",所有讀請求隨機的分發到 wiriterHost 對應的 readhost 執行,writerHost 不負擔讀壓力, 注意 balance=3 只在 1.4 及其以後版本有,1.3 沒有。

 

4.2 重啟MyCat

# cd /home/mycat/bin

# ./mycat stop

# ./mycat start

 

5. 綜述

今天聊了一下 Mysql 主從讀寫分離叢集的搭建,以及 MyCat 如何整合 Mysql 讀寫分離叢集,希望可以對大家的工作有所幫助。

歡迎幫忙點贊、評論、轉發、加關注 :)

關注追風人聊Java,每天更新Java乾貨。