MMM高可用mysql方案

MMM高可用mysql方案是一個通過Perl編寫的、基於MySQL主從複製的、成熟完善的MySQL高可用集羣解決方案,有一個管理端(monitor)和多個代理端(agent)構成。通過MMM可以實現監控和管理MySQL主主複製和服務狀態,同時也可以監控多個slave節點的複製以及運行狀態,並且可以做到任意節點發生故障時實現自動切換的功能。在整個集羣中,同一時刻只有一個master是可寫的。
MMM套件主要的功能是通過三個腳本來實現的:
1.mmm_mond
這是一個監控進程,運行在管理節點上,主要負責對所有數據庫的監控工作,同時決定和處理所有節點的角色切換。
2.mmm_agentd
這是一個代理進程,運行在每臺MySQL服務器上,主要完成監控的測試工作以及執行簡單的遠端服務設置。
3.mmm_control
這是一個簡單的管理腳本,用來查看和管理集羣運行狀態,同時管理mmm_mond進程

缺點:
MMM架構需要多個節點,多個ip,對服務器數量有要求;其次,MMM方案在讀、寫非常繁忙的業務系統下表現不是很穩定,可能會出現複製延時、切換失效等問題。因此,MMM方案並不太適應於數據安全性要求很高,並且讀、寫頻繁的環境中。

MMM有多種應用架構,最簡單的是兩個節點的運行環境。如下圖:
MMM高可用mysql方案

在通過MMMt套件實現的雙Master架構中,需要5個ip地址,兩個maser節點各有的一個固定不變的物理ip地址,另外還有兩個只讀ip和一個可寫ip,這三個虛擬ip不會固定在任何一個節點上,相反,她會在兩個master節點之間來回切換,如何切換取決於節點的可用性。
在正常情況下(系統、網絡正常,MySQL服務正常,主從複製正常,沒有複製延遲等),Master1有兩個虛擬IP(reader ip和wirter ip),Master2上有一個虛擬IP(reader ip),如果Master1發生故障,那麼所有的reader和writer虛擬IP都會被分配至Master2。
在雙Master節點的基礎上,增加多個slave節點,即可實現雙主多從節點應用架構。如下圖:
MMM高可用mysql方案
雙主多從節點的MySQL架構適合讀查詢量非常大的業務環境。此架構通過兩個Master實現MySQL寫操作的高可用,然後在Master後端又增加了多個Slave節點,所有的Slave節點只能進行讀查詢操作,而多個Slave節點之間可以通過LVS,HAProxy等負載均衡軟件實現MySQL讀操作的負載均衡。

此架構需要5臺獨立的服務器,其中一臺MMM管理節點,兩臺mysql的Master節點,還有兩臺mysql的slave節點。

雙主雙從集羣配置環境
主機名 物理IP 集羣角色 Server_id
Monitor 192.168.88.11 MMM管理器
Master1 192.168.88.20 主Master可讀、可寫 1
Master2 192.168.88.21 備Master可讀、可寫 2
Slave1 192.168.88.22 Salve節點只讀 3
Slave2 192.168.88.23 Salve節點只讀 4

雙主雙從應用架構讀、寫分離IP列表

虛擬IP地址 IP角色 功能描述
192.168.88.30 writer IP 應用程序配置中的寫入VIP,僅支持單點寫入
192.168.88.31 /192.168.88.32/192.168.88.33/192.168.88.34 reader IP 應用程序配置中的讀查詢VIP,每個數據庫節點一個讀VIP,可以通過LVS,HAProxy等負載均衡軟件對讀VIP做負載均衡

MMM的安裝與配置
1.MMM套件安裝
#安裝epel源https://fedoraproject.org/wiki/EPEL/zh-cn
rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
#在Monitor節點執行如下命令
yum -y install mysql-mmm*
#每個MySQL DB節點只要安裝mysql-mmm-agent即可
yum -y install mysql-mmm-agent
2.MMM集羣套件的配置
在進行MMM套件配置之前,需要配置好Master到Master2主主互爲同步,Master1到Slave1、Slave2主從同步。需要注意,在配置Slave1、Slave2和Master同步時,‘master_host’的地址要填Master1節點的物理ip,而不是虛擬ip。
由於MMM集羣套件對數據的讀、寫進行了嚴格控制,根據MMM的管理機制,需要首先在所有Mysql主機上設置read_only參數,也就是在/etc/my.cnf的mysqld配置段添加:
read_only = 1

在所有MySQL節點創建除複製賬號之外的另外兩個賬號,monitor user和monitor agent:

GRANT REPLICATION CLIENT ON . TO 'mmm_monitor'@'192.168.88.%' IDENTIFIED BY '123456';
GRANT SUPER,REPLICATION CLIENT,PROCESS ON . TO 'mmm_agent'@'192.168.88.%' IDENTIFIED BY '123456';

主要涉及4個配置文件:mmm_mon.conf、mmm_common.conf、mysql-mmm-agent和mmm_agent.conf。其中,mmm_mon.conf僅在MMM管理端配置,mmm_common.conf需要在所有MMM集羣節點進行配置,內容完全一樣,mmm_agent.conf也需要在所有Mysql節點進行配置。
(1)配置mmm_common.conf文件

active_master_role writer #當設置這個參數時,集羣中所有mysql節點都應該設置‘read_only=1’參數,這樣,MMM會根據每個節點的角色進行動態判斷,當MMM設置寫角色的時候,會自動在可寫節點執行‘set global read_only = 0’操作,也就是打開寫權限,其他只讀的角色保持‘read_only=1’的只讀權限,

<host default>
cluster_interface eth0 #配置的網絡接口,這裏不能指定爲子接口,如eth0:0
pid_path /run/mysql-mmm-agent.pid #設定PID文件位置
bin_path /usr/libexec/mysql-mmm/ #設定MMM可執行文件路徑
replication_user repl_user #設定複製的用戶名
replication_password 123456 #設定複製的密碼
agent_user mmm_agent #設定更改只讀操作的用戶
agent_password 123456 #設定更改操作用戶的密碼
</host>

<host db1> #設定db1的配置信息,db1會在mmm_agent.conf文件中定義
ip 192.168.88.20 #設定db1的物理ip地址
mode master #設置db1的角色爲Master
peer db2 #設置與db1對等的主機名,也就是db1和db2均爲Master角色
</host>

<host db2> #設定db2的配置信息,db2會在mmm_agent.conf文件中定義
ip 192.168.88.21 #設定db2的物理ip地址
mode master #設置db2的角色爲Master
peer db1 #設置與db2對等的主機名,也就是db1和db2均爲Master角色
</host>
<host db3> #設定db3的配置信息,db2會在mmm_agent.conf文件中定義
ip 192.168.88.22 #設定db3的物理ip地址
mode slave #設置db3的角色爲Slave
</host>
<host db4> #設定db4的配置信息,db2會在mmm_agent.conf文件中定義
ip 192.168.88.23 #設定db4的物理ip地址
mode slave #設置db4的角色爲Slave
</host>

<role writer> #設置可寫角色模式
hosts db1, db2 #設置可執行寫操作的主機
ips 192.168.100.250 #設置可寫的虛擬IP地址
mode exclusive #設置角色模式爲互斥,互斥角色只有一個ip並且同一時間只能分配給一個主機,一般writer角色是exclusive模式
</role>

<role reader> #設置可讀角色模式
hosts db1,db2,db3, db4 #設置可讀操作的主機
ips 192.168.88.31,192.168.88.32,192.168.88.33,192.168.88.34,#設置可讀的虛擬IP地址
mode balanced #設置角色的模式爲負載均衡,在負載均衡角色中,可以有多個IP,這些IP被均衡動態地分配給多臺MySQL主機,一般reader角色是balanced模式
</role>

(2)配置mmm_agent.conf文件

include mmm_common.conf
this db1 #對應的主機名,Master2對應的主機名爲db2

(3)配置mmm_mon.conf文件
include mmm_common.conf

<monitor>
ip 127.0.0.1 #爲了安全性,設置只在本機監聽,默認端口爲9988
pid_path /run/mysql-mmm-monitor.pid
bin_path /usr/libexec/mysql-mmm
status_path /var/lib/mysql-mmm/mmm_mond.status
ping_ips 192.168.88.1,192.168.88.20,192.168.88.21,192.168.88.22,192.168.88.23 #用於測試網絡可用性的ip地址列表,只要其中一個地址能ping通,就代表網絡正常,這裏不重要,寫入本機的IP地址
flap_duration 3600 #抖動的時間範圍,默認3600s
flap_count 3 #在抖動的時間範圍內,最大抖動次數
auto_set_online 0 #抖動的時間範圍過後,則設置自動上線

</monitor>

<host default>
monitor_user mmm_monitor #monitor user賬號
monitor_password 123456 #monitor user密碼
</host>
debug 0 #MMM管理端的運行模式,1爲debug模式,0爲正常模式

(4)配置mysql-mmm-agent文件
/etc/default/mysql-mmm-agent,它要在MMM集羣的所有Mysql節點設置,此文件內容只有一行:ENABLED=1

MMM集羣中所有配置文件的權限最好設置爲640,否則啓動MMM服務的時候可能出錯。

#在MMM集羣管理端啓動mysql-mmm-monitor服務
systemctl start mysql-mmm-monitor
#在每個agent端依次啓動agent服務
systemctl start mysql-mmm-agent

MMM基本維護:

查看運行狀態
一種是通過MMM集羣提供的mmm_control(僅在管理端存在)命令,另一種是查看MMM集羣的運行日誌信息,MMM集羣的運行日誌位於每個集羣節點的/var/log/mysql-mmm下。

mmm_control help #顯示幫助信息
ping #測試網絡運行狀態
show #顯示MMM集羣中所有節點的狀態
checks [<host>|all [<check|all>]] #顯示MMM集羣中指定節點的詳細狀態或
顯示所有節點的詳細運行狀態
set_online <host> #將一個MMM集羣節點設置爲online狀態
set_offline <host> #將一個MMM集羣節點設置爲offline狀態
mode #顯示MMM集羣當前的運行模式,有active、manual和
passive三種模式,默認是active模式
set_active #切換到active模式
set_manual #切換到set_manual模式
set_passive #切換到passive模式
move_role [--force] <role> <host> #在互斥模式下切換角色,例如將寫操作
從db1切換到db2
set_ip <ip> <host> #用來在被動模式下操作角色

MMM整合Amoeba應用架構
MMM高可用mysql方案

#下載amoeba-mysql-3.0.5-RC-distribution.zip
wget http://jaist.dl.sourceforge.net/project/amoeba/Amoeba%20for%20mysql/3.x/amoeba-mysql-3.0.5-RC-distribution.zip
#下載jdk,配置環境變量
vim /etc/profile
export JAVA_HOME=/usr/local/jdk1.8.0_171
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt,jar:$JAVA_HOME/lib/dr.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH

Amoeba配置文件比較多,但是僅僅使用讀、寫分離功能,只需配置dbServers.xml和amoeba.xml,如果需要配置IP訪問控制,還需要修改access_list.conf文件。

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