mysql讀寫分離

第一節(jié)基礎(chǔ)

--讀寫分離的原理

多臺mysql服務(wù)器

分別提供讀寫服務(wù)逮诲,均衡流量

通過主從復(fù)制保持?jǐn)?shù)據(jù)一致性

由mysql代理面向客戶端

收到sql寫請求時洁段,交給服務(wù)器a處理

收到sql讀請求時酒奶,交給服務(wù)器b處理

具體區(qū)分策略由服務(wù)設(shè)置


讀寫分離:數(shù)據(jù)的讀,寫分離

優(yōu)點(diǎn)

1.增加冗余

2.增加了機(jī)器的處理能力

3.對于讀操作為主的應(yīng)用,使用讀寫分離是最好的場景肴盏,因?yàn)榭梢源_保寫的服務(wù)器壓力更小芋浮,而讀又可以接受點(diǎn)時間上的延遲冲甘。

缺點(diǎn)

  單點(diǎn)故障

  容易形成瓶頸

拓?fù)鋱D:


第二節(jié)實(shí)戰(zhàn)

--構(gòu)建思路

部署mysql一主一從 同步結(jié)構(gòu)

  已經(jīng)搭建好mysql主從復(fù)制

基于上一個實(shí)驗(yàn)的結(jié)果

其中slave為只讀

添加一臺mysql代理服務(wù)器(讀寫分離服務(wù)器)

部署/啟用maxscale

client測試

1)mysql中間件

Mysqlcat

Maxscale

Mysql-proxy

--配置

1,mysql一主一從同步結(jié)構(gòu)

1)配置主服務(wù)

[root@mysql-51 ~]# vim /etc/my.cnf

[mysqld]

log_bin=master51

server_id=51   #mysql主從里途样,id必須唯一江醇,范圍:1~255

binlog_format="mixed"

[root@mysql-51 ~]# systemctl restart mysqld ??#重啟刷新文件配置

mysql> show master status\G; #查看主庫master狀態(tài),查看當(dāng)前使用的binlog日志文件

*************************** 1. row ***************************

?????????????File: master51.000001

?????????Position: 441

?????Binlog_Do_DB:

?Binlog_Ignore_DB:

Executed_Gtid_Set:

1 row in set (0.00 sec)

mysql> grant replication slave on *.* to repluser@'%' identified by '123456'; #授權(quán)給從服務(wù)器何暇,單個數(shù)據(jù)庫授權(quán)無效陶夜,必須設(shè)置*.*

2)配置從服務(wù)器

mysql> show slave status;   #查看從庫信息

mysql> show master status; ??????#查看binlog日志,查看主庫信息

[root@mysql-52 ~]# vim /etc/my.cnf

[mysqld]

server_id=52     #從庫id裆站,要唯一

[root@mysql-52 ~]# systemctl restart mysqld

mysql> change master to

????-> master_host='192.168.4.51',

????-> master_user='repluser',

????-> master_password='123456',

-> master_log_file='master51.000001',  #與主庫binlog日志名相同

-> master_log_pos=441;    #偏移量条辟,與主庫相同

提示:任意參數(shù)指定不對,io線程讀取不了信息

mysql> start slave;    #啟動slave(io,sql線程)

mysql> show slave stattus\G;

???????????????Slave_IO_State: Waiting for master to send event

??????????????????Master_Host: 192.168.4.51

??????????????????Master_User: repluser

??????????????????Master_Port: 3306

????????????????Connect_Retry: 60

??????????????Master_Log_File: master51.000001

Read_Master_Log_Pos: 441

???????????????Relay_Log_File: mysql-52-relay-bin.000002

????????????????Relay_Log_Pos: 319

????????Relay_Master_Log_File: master51.000001

Slave_IO_Running: Yes ????????????#看到y(tǒng)es就成功了

Slave_SQL_Running: Yes   #ok了

??????????........


提示:sql線程在執(zhí)行中繼日志的sql命令時宏胯,一旦出錯羽嫡,sql線程立即停止

方案:停掉slave,在從庫新建相關(guān)表,重啟slave

2肩袍,mysql代理服務(wù)器配置

使用軟件-->maxscale

配置文件:/etc/maxscale.cnf

[root@myweb-57 jluo]# rpm -ivh maxscale-2.1.2-1.rhel.7.x86_64.rpm

[root@myweb-57 jluo]# vim /etc/maxscale.cnf

[maxscale] ????????????#進(jìn)程名

threads=auto   #線程數(shù)量杭棵,默認(rèn)1

[server1]

type=server

address=192.168.4.51 ??#主庫ip

port=3306

protocol=MySQLBackend

[server2]

type=server

address=192.168.4.52 ??#從庫ip

port=3306

protocol=MySQLBackend


[MySQL Monitor] ??#監(jiān)視mysql服務(wù)

type=monitor

module=mysqlmon

servers=server1, server2

user=scalemon ?????#maxscale登錄mysql服務(wù)用戶名,用于監(jiān)視mysql 是否running, ???????????????????????

passwd=123456   ?#主從結(jié)構(gòu)是否正常氛赐,誰是主庫魂爪,誰是slave

monitor_interval=10000 ???#每隔10s檢查一次

#detect_stale_master=true ??????#當(dāng)所有的slave都不可用時,select查詢請求會轉(zhuǎn)發(fā)到master艰管。


#[Read-Only Service]    不需要指明只讀

#type=service

#router=readconnroute

#servers=server1

#user=scalemon

#passwd=mypwd

#router_options=slave



[Read-Write Service]   #定義讀寫分離服務(wù)

type=service

router=readwritesplit

servers=server1, server2

user=pliadmin    #maxscale連接mysql服務(wù)檢查客戶端

passwd=123456   #使用的用戶名和密碼用的用戶名,密碼

max_slave_connections=100% ?#所有的slave提供select查詢服務(wù)

#max_slave_replication_lag = 5 ?????# slave超時5秒滓侍,就把請求轉(zhuǎn)發(fā)到其他slave


[MaxAdmin Service]   #定義管理服務(wù)

type=service

router=cli       #命令行


#[Read-Only Listener]

#type=listener

#service=Read-Only Service

#protocol=MySQLClient

#port=4008


[Read-Write Listener]

type=listener

service=Read-Write Service   #與上面的[Read-Write Service]

protocol=MySQLClient

port=4006           #maxscale服務(wù)監(jiān)聽的端口號


[MaxAdmin Listener]

type=listener

service=MaxAdmin Service  #與上面的[MaxAdmin Service]一樣

protocol=maxscaled

socket=default

port=4026 ???????????????????#自定義端口號,不寫使用默認(rèn)端口

#user=maxscale ?????????#用戶名默認(rèn)admin

#passwd=Mhu87p2D  #密碼默認(rèn)mariadb


51,52添加授權(quán)

51牲芋,52主機(jī)都要添加權(quán)限

mysql> grant select,insert on db1.* to rose@'%' identified by '123456'; #授予客戶端相應(yīng)訪問權(quán)限

mysql> grant replication slave,replication client on *.* to scalemon@'%'

-> identified by '123456'; ??????????#授權(quán)給maxscale

mysql> grant select on mysql.* to pliadmin@'%' identified by '123456'; #授權(quán)給maxscal

提示:授權(quán)地址必須寫’%’撩笆,否則會自動添加上ipv6地址,就會出錯

replication slave:常用于建立復(fù)制時所需要用到的用戶權(quán)限缸浦,也就是slave server必須被master server授權(quán)具有該權(quán)限的用戶夕冲,才能通過該用戶復(fù)制master server 的binlog日志sql語句。

并且"SHOW SLAVE HOSTS"這條命令和REPLICATION SLAVE權(quán)限有關(guān)餐济,否則執(zhí)行時會報錯:

??ERROR 1227 (42000): Access denied; you need (at least one of) the REPLICATION SLAVE privilege(s) for this operation


replication client:不可用于建立復(fù)制耘擂,有該權(quán)限時,只是多了可以使用如"SHOW SLAVE STATUS"絮姆、"SHOW MASTER STATUS"等命令醉冤。

在5.6.6版本以后秩霍,也可以使用"SHOW BINARY LOGS"

52主機(jī)

mysql> select user,host from mysql.user;

+-----------+-----------+

| user ?????| host ?????|

+-----------+-----------+

| pliadmin ?| % ????????|

| scalemon ?| % ????????|

57主機(jī)

[root@myweb-57 jluo]# maxscale -f /etc/maxscale.cnf ???#開啟服務(wù)

[root@myweb-57 jluo]# ss -tunlp | grep maxscale

tcp ???LISTEN ????0 ?????128 ?????:::4026 ????????????????:::* ??????????????????users:(("maxscale",pid=4498,fd=12))

tcp ???LISTEN ????0 ?????128 ?????:::4006 ????????????????:::* ??????????????????users:(("maxscale",pid=4498,fd=11))

[root@myweb-57 jluo]# killall -9 maxscale  #停止服務(wù)

提示:注意57主機(jī)上不能運(yùn)行mysql數(shù)據(jù)庫服務(wù)

3)客戶端驗(yàn)證

在maxscale本機(jī)連接管理端口

Maxadmin ?-uadmin ?-pmariadb ?-P端口

訪問maxscale代理

Mysql ?-h服務(wù)器地址 -P端口 -u用戶名 -p密碼

在57本機(jī)訪問管理服務(wù)查看監(jiān)控信息

[root@myweb-57 jluo]# maxadmin -uadmin -pmariadb -P4026

MaxScale> list servers

Servers.

-------------------+-----------------+-------+-------------+--------------------

Server ????????????| Address ????????| Port ?| Connections | Status ?????????????

-------------------+-----------------+-------+-------------+--------------------

server1 ???????????| 192.168.4.51 ???| ?3306 | ??????????0 | Master, Running

server2 ???????????| 192.168.4.52 ???| ?3306 | ??????????0 | Slave, Running


第三節(jié)測試

在客戶端主機(jī)連接57對數(shù)據(jù)進(jìn)行訪問,測試能否實(shí)現(xiàn)讀寫分離

測試一:

51主機(jī)

mysql> insert into db1.t1 values(11);

Client主機(jī)

[root@mysql-50 ~]# mysql -h192.168.4.57 -P4006 -urose -p123456

mysql> select * from db1.t1;

+------+

| id ??|

+------+

| ??11 |

測試二:

52主機(jī)

mysql> insert into db1.t1 values(52);  #主機(jī)51沒有這條數(shù)據(jù)

Client主機(jī)

mysql> select * from db1.t1;

+------+

| id ??|

+------+

| ??11 |

| ??52 |

測試三:

Client主機(jī):

mysql> insert into db1.t1 values(50);

mysql> select * from db1.t1;

+------+

| id ??|

+------+

| ??11 |

| ??52 |

| ??50 |


綜上三個測試可知蚁阳,實(shí)現(xiàn)了讀寫分離




結(jié)束語:

更多精彩內(nèi)容持續(xù)更新中铃绒,關(guān)注我微信公眾號,有你更精彩螺捐。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末颠悬,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子定血,更是在濱河造成了極大的恐慌赔癌,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,718評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件澜沟,死亡現(xiàn)場離奇詭異灾票,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)茫虽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評論 3 385
  • 文/潘曉璐 我一進(jìn)店門刊苍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人濒析,你說我怎么就攤上這事正什。” “怎么了号杏?”我有些...
    開封第一講書人閱讀 158,207評論 0 348
  • 文/不壞的土叔 我叫張陵婴氮,是天一觀的道長。 經(jīng)常有香客問我馒索,道長莹妒,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,755評論 1 284
  • 正文 為了忘掉前任绰上,我火速辦了婚禮,結(jié)果婚禮上渠驼,老公的妹妹穿的比我還像新娘蜈块。我一直安慰自己,他們只是感情好迷扇,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,862評論 6 386
  • 文/花漫 我一把揭開白布百揭。 她就那樣靜靜地躺著,像睡著了一般蜓席。 火紅的嫁衣襯著肌膚如雪器一。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,050評論 1 291
  • 那天厨内,我揣著相機(jī)與錄音祈秕,去河邊找鬼渺贤。 笑死,一個胖子當(dāng)著我的面吹牛请毛,可吹牛的內(nèi)容都是我干的志鞍。 我是一名探鬼主播,決...
    沈念sama閱讀 39,136評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼方仿,長吁一口氣:“原來是場噩夢啊……” “哼固棚!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起仙蚜,我...
    開封第一講書人閱讀 37,882評論 0 268
  • 序言:老撾萬榮一對情侶失蹤此洲,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后委粉,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體黍翎,經(jīng)...
    沈念sama閱讀 44,330評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,651評論 2 327
  • 正文 我和宋清朗相戀三年艳丛,在試婚紗的時候發(fā)現(xiàn)自己被綠了匣掸。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,789評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡氮双,死狀恐怖碰酝,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情戴差,我是刑警寧澤送爸,帶...
    沈念sama閱讀 34,477評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站暖释,受9級特大地震影響袭厂,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜球匕,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,135評論 3 317
  • 文/蒙蒙 一纹磺、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧亮曹,春花似錦橄杨、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至役耕,卻和暖如春采转,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背瞬痘。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評論 1 267
  • 我被黑心中介騙來泰國打工故慈, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留板熊,地道東北人。 一個月前我還...
    沈念sama閱讀 46,598評論 2 362
  • 正文 我出身青樓惯悠,卻偏偏與公主長得像邻邮,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子克婶,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,697評論 2 351

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