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

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


image.png

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

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

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

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

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

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

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

配置方式

準(zhǔn)備3臺(tái)服務(wù)器笋粟,安裝 Mysql怀挠,配置一主二從的復(fù)制結(jié)構(gòu)。主從復(fù)制的配置過程參加上一節(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

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

  1. 創(chuàng)建監(jiān)控用戶
create user 'maxmon'@'%' identified by '123456';
grant replication slave,replication client on *.* to 'maxmon'@'%';
  1. 創(chuàng)建路由用戶
create user 'maxrou'@'%' identified by '123456';
grant select on mysql.* to 'maxrou'@'%';
flush privileges;
  1. 修改maxscale配置文件
    用戶創(chuàng)建完成后赴精,開始配置
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)控用戶的信息(maxmon,123456)

image.png

找到 [Read-Write Service] 部分票渠,修改 servers 為 server1,server2,server3,修改 user 和 passwd 為之前創(chuàng)建的路由用戶的信息(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ù)庫連接狀態(tài)郊艘,默認(rèn)的用戶名和密碼是 admin/mariadb

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

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

測試

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

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

使用 Mysql 客戶端到連接 MaxScale

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

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

Select @@hostname;
start transaction;
Select @@hostname纱注;
roolback;
Select @@hostname畏浆;
image.png

開啟事務(wù)后,就自動(dòng)路由到了 master狞贱,普通的查詢操作刻获,是在 slave上。

總結(jié)

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

上一篇 《性能優(yōu)化系列文章目錄》 下一篇
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蝎毡,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子氧枣,更是在濱河造成了極大的恐慌沐兵,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,378評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件便监,死亡現(xiàn)場離奇詭異扎谎,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)烧董,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門毁靶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人解藻,你說我怎么就攤上這事老充。” “怎么了螟左?”我有些...
    開封第一講書人閱讀 152,702評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵啡浊,是天一觀的道長觅够。 經(jīng)常有香客問我,道長巷嚣,這世上最難降的妖魔是什么喘先? 我笑而不...
    開封第一講書人閱讀 55,259評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮廷粒,結(jié)果婚禮上窘拯,老公的妹妹穿的比我還像新娘。我一直安慰自己坝茎,他們只是感情好涤姊,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評(píng)論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著嗤放,像睡著了一般思喊。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上次酌,一...
    開封第一講書人閱讀 49,036評(píng)論 1 285
  • 那天恨课,我揣著相機(jī)與錄音,去河邊找鬼岳服。 笑死剂公,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的吊宋。 我是一名探鬼主播纲辽,決...
    沈念sama閱讀 38,349評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼贫母!你這毒婦竟也來了文兑?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,979評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤腺劣,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后因块,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體橘原,經(jīng)...
    沈念sama閱讀 43,469評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評(píng)論 2 323
  • 正文 我和宋清朗相戀三年涡上,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了趾断。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,059評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡吩愧,死狀恐怖芋酌,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情雁佳,我是刑警寧澤脐帝,帶...
    沈念sama閱讀 33,703評(píng)論 4 323
  • 正文 年R本政府宣布同云,位于F島的核電站,受9級(jí)特大地震影響堵腹,放射性物質(zhì)發(fā)生泄漏炸站。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評(píng)論 3 307
  • 文/蒙蒙 一疚顷、第九天 我趴在偏房一處隱蔽的房頂上張望旱易。 院中可真熱鬧,春花似錦腿堤、人聲如沸阀坏。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽忌堂。三九已至,卻和暖如春误债,著一層夾襖步出監(jiān)牢的瞬間浸船,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來泰國打工寝蹈, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留李命,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,501評(píng)論 2 354
  • 正文 我出身青樓箫老,卻偏偏與公主長得像封字,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子耍鬓,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容