./configure --with-kernel-dir=/usr/src/kernels/2.6.32-573.3.1.el6.x86_64/ (此處要根據本身實際環境來填寫目錄,可使用uname -r來查看本身當前的內核版本,複製到此處便可;若是你發現你的kernels 下面沒有。那就是沒有安裝 kernel-devel,也就是內核開發包)
make && make install;安裝完成以後,必定要善於使用echo $?來看返回的值是否爲0
安裝完成以後,默認的keepalived在/usr/local/etc目錄下,將目錄拷貝至經常使用目錄中:
cp /usr/local/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/
cp /usr/local/sysconfig/keepalived /etc/sysconfig/
cp /usr/local/sbin/keepalived /usr/sbin/
mkdir /etc/keepalived
/etc/keepalived/keepalived/conf:默認這個配置文件是沒有的,須要本身建立
#mysql master的keepalived配置:
! Configuration File for keepalived
global_defs {
notification_email {
it_shengyu@163.com
}
notification_email_from it_shengyu@163.com
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id mysql-ha
}
#vrrp_script chk_mysql {
# script "/root/sql.sh"
# interval 2
# weight 2
#}
vrrp_instance VI_1 {
state Master #兩臺配置此處均是BACKUP
interface eth0
virtual_router_id 51
priority 100 #優先級,另外一臺改成90
advert_int 1
#nopreempt #不搶佔,只在優先級高的機器上設置便可,優先級低的機器不設置
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.10.23.137
}
}
virtual_server 10.10.23.137 3306 {
delay_loop 2 #每一個2秒檢查一次real_server狀態
lb_algo wrr #LVS算法
lb_kind DR #LVS模式
persistence_timeout 60 #會話保持時間
protocol TCP
real_server 10.10.23.114 3306 { #服務器真實IP配置段
weight 3
notify_down /root/sql.sh
TCP_CHECK {
connect_timeout 10 #鏈接超時時間
nb_get_retry 3 #重連次數
delay_before_retry 3 #重連間隔時間
connect_port 3306 #健康檢查端口
}
# track_script {
# check_run
# }
}
#mysql slave的keepalived配置文件:
! Configuration File for keepalived
global_defs {
notification_email {
it_shengyu@163.com
}
notification_email_from it_shengyu@163.com
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id mysql-ha
}
#vrrp_script chk_mysql {
# script "/root/sql.sh"
# interval 2
# weight 2
#}
vrrp_instance VI_1 {
state Master #兩臺配置此處均是BACKUP
interface eth0
virtual_router_id 51
priority 90 #優先級
advert_int 1
#nopreempt #不搶佔,只在優先級高的機器上設置便可,優先級低的機器不設置
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.10.23.137
}
}
virtual_server 10.10.23.137 3306 {
delay_loop 2 #每一個2秒檢查一次real_server狀態
lb_algo wrr #LVS算法
lb_kind DR #LVS模式
persistence_timeout 60 #會話保持時間
protocol TCP
real_server 10.10.23.113 3306 { #服務器真實IP配置段
weight 3
notify_down /root/sql.sh
TCP_CHECK {
connect_timeout 10 #鏈接超時時間
nb_get_retry 3 #重連次數
delay_before_retry 3 #重連間隔時間
connect_port 3306 #健康檢查端口
}
# track_script {
# check_run
# }
}
notify_down:此處是引用一個腳本,若是mysql有故障時會觸發此腳本:
腳本很簡單,就是當mysql有故障的時候。會中止此服務器上的keepalived服務,若是這裏是作的keep+nginx,將mysql換爲nginx便可;
腳本定義一個變量,使用ps檢查mysqld是會啓動。--no-header是不打印頭部信息;wc -l是列出指定文件統計總數,若是爲0,表示mysqld服務沒有啓動;
完成以後,主從上面分別啓動keepalived服務,查看一下日誌,並查看一下vip如今是在哪一臺服務器上:
先查看主上的IP和日誌:
再查看從上的IP和日誌:
從上圖可看出,目前的VIP是在主服務器上的,下面咱們將主上的mysql服務中止掉,再查看日誌和VIP是否會自動轉移到從服務器上,【需先把腳本里面的第一段if註釋掉,否則會自動啓動mysql服務,將看不到實驗效果】
中止主上的數據庫以後再查看結果以下:
當主上的數據庫出現故障中止以後,會自動觸發腳本,關閉主上的keepalived服務,此時從服務器會搶佔keep master,過程很快,不會影響用戶訪問。
當主上的數據庫故障處理恢復以後,再啓動主上的keepalived,此時再查看結果:
如上,當主上的數據庫恢復、keepalived啓動以後,VIP會迅速跳轉到主服務器上來,再接替從服務器的工做。這是由於主服務器的優先級要高於從服務器。
小白剛剛學習keepalived,實驗心得,歡迎各位大牛指點,交流!!!