[MySQL] 高可用架構MMM簡單介紹


一、來源及原理:

   眾所周知,MySQL自身提供了AB復制(主從復制),然后可以很輕松實現master-master雙向復制,同時再為其中一個Master節點搭建一個Slave庫。

這樣就實現了MySQL-MMM架構的基礎:master1和master2之間雙向復制,同時Master1和Slave1之間是主從復制。這樣整個體系中存在兩個Master,正常情

況下只有一個master對外提供寫服務。如果對外提供服務的master意外宕機了,這是MySQL本身並不具備failover切換的能力,盡管集群中仍然有一個正常的master節點,

但應用仍不可用。mysql-mmm就是為了解決這個問題誕生的。

  MySQL-MMM是Master-Master Replication Manager for MySQL(mysql主主復制管理器)的簡稱,是Google的開源項目(Perl腳本),主要用來監控mysql主主復制並做失敗轉移。

  其原理是將真實數據庫節點的IP(RIP)映射為虛擬IP(VIP)集,在這個虛擬的IP集中,有一個專用於write的IP,多個用於read的IP,這個用於Write的VIP映射着

數據庫集群中的兩台master的真實IP(RIP),以此來實現Failover的切換,其他read的VIP可以用來均衡讀(balance)。

 

其結構圖如下:

 

 

二、優缺點:

  

優點:

1、自動的主主Failover切換 2、多個Slave讀的負載均衡。

缺點:

1、無法完全保證數據的一致性(在db1宕機過程中,一旦db2落后於db1,這時發生切換,db2變成了可寫狀態,數據的一致性就無法保證)

2、無論何時,只有一個數據庫可寫;db1宕機后,write VIP會指向db2,當db1恢復后,db1不會自動變成可寫主,需要手動move_role 或者db2宕機。

所以read host要包括db1,不然容易造成浪費;

3、由於是使用虛擬IP浮動技術,類似Keepalived,故RIP(真實IP)要和VIP(虛擬IP)在同一網段;如果是在不同網段也可以,需要用到虛擬路由技術。

但是絕對要在同一個IDC機房,不可跨IDC機房組建集群。

LVS-DR VIP和RIP不同網段的配置方法 :http://blog.itpub.net/124805/viewspace-1047686/http://zh.linuxvirtualserver.org/node/28

4、monitor單點問題,或許可以用keepalived來解決。

 

三、MySQL-MMM Monitor:

 

1、6種狀態

1)ONLINE 正常運行狀態

2)ADMIN_OFFLINE 人工設置為離線狀態

3)HARD_OFFLINE 離線狀態(ping失敗/mysql連接失敗)

4)AWAITING_RECOVERY 主機將恢復在線

5)REPLICATION_DELAY 復制延時大(rep_backlog檢測失敗)

6)REPLICATION_FAIL 復制線程沒有運行(rep_threads檢測失敗),復制中斷(sql_thread,io_thread)會導致replication_fail狀態

 

  只要主機處在ONLINE才能獲得角色。當從ONLINE狀態切換到其他狀態時,角色將移除。

  當主機處在REPLICATION_DELAY或REPLICATION_FAIL狀態,一旦恢復,將切換到ONLINE狀態。除非抖動不穩定。

  主機在HARD_OFFLINE狀態,如果所有的問題都解決了,那么將會切換到AWAITING_RECOVERY狀態。如果它故障時間小於60s,並且它沒有重啟或者auto_set_online>0,

那么將會被自動切換到ONLINE狀態,除非抖動不穩定。

  活動的主服務器復制延時或復制失敗將不被視為一個問題。因此活動的主服務器狀態不會被置於REPLICATION_DELAY或REPLICATION_FAIL。

  在節點被切換到ONLINE狀態的60s內,如果復制延時或復制失敗將會被忽略(默認時間為master-connect-retry值)。

  如果rep_backlog和rep_threads都檢測失敗,將會切換到REPLICATION_FAIL狀態。

 

2、mysql-mmm的主要功能通過以下三個腳本來實現:

mmm_mond:監控進程,監控所有服務器,決定節點角色。

mmm_agentd:代理進程,運行在每台MySQL服務器上,為監控節點聽簡單的遠程服務。

mmm_control:為mmm_mond 提供管理命令

 

3、角色

exclusive角色:互斥角色只有一個ip,並且同一時間只能分配給一個主機。可以指定一個首選主機(preferred 存疑??),如果這個主機是ONLINE狀態

,那么角色將被賦予到這個主機。注意:不能移動被分配到首選主機的角色,因為他們將立刻再次被移動回到它。

balanced角色:負載均衡角色可以有多個ip。沒有一個主機可以比其他主機多出兩個角色。

 

4、檢測

mmm_mond對每個主機檢測4項決定是否OK

1)ping 主機是否存活

2)mysql mysqld進程是否存活

3)rep_threads 復制線程是否運行

4)rep_backlog 延時少,復制積壓的日志很少

 

抖動:

mmm_mond 支持抖動檢測。如果一個主機頻繁從ONLINE切換到HARD_OFFLINE或者REPLICATION_FAIL或者REPLICATION_DELAY狀態,每次切換到ONLINE狀態(auto_set_online或者

down的時間小於60s),將會導致角色的切換非常頻繁。為了避免這種情況mmm_mond內建了flap檢測,可以通過配置文件配置。如果一個主機在flap_duration時間內宕掉了

flap_count次,就認為主機處理flap狀態,就不會自動被設置為ONLINE狀態,將一直處於AWAITING_RECOVERY狀態除非手動設置online(mmm_control set online host)。

如果auto_set_online>0,處於flapping的主機在flap_duration時間后將自動設置為ONLINE狀態

 

5、模式

active mode:Monitor將會自動的把角色從失敗的主機上移除,並切換到其他主機上。

manual mode:Moniter會自動把負載均衡的角色分配給對應主機,但是不會自動的把角色從失敗的主機上移除。可以通過move_role來手工移除。

wait mode:類似manual模式,但是當兩個master都是online狀態或者超過了wait_for_other_master的時間,將被切換為ACTIVE模式。

passive mode:在此模式下,monitor不會改變角色,不更新狀態文件和發送任何信息給mmm agents。在此模式下可以使用set_ip來改變roles,但是這些改變在monitor切換到

ACTIVE或者MANUAL模式(set_active or set_manual)前都不會生效。在啟動時檢測到角色發生沖突將會進入被動模式。

 

四、MySQL-MMM control:

 

通過mmm_control 命令來控制monitor守護進程,如果有多個集群,則需指定想要控制的集群名稱。

ping         檢測monitor是否存活

show         查看當前集群服務狀況

checks [host|all]  查看指定節點的狀態

set_online host   把節點的狀態從awaiting_recovery或者admin_offline恢復到online

set_offline host   為了維護一個節點,手動的將其設置為admin_offline狀態,這個節點上的所有角色都會被移除,並且停止mysql復制

mode         查看當前模式

set_active     切換monitor到active模式

set_manual     切換monitor到manual模式

set_passive    切換monitor到passive模式

move_role role host  在集群節點間切換exclusive角色。在passive模式下無效。

move_role --force role host  可以將active_master_role切換到處在REPLICATION_FAIL或REPLICATION_DELAY狀態的主機上。在passive模式下無效。

set_ip ip host  可以在passive模式下,維護角色。當monitor切換到ACTIVE或MANUAL模式下后才生效。

 

五、MySQL-MMM 具體搭建步驟:

官方文檔看這里:http://mysql-mmm.org/mmm2:guide 

自己搭建教程看這里:暫無

 

六、報錯及其他:

1、linux shell 下用ip add 看虛擬ip綁定情況

2、agent端通過一系列perl腳本完成一些操作(/usr/libexec/mysql-mmm/agent/),比如check_ip,configuer_ip

 

 

 

 


免責聲明!

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



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