輕松實(shí)現(xiàn)MySQL讀寫(xiě)分離

配置好了 Mysql 的主從復(fù)制結(jié)構(gòu)后,我們希望實(shí)現(xiàn)讀寫(xiě)分離,把讀操作分散到從服務(wù)器中,并且對(duì)多個(gè)從服務(wù)器能實(shí)現(xiàn)負(fù)載均衡。讀寫(xiě)分離和負(fù)載均衡是 Mysql 集群的基礎(chǔ)需求,MaxScale 就可以幫著我們方便的實(shí)現(xiàn)這些功能。


image.png

MaxScale 的基礎(chǔ)構(gòu)成

MaxScale 是Mysql 的兄弟公司 MariaDB 開(kāi)發(fā)的,現(xiàn)在已經(jīng)發(fā)展得非常成熟。MaxScale 是插件式結(jié)構(gòu),允許用戶(hù)開(kāi)發(fā)適合自己的插件。
MaxScale 目前提供的插件功能分為5類(lèi)

  1. 認(rèn)證插件
    提供了登錄認(rèn)證功能,MaxScale會(huì)讀取并緩存數(shù)據(jù)庫(kù)中 user 表中的信息,當(dāng)有連接進(jìn)來(lái)時(shí),先從緩存信息中進(jìn)行驗(yàn)證,如果沒(méi)有此用戶(hù),會(huì)從后端數(shù)據(jù)庫(kù)中更新信息,再次進(jìn)行驗(yàn)證

  2. 協(xié)議插件
    包括客戶(hù)端連接協(xié)議,和連接數(shù)據(jù)庫(kù)的協(xié)議。

  3. 路由插件
    決定如何把客戶(hù)端的請(qǐng)求轉(zhuǎn)發(fā)給后端數(shù)據(jù)庫(kù)服務(wù)器,讀寫(xiě)分離和負(fù)載均衡的功能就是由這個(gè)模塊實(shí)現(xiàn)的。

  4. 監(jiān)控插件
    對(duì)各個(gè)數(shù)據(jù)庫(kù)服務(wù)器進(jìn)行監(jiān)控,例如發(fā)現(xiàn)某個(gè)數(shù)據(jù)庫(kù)服務(wù)器響應(yīng)很慢,那么就不向其轉(zhuǎn)發(fā)請(qǐng)求了。

  5. 日志和過(guò)濾插件
    提供簡(jiǎn)單的數(shù)據(jù)庫(kù)防火墻功能,可以對(duì)SQL進(jìn)行過(guò)濾和容錯(cuò)。

配置方式

準(zhǔn)備3臺(tái)服務(wù)器,安裝 Mysql,配置一主二從的復(fù)制結(jié)構(gòu)。主從復(fù)制的配置過(guò)程參加上一節(jié)內(nèi)容。

安裝 MaxScale

最好在另一臺(tái)服務(wù)器上安裝,如果資源不足,可以和某個(gè) Mysql 放在一起。
MaxScale 的下載地址,最新版本2.3.4,實(shí)例中使用的是1.4.5:
https://downloads.mariadb.com/files/MaxScale

根據(jù)自己的服務(wù)器選擇合適的安裝包,以 centos 7 為例安裝步驟如下:

yum install libaio.x86_64 libaio-devel.x86_64 novacom-server.x86_64 libedit -y
wget https://downloads.mariadb.com/MaxScale/1.4.5/centos/7/x86_64/maxscale-1.4.5-1.centos.7.x86_64.rpm
rpm -ivh maxscale-1.4.5-1.centos.7.x86_64.rpm

配置MaxScale

在開(kāi)始配置之前,需要在 master 中為 MaxScale 創(chuàng)建兩個(gè)用戶(hù),用于監(jiān)控模塊和路由模塊:

  1. 創(chuàng)建監(jiān)控用戶(hù)
create user 'maxmon'@'%' identified by '123456';
grant replication slave,replication client on *.* to 'maxmon'@'%';
  1. 創(chuàng)建路由用戶(hù)
create user 'maxrou'@'%' identified by '123456';
grant select on mysql.* to 'maxrou'@'%';
flush privileges;
  1. 修改maxscale配置文件
    用戶(hù)創(chuàng)建完成后,開(kāi)始配置
vi /etc/maxscale.cnf

找到 [server1] 部分,修改其中的 address 和 port,指向 master 的 IP 和端口
復(fù)制2次 [server1] 的整塊兒內(nèi)容,改為 [server2] 與 [server3],同樣修改其中的 address 和 port,分別指向 slave1 和 slave2

image.png

找到 [MySQL Monitor] 部分,修改 servers 為 server1,server2,server3,修改 user 和 passwd 為之前創(chuàng)建的監(jiān)控用戶(hù)的信息(maxmon,123456)

image.png

找到 [Read-Write Service] 部分,修改 servers 為 server1,server2,server3,修改 user 和 passwd 為之前創(chuàng)建的路由用戶(hù)的信息(maxrou,123456)

image.png

由于我們使用了 [Read-Write Service],需要?jiǎng)h除另一個(gè)服務(wù) [Read-Only Service],刪除其整塊兒內(nèi)容即可,底部還有一個(gè)[Read-Only Client]也需要?jiǎng)h除。

配置完成,保存并退出編輯器。

啟動(dòng)MaxScale

執(zhí)行啟動(dòng)命令

maxscale --config=/etc/maxscale.cnf

查看 MaxScale 的響應(yīng)端口是否已經(jīng)就緒

netstat -ntelp
image.png

4006 是Read-Write Listener使用的端口,用于連接MaxScale

6603 是MaxAdmin Listener使用的端口,用于MaxScale 管理器

登錄 MaxScale 管理器,查看一下數(shù)據(jù)庫(kù)連接狀態(tài),默認(rèn)的用戶(hù)名和密碼是 admin/mariadb

maxadmin --user=admin --password=mariadb
MaxScale> list servers
image.png

可以看到,MaxScale 已經(jīng)連接到了 master 和 slave

測(cè)試

先在 master 上創(chuàng)建一個(gè)測(cè)試用戶(hù)

create user 'rtest'@'%' identified by '111111';
grant ALL PRIVILEGES on *.* to 'rtest'@'%';

使用 Mysql 客戶(hù)端到連接 MaxScale

mysql -urtest -p'111111' -h'192.168.33.11' -P4006

執(zhí)行查看數(shù)據(jù)庫(kù)服務(wù)器名的操作來(lái)知道當(dāng)前實(shí)際所在的數(shù)據(jù)庫(kù)

Select @@hostname;
start transaction;
Select @@hostname;
roolback;
Select @@hostname;
image.png

開(kāi)啟事務(wù)后,就自動(dòng)路由到了 master,普通的查詢(xún)操作,是在 slave上。

總結(jié)

通過(guò)MaxScale可以很輕松的實(shí)現(xiàn)MySQL數(shù)據(jù)庫(kù)的讀寫(xiě)分離和負(fù)載均衡。

上一篇 《性能優(yōu)化系列文章目錄》 下一篇
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容