MMM高可用mysql方案

來源:互聯網
上載者:User

標籤: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有多種應用架構,最簡單的是兩個節點的運行環境。如:

在通過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節點,即可實現雙主多從節點應用架構。如:

雙主多從節點的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 reader IP 應用程式配置中的讀查詢VIP,每個資料庫節點一個讀VIP,可以通過LVS,HAProxy等負載平衡軟體對讀VIP做負載平衡
192.168.88.32 reader IP
192.168.88.33 reader IP
192.168.88.34 reader IP

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應用架構

#下載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檔案。

MMM高可用mysql方案

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.