1. 程式人生 > >高可用MMM

高可用MMM

三m

什麽是MMM

MMMMaster-Master replication managerfor MySQL)是一套支持雙主故障切換和雙主日常管理的腳本程序。MMM使用Perl語言開發,主要用來監控和管理MySQL Master-Master(雙主)復制,雖然叫做雙主復制,但是業務上同一時刻只允許對一個主進行寫入,另一臺備選主上提供部分讀服務,以加速在主主切換時刻備選主的預熱,可以說MMM這套腳本程序一方面實現了故障切換的功能,另一方面其內部附加的工具腳本也可以實現多個slaveread負載均衡。

MMM提供了自動和手動兩種方式移除一組服務器中復制延遲較高的服務器的虛擬ip,同時它還可以備份數據,實現兩節點之間的數據同步等。由於

MMM無法完全的保證數據一致性,所以MMM適用於對數據的一致性要求不是很高,但是又想最大程度的保證業務可用性的場景。對於那些對數據的一致性要求很高的業務,非常不建議采用MMM這種高可用架構

MySQL-MMM優缺點

  1. 優點:高可用性,擴展性好,出現故障自動切換,對於主主同步,在同一時間只提供一臺數據庫寫操作。

  2. 缺點:Monitor節點是單點,可以結合Keepalived實現高可用

  3. 由於MMM無法完全的保證數據一致性,所以MMM適用於對數據的一致性要求不是很高,但是又想最大程度的保證業務可用性的場景。對於那些對數據的一致性要求很高的業務,非常不建議采用MMM這種高可用架構。

實現原理

兩臺master互為主從,一臺為只讀,做為備份,應急時可做為寫

master.其中mmm_mond進程定時心跳檢測,失敗則將write ip 浮動到另外一臺master

安裝mysql軟件

在每臺服務器上安裝mysql軟件,在每臺服務器上關閉selinux,關閉防火墻在配置文件my.cnf裏增加如下內容:

[mysqld]

datadir=/usr/local/mysql/data

socket=/var/lib/mysql/mysql.sock

user=mysql

#下面為新添加的內容

default-storage-engine = innodb

replicate-ignore-db = mysql

binlog-ignore-db= mysql

server-id = 1

log-bin=/usr/local/mysql/logs/mysql-bin.log

log_bin_index=/usr/local/mysql/logs/mysql-bin.log.index

relay_log=/usr/local/mysql/logs/mysql-bin.relay

relay_log_index=/usr/local/mysql/logs/mysql-bin.relay.index

expire_logs_days= 10

max_binlog_size = 100M

log_slave_updates

sync-binlog = 1

/etc/hosts裏配上所有主機信息

192.168.10.131 db1

192.168.10.132 db2

192.168.10.133 db3

192.168.10.134 db4

192.168.10.135 db5

配置主主復制

即兩個主masterdb1db2)互為主從,與主從類似,只是需要逆向配置一下。
a
、先查看db1db2 binlog日誌和pos
db1

db2

b、在db1執行:

mysql> GRANTREPLICATION SLAVE ON *.* TO [email protected]%‘ IDENTIFIED BY‘replication‘; mysql> flush privileges;

mysql>changemastertomaster_host=‘192.168.10.132‘,master_user=‘replication‘,master_password=‘replication‘,master_log_file=‘mysql-bin.000003‘,master_log_pos=120;

mysql> start slave;

#啟動同步

c、在db2執行:

mysql> GRANT REPLICATIONSLAVE ON *.* TO [email protected]%‘ IDENTIFIED BY ‘replication‘;mysql> flush privileges;

mysql>changemastertomaster_host=‘192.168.10.131‘,master_user=‘replication‘,master_password=‘replication‘,master_log_file=‘mysql-bin.000001‘,master_log_pos=120;

mysql> start slave;

#啟動同步

db3db4作為db1的從庫slave

db3db4上執行

mysql> change master tomaster_host=‘192.168.10.131‘,master_user=‘replication‘,master_password=‘replication‘,master_log_file=‘mysql-bin.000001‘,master_log_pos=120;

mysql> startslave;

#啟動同步

MYSQL-MMM的安裝

epel源安裝
CentOS
默認沒有 mysql-mmm 軟件包,官方推薦使用 epel 的網絡源,五臺都安裝epe

wgethttp://mirrors.hustunique.com/epel/6/x86_64/epel-release-6-8.noarch.rpm wgethttp://mirrors.hustunique.com/epel/RPM-GPG-KEY-EPEL-6

rpm --import RPM-GPG-KEY-EPEL-6

rpm -ivh epel-release-6-8.noarch.rpm

monitor節點安裝db5
db5上執行

yum -y install mysql-mmm-monitor

四臺db節點上安裝agent
db1db2 db3 db4上執行

mysql -uroot -p

mysql> GRANT REPLICATION CLIENT ON *.* [email protected]%‘ IDENTIFIED BY ‘monitor‘; mysql> GRANTSUPER,REPLICATION CLIENT, PROCESS ON *.* TO [email protected]%‘IDENTIFIED BY‘agent‘;

db1上修改mmm_common.conf文件(5臺相同)

vi /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_userreplication

replication_passwordreplication

agent_user mmm_agent

agent_password agent

</host>

<host db1>

ip 192.168.10.131

modemaster

peerdb2

</host>

<host db2>

ip 192.168.10.132

modemaster peerdb1

</host>

<host db3>

ip 192.168.10.133

modeslave

</host>

<host db4>

Ip 192.168.10.134

Modeslave

</host>

<role writer>

hosts db1, db2

ips 192.168.10.128

modeexclusive #只有一個虛擬IP可以寫

</role>

<role reader>

hosts db3, db4

ips 192.168.10.129,192.168.10.130

modebalanced #多個虛擬ip可以讀

</role>

傳到其它4個節點

scp [email protected]:/etc/mysql-mmm/

scp /etc/mysql-mmm/mmm_common.conf [email protected]:/etc/mysql-mmm/

scp /etc/mysql-mmm/mmm_common.conf [email protected]:/etc/mysql-mmm/

scp /etc/mysql-mmm/mmm_common.conf [email protected]:/etc/mysql-mmm/

scp命令,安裝一下包

yum install openssh-clients

修改四臺db代理端 mmm_agent.conf 文件
db1db2 db3 db4上修改

vi /etc/mysql-mmm/mmm_agent.conf

include mmm_common.conf

this db1 #分別修改為本機的主機名,即db1db2db3db4

修改管理端的mmm_mon.conf文件
db5上執行

vi /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.statusping_ips192.168.10.131,192.168.10.132,192.168.10.133,192.168.10.133,192.168.10.134#真實數據庫IP,來檢測網絡是否正常

auto_set_online 10 #恢復後自動設置在線的時間

</monitor>

<host default>

monitor_usermmm_monitor

monitor_passwordmonitor

</host>

debug 0

啟動MYSQL-MMM

db代理端啟動db1 db2 db3 db4

[[email protected] ~]#/etc/init.d/mysql-mmm-agent start

[[email protected] ~]# chkconfigmysql-mmm-agent on

monitor管理端啟動db5

[[email protected] ~]#/etc/init.d/mysql-mmm-monitor start

[[email protected] ~]# chkconfigmysql-mmm-monitor on

測試集群

1)查看集群狀態db5
mmm_control show

2)故障轉移
模擬停掉db1數據庫後
看它的狀態變了

本文出自 “13110271” 博客,請務必保留此出處http://13120271.blog.51cto.com/13110271/1950617

高可用MMM