MySQL MMM 部署配置

jopen 10年前發布 | 33K 次閱讀 MySQL 數據庫服務器

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模式的時候才允許更改!

 

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!