keepalive主從高可用
- 簡明扼要
- 安裝KP
- 場景
- “高可用”配置
- 主keepalived.conf
- 從keepalived.conf
- mysql_check.sh
- 高可用驗證
- KP運行情況
- 通過vip連接mysql
- vip連接上創建數據庫
- 關閉主庫所在服務器的KP
- vip連接上再次創建數據庫
- 結尾
簡明扼要
- 搭建mysql的主從
- 八股文如是:主用來寫,從作為讀(大量報表業務或其他讀較多的需求)
- 實際業務中,從頂多就是個備份
- 至少binlog被破壞,數據在從還有一份
- 或許正是源于此種解釋,客戶認為我認為的不是他認為的
- 便有了這樣的需求
- 主節點下線,數據服務要能切換到從
- 呵呵,那便有了keepalive,便會造成兩種情況
- 主恢復了后,主從關系易位
- 涉及將從的數據恢復到主(此時做了些業務,從的數據多余主)
- 修改my.cnf配置,調整主從
- 保持之前主從關系
- 從的數據恢復到主(此時做了些業務,從的數據多余主)
- 開啟主從
- 主恢復了后,主從關系易位
- 友情提示
- 本篇只是驗證數據服務的切換,上述的兩種情況不做記錄
- 本篇通過主數據服務的下線,關閉KP,實現切換
安裝KP
- 參考
場景
- 兩臺服務器,都安裝了KP
- 兩臺服務器,做了mysql主從
- 主mysql下線,從mysql提供數據服務
“高可用”配置
主keepalived.conf
- 配置 authentication 兩個節點一樣
- 配置virtual_ipaddress 未被占用的IP
- 配置 interface 實際的網卡
- 配置 virtual_router_id 虛擬路由id,雙節點需要一致
- 配置 priority 優先級,以優先級為主,state 沒啥意義
- 配置 vrrp_script 檢測腳本
! Configuration File for keepalivedglobal_defs {notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from Alexandre.Cassen@firewall.locsmtp_server 192.168.200.1smtp_connect_timeout 30router_id LVS_DEVELvrrp_skip_check_adv_addrvrrp_strictvrrp_garp_interval 0vrrp_gna_interval 0
}vrrp_script mysql_check { # 健康檢查腳本,通過命令判斷MySQL的狀態值,如果狀態值不為零,則MySQL異常,停止keepalived服務,VIP將飄逸到另一臺backup上面。script "/u01/soft/oracle/script/mysql_check.sh" # 腳本別忘了加上可執行權限。interval 2 # 沒2秒檢查一次# weight -30 # 檢查失敗,優先級減30
}vrrp_instance VI_1 {state MASTERinterface ens192 # 實際網卡名稱virtual_router_id 51 # 虛擬路由id,雙節點需要一致priority 100 # 主節點優先級advert_int 1# 認證密碼,雙節點需一致authentication {auth_type PASSauth_pass 1111}track_script { mysql_check # 使用vrrp_script定義的名稱}virtual_ipaddress {10.2.0.200}# Allow packets addressed to the VIPs above to be receivedaccept
}
從keepalived.conf
- 除了優先級,其他都一樣
- 當然,網卡要配置當前服務器的
- 沒有數據庫檢測的腳本
! Configuration File for keepalivedglobal_defs {notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from Alexandre.Cassen@firewall.locsmtp_server 192.168.200.1smtp_connect_timeout 30router_id LVS_DEVELvrrp_skip_check_adv_addrvrrp_strictvrrp_garp_interval 0vrrp_gna_interval 0
}vrrp_instance VI_1 {state MASTERinterface ens192 # 實際網卡名稱virtual_router_id 51 # 虛擬路由id,雙節點需要一致priority 90 # 節點優先級advert_int 1# 認證密碼,雙節點需一致authentication {auth_type PASSauth_pass 1111}track_script { }virtual_ipaddress {10.2.0.200}# Allow packets addressed to the VIPs above to be receivedaccept
}
mysql_check.sh
- 檢查不到數據庫服務,關閉KP
#!/bin/bashss -tnl |grep 3308
i=$?ps -ef | grep mysqld |grep -v color |grep -v "grep mysqld"
j=$?mysql -uroot -proot@000 -e "select version();"
k=$?if [ $i -ne 0 -a $j -ne 0 -a $k -ne 0 ];then
# 通過命令判斷MySQL的狀態值,如果狀態值不為零,則MySQL異常,停止keepalived服務,VIP將飄逸到另一臺backup上面。systemctl stop keepalivedexit 1
elseexit 0
fi
高可用驗證
KP運行情況
通過vip連接mysql
vip連接上創建數據庫
關閉主庫所在服務器的KP
vip連接上再次創建數據庫
結尾
- 給個贊呦!!!