Mysql5.6.29雙主+Keepalived

Mysql5.6.29雙主復(fù)制+Keepalived實(shí)現(xiàn)高可用服務(wù)

1.準(zhǔn)備工作

1、節(jié)點(diǎn)主機(jī)系統(tǒng):Linux操作系統(tǒng),Centos6.5(64位)

2、高可用集群軟件:Keepalived

3、Service:mysql

4、Mysql版本:5.6.29

? ? ?Keepalived版本:1.2.13

(2)主機(jī)/IP劃分

1、兩臺(tái)節(jié)點(diǎn)主機(jī)node1,node2:

Node1: IP:192.168.1.128 host name:node1;

Node2: IP:192.168.1.129 host name:node2;

VIP: 192.168.1.140

MYSQL服務(wù)器A,對(duì)于Keepalived來(lái)說(shuō)則是MASTER機(jī),首先托管著虛擬IP。

MYSQL服務(wù)器B,對(duì)于Keepalived來(lái)說(shuō)則是BACKUP機(jī),當(dāng)MASTER機(jī)出故障時(shí),將接管VIP,接替MASTER機(jī)繼續(xù)為外部提供服務(wù),直到MASTER機(jī)恢復(fù)。

2.MYSQL雙主復(fù)制配置

如果有正在寫(xiě)數(shù)據(jù),先通過(guò)“flush tables with read lock;”命令讓表只讀,手工備份完后,再“unlock

tables;”。

2.1配置賬號(hào)和權(quán)限

在主機(jī)(MASTER)和備機(jī)BUCKUP)上,分別創(chuàng)建Mysql數(shù)據(jù)庫(kù)賬號(hào)“rep1”,密碼為“123”。

創(chuàng)建語(yǔ)句如下:

create user 'rep1'@'%' identified by '123';

通過(guò)如下SQL語(yǔ)句,授予賬號(hào)“rep1”可用于復(fù)制的權(quán)限

grant replication slave on *.* to 'rep1'@'%' identified by '123';

“rep1” 是賬號(hào),“%”(可以指定具體IP)表示任意主機(jī)均可通過(guò)賬號(hào)“rep1”復(fù)制數(shù)據(jù),密碼為“123”。執(zhí)行“GRANT”語(yǔ)句后,再執(zhí)行“flush privileges;”使授權(quán)生效。

2.2配置MASTER

分別對(duì)兩臺(tái)主機(jī)的Mysql配置文件進(jìn)行修改,Msql配置文件一般為“my.cnf”(通過(guò)“./mysql

--help | grep my.cnf”命令找到首選配置文件,這里是“/usr/local/mysql/my.cnf”),對(duì)my.cnf文件加入(或放開(kāi))下面的語(yǔ)句,即可開(kāi)啟復(fù)制功能(通過(guò)二進(jìn)制日志復(fù)制)。兩臺(tái)主機(jī)開(kāi)啟binlog后,均變成MASTER機(jī)(即雙主,但如果只一臺(tái)開(kāi)啟binlog,則為主從),彼此都會(huì)向?qū)Ψ酵扑投M(jìn)制日志。

具體內(nèi)容如下:

server_id = 1#另一臺(tái)此處設(shè)置為2(兩臺(tái)必須不同)

log-bin = binlog ?#開(kāi)啟binlog功能

log-bin-index = binlog.index

2.3配置SLAVE

雙主復(fù)制下,兩臺(tái)主機(jī)彼此均向?qū)Ψ酵扑腿罩荆瑫r(shí)也從對(duì)方哪里接受日志。當(dāng)它推送日志時(shí),它就

是MASTER機(jī),當(dāng)它接受數(shù)據(jù)時(shí),它則變成SLAVE機(jī)。

(1)配置主機(jī)A的SLAVE功能

當(dāng)主機(jī)A變成SLAVE機(jī)時(shí),它將從主機(jī)B(MASTER)那里復(fù)制日志。

u獲取MASTER(主機(jī)B)的二進(jìn)制日志文件名稱和起始復(fù)制位置

在主機(jī)B的Mysql中,執(zhí)行“show master status;”命令,查看二進(jìn)制日志文件名稱和起始復(fù)制位置。

u配置主機(jī)A的MASTER信息

SQL語(yǔ)句如下:

change master tomaster_host='192.168.1.129',master_port=3306, master_user='rep1', master_password='123', master_log_file='binlog.000004', master_log_pos=557;

語(yǔ)句說(shuō)明:

master_host:MASTER Mysql的IP

master_port:MASTER Mysql的端口

master_user:MASTER Mysql用于復(fù)制的賬號(hào)

master_password:MASTER Mysql用于復(fù)制的賬號(hào)對(duì)應(yīng)的密碼

master_log_file:MASTER Mysql二進(jìn)制文件名稱

master_log_pos:MASTER Mysql二進(jìn)制文件開(kāi)始復(fù)制的起始位置

u啟動(dòng)主機(jī)A的SLAVE功能

start slave;

開(kāi)啟后,主機(jī)A作為SLAVE接受MASTER(主機(jī)B)推送過(guò)來(lái)的二進(jìn)制日志)

u查看復(fù)制狀態(tài)

show slave status \G;

show processlist \G;

(2)配置主機(jī)B的SLAVE功能

當(dāng)主機(jī)B變成SLAVE機(jī)時(shí),它將從主機(jī)A(MASTER)那里復(fù)制日志。

u獲取MASTER(主機(jī)A)的二進(jìn)制日志文件名稱和復(fù)制的起始位置

在主機(jī)A的Mysql中,執(zhí)行“show master status;”命令,查看二進(jìn)制日志文件名稱和復(fù)制的起始位置。

u配置主機(jī)B的MASTER信息

change master tomaster_host='192.168.1.128',master_port=3306, master_user='rep1', master_password='123', master_log_file='binlog.000001', master_log_pos=120;

u啟動(dòng)主機(jī)B的SLAVE功能

start slave;

開(kāi)啟后,主機(jī)B作為SLAVE接受主機(jī)A(MASTER)推送過(guò)來(lái)的二進(jìn)制日志

u查看復(fù)制狀態(tài)(“\G”表示每列一行輸出)

show slave status \G;

show processlist \G;

3.雙主復(fù)制測(cè)試

(1)在主機(jī)A(192.168.1.128)的test庫(kù)中創(chuàng)建表“repl_test”

在主機(jī)B的test庫(kù)中查詢 “repl_test” 表

從結(jié)果中可以看到,在主機(jī)A創(chuàng)建的表“repl_test”結(jié)構(gòu)已經(jīng)成功復(fù)制到主機(jī)B的MYSQL庫(kù)中。

(2)在主機(jī)B(192.168.1.129)中,對(duì)test庫(kù)repl_test表插入數(shù)據(jù)。見(jiàn)下圖。

回到主機(jī)A(192.168.1.128),查看test數(shù)據(jù)庫(kù)repl_test表,可以看在主機(jī)B(192.168.1.129)中插入的數(shù)據(jù)“from192.168.1.129”成功復(fù)制到主機(jī)A(192.168.1.128)MYSQL數(shù)據(jù)庫(kù)中了。見(jiàn)下圖。

4.高可用配置

高可用配置,主要是配置Keepalived,利用Keepalived設(shè)置虛擬IP,并在MASTER機(jī)與BACKUP機(jī)之間

進(jìn)行心跳檢測(cè),當(dāng)MASTER機(jī)出故障時(shí),BACKUP機(jī)立即無(wú)縫地接管虛擬IP,接替MASTER機(jī)職責(zé)繼續(xù)為外部提供服務(wù),直到MASTER機(jī)恢復(fù)。

4.1Keepalived配置

首先在兩臺(tái)主機(jī)上分別安裝Keepalived,然后分別修改keepalived.conf文件,內(nèi)容如下:

! Configuration File for keepalived

#全局配置

global_defs {

notification_email {

xxx@xxx.com

}

notification_email_from xxx@xxx.com

smtp_server xxx.com

smtp_connect_timeout 30

router_id 1688

}

#VRRP監(jiān)控腳本定義

vrrp_script MONITOR_MYSQL {

script "/usr/local/mysql/monitor/monitor.sh"#腳本路徑

interval 2#監(jiān)控腳本執(zhí)行頻率(秒)

weight 2

}

#VRRP實(shí)例

vrrp_instance KEEPALIVED_MYSQL_1 {

state MASTER

interface eth0

virtual_router_id 51#此處,MASTER與BACKUP一致

priority 100#BACKUP配置的值比MASTER小

advert_int 1

authentication {

auth_type PASS

auth_pass 1111

}

#VRRP監(jiān)控腳本使用

track_script {

MONITOR_MYSQL

}

#虛擬IP配置

virtual_ipaddress {

192.168.119.140

}

}

4.2編寫(xiě)Mysql服務(wù)器進(jìn)程檢測(cè)腳本

Keepalived心跳檢測(cè)主要檢測(cè)主機(jī)是否可以訪問(wèn),如果檢測(cè)到托管VIP的主機(jī)不可以訪問(wèn)(keepalived

進(jìn)程沒(méi)有在運(yùn)行),它會(huì)立即將VIP轉(zhuǎn)移到有效的BACKUP機(jī)上。但對(duì)于我們業(yè)務(wù)來(lái)說(shuō)(MYSQL數(shù)據(jù)庫(kù)讀寫(xiě)),除了主機(jī)固然必須處在運(yùn)行狀態(tài)外,MYSQL數(shù)據(jù)庫(kù)本身也必須正常運(yùn)行,否則數(shù)據(jù)庫(kù)無(wú)法讀寫(xiě),服務(wù)將不可用。所有我們就要編寫(xiě)一個(gè)腳本(命名為monitor.sh,配置到keepalived.conf中,keepalived會(huì)根據(jù)設(shè)定的頻率進(jìn)行調(diào)用),用于檢測(cè)MYSQL數(shù)據(jù)庫(kù)是否正常運(yùn)行,如果檢測(cè)到MYSQL數(shù)據(jù)庫(kù)掛掉了,說(shuō)明本機(jī)MYSQL服務(wù)器不可用,必須進(jìn)行故障切換。

腳本內(nèi)容如下:

#!/bin/bash

#查看是否有MYSQL進(jìn)程在運(yùn)行(進(jìn)程個(gè)數(shù))

mysql_process_count=`netstat -nlt | grep 3306 | wc -l`

#查看是否有keepalived進(jìn)程在運(yùn)行

keepalived_process_count=`ps -C keepalived --no-header | wc -l`

#如果檢測(cè)到?jīng)]有MYSQL進(jìn)程在運(yùn)行(說(shuō)明數(shù)據(jù)庫(kù)掛掉了)

if [ $mysql_process_count -eq 0 ] && [ $keepalived_process_count -gt 0 ]

then

#殺掉keepalived進(jìn)程,讓BACKUP機(jī)檢測(cè)不到MASTER上的keepalived,從而B(niǎo)ACKUP接管VIP

killall keepalived

fi

chmod 755 /usr/local/mysql/monitor/monitor.sh

5.高可用測(cè)試

(1)開(kāi)啟兩臺(tái)主機(jī)上的keepalived

啟動(dòng)MASTER機(jī)(192.168.1.128)上的keepalived,如圖,VIP(192.168.119.140)設(shè)置成功。

啟動(dòng)BACKUP機(jī)(192.168.1.129)上的keepalived

(2)關(guān)閉MASTER機(jī)(192.168.1.128)上的MYSQL,如圖,MASTER機(jī)上托管的VIP消失。

這時(shí)觀察BACKUP機(jī)(192.168.1.129),從下圖可以看到,BACKUP機(jī)成功接管了VIP(192.168.119.140)。


(3)恢復(fù)MASTER機(jī)上的MYSQL數(shù)據(jù)庫(kù),如下圖,可以看到VIP(192.168.119.140)又回來(lái)了。

再看看BACKUP機(jī),VIP沒(méi)有了,因?yàn)镸ASTER機(jī)上的MYSQL恢復(fù)正常,MASTER機(jī)重新接管了VIP。

(4)通過(guò)VIP訪問(wèn)數(shù)據(jù)庫(kù)

如下圖,通過(guò)VIP(192.168.119.140),成功訪問(wèn)數(shù)據(jù)庫(kù)。

注:圖為轉(zhuǎn)載,不影響配置!
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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