MySQL數(shù)據(jù)的讀寫分離之maxscale的使用方式
數(shù)據(jù)的讀寫分離
什么是讀寫分離
把客戶端訪問數(shù)據(jù)的讀(selec)請求和寫(insert、update、delete)請求分別分配給不同的數(shù)據(jù)庫服務(wù)器處理
如何實現(xiàn)客戶端訪問數(shù)據(jù)的,讀寫分離
通過程序?qū)崿F(xiàn)
- 讀請求----->數(shù)據(jù)庫服務(wù)器
- 寫請求----->另一臺數(shù)據(jù)庫服務(wù)器
配置服務(wù)實現(xiàn)(在服務(wù)器上安裝軟件,提供服務(wù))
- 中間件軟件
- mysql-proxy
- mycat
- maxscale
- client---->服務(wù)器----mysql
讀寫分離的原理
由MySQL代理面向客戶端提供服務(wù)
- 收到SQL寫請求時,交給master服務(wù)器處理
- 收到SQL讀請求時,交給slave服務(wù)器處理
為什么要配置數(shù)據(jù)讀寫分離
數(shù)據(jù)分流,分擔(dān)單臺服務(wù)器得工作壓力
構(gòu)建思路
1.部署MySQL一主一從結(jié)構(gòu)
- 主服務(wù)器:192.168.4.51
- 從服務(wù)器:192.168.4.52
2.部署MySQL代理服務(wù)器
- 裝包,修改配置文件,啟動服務(wù)
3.測試配置
- 客戶端連接代理服務(wù)訪問數(shù)據(jù)
配置數(shù)據(jù)讀寫分離
拓?fù)鋱D:
首先配置51與52的的主從復(fù)制,51為主,52為從
具體配置過程請看:MySQL主從復(fù)制
#192.168.4.52 mysql -uroot -p123456 -e "show slave status\G"
配置代理服務(wù)器57
1)安裝提供服務(wù)的軟件
部署Maxscale代理軟件
由MySQL的兄弟公司MariaDB開發(fā)
本人使用的環(huán)境centos7.9 、MySQL5.7.35 、maxscle2.3.20
wget https://dlm.mariadb.com/1065384/MaxScale/2.3.20/centos/7/x86_64/maxscale-2.3.20-1.centos.7.x86_64.rpm yum -y install maxscale-2.3.20-1.centos.7.x86_64.rpm ss -nultp | grep 3306 #因為要做代理服器,不能開啟MySQL數(shù)據(jù)服務(wù),如果開啟請關(guān)閉 systemctl stop mysqld rpm -ql maxscale
主配置文件 | 日志文件 |
---|---|
/etc/maxscale.cnf | /var/log/maxscale |
2)修改服務(wù)配置文件
vim /etc/maxscale.cnf [maxscale] #默認(rèn)服務(wù)啟動后線程的個數(shù),auto自動,可以自己修改 threads=auto #線程是進(jìn)程的最小工作單位,他兩的區(qū)別,線程共享資源,進(jìn)程獨享資源 [server1] #指定服務(wù)器的IP地址,有兩臺所以要寫兩次,并且名稱不能一致,其他為默認(rèn)配置 type=server address=192.168.4.51 port=3306 protocol=MariaDBBackend [server2] #定義服務(wù)器的IP地址 type=server address=192.168.4.52 port=3306 protocol=MariaDBBackend [MariaDB-Monitor] #監(jiān)視進(jìn)程 type=monitor module=mariadbmon servers=server1,server2 #數(shù)據(jù)庫服務(wù)器列表 user=maxscalemon #使用哪個用戶執(zhí)行這個程序,使用哪個用戶,需要到數(shù)據(jù)庫服務(wù)器進(jìn)行相應(yīng)的授權(quán),監(jiān)視server1,sever2 password=123456 monitor_interval=2000 #多長時間查看一次,默認(rèn)單位毫秒 #[Read-Only-Service] #只讀服務(wù)的配置 # type=service #我們注釋掉這個配置,因為我們希望在訪問時,既可以讀也可以寫 #router=readconnroute #servers=server1 #user=myuser #password=mypwd #router_options=slave [Read-Write-Service] #定義讀寫服務(wù) type=service router=readwritesplit #讀寫分離用戶 servers=server1,server2 user=maxscalerouter #路由用戶,用來驗證監(jiān)視用戶(客戶端連接用戶)是否存在 #我們使用客戶端連接數(shù)據(jù)庫,MySQL代理怎樣知道你當(dāng)前登錄的用戶是否存在,使用這個用戶去查看use表 password=123456 [MaxAdmin-Service] #管理服務(wù) type=service router=cli #命令行 #[Read-Only-Listener] #定義只讀的端口,因為上面我們不需要這個選項注釋掉,這里也需要注釋 #type=listener #service=Read-Only-Service #protocol=MariaDBClient #port=4008 [Read-Write-Listener] #監(jiān)聽讀寫服務(wù)的端口 type=listener service=Read-Write-Service protocol=MariaDBClient port=4006 [MaxAdmin-Listener] #管理服務(wù)端口號,如果不想讓他選擇默認(rèn),也可以進(jìn)行添加 type=listener service=MaxAdmin-Service protocol=maxscaled #socket=default port=4016 #自定義端口
3)配置數(shù)據(jù)庫服務(wù)器
添加相應(yīng)的用戶
添加監(jiān)控用戶:maxscalemon
添加路由用戶:maxscalerouter
#在主/從服務(wù)器創(chuàng)建授權(quán)用戶192.168.4.51 mysql -uroot -p123456 #replication slave 監(jiān)控主從的狀態(tài)是否正常 #replication client 監(jiān)控主從的服務(wù)是否運行 grant replication slave,replication client on *.* to maxscalemon@"%" identified by "123456"; grant select on mysql.* to maxscalerouter@"%" identified by "123456"; #因為是主從復(fù)制,所以在主服務(wù)上配置,從服務(wù)器也會同步相應(yīng)數(shù)據(jù) select user,host from mysql.user; #查看用戶 #192.168.4.52 mysql -uroot -p123456 -e"select user,host from mysql.user" #查看是否同步成功
4)啟動代理服務(wù)
#192.168.4.51 maxscale -f /etc/maxscale.cnf ls /var/log/maxscale #maxscale軟件的日志信息,如果沒有啟動可以查看錯誤信息 ps -C maxscale #查看進(jìn)程信息 ss -lnutp | grep maxscale #查看端口信息
MaxScale cannot be run as root. Failed to write child process message!
如果啟動抱以上錯誤:可以使用以下方式解決
maxscale -f /etc/maxscale.cnf -U maxscale 指定啟動用戶名 maxscale -f /etc/maxscale.cnf -U maxscale maxscalemon
5)查看服務(wù)信息
驗證配置
1)在代理服務(wù)器本機連接管理服務(wù),查看監(jiān)控信息
#在代理服務(wù)器本機訪問管理 #maxadmin -uadmin -pmariadb -P端口 默認(rèn)用戶admin默認(rèn)密碼,默認(rèn)密碼maridb maxadmin -uadmin -pmariadb -P4016 list servers #查看監(jiān)控信息,調(diào)用的是 [MariaDB-Monitor]模塊
2)在客戶端連接代理服務(wù)器57訪問數(shù)據(jù)
在連接之前先添加相應(yīng)的授權(quán)用戶
#192.168.4.51 mysql -uroot -p123456 create database db7; create table db7.a (id int); grant select,insert on db7.* to jim@"%" identified by "123456"; #192.168.4.3 mysql -h 192.168.4.57 -P4006 -ujim -p123456 select * from db7.a; insert into db7.a values(100); select * from db7.a;
3)驗證是否實現(xiàn)了數(shù)據(jù)的讀寫分離
在從服務(wù)器52本機進(jìn)行數(shù)據(jù)插入。
因為52是從服務(wù)器所以插入52的數(shù)據(jù)并不會同步到51
#192.168.4.52 mysql -uroot -p123456 insert into db7.a values(120); select * from db7.a;
在主服務(wù)器上查看
在客戶端重新連接,重新查看表里的內(nèi)容
mysql -h 192.168.4.57 -P4006 -ujim -p123456 select * from db7.a;
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
ubuntu系統(tǒng)中Mysql ERROR 1045 (28000): Acces
這篇文章主要介紹了ubuntu系統(tǒng)安裝mysql登陸提示 解決Mysql ERROR 1045 (28000): Access denied for user root@ localhost問題,需要的朋友可以參考下2017-05-05mysql出現(xiàn)ERROR 1819 (HY000)的解決方法
這篇文章主要為大家詳細(xì)介紹了mysql出現(xiàn)ERROR 1819 (HY000)的解決方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-10-10mac 裝5.6版本mysql 設(shè)置密碼的簡易方法
這篇文章主要介紹了mac 裝5.6版本mysql 設(shè)置密碼的簡易方法,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2018-05-05mysql日志文件General_log和Binlog開啟及詳解
MySQL中的數(shù)據(jù)變化會體現(xiàn)在上面日志中,下面這篇文章主要給大家介紹了關(guān)于mysql日志文件General_log和Binlog開啟及詳解的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-07-07