keepalived+mysql雙主-創(chuàng)新互聯(lián)

keepalived+mysql雙主原理:

成都創(chuàng)新互聯(lián)為您提適合企業(yè)的網(wǎng)站設(shè)計(jì)?讓您的網(wǎng)站在搜索引擎具有高度排名,讓您的網(wǎng)站具備超強(qiáng)的網(wǎng)絡(luò)競(jìng)爭(zhēng)力!結(jié)合企業(yè)自身,進(jìn)行網(wǎng)站設(shè)計(jì)及把握,最后結(jié)合企業(yè)文化和具體宗旨等,才能創(chuàng)作出一份性化解決方案。從網(wǎng)站策劃到做網(wǎng)站、成都網(wǎng)站建設(shè), 我們的網(wǎng)頁(yè)設(shè)計(jì)師為您提供的解決方案。

(1)主庫(kù)1上的keepalived啟動(dòng)之后,會(huì)檢查mysql服務(wù)是否活著,如果活著,keepalived進(jìn)入master狀態(tài),獲得VIP;

(2)主庫(kù)2上的keepalived啟動(dòng)之后,也會(huì)檢查mysql是否活著,然后檢查keepalived組內(nèi)是否有master狀態(tài),如果有,則主庫(kù)2上的keepalived進(jìn)入backup狀態(tài),處于隨時(shí)接管VIP狀態(tài);

(3)如果主庫(kù)1上的mysql掛了,keepalived進(jìn)入fault狀態(tài),釋放VIP,主庫(kù)2上的keepalived會(huì)變成master狀態(tài),獲得VIP;

實(shí)驗(yàn)環(huán)境:

OS:CentOS release 6.6 (Final)

數(shù)據(jù)庫(kù):mysql 5.7.14

A: master :192.168.91.23

B: slave :192.168.91.22

VIP:192.168.91.100

操作系統(tǒng)時(shí)間一致更改:

date -s "20170227 16:25"

hwclock --systohc

主從參數(shù):

A:

server_id = 330623

gtid_mode=ON

log_slave_updates = 0

enforce_gtid_consistency = ON

auto_increment_offset =1

auto_increment_increment =2

B:

server_id = 330622

gtid_mode=ON

log_slave_updates = 0

enforce_gtid_consistency = ON

auto_increment_offset=2

auto_increment_increment=2

配置AB互為主從:

A:

創(chuàng)建復(fù)制賬戶:

create user rep@'192.168.91.%' identified by '147258';

grant replication slave on *.* to rep@'192.168.91.%';

把A做個(gè)全備,還原到B上(這里省略不寫(xiě))

B:添加A為B的主庫(kù):

change master to master_host='192.168.91.23', master_port=3306, master_user='rep',master_password='147258', master_auto_position=1;

start slave;

A:添加B為A的主庫(kù):

change master to master_host='192.168.91.22', master_port=3306, master_user='rep',master_password='147258', master_auto_position=1;

start slave;

創(chuàng)建一個(gè)監(jiān)控賬戶:(后面checkMySQL.py 腳本會(huì)用到,用于檢測(cè)mysql數(shù)據(jù)庫(kù)狀態(tài),這個(gè)用戶只要有usage權(quán)限即可)

GRANT REPLICATION CLIENT ON *.* TO 'monitor'@'%' IDENTIFIED BY 'm0n1tor';

A和B都要安裝keepalived軟件:

 yum install keepalived -y

 yum install MySQL-python -y

A的keepalived配置文件:

[root@Darren1 keepalived]#cat << EOF > keepalived.conf

vrrp_script vs_mysql_23 {     #可以根據(jù)實(shí)際情況命名

  script "/etc/keepalived/checkMySQL.py -h 192.168.91.23 -P 3306"

  interval 60    #切換時(shí)間

}

vrrp_instance VI_23 {      #可以根據(jù)實(shí)際情況命名

  state BACKUP        #剛開(kāi)始時(shí)使其處于backup狀態(tài)

  nopreempt          #設(shè)置為不搶占,m1掛了,m2接管VIP,m1重啟不會(huì)自動(dòng)搶回VIP

  interface eth0       #VIP用的網(wǎng)卡

  virtual_router_id 23    #路由id,范圍是0-255,不能和路由器高可用的id一樣,同一集群中該數(shù)值要相同

  priority 100        #優(yōu)先級(jí),同一個(gè)vrrp_instance的MASTER優(yōu)先級(jí)必須比BACKUP高。

  advert_int 5

  authentication {

    auth_type PASS  #認(rèn)證加密

    auth_pass 1111  # 認(rèn)證密碼,但密碼不要超過(guò) 8 位

  }

  track_script {

    vs_mysql_23   #調(diào)用這個(gè)腳本,返回0就持有VIP,返回1就釋放VIP

  }

  virtual_ipaddress {

    192.168.11.100   #VIP地址

  }

}

EOF

B配置文件:

[root@Darren2 keepalived]# cat << EOF > keepalived.conf

vrrp_script vs_mysql_22 {

  script "/etc/keepalived/checkMySQL.py -h 192.168.91.22 -P 3306"   #此處和A不同,其他都相同

  interval 60

}

vrrp_instance VI_22 {

  state BACKUP

  nopreempt

  interface eth0

  virtual_router_id 23

  priority 90

  advert_int 5

  authentication {

    auth_type PASS

    auth_pass 1111

  }

  track_script {

    vs_mysql_22

  }

  virtual_ipaddress {

    192.168.91.100

  }

}

EOF

checkMySQL.py腳本作用(這里省略不寫(xiě)):

腳本的作用是判斷mysql進(jìn)程是否存在,如果存在返回0,如果不存在返回1;

A和B啟用keepalived

/etc/init.d/keepalived start  (開(kāi)始開(kāi)的時(shí)候,A和B誰(shuí)先啟動(dòng),VIP就先在誰(shuí)上)

 chkconfig –level 2345 keepalived on

keepalived啟動(dòng)過(guò)程:

此時(shí)A開(kāi)啟keepalived服務(wù):

[root@Darren1 ~]# /etc/init.d/keepalived start

[root@Darren1 ~]# tail -f /var/log/messages

May 9 14:41:05 Darren1 Keepalived[28172]: Starting Keepalived v1.2.13 (03/19,2015)

May 9 14:41:05 Darren1 Keepalived[28173]: Starting Healthcheck child process, pid=28175

May 9 14:41:05 Darren1 Keepalived[28173]: Starting VRRP child process, pid=28176

May 9 14:41:05 Darren1 Keepalived_vrrp[28176]: Netlink reflector reports IP 192.168.91.23 added

May 9 14:41:05 Darren1 Keepalived_healthcheckers[28175]: Netlink reflector reports IP 192.168.91.23 added

May 9 14:41:05 Darren1 Keepalived_vrrp[28176]: Netlink reflector reports IP fe80::20c:29ff:fe56:5380 added

May 9 14:41:05 Darren1 Keepalived_vrrp[28176]: Registering Kernel netlink reflector

May 9 14:41:05 Darren1 Keepalived_vrrp[28176]: Registering Kernel netlink command channel

May 9 14:41:05 Darren1 Keepalived_vrrp[28176]: Registering gratuitous ARP shared channel

May 9 14:41:05 Darren1 Keepalived_vrrp[28176]: Opening file '/etc/keepalived/keepalived.conf'.

May 9 14:41:05 Darren1 Keepalived_healthcheckers[28175]: Netlink reflector reports IP fe80::20c:29ff:fe56:5380 added

May 9 14:41:05 Darren1 Keepalived_healthcheckers[28175]: Registering Kernel netlink reflector

May 9 14:41:05 Darren1 Keepalived_healthcheckers[28175]: Registering Kernel netlink command channel

May 9 14:41:05 Darren1 Keepalived_healthcheckers[28175]: Opening file '/etc/keepalived/keepalived.conf'.

May 9 14:41:05 Darren1 Keepalived_vrrp[28176]: Configuration is using : 62873 Bytes

May 9 14:41:05 Darren1 Keepalived_vrrp[28176]: Using LinkWatch kernel netlink reflector...

May 9 14:41:05 Darren1 Keepalived_vrrp[28176]: VRRP_Instance(VI_23) Entering BACKUP STATE

May 9 14:41:05 Darren1 Keepalived_healthcheckers[28175]: Configuration is using : 5173 Bytes

May 9 14:41:05 Darren1 Keepalived_vrrp[28176]: VRRP sockpool: [ifindex(2), proto(112), unicast(0), fd(10,11)]

May 9 14:41:05 Darren1 Keepalived_healthcheckers[28175]: Using LinkWatch kernel netlink reflector...

May 9 14:41:05 Darren1 Keepalived_vrrp[28176]: VRRP_Script(vs_mysql_23) succeeded

May 9 14:41:21 Darren1 Keepalived_vrrp[28176]: VRRP_Instance(VI_23) Transition to MASTER STATE

May 9 14:41:26 Darren1 Keepalived_vrrp[28176]: VRRP_Instance(VI_23) Entering MASTER STATE

May 9 14:41:26 Darren1 Keepalived_vrrp[28176]: VRRP_Instance(VI_23) setting protocol VIPs.

May 9 14:41:26 Darren1 Keepalived_vrrp[28176]: VRRP_Instance(VI_23) Sending gratuitous ARPs on eth0 for 192.168.91.100

May 9 14:41:26 Darren1 Keepalived_healthcheckers[28175]: Netlink reflector reports IP 192.168.91.100 added

May 9 14:41:31 Darren1 Keepalived_vrrp[28176]: VRRP_Instance(VI_23) Sending gratuitous ARPs on eth0 for 192.168.91.100

總結(jié)啟動(dòng)過(guò)程:

(1)啟動(dòng)keepalived三個(gè)進(jìn)程,分別是主進(jìn)程,健康檢查子進(jìn)程,VRRP協(xié)議子進(jìn)程;

(2)啟動(dòng)結(jié)束后,VRRP_Instance開(kāi)始進(jìn)入backup狀態(tài);

(3)進(jìn)入backup成功后,VRRP_Instance轉(zhuǎn)變狀態(tài)為master,然后進(jìn)入master狀態(tài);

(4)獲取VIP,并且用ARP廣播告訴其他服務(wù)器;

keepalived切換過(guò)程:

停止A的mysql服務(wù):

[root@Darren1 ~]# /etc/init.d/mysqld stop

Shutting down MySQL............ SUCCESS!

此時(shí)A的變化:

[root@Darren1 ~]# tail -f /var/log/messages

May 9 14:43:25 Darren1 Keepalived_vrrp[28176]: VRRP_Script(vs_mysql_23) failed

May 9 14:43:26 Darren1 Keepalived_vrrp[28176]: VRRP_Instance(VI_23) Entering FAULT STATE

May 9 14:43:26 Darren1 Keepalived_vrrp[28176]: VRRP_Instance(VI_23) removing protocol VIPs.

May 9 14:43:26 Darren1 Keepalived_vrrp[28176]: VRRP_Instance(VI_23) Now in FAULT state

May 9 14:43:26 Darren1 Keepalived_healthcheckers[28175]: Netlink reflector reports IP 192.168.91.100 removed

總結(jié)A的變化:VRRP_Instance進(jìn)入fault狀態(tài),釋放VIP;

此時(shí)B的變化:

[root@Darren2 ~]# tail -f /var/log/messages

May 9 14:43:26 Darren2 Keepalived_vrrp[35138]: VRRP_Instance(VI_22) Transition to MASTER STATE

May 9 14:43:31 Darren2 Keepalived_vrrp[35138]: VRRP_Instance(VI_22) Entering MASTER STATE

May 9 14:43:31 Darren2 Keepalived_vrrp[35138]: VRRP_Instance(VI_22) setting protocol VIPs.

May 9 14:43:31 Darren2 Keepalived_vrrp[35138]: VRRP_Instance(VI_22) Sending gratuitous ARPs on eth0 for 192.168.91.100

May 9 14:43:31 Darren2 Keepalived_healthcheckers[35137]: Netlink reflector reports IP 192.168.91.100 added

May 9 14:43:36 Darren2 Keepalived_vrrp[35138]: VRRP_Instance(VI_22) Sending gratuitous ARPs on eth0 for 192.168.91.100

總結(jié)B的變化:VRRP_Instance進(jìn)入master狀態(tài),獲得VIP,ARP廣播通知;

使用VIP登陸數(shù)據(jù)庫(kù):

創(chuàng)建登陸用戶:

create user 'keepalived'@'%' identified by '147258';

grant all on *.* to 'keepalived'@'%';

此時(shí)VIP在B上:

[root@Darren2 ~]# ip addr |grep 192

  inet 192.168.91.22/24 brd 192.168.91.255 scope global eth0

  inet 192.168.91.100/32 scope global eth0

在A上用'keepalived'@'%'賬戶登陸,是可以登陸成功的,證明此VIP是有效的:

[root@Darren1 ~]# mysql -ukeepalived -p147258 -h292.168.91.100

keepalived@192.168.91.100 [(none)]>select user(),current_user();

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

| user()          | current_user() |

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

| keepalived@192.168.91.23 | keepalived@%  |

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

總結(jié):

幾種VIP切換情況:

(1)m1主機(jī)宕機(jī),VIP會(huì)切換到m2;

(2)m1上的mysql掛了,VIP會(huì)切換到m2;

(3)m1上的keepalived服務(wù)掛了,又分為兩種情況:

/etc/init.d/keepalived stop:正常切換

kill -9 keepalived_pid:因?yàn)閗eepalived是直接退出,m1和m2都有VIP,但是連接時(shí)候只有一個(gè)是生效的;

(4)腦裂的情況,m1和m2都各自認(rèn)為自己是master狀態(tài),搶占VIP,VIP一會(huì)在m1上,一會(huì)在m2上;

在同一個(gè)交換機(jī)下不存在腦裂情況,這個(gè)在比較復(fù)雜的網(wǎng)絡(luò)環(huán)境中會(huì)發(fā)生。

可以在腳本中防范:ping一下網(wǎng)關(guān),如果連網(wǎng)關(guān)都ping不通,vrrp_script腳本就放回1,keepalived進(jìn)入fault狀態(tài);

m1掛了,m2接管VIP,m1修復(fù)好了之后怎么辦?

(1)如果是GTID復(fù)制直接把m1change master to m2上,如果是傳統(tǒng)復(fù)制,需要找到binlog位置;

(2)等待m1同步完成;

(3)啟動(dòng)keepalived;

keepalived+mysql雙主缺點(diǎn)和對(duì)應(yīng)方法:

(1)數(shù)據(jù)庫(kù)一致性難保障:

可以使用增強(qiáng)半同步,把主庫(kù)等待從庫(kù)回應(yīng)的參數(shù)rpl_semi_sync_master_timeout 調(diào)大點(diǎn),

出現(xiàn)master的日志沒(méi)能實(shí)時(shí)的傳到slave上,需要手工把binlog截取出來(lái)補(bǔ)到從庫(kù)上;如果系統(tǒng)不存在了,可以通過(guò)binlog server 補(bǔ)日志;

(2)需要手動(dòng)把出現(xiàn)故障的主庫(kù)加入到原來(lái)的結(jié)構(gòu)中;

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

本文名稱:keepalived+mysql雙主-創(chuàng)新互聯(lián)
標(biāo)題路徑:http://muchs.cn/article28/djhdjp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App設(shè)計(jì)、自適應(yīng)網(wǎng)站、虛擬主機(jī)、動(dòng)態(tài)網(wǎng)站、網(wǎng)頁(yè)設(shè)計(jì)公司外貿(mào)建站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

網(wǎng)站優(yōu)化排名