- 論壇徽章:
- 0
|
- 使用keepalived 實(shí)現(xiàn)MYSQL 高可用
-
keepalived 下載地址:http://www.keepalived.org/download.html
-
-
master:192.168.215.80
-
slave :192.168.215.28
-
VIP :192.168.215.34
-
-
安裝 keepalived
-
#=======================================================================
-
1:#wget http://www.keepalived.org/software/keepalived-1.1.20.tar.gz
-
2:#tar zxvf keepalived-1.1.20.tar.gz
-
3:#cd keepalived-1.1.20
-
4:#./configure
-
在這一步,可能看到的是如下:
-
#========================================================================
-
Keepalived configuration
-
------------------------
-
Keepalived version : 1.1.20
-
Compiler : gcc
-
Compiler flags : -g -O2
-
Extra Lib : -lpopt -lssl -lcrypto
-
Use IPVS Framework : No
-
IPVS sync daemon support : No
-
Use VRRP Framework : Yes
-
Use Debug flags : No
-
#==========================================================================
-
出現(xiàn)3個(gè)NO,一個(gè)YES。解決的辦法是編譯時(shí)帶上內(nèi)核文件夾重新編譯
-
# ./configure --with-kernel-dir=/usr/src/kernels/2.6.18-194.26.1.el5-x86_64/
-
Keepalived configuration
-
------------------------
-
Keepalived version : 1.1.20
-
Compiler : gcc
-
Compiler flags : -g -O2
-
Extra Lib : -lpopt -lssl -lcrypto
-
Use IPVS Framework : Yes
-
IPVS sync daemon support : Yes
-
Use VRRP Framework : Yes
-
Use Debug flags : No
-
#==========================================================================
-
5:#make && make install
-
#=======================================================================
-
到這里,安裝完成。下面寫(xiě)配置文件。
-
-
配置 keepalived(master,192.168.215.80)
-
#=======================================================================
-
#mkdir /etc/keepalived #默認(rèn)的配置文件獲取的路徑
-
#vi /etc/keepalived/keepalived.conf #配置文件的名稱(chēng)(把下面復(fù)制即可)
-
! Configuration File for keepalived
-
global_defs { #全局定義
-
notification_email { #告警郵件地址組(故障發(fā)郵件在這里沒(méi)有測(cè)試,我把它放到健康檢查腳本里面了)
-
brucezuo@msn.cn #發(fā)生故障,發(fā)告警的郵件地址,一般不用,可以隨便寫(xiě)
-
}
-
notification_email_from brucezuo@msn.cn #郵件發(fā)送地址
-
smtp_server 127.0.0.1 #SMTP服務(wù)器IP
-
smtp_connect_timeout 30 #郵件服務(wù)器連接超時(shí)最長(zhǎng)時(shí)間
-
router_id MySQL-ha #路由標(biāo)識(shí)。在全局定義里只有這個(gè)是必須的,其他都可以不要。
-
}
-
vrrp_script check_mysql_alived { #檢查MYSQL狀態(tài)的函數(shù)(注意這里的花括號(hào)和名稱(chēng)之間有空格)
-
script "/root/mysql-moniter.sh" #這里定義腳本,注意本行需要縮進(jìn),我原來(lái)沒(méi)注意,在這上面整了很長(zhǎng)時(shí)間?梢栽谶@個(gè)腳本里檢查MYSQL是否還活著,服務(wù)器的負(fù)載是否過(guò)高等,以及什么條件做什么操作。
-
interval 1 #運(yùn)行上面檢查腳本的時(shí)間間隔,單位為妙。keepalive的守護(hù)進(jìn)程執(zhí)行這個(gè)腳本
-
weight 5 #本腳本的運(yùn)行權(quán)重,權(quán)重越高的,越優(yōu)先檢查(只有一個(gè)檢查腳本,就無(wú)所謂了)
-
}
-
vrrp_instance VI_1 {
-
state BACKUP #兩臺(tái)配置此處均是BACKUP,一臺(tái)宕機(jī),另外一臺(tái)把VIP搶過(guò)去。
-
interface eth1 #在這里要注意,虛擬IP用的是哪個(gè)網(wǎng)卡進(jìn)行通訊。我這里機(jī)器上的eth1是內(nèi)網(wǎng)的,eth0是外網(wǎng)的。
-
virtual_router_id 51 #虛擬路由ID。這個(gè)標(biāo)識(shí)是同一個(gè)vrrp實(shí)例使用唯一的標(biāo)識(shí)。即同一個(gè)vrrp_stance,MASTER和BACKUP的virtual_router_id是一致的,同時(shí)在整個(gè)vrrp內(nèi)是唯一的。
-
#keepalived通過(guò)發(fā)送和接受組廣播包中的同一個(gè)virtual_router_id中的成員的存活,來(lái)確定對(duì)方的不可用,一旦檢測(cè)到對(duì)方不可用,立即切換他的備份角色為主。
-
priority 100 #權(quán)重,數(shù)值越大,權(quán)重越大,Master必須大于Slave。另一臺(tái)改為90。
-
advert_int 1 #Master和Slave負(fù)載均衡器之間同步檢查的時(shí)間間隔,單位:秒
-
#nopreempt #搶占,在MASTER恢復(fù)后,把VIP搶過(guò)來(lái)。在SLAVE端也一樣,如果MASTER出問(wèn)題了,SLAVE就把VIP搶過(guò)來(lái)。
-
authentication { #Master和Slave之間認(rèn)證的方式
-
auth_type PASS
-
auth_pass 1111 #認(rèn)證的密碼
-
}
-
track_script{ # 使用的VRRP腳本(檢查健康腳步),上面是定義,這里是使用。
-
check_mysql_alived
-
}
-
virtual_ipaddress { #VIP的地址
-
192.168.215.34
-
}
-
}
-
-
virtual_server 192.168.215.34 3306 {
-
lb_algo wrr #LVS算法
-
lb_kind DR #LVS模式
-
persistence_timeout 60 #會(huì)話保持時(shí)間,單位為秒,當(dāng)用戶從遠(yuǎn)程帳號(hào)過(guò)行登陸網(wǎng)站時(shí),有了這個(gè)會(huì)話保持功能,就能把用戶的請(qǐng)求轉(zhuǎn)發(fā)到同一個(gè)應(yīng)用服務(wù)器
-
protocol TCP
-
real_server 192.168.215.80 3306 { #真實(shí)IP(每臺(tái)機(jī)器必須指定各自的真實(shí)IP)
-
TCP_CHECK {
-
connect_timeout 10 #連接超時(shí)時(shí)間
-
nb_get_retry 3 #重連次數(shù)
-
delay_before_retry 3 #重連間隔時(shí)間
-
connect_port 3306 #健康檢查端口
-
}
-
}
-
}
-
#==========================================================================
-
MATER端配置到此結(jié)束。
-
編寫(xiě)健康服務(wù)檢測(cè)的腳本
-
#==========================================================================
-
[root@l10ntermwiki bruce]# cat mysql-moniter.sh
-
#monitor mysql service status and server load
-
#!/bin/bash
-
function Send_Email() #發(fā)郵件的函數(shù)。
-
{
-
ADMIN="brucezuo@msn.cn"
-
MESSAGE_FILE="/tmp/monitor.log" #郵件里面帶上本機(jī)IP地址和時(shí)間,信息更明確。
-
echo "VIP has been changed AT `date`,IP:`cat /etc/hosts |grep -v "127.0.0.1"|awk '{print $1}'`,please check it. Message:$1" > $MESSAGE_FILE
-
/bin/mail -s "VIP has been changed" $ADMIN < $MESSAGE_FILE
-
rm -r $MESSAGE_FILE
-
}
-
-
CPU_NUMBER=`cat /proc/cpuinfo |grep processor |wc -l` #獲取CPU個(gè)數(shù)。
-
MAX_LOAD=`echo $CPU_NUMBER*2|bc` #最大負(fù)載認(rèn)為是CPU*2。設(shè)置成CPU個(gè)數(shù)更好。
-
-
if [ `service mysql status |awk '{print $2}'` = 'running' ] #檢查mysql是否活著,這里用mysql作為服務(wù)名稱(chēng),有些用mysqld作為服務(wù)名稱(chēng)。
-
then
-
LOAD=`uptime`
-
LOAD=${LOAD##* }
-
# if [ `expr $LOAD \< $CPU_LOAD` = 1 ] # another method,compare integer and decimal
-
if [ `echo "$LOAD > $MAX_LOAD" | bc` = 1 ] #如果負(fù)載過(guò)高。
-
then
-
pkill keepalived # if load is greater than max load then kill keepalived,take VIP point to another server.
-
Send_Email "Mysql is alived,Average load is busy,so kill keepalived"
-
fi
-
else #mysql服務(wù)掛了,VIP漂移走。
-
pkill keepalived # if mysql service is not running ,then kill keepalived,take VIP point to another server.
-
Send_Email "Mysql service is not alived,so kill keepalived."
-
fi
-
echo `date`>>/tmp/pk.log #這里只是為了檢查腳本是否被正常執(zhí)行,實(shí)際使用刪除掉。
-
#健康檢查腳本完畢。
-
#chmod +x /home/bruce/MySQL.sh #分配執(zhí)行權(quán)限
-
-
#==========================================================================
-
啟動(dòng)keepalvice
-
#==========================================================================
-
[root@ldc2095 keepalived-1.1.20]# keepalived -D #-D參數(shù),會(huì)把日志記錄到/var/log/message里面
-
[root@ldc2095 keepalived-1.1.20]# ps aux |grep keep
-
root 10862 0.0 0.0 35844 624 ? SNs 21:34 0:00 keepalived -D
-
root 10863 0.0 0.0 37936 1548 ? SN 21:34 0:00 keepalived -D
-
root 10864 0.0 0.0 37936 1016 ? SN 21:34 0:00 keepalived -D
-
root 24121 0.0 0.0 61180 776 pts/0 SN+ 21:40 0:00 grep keep
-
-
#===========================================================================
-
另外一個(gè)機(jī)器的配置和上面的一樣。除了修改修改的幾個(gè)地方。
-
健康檢查腳本也一致。
|
|