一、背景php
Mysql的高可用,有不少的方案,其中上一篇說的主從複製,僅僅是保障了數據有一份副本,當主mysql服務器故障的時候,是不能自動切換的。web服務器須要從新修改jdbc鏈接的地址爲備用mysql服務器的地址,網頁才能恢復訪問呢。mysql
這樣的缺點有:web
一、須要人工干預,若是無人值守,而故障發生在深夜,極可能就沒有人處理。又或者估算雖然發生在白天,可是故障發現不及時,仍是會影響業務。算法
二、業務會中斷,會停機,在主mysql服務器掛掉,到發現,到修改web服務器指向,到業務恢復,中間會中止服務一段時間。sql
所以,本篇基於主從複製已經實現的基礎上,實現mysql主從服務器的自動切換。數據庫
二、實驗環境vim
Mysql虛擬IP:10.1.30.30tomcat
Mysql主服務器:10.1.30.28bash
Mysql從服務器:10.1.30.29服務器
三、配置
3.1安裝keepalive
yum install -y keepalived
3.2編輯keepalive配置文件
3.2.1主服務器配置文件
cd /etc/keepalived rm keepalived.conf原有的配置文件 vi keepalived.conf,建立新的配置文件
! Configuration File forkeepalived global_defs { notification_email_from [email protected] smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id MYSQL_HA #標識,雙主相同 } vrrp_instance VI_1 { state BACKUP #兩臺都設置BACKUP interface eth1 virtual_router_id 51 #主備相同 priority 100 #優先級,另外一臺改成90 advert_int 1 nopreempt #不搶佔,只在優先級高的機器上設置便可,優先級低的機器不設置 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 10.1.30.30 } } virtual_server 10.1.30.30 3306 { delay_loop 2 #每一個2秒檢查一次real_server狀態 lb_algo wrr #LVS算法 lb_kind DR #LVS模式 persistence_timeout 60 #會話保持時間 protocol TCP real_server 10.1.30.28 3306 { weight 3 notify_down /etc/keepalived/mysql.sh #檢測到服務down後執行的腳本 TCP_CHECK { connect_timeout 10 #鏈接超時時間 nb_get_retry 3 #重連次數 delay_before_retry 3 #重連間隔時間 connect_port 3306 #健康檢查端口 } } }
3.2.2從服務器配置文件
! Configuration File forkeepalived global_defs { notification_email_from [email protected] smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id MYSQL_HA #標識,雙主相同 } vrrp_instance VI_1 { state BACKUP #兩臺都設置BACKUP interface eth1 virtual_router_id 51 #主備相同 priority 90 #優先級,另外一臺改成90 advert_int 1 nopreempt #不搶佔,只在優先級高的機器上設置便可,優先級低的機器不設置 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 10.1.30.30 } } virtual_server 10.1.30.30 3306 { delay_loop 2 #每一個2秒檢查一次real_server狀態 lb_algo wrr #LVS算法 lb_kind DR #LVS模式 persistence_timeout 60 #會話保持時間 protocol TCP real_server 10.1.30.29 3306 { weight 3 notify_down /etc/keepalived/mysql.sh #檢測到服務down後執行的腳本 TCP_CHECK { connect_timeout 10 #鏈接超時時間 nb_get_retry 3 #重連次數 delay_before_retry 3 #重連間隔時間 connect_port 3306 #健康檢查端口 } } }
3.2.3建立mysql進程檢測腳本
而後在主備都建立以下一個文件。(主備都須要添加)
vim /etc/keepalived/mysql.sh
內容以下:
#!/bin/bash pkill keepalived sleep 10 /etc/init.d/keepalived start >/dev/null ----------(內容結束)
chmod +x /etc/keepalived/mysql.sh
service keepalived start
記得須要增長keepalived的開機自啓動。
chkconfig keepalived on
重啓後,能夠用
/etc/init.d/keepalived status
來查看進程是否已啓動。
注意:須要兩臺機器都先重啓一下mysqld服務,而後手動
service keepalived restart
另外,能夠用ip a s 查看浮動IP如今在哪臺主機。
四、檢驗是否生效
4.1部署web站點
測試前,首先你得有個網站,能夠參考以前的文章【實戰演練】Linux操做系統05-用LAMP搭建網站與【實戰演練】Linux操做系統07-用tomcat搭建網站,部署一個。
固然,web與數據庫要分開部署,而數據庫部署在主mysql服務器(10.1.30.28)與從mysql服務器(10.1.30.29)。
4.2修改web配置
修改網站的config.php或者jdbc等鏈接數據庫的文件,將數據庫的HOST設置爲VIP(10.1.30.30),而不是主或者從服務器的真實IP地址。
4.3測試
直接訪問網站域名,看看網站是否正常訪問。若是可以正常訪問,登陸主服務器,
service myslqd stop
而後繼續訪問網站域名,看看是不是否仍然能正常訪問,若是能夠,正面主從切換成功。