mysql雙主熱備宕機自動切換


一、定義

通常說的「雙機熱備」是指兩台機器都在運行,但並不是兩台機器都同時在提供服務。當提供服務的一台出現故障的時候,另外一台會馬上自動接管並且提供服務,而且切換的時間非常短。

二、原理

Keepalived的工作原理是VRRP(Virtual Router Redundancy Protocol)虛擬路由冗余協議。在VRRP中有兩組重要的概念:VRRP路由器和虛擬路由器,主控路由器和備份路由器。
VRRP路由器是指運行VRRP的路由器,是物理實體,虛擬路由器是指VRRP協議創建的,是邏輯概念。一組VRRP路由器協同工作,共同構成一台虛擬路由器。 Vrrp中存在着一種選舉機制,用以選出提供服務的路由即主控路由,其他的則成了備份路由。當主控路由失效后,備份路由中會重新選舉出一個主控路由,來繼續工作,來保障不間斷服務。

三、架構環境

MASTER:192.168.1.40
BACKUP:192.168.1.41
VIP:192.168.1.44 (虛擬IP)

四、配置

1、配置兩台Mysql主主同步

編輯my.cnf

# vi /etc/my.cnf
[mysqld]
server-id       = 1                            #backup這台設置為2
log-bin=mysql-bin
binlog-ignore-db = mysql,information_schema    #忽略寫入binglog日志的庫
auto-increment-increment = 2                    #字段變化增量值
auto-increment-offset = 1                    #初始字段ID為1
slave-skip-errors = all                        #忽略所有復制產生的錯誤
# /etc/init.d/mysqld restart

查看下MASTER的binglog日志和pos值的位置

查看下BACKUP的binglog日志和pos值的位置

master配置如下:

mysql> GRANT  REPLICATION SLAVE ON *.* TO 'root'@'192.168.1.41' IDENTIFIED  BY '123456';
mysql> flush  privileges;
mysql> change  master to
    -> master_host='192.168.1.41',
    -> master_user='root',
    -> master_password='123456',
    -> master_log_file='mysql-bin.000002',
    -> master_log_pos=120;
mysql> start  slave;

backup配置如下:

mysql> GRANT  REPLICATION SLAVE ON *.* TO 'root'@'192.168.1.40' IDENTIFIED  BY '123456';
mysql> flush  privileges;
mysql>  change  master to
    -> master_host='192.168.1.40',
    -> master_user='root',
    -> master_password='123456',
    ->  master_log_file='mysql-bin.000002',
    -> master_log_pos=120;
mysql>  start  slave;

主主同步配置完成,查看同步狀態Slave_IO和Slave_SQL是YES說明主主同步成功。兩邊都要YES。如果一邊yes,另外一邊識別不到pos就無法同步

master插入數據如下:

在backup查看是否同步:

可以看到已經成功同步過去,同樣在backup插入到user表數據,一樣同步過去,雙主就做成功了。
主主配置常見報錯:
注:如果其中一邊提示連接中,關閉防火牆即,或者對應IP不對,請注意查看salve的IP。其中一個顯示NO,查底下報錯,顯示por值匹配不到的,則說明你其中一邊的bin-log不一致,關閉salve,重新配置即可。

2、配置keepalived實現熱備

keepalived編譯配置文件

# vi /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   notification_email {
   11111111@qq.com
        }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id MYSQL_HA
}
! Configuration File for keepalived

global_defs {
   notification_email {
   11111111@qq.com
        }
    advert_int 1
    nopreempt
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.1.44
    }
}

}

virtual_server 192.168.1.44 3306 {
 delay_loop 2
 #lb_algo rr              #LVS算法,用不到,我們就關閉了
 #lb_kind DR              #LVS模式,如果不關閉,備用服務器不能通過VIP連接主MySQL
 persistence_timeout 50  #同一IP的連接60秒內被分配到同一台真實服務器
 protocol TCP
 real_server 192.168.0.40 3306 {   #檢測本地mysql,backup也要寫檢測本地mysql
 persistence_timeout 50  #同一IP的連接60秒內被分配到同一台真實服務器
 protocol TCP
 real_server 192.168.0.40 3306 {   #檢測本地mysql,backup也要寫檢測本地mysql
 #lb_kind DR              #LVS模式,如果不關閉,備用服務器不能通過VIP連接主MySQL
 persistence_timeout 50  #同一IP的連接60秒內被分配到同一台真實服務器
 protocol TCP
 real_server 192.168.0.40 3306 {   #檢測本地mysql,backup也要寫檢測本地mysql
 weight 3
notify_down /etc/keepalived/mysql.sh    #當mysq服down時,執行此腳本,殺死keepalived實現切換       
 TCP_CHECK {
 connect_timeout 3   
  #連接超時
 nb_get_retry 3       #重試次數
 delay_before_retry 3 #重試間隔時間
  }
}

采用keepalived作為高可用方案時,兩個節點最好都設置成BACKUP模式,避免因為意外情況下(比如腦裂)相互搶占導致往兩個節點寫入相同數據而引發沖突;
backup服務器只修改priority為90、nopreempt不設置、real_server設置本地IP。

五、測試高可用性

1、通過Mysql客戶端通過VIP連接,看是否連接成功。
2、停止master這台mysql服務,是否能正常切換過去,可通過ip addr命令來查看VIP在哪台服務器上。

當master數據庫宕的時候,VIP就會自動切換到另一台上,實現主主自動切換。遠程連接數據庫的虛擬IP是可以連接的,實現應用切換的效率。部署應用的時候配置VIP即可共享數據庫資源。

3.注意:當宕庫恢復的時候,要啟動keepalived,否則VIP無法自動切換回來。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM