使用keepalived實現mysql主從復制的自動切換


最近測試了一下mysql+keepalived實現主從自動切換,主從都需要安裝keepalived,使用vip漂移實現主從自動切換,這里主要記錄的是keepalived的文件配置。

這里mysql搭建的是雙主。

 

環境:

主:192.168.184.128

從:192.168.184.133

vip:192.168.184.132

兩台服務器配置的均是BACKUP,主機優先級是100,從機優先級是90.均為非搶占模式nopreempt(只有BACKUP才可以設置為nopreempt),設置非搶占模式后,在原主機恢復並正常啟動keepalived后,不會自動切回,若想切回master,只需去掉該節點的nopreempt選項並且將priority改的比其他節點大,然后重新加載配置文件即可(等MASTER切過來之后再將配置文件改回去再reload一下)。

主從配置文件除了優先級priority和virtual_server中的real_server不一樣外,其他均一樣。

notify_master 是切換為master時執行的腳本,主要用於判斷主從是否已同步,並記錄下主從切換時的日志位置。
notify_backup 是切換為backup時執行的腳本,主要是修改一些使用於從庫的參數。
nofify_stop   是keepalived服務停掉后執行的腳本,主要是配置一些參數,並判斷是否存在寫操作。
notify_down /data/mysql/bin/MySQL.sh部分是在mysql 3306端口不通時執行的操作,腳本內容是:
#! /bin/sh
pkill keepalived

keepalived停掉后就會發生主從切換。

 

主機keepalived.conf
global_defs {
   notification_email{
   XXXX
}
   notification_email_from XXX
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id KeepAlive_Mysql
}
vrrp_instance VI_1 {
    state BACKUP
    nopreempt
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    notify_master /home/sh/master.sh
    notify_backup /home/sh/backup.sh
    nofify_stop  /home/sh/stop.sh
    smtp_alert
    virtual_ipaddress {
       192.168.184.132
    }
}
virtual_server 192.168.184.132 3306 {
      delay_loop 2
      lb_algo wrr
      lb_kind DR
      persistence_timeout 60
      protocol TCP
      real_server 192.168.184.133 3306 {
      weight 3
      notify_down /data/mysql/bin/MySQL.sh
      TCP_CHECK {
      connect_timeout 10
      nb_get_retry 3
      delay_before_retry 3
      connect_port 3306
      }
      }
}

 

 從機keepalived.conf

global_defs {
   notification_email{
   XXXX
}
   notification_email_from XXXX
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id KeepAlive_Mysql
}
vrrp_instance VI_1 {
    state BACKUP
    nopreempt
    interface eth0
    virtual_router_id 51
    priority 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    notify_master /home/sh/master.sh
    notify_backup /home/sh/backup.sh
    nofify_stop  /home/sh/stop.sh
    smtp_alert
    virtual_ipaddress {
       192.168.184.132
    }
}
virtual_server 192.168.184.132 3306 {
      delay_loop 2
      lb_algo wrr
      lb_kind DR
      persistence_timeout 60
      protocol TCP
      real_server 192.168.184.128 3306 {
      weight 3
      notify_down /data/mysql/bin/MySQL.sh
      TCP_CHECK {
      connect_timeout 10
      nb_get_retry 3
      delay_before_retry 3
      connect_port 3306
      }
      }
}

 

關於keepalived相關參數的說明可參考:

http://outofmemory.cn/wiki/keepalived-configuration

http://www.keepalived.org/documentation.html


免責聲明!

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



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