MySQL數(shù)據(jù)的讀寫(xiě)分離之maxscale的使用方式
數(shù)據(jù)的讀寫(xiě)分離
什么是讀寫(xiě)分離
把客戶端訪問(wèn)數(shù)據(jù)的讀(selec)請(qǐng)求和寫(xiě)(insert、update、delete)請(qǐng)求分別分配給不同的數(shù)據(jù)庫(kù)服務(wù)器處理
如何實(shí)現(xiàn)客戶端訪問(wèn)數(shù)據(jù)的,讀寫(xiě)分離
通過(guò)程序?qū)崿F(xiàn)
- 讀請(qǐng)求----->數(shù)據(jù)庫(kù)服務(wù)器
- 寫(xiě)請(qǐng)求----->另一臺(tái)數(shù)據(jù)庫(kù)服務(wù)器
配置服務(wù)實(shí)現(xiàn)(在服務(wù)器上安裝軟件,提供服務(wù))
- 中間件軟件
- mysql-proxy
- mycat
- maxscale
- client---->服務(wù)器----mysql
讀寫(xiě)分離的原理
由MySQL代理面向客戶端提供服務(wù)
- 收到SQL寫(xiě)請(qǐng)求時(shí),交給master服務(wù)器處理
- 收到SQL讀請(qǐng)求時(shí),交給slave服務(wù)器處理
為什么要配置數(shù)據(jù)讀寫(xiě)分離
數(shù)據(jù)分流,分擔(dān)單臺(tái)服務(wù)器得工作壓力
構(gòu)建思路
1.部署MySQL一主一從結(jié)構(gòu)
- 主服務(wù)器:192.168.4.51
- 從服務(wù)器:192.168.4.52
2.部署MySQL代理服務(wù)器
- 裝包,修改配置文件,啟動(dòng)服務(wù)
3.測(cè)試配置
- 客戶端連接代理服務(wù)訪問(wèn)數(shù)據(jù)
配置數(shù)據(jù)讀寫(xiě)分離
拓?fù)鋱D:
首先配置51與52的的主從復(fù)制,51為主,52為從
具體配置過(guò)程請(qǐng)看:MySQL主從復(fù)制
#192.168.4.52 mysql -uroot -p123456 -e "show slave status\G"
配置代理服務(wù)器57
1)安裝提供服務(wù)的軟件
部署Maxscale代理軟件
由MySQL的兄弟公司MariaDB開(kāi)發(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 #因?yàn)橐龃矸?,不能開(kāi)啟MySQL數(shù)據(jù)服務(wù),如果開(kāi)啟請(qǐng)關(guān)閉 systemctl stop mysqld rpm -ql maxscale
主配置文件 | 日志文件 |
---|---|
/etc/maxscale.cnf | /var/log/maxscale |
2)修改服務(wù)配置文件
vim /etc/maxscale.cnf [maxscale] #默認(rèn)服務(wù)啟動(dòng)后線程的個(gè)數(shù),auto自動(dòng),可以自己修改 threads=auto #線程是進(jìn)程的最小工作單位,他兩的區(qū)別,線程共享資源,進(jìn)程獨(dú)享資源 [server1] #指定服務(wù)器的IP地址,有兩臺(tái)所以要寫(xiě)兩次,并且名稱不能一致,其他為默認(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ù)庫(kù)服務(wù)器列表 user=maxscalemon #使用哪個(gè)用戶執(zhí)行這個(gè)程序,使用哪個(gè)用戶,需要到數(shù)據(jù)庫(kù)服務(wù)器進(jìn)行相應(yīng)的授權(quán),監(jiān)視server1,sever2 password=123456 monitor_interval=2000 #多長(zhǎng)時(shí)間查看一次,默認(rèn)單位毫秒 #[Read-Only-Service] #只讀服務(wù)的配置 # type=service #我們注釋掉這個(gè)配置,因?yàn)槲覀兿M谠L問(wèn)時(shí),既可以讀也可以寫(xiě) #router=readconnroute #servers=server1 #user=myuser #password=mypwd #router_options=slave [Read-Write-Service] #定義讀寫(xiě)服務(wù) type=service router=readwritesplit #讀寫(xiě)分離用戶 servers=server1,server2 user=maxscalerouter #路由用戶,用來(lái)驗(yàn)證監(jiān)視用戶(客戶端連接用戶)是否存在 #我們使用客戶端連接數(shù)據(jù)庫(kù),MySQL代理怎樣知道你當(dāng)前登錄的用戶是否存在,使用這個(gè)用戶去查看use表 password=123456 [MaxAdmin-Service] #管理服務(wù) type=service router=cli #命令行 #[Read-Only-Listener] #定義只讀的端口,因?yàn)樯厦嫖覀儾恍枰@個(gè)選項(xiàng)注釋掉,這里也需要注釋 #type=listener #service=Read-Only-Service #protocol=MariaDBClient #port=4008 [Read-Write-Listener] #監(jiān)聽(tīng)讀寫(xiě)服務(wù)的端口 type=listener service=Read-Write-Service protocol=MariaDBClient port=4006 [MaxAdmin-Listener] #管理服務(wù)端口號(hào),如果不想讓他選擇默認(rèn),也可以進(jìn)行添加 type=listener service=MaxAdmin-Service protocol=maxscaled #socket=default port=4016 #自定義端口
3)配置數(shù)據(jù)庫(kù)服務(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ù)是否運(yùn)行 grant replication slave,replication client on *.* to maxscalemon@"%" identified by "123456"; grant select on mysql.* to maxscalerouter@"%" identified by "123456"; #因?yàn)槭侵鲝膹?fù)制,所以在主服務(wù)上配置,從服務(wù)器也會(huì)同步相應(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)啟動(dòng)代理服務(wù)
#192.168.4.51 maxscale -f /etc/maxscale.cnf ls /var/log/maxscale #maxscale軟件的日志信息,如果沒(méi)有啟動(dòng)可以查看錯(cuò)誤信息 ps -C maxscale #查看進(jìn)程信息 ss -lnutp | grep maxscale #查看端口信息
MaxScale cannot be run as root. Failed to write child process message!
如果啟動(dòng)抱以上錯(cuò)誤:可以使用以下方式解決
maxscale -f /etc/maxscale.cnf -U maxscale 指定啟動(dòng)用戶名 maxscale -f /etc/maxscale.cnf -U maxscale maxscalemon
5)查看服務(wù)信息
驗(yàn)證配置
1)在代理服務(wù)器本機(jī)連接管理服務(wù),查看監(jiān)控信息
#在代理服務(wù)器本機(jī)訪問(wèn)管理 #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訪問(wèn)數(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)驗(yàn)證是否實(shí)現(xiàn)了數(shù)據(jù)的讀寫(xiě)分離
在從服務(wù)器52本機(jī)進(jìn)行數(shù)據(jù)插入。
因?yàn)?2是從服務(wù)器所以插入52的數(shù)據(jù)并不會(huì)同步到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é)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
mysql for update是鎖表還是鎖行實(shí)例詳解
在并發(fā)一致性控制場(chǎng)景中,我們常常用for update悲觀鎖來(lái)進(jìn)行一致性的保證,但是如果不了解它的機(jī)制,就進(jìn)行使用,很容易出現(xiàn)事故,比如for update進(jìn)行了鎖表導(dǎo)致其他請(qǐng)求只能等待,從而拖垮系統(tǒng),這篇文章主要介紹了mysql for update是鎖表還是鎖行操作,需要的朋友可以參考下2024-03-03ubuntu系統(tǒng)中Mysql ERROR 1045 (28000): Acces
這篇文章主要介紹了ubuntu系統(tǒng)安裝mysql登陸提示 解決Mysql ERROR 1045 (28000): Access denied for user root@ localhost問(wèn)題,需要的朋友可以參考下2017-05-05mysql出現(xiàn)ERROR 1819 (HY000)的解決方法
這篇文章主要為大家詳細(xì)介紹了mysql出現(xiàn)ERROR 1819 (HY000)的解決方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-10-10mac 裝5.6版本mysql 設(shè)置密碼的簡(jiǎn)易方法
這篇文章主要介紹了mac 裝5.6版本mysql 設(shè)置密碼的簡(jiǎn)易方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2018-05-05MySQL數(shù)據(jù)庫(kù)遷移全過(guò)程
本文詳細(xì)解析了MySQL數(shù)據(jù)庫(kù)遷移的整個(gè)過(guò)程,包括準(zhǔn)備工作、遷移方法、注意事項(xiàng)和優(yōu)缺點(diǎn),文章介紹了三種常見(jiàn)的遷移方法:使用mysqldump導(dǎo)出和導(dǎo)入、使用ibd文件遷移和使用目錄整體遷移,每種方法都有其優(yōu)缺點(diǎn),選擇合適的方法取決于具體的遷移需求和環(huán)境2025-02-02mysql日志文件General_log和Binlog開(kāi)啟及詳解
MySQL中的數(shù)據(jù)變化會(huì)體現(xiàn)在上面日志中,下面這篇文章主要給大家介紹了關(guān)于mysql日志文件General_log和Binlog開(kāi)啟及詳解的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-07-07