您好,登錄后才能下訂單哦!
一、概述:
MySQL數(shù)據(jù)庫主從結(jié)構(gòu)配置以后,正常情況下數(shù)據(jù)庫的所有讀寫操作全部都在主數(shù)據(jù)庫上面,從數(shù)據(jù)庫僅僅作為數(shù)據(jù)備份使用,顯然無法有效的使用服務器資源,那么實現(xiàn)讀寫分離的需求就不可避免。
二、拓撲圖說明:
如上圖所示,本文要實現(xiàn)的是讀MySQL數(shù)據(jù)庫的寫入操作(增刪改)等在Master服務器(192.168.4.10)上面實現(xiàn),而對MySQL數(shù)據(jù)庫的讀取操作(查詢)等在Slave服務器(192.168.4.20)上面完成。
如果在程序員編程時創(chuàng)建兩個數(shù)據(jù)庫連接Connection,在程序中對數(shù)據(jù)庫的讀取操作使用一個數(shù)據(jù)庫Connection,而對數(shù)據(jù)庫的寫入操作使用另外一個數(shù)據(jù)庫Connection,也可以實現(xiàn)對數(shù)據(jù)庫的讀寫分離。但是顯然這種實現(xiàn)方式不夠靈活,因此一般不使用這種方式。
本文中將使用MaxScale軟件來實現(xiàn)MySQL數(shù)據(jù)庫的讀寫分離。MaxScale是由http://www.skysql.com/開發(fā)的一款MySQL數(shù)據(jù)庫中間件,支持高可用,負載均衡,具有良好的可擴展性,高性能的基于事件驅(qū)動的同時具有代理和管理功能的中間件。該軟件將部署在拓撲圖中的MySQL代理服務器(192.168.4.100)上,客戶機的訪問請求指向MySQL代理服務器,該服務器將把對數(shù)據(jù)庫的寫入操作指向到192.168.4.10,對數(shù)據(jù)庫的讀取操作指向到192.168.4.20。
三、配置說明:
1、MaxScale配置
(1)修改配置文件:
[root@100 ~]# vim /etc/maxscale.cnf
A、指定數(shù)據(jù)庫服務器
[server1]
type=server
address=192.168.4.10
port=3306
protocol=MySQLBackend
[server2]
type=server
address=192.168.4.20
port=3306
protocol=MySQLBackend
B、指定要監(jiān)控的數(shù)據(jù)庫服務器
[MySQL Monitor]
type=monitor
module=mysqlmon
servers=server1,server2
user=scalemon #代理服務器監(jiān)控服務連接數(shù)據(jù)庫服務器的用戶名(需要在數(shù)據(jù)庫服務器上面授權(quán))
passwd=123456 #代理服務器監(jiān)控服務連接數(shù)據(jù)庫服務器的密碼
monitor_interval=10000 //活躍檢查時間間隔,10000毫秒=10秒
C、指定讀寫分離在哪些主機之間執(zhí)行
[Read-Write Service]
type=service
router=readwritesplit
servers=server1,server2
user=maxscale #用于檢查用戶連接數(shù)據(jù)庫時用的授權(quán)用戶是否合法的用戶名(需要對mysql數(shù)據(jù)庫有select權(quán)限)
passwd=123456 #用于檢查用戶連接數(shù)據(jù)庫時用的授權(quán)用戶是否合法的用戶名
max_slave_connections=100%
D、定義管理服務和方式(不用改)
[MaxAdmin Service]
type=service
router=cli
E、只讀服務器配置選項(不用,全部注釋掉)
[Read-Only Service]
#type=service
#router=readconnroute
#servers=server1
#user=myuser
#passwd=mypwd
#router_options=slave
#[Read-Only Listener]
#type=listener
#service=Read-Only Service
#protocol=MySQLClient
#port=4008
F、讀寫分離的監(jiān)聽端口配置
[Read-Write Listener]
type=listener
service=Read-Write Service
protocol=MySQLClient
port=4006 //客戶端讀寫分離服務訪問端口
G、管理服務的監(jiān)聽端口配置
[MaxAdmin Listener]
type=listener
service=MaxAdmin Service
protocol=maxscaled
socket=default
port=4009 //管理服務使用的端口
mysql > grant replication slave,replication client on *.* to scalemon@"%" identified by "123456";
mysql > grant select on mysql.* to maxscale@"%" identified by "123456";
3、在代理服務器上面啟動服務并檢查數(shù)據(jù)庫服務器狀態(tài)
(1)啟動服務:
[root@100 ~]# maxscale --config=/etc/maxscale.cnf
(2)檢查狀態(tài)
[root@100 ~]# maxadmin -uadmin -pmariadb -P4009
MaxScale> list servers
-------------------+-----------------+-------+-------------+--------------------
Server | Address | Port | Connections | Status
-------------------+-----------------+-------+-------------+--------------------
server1 | 192.168.4.11 | 3306 | 0 | Master, Running
server2 | 192.168.4.12 | 3306 | 0 | Slave, Running
-------------------+-----------------+-------+-------------+--------------------
4、驗證測試
在192.168.4.120上使用授權(quán)用戶連接代理服務器(192.168.4.100:4006),在從數(shù)據(jù)庫服務器(192.168.4.20)上面Insert一些數(shù)據(jù),在客戶端可以讀到,那么說明客戶端讀數(shù)據(jù)時是在從數(shù)據(jù)庫(192.168.4.20);在192.168.4.120上使用授權(quán)用戶連接代理服務器(192.168.4.100:4006),Insert一些數(shù)據(jù)成功,在主從數(shù)據(jù)庫上面都可以看到,說明客戶端寫數(shù)據(jù)時是在主數(shù)據(jù)庫服務器(192.168.4.10)上面。
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。