MySQL MMM 部署配置
MMM簡介
MMM即Master-Master Replication Manager for MySQL(mysql主主復制管理器)關于mysql主主復制配置的監控、故障轉移和管理的一套可伸縮的腳本套件(在任何時候只有一個節點可以被寫入),這個套件也能對居于標準的主從配置的任意數量的從服務器進行讀負載均衡,所以你可以用它來在一組居于復制的服務器啟動虛擬ip,除此之外,它還有實現數據備份、節點之間重新同步功能的腳本。
MySQL本身沒有提供replication failover的解決方案,通過MMM方案能實現服務器的故障轉移,從而實現mysql的高可用。
MMM項目來自 Google:http://code.google.com/p/mysql-master-master
官方網站為:http://mysql-mmm.org
Mmm主要功能由下面三個腳本提供
l mmm_mond 負責所有的監控工作的監控守護進程,決定節點的移除等等
l mmm_agentd 運行在mysql服務器上的代理守護進程,通過簡單遠程服務集提供給監控節點
l mmm_control 通過命令行管理mmm_mond進程
一、實驗準備
系統: CentOS6.5
實驗主機:
function |
ip |
hostname |
monitoring host | 192.168.174.136 | monitor |
master1 |
192.168.174.134 | db1 |
master2 | 192.168.174.135 | db2 |
二、搭建MM,雙MYSQL互為主從模式Replication
1.db1 db2安裝mysql數據庫并修改配置文件
# yum install mysql mysql-server -y # vim /etc/my.cn
db1配置文件如下
[mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock log-error=/var/lib/mysql/mysql.err log = /var/lib/mysql/query_log.log log-slow-queries = /var/lib/mysql/slow_query_log.log user=mysql default-character-set=utf8 init_connect='SET NAMES utf8' # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0 log-bin=mysql-bin #開啟binlog日志用于主從數據復制 server-id=1 binlog-do-db=iccstm1 #你要用于主從復制的數據庫名稱,多個用逗號隔開 binlog-ignore-db=mysql #數據庫名稱 replicate-do-db=iccstm1 replicate-ignore-db=mysql log-slave-updates #此數據庫宕機,備用數據庫接管 slave-skip-errors=all #跳過錯誤,繼續執行復制 sync_binlog=1 auto_increment_increment=2 auto_increment_offset=1 #這樣A的auto_increment字段産生的數值是:1, 3, 5, 7, …等奇數ID [client] default-character-set=utf8 [mysqld_safe] log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid
db2配置文件如下(基本一致,server-id=2 這個不可同db1一致)
[mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock log-error=/var/lib/mysql/mysql.err log = /var/lib/mysql/query_log.log log-slow-queries = /var/lib/mysql/slow_query_log.log user=mysql default-character-set=utf8 init_connect='SET NAMES utf8' # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0 log-bin=mysql-bin #開啟binlog日志用于主從數據復制 server-id=2 binlog-do-db=iccstm1 #你要用于主從復制的數據庫名稱,多個用逗號隔開 binlog-ignore-db=mysql #數據庫名稱 replicate-do-db=iccstm1 replicate-ignore-db=mysql log-slave-updates #此數據庫宕機,備用數據庫接管 slave-skip-errors=all #跳過錯誤,繼續執行復制 sync_binlog=1 auto_increment_increment=2 auto_increment_offset=1 #這樣A的auto_increment字段産生的數值是:1, 3, 5, 7, …等奇數ID [client] default-character-set=utf8 [mysqld_safe] log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid
2.在MYSQL內部啟用同步
取得master值
db1:
mysql> show master status\G *************************** 1. row *************************** File: mysql-bin.000005 Position: 526 Binlog_Do_DB: iccstm1 Binlog_Ignore_DB: mysql 1 row in set (0.00 sec)
db2:
mysql> show master status\G *************************** 1. row *************************** File: mysql-bin.000005 Position: 526 Binlog_Do_DB: iccstm1 Binlog_Ignore_DB: mysql 1 row in set (0.00 sec)
master_log_file對應File,master_log_pos對應Position
db1 db2互相提升訪問權限
Mysql> grant all privileges on *.* to 'root'@'%' identified by '1' with grant option;
db2:
mysql> grant replication slave on *.* to 'replication'@'%' identified by '1'; mysql> flush privileges;
db1:
mysql> change master to master_host='192.168.174.135', master_user='replication', master_password='1',master_log_file='mysql-bin.000005',master_log_pos=526; mysql> grant replication slave on *.* to 'replication'@'%' identified by '1'; mysql> flush privileges;
db2:
mysql> change master to master_host='192.168.174.134', master_user='replication', master_password='1',master_log_file='mysql-bin.000005',master_log_pos=526;
db1,db2分別查看服務器主從狀態:
mysql>start slave; mysql>show slave status\G
如果有以下兩個結果
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
主從成功。
可以建立
mysql> create database iccstm1; mysql> use iccstm1; mysql> create table testTab(NAME set char(2));
在另外一臺主機查看。
三、安裝配置MySQL-MMM
1.在monitor、db1、db2上安裝mmm
,并配置:mmm_common.conf、mmm_agent.conf以及mmm_mon.conf文件
首先安裝epel源
適合各個操作系統的epel源列表:http://mirrors.fedoraproject.org/publiclist/EPEL/
wget http://mirrors.yun-idc.com/epel/6/x86_64/epel-release-6-8.noarch.rpm rpm -Uvh epel-release-6-8.noarch.rpm yum -y install mysql-mmm*
配置mmm代理和監控賬號的權限
在db1和db2上分別執行:
mysql> GRANT REPLICATION CLIENT ON *.* TO 'mmm_monitor'@'192.168.174.%' IDENTIFIED BY '1'; mysql> GRANT SUPER, REPLICATION CLIENT, PROCESS ON *.* TO 'mmm_agent'@'192.168.174.%' IDENTIFIED BY '1'; mysql> flush privileges;
配置mysql-mmm
所有的配置選項都集合在了一個叫/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 #mmm-agent用戶名 agent_password 1 #mmm-agent用戶密碼 </host> <host db1> ip 192.168.172.134 #db1的ip mode master peer db2 </host> <host db2> ip 192.168.172.135 #db2的ip mode master peer db1 </host> <role writer> hosts db1, db2 ips 192.168.172.152 #設置寫如的虛擬IP mode exclusive </role> <role reader> hosts db1, db2 ips 192.168.1.153, 192.168.1.154 #設置讀取的虛擬IP mode balanced </role>
在數據庫主機上我們需要編輯/etc/mysql-mmm/mmm_agent.conf文件,根據其他主機的不同更改db1的值(db2就將db1更改成db2):
include mmm_common.conf this db1
在監控主機上我們需要編輯/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 192.168.1.134,192.168.1.135 #監控服務器ip auto_set_online 60 # The kill_host_bin does not exist by default, though the monitor will # throw a warning about it missing. See the section 5.10 "Kill Host # Functionality" in the PDF documentation. # # kill_host_bin /usr/libexec/mysql-mmm/monitor/kill_host # </monitor> <host default> monitor_user mmm_monitor #mmm_monitor用戶名 monitor_password 1 #mmm_monitor密碼 </host> debug 0
啟動MMM
啟動代理:
(在數據庫服務器上db1、db2)編輯/etc/default/mysql-mmm-agent來開啟:
ENABLED=1
然后啟動它:
/etc/init.d/mysql-mmm-agent start
啟動監控(在監控機上):
/etc/init.d/mysql-mmm-monitor start
利用mmm_control監控mysql服務器狀態:
[root@136 ~]# mmm_control show db1(192.168.174.134) master/ONLINE. Roles: reader(192.168.174.153) db2(192.168.174.135) master/ONLINE. Roles: reader(192.168.174.154), writer(192.168.174.152)
測試看兩個mysql服務器能否實現故障自動切換
停掉作為寫的db1上的mysql,查看寫的服務器會不會自動轉移到db2上去
mmm_control命令簡介
[root@server3 mysql-mmm]# mmm_control help Valid commands are: help - show this message #查看幫助信息 ping - ping monitor #ping監控 show - show status #查看狀態信息 checks [<host>|all [<check>|all]] - show checks status #顯示檢查狀態,包括(ping、mysql、rep_threads、rep_backlog) set_online <host> - set host <host> online #設置某host為online狀態 set_offline <host> - set host <host> offline #設置某host為offline狀態 mode - print current mode. #打印當前的模式,是ACTIVE、MANUAL、PASSIVE? #默認ACTIVE模式 set_active - switch into active mode. #更改為active模式 set_manual - switch into manual mode. #更改為manual模式 set_passive - switch into passive mode. #更改為passive模式 move_role [--force] <role> <host> - move exclusive role <role> to host <host> #更改host的模式,比如更改處于slave的mysql數據庫角色為write (Only use --force if you know what you are doing!) set_ip <ip> <host> - set role with ip <ip> to host <host> #為host設置ip,只有passive模式的時候才允許更改!