一、定義
通常說的「雙機熱備」是指兩台機器都在運行,但並不是兩台機器都同時在提供服務。當提供服務的一台出現故障的時候,另外一台會馬上自動接管並且提供服務,而且切換的時間非常短。
二、原理
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無法自動切換回來。