【實戰演練】數據庫基本知識與原理系列05-keepalived實現Mysql主數據庫故障自動切換

一、背景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

而後繼續訪問網站域名,看看是不是否仍然能正常訪問,若是能夠,正面主從切換成功。

相關文章
相關標籤/搜索