Mysql 雙主+keepalived 實現高可用及讀寫分離(一)

 

 

目的:
解決 mysql數據庫Master-Slave 單點故障問題。
 
實現方式:
1. Master-Master Replication 實現數據同步。
2.通過keepalived虛擬IP 從網絡層實現單點故障時IP自動切換,從而實現高可用。
3.通過keepalived配置實現read讀指向Slave節點,實現讀寫分離。
 
缺點:根據線上實際應用情況,只考慮單點網絡故障及機器設備故障時虛擬ip自動切換(只切換一次)。不考慮mysql服務異常等情況,數據庫異常可通過nagios等監控,防止多次來回切換,造成數據混亂!且故障節點恢復時,要人工操作及注意步驟。
 
 
Master-Master
 
1、使用兩個MySQL數據庫db01,db02,互爲MasterSlave,即:
一邊db01作爲db02master,一旦有數據寫向db01時,db02定時從db01更新
另一邊db02也作爲db01master,一旦有數據寫向db02時,db01也定時從db02獲得更新
(這不會導致循環,MySQL Slave默認不會記錄Master同步過來的變化)
2、但從AppServer的角度來說,同時只有一個結點db01扮演Master,另外一個結點db02扮演Slave,不能同時兩個結點扮演Master。即AppSever總是把write操作分配某個數據庫(db01),除非db01 failed,被切換。
3、如果扮演Slave的數據庫結點db02 Failed了:
a)此時appServer要能夠把所有的read,write分配給db01read操作不再指向db02
b)一旦db02恢復過來後,繼續充當Slave角色,並告訴AppServer可以將read分配給它了.
4、如果扮演Master的數據庫結點db01 Failed
a)此時appServer要能夠把所有的寫操作從db01切換分配給db02,也就是切換Masterdb02充當
b)db01恢復過來後,充當Slave的角色,Masterdb02繼續扮演。
 
具體配置如下:
測試環境簡介:
1.10.10.10.40   mysql+keepalive
2.10.10.10.41   mysql+keepalive
3.寫入VIP10.10.10.2140主,41
4.讀取VIP10.10.10.44(41主,40)
 
 

 
 
1.mysql雙主配置,此處簡略,可參考網上主主同步配置。
 
Mysql配置文件重點簡略如下:
log-bin=mysql-bin
binlog_format=mixed
server-id= 3(另一臺的ID2
 
2.keepalived 配置方法
第一臺(40):
global_defs {
     notification_email {
     ******@126.com
     }
     notification_email_from*****@126.com
     smtp_server 127.0.0.1
     smtp_connect_timeout 30
     router_id MySQL-ha
     }
 
vrrp_instance VI_1 {
     state BACKUP   #兩臺配置此處均是BACKUP
     interface p4p1 #注意網卡接口
     virtual_router_id 51
     priority 180   #優先級,另一臺改爲90
     advert_int 1
     nopreempt     #不主動搶佔資源,只在優先級高的機器上設置即可,優先級低的機器不設置
     authentication {
       auth_type PASS
       auth_pass 1111
     }
     virtual_ipaddress {
        10.10.10.21     #此虛擬ip爲寫
     }
     }
 
vrrp_instance VI_2 {
     state BACKUP   #另一臺配置爲MASTER
     interface p4p1 #注意網卡接口
     virtual_router_id 44 #注意id和上面的不同
     priority 90 #優先級,另一臺改爲180
     advert_int 1
     authentication {
       auth_type PASS
       auth_pass 1111
     }
     virtual_ipaddress {
        10.10.10.44      #此虛擬ip爲讀
     }
   }
 
第二臺(41
global_defs {
     notification_email {
     *********@126.com
     }
     notification_email_from ********@126.com
     smtp_server 127.0.0.1
     smtp_connect_timeout 30
     router_id MySQL-ha
     }
 
vrrp_instance VI_1 {
     state BACKUP   #兩臺配置此處均是BACKUP
     interface p4p1 #注意網卡接口
     virtual_router_id 51
     priority 90   #優先級,另一臺改爲180
     advert_int 1
     authentication {
     auth_type PASS
     auth_pass 1111
     }
     virtual_ipaddress {
     10.10.10.21
     }
     }
 
vrrp_instance VI_2 {
     state MASTER   #用於mysql
     interface p4p1 #注意網卡接口
     virtual_router_id 44
     priority 180 #優先級,另一臺改爲90
     advert_int 1
     authentication {
     auth_type PASS
     auth_pass 1111
     }
     virtual_ipaddress {
     10.10.10.44      #用於mysql
     }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章