標籤:des blog http io os 使用 ar for 檔案
1 MMM高可用mysql方案
1.1 方案簡介
MMM即Master-Master Replication Manager for MySQL(mysql主主複製管理器)關於mysql主主複製配置的監控、容錯移轉和管理的一套可伸縮的指令碼套件(在任何時候只有一個節點可以被寫入),這個套件也能對居於標準的主從配置的任意數量的從伺服器進行讀負載平衡,所以你可以用它來在一組居於複製的伺服器啟動虛擬ip,除此之外,它還有實現資料備份、節點之間重新同步功能的指令碼。MySQL本身沒有提供replication failover的解決方案,通過MMM方案能實現伺服器的容錯移轉,從而實現mysql的高可用。MMM不僅能提供浮動IP的功能,更可貴的是如果當前的主伺服器掛掉後,會將你後端的從伺服器自動轉向新的主伺服器進行同步複製,不用手工更改同步配置。這個方案是目前比較成熟的解決方案。
1.2 方案優缺點
優點:安全性、穩定性高,可擴充性好,高可用,當主伺服器掛掉以後,另一個主立即接管,其他的從伺服器能自動切換,不用人工幹預。
缺點:至少三個節點,對主機的數量有要求,需要實現讀寫分離,對程式來說是個挑戰。
1.3 方案架構圖
1.4 適用情境
MMM的適用情境為資料庫訪問量大,業務增長快,並且能實現讀寫分離的情境。
1.5 方案實戰
1.5.1 實戰環境介紹
實戰環境伺服器列表:
伺服器 |
主機名稱 |
ip地址 |
Serverid |
系統 |
Mysql |
Monitor |
Mon |
10.1.1.111 |
-- |
Centos 5.5 64bit |
-- |
Master1 |
db1 |
10.1.1.113 |
1 |
Centos 5.5 64bit |
5.1.63 |
Master2 |
db2 |
10.1.1.75 |
2 |
Centos 5.5 64bit |
5.1.63 |
Slave1 |
db3 |
10.1.1.108 |
3 |
Centos 5.5 64bit |
5.1.63 |
實戰環境虛擬IP列表:
VIP |
Role |
description |
10.1.1.176 |
Read |
應用配置的讀取IP,也可以在前端加lvs等,做負載平衡 。三台資料庫每台一個浮動VIP |
10.1.1.177 |
Read |
10.1.1.178 |
Read |
10.1.1.179 |
Write |
應用配置的寫入的VIP,單點寫入。 |
1.5.2 MMM的安裝
在安裝mmm之前要安裝epel包,因為Centos的預設源中沒有mmm的安裝包,Epel是企業版Linux附加軟體包(Extra Packages for Enterprise Linux)的縮寫,是一個由特別興趣小組建立、維護並管理的,針對紅帽企業版Linux(RHEL)及其衍生髮行版(比如CentOS、Scientific Linux)的一個高品質附加軟體包項目。
安裝epel:
wget ftp://ftp.sunet.se/pub/Linux/distributions/yellowdog/yum/6.2/extras/RPMS/epel-release-5-3.noarch.rpm
rpm -Uvh epel-release-5-3.noarch.rpm
安裝monitor的安裝:
yum -y install mysql-mmm*
各個DB上只需要安裝mysql-mmm-agent
yum -y install mysql-mmm-agent
1.5.3 MMM的配置
1.5.3.1 配置之前的準備
前提是要配置好master1和master2的主主同步,master1和slave1的主從同步,限於篇幅這裡我就不做介紹了。
在配置mmm之前首先要在mysql中建立除複製帳號之外的另外兩個帳號,首先來介紹monitor user帳號,這個帳號是monitor伺服器用來對mysql伺服器做健全狀態檢查的,其次就是agent user,這個帳號是mmm agent(mmm代理)用來變成唯讀模式和同步master等,下面是建立這兩個帳號的語句:
GRANT REPLICATION CLIENT ON *.* TO ‘mmm_monitor‘@‘10.1.1.%‘ IDENTIFIED BY ‘monitor_password‘;
GRANT SUPER, REPLICATION CLIENT, PROCESS ON *.* TO ‘mmm_agent‘@‘10.1.1.%‘ IDENTIFIED BY ‘agent_password‘;
flush privileges;
這兩個語句在每個mysql中都要執行一下。
1.5.3.2 Monitor伺服器的配置
MMM的設定檔在/etc/mysql-mmm目錄下,monitor需要配置的檔案有mmm_common.conf、mmm_mon.conf兩個檔案。mmm_common.conf檔案在mmm的各個節點都是一樣的,因此配置好以後copy到各個DB節點即可。
我mmm_common.conf的配置如下:
vim /etc/mysql-mmm/mmm_common.conf
active_master_role writer
<host default>
cluster_interface eth0
pid_path /var/run/mysql-mmm/mmm_agentd.pid
bin_path /usr/libexec/mysql-mmm/
replication_user replication
replication_password 123456
agent_user mmm_agent
agent_password agent_password
</host>
<host db1>
ip 10.1.1.113 #這個IP尤其注意是db1的IP
mode master
peer db2
</host>
<host db2>
ip 10.1.1.75 #這個IP尤其注意是db2的IP
mode master
peer db1
</host>
<host db3>
ip 10.1.1.108
mode slave
</host>
<role writer>
hosts db1, db2
ips 10.1.1.179
mode exclusive
</role>
<role reader>
hosts db1, db2, db3
ips 10.1.1.176, 10.1.1.177, 10.1.1.178
mode balanced
</role>
我的mmm_mon.conf配置如下:
vim /etc/mysql-mmm/mmm_mon.conf
include mmm_common.conf
<monitor>
ip 127.0.0.1
pid_path /var/run/mysql-mmm/mmm_mond.pid
bin_path /usr/libexec/mysql-mmm
status_path /var/lib/mysql-mmm/mmm_mond.status
ping_ips 10.1.1.1, 10.1.1.113, 10.1.1.75, 10.1.1.108
# ping_ips 監控了網關IP和其他的DB節點IP
auto_set_online 60
</monitor>
<host default>
monitor_user mmm_monitor
monitor_password monitor_password
</host>
debug 0
1.5.3.3 各個DB伺服器的配置
各個DB伺服器要配置的東西比較不多,主要有mmm_common.conf、mmm_agent.conf和/etc/default/mysql-mmm-agent檔案。
mmm_common.conf檔案的配置和前面monitor的一樣,直接copy過來即可使用
mmm_agent.conf的配置:
vim /etc/mysql-mmm/mmm_agent.conf
include mmm_common.conf
this db1
mysql-mmm-agent的配置:
vim /etc/default/mysql-mmm-agent
ENABLED=1
mmm_common.conf檔案的配置和前面monitor的一樣,直接copy過來即可使用
mmm_agent.conf的配置:
vim /etc/mysql-mmm/mmm_agent.conf
include mmm_common.conf
this db2
mysql-mmm-agent的配置:
vim /etc/default/mysql-mmm-agent
ENABLED=1
mmm_common.conf檔案的配置和前面monitor的一樣,直接copy過來即可使用
mmm_agent.conf的配置:
vim /etc/mysql-mmm/mmm_agent.conf
include mmm_common.conf
this db3
mysql-mmm-agent的配置:
vim /etc/default/mysql-mmm-agent
ENABLED=1
1.5.4 MMM的管理
1.5.4.1 MMM的啟動和停止
啟動mmm agent
/etc/init.d/mysql-mmm-agent start
將agent的啟動命令寫入到三個DB的rc.local檔案中
啟動mmm monitor
/etc/init.d/mysql-mmm-monitor start
將monitor的啟動命令寫入到monitor伺服器的rc.local檔案中
停止mmm agent
/etc/init.d/mysql-mmm-agent stop
停止mmm monitor
/etc/init.d/mysql-mmm-monitor stop
1.5.4.2 MMM的基本管理
查看叢集的狀態
mmm_control show
將db1設定成online狀態
mmm_control set_online db1
更多管理命令請使用mmm_control help查看,或者參考:
http://blog.chinaunix.net/uid-20639775-id-154606.html
1.5.5 MMM架構的測試
環境搭建好以後,就需要進行周密的測試,看是否實現了預期的功能:
- 停掉master1後在monitor端使用mmm_control show看是否能切換。看看slave1是否能正確切換同步。
- 啟動master1後在monitor端使用mmm_control show看是否能切換。
- 停掉master2後看看能否正確切換。
1.5.6 MMM架構的監控
為實現高可用,系統的各個層面都需要全面的監控起來,比如agent進程的監控,monitor進程的監控,mysql可用性的監控,資料庫同步的監控等,推薦使用nagios對以上資源進行監控,第一時間發現問題,第一時間處理。
mysql的MMM高可用方案