MariaDB數據庫雙主N從複製高可用實現-MMM架構的實現

一.MMM概述

MMM(Master-Master replication manager for Mysql)是一套靈活的腳本程序,用來監控和故障切換,管理mysql Master-Master複製的配置 (同一時間只有一個節點是可寫的)。附帶的工具套件可以實現多個slaves的read負載均衡,因此你可以使用這個工具移除一組服務器中複製延遲較高的服務器的虛擬IP,它還可以備份數據,兩節點之間再同步等等。

MMM主要的功能通過下面三個腳本來實現:

mmm_mond

監控進程,負責所有的監控工作,決定和處理所有節點角色活動

mmm_agentd

運行在每個mysql服務器上的代理進程,完成監控的探針工作和執行簡單的遠端服務設置

mmm_control

一個簡單的腳本,提供管理mmm_mond進程的命令


二.實驗環境介紹

最基本的MMM安裝必須至少需要2個數據庫服務器和一個監控服務器,下面要配置的MySQL Cluster環境包含三臺數據庫服務器和一臺監控服務器。

實驗架構如下:

wKioL1TE5ViyH1x9AAJNG6WoMjk609.jpg

主機規劃表

wKiom1TE5JLho22uAAMgCcUWEzo177.jpg

虛擬VIP規劃表:

wKioL1TE5ZvQ0JQ-AADmyeMMhhI999.jpg


高可用性實現的前提:

1.時間同步,儘量使用NTP服務器;
2.hosts文件解析;
[root@node3 ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
172.16.0.1  server.magelinux.com server
172.16.31.20 node3.stu31.com node3
172.16.31.21 node4.stu31.com node4
172.16.31.22 node5.stu31.com node5
172.16.31.23 node6.stu31.com node6
3.ssh無密鑰通信;
node3,node4和node6節點之間需要實現ssh無密鑰通信
# ssh-keygen -t rsa -P ""
# ssh-copy-id -i .ssh/id_rsa.pub root@node3
測試:
[root@node6 ~]# date ;ssh node4 date ; ssh node3 date;
Sun Jan 25 16:40:51 CST 2015
Sun Jan 25 16:40:52 CST 2015
Sun Jan 25 16:40:52 CST 2015


三.編譯安裝mariadb數據庫過程略。

提供的my.cnf如下:

[root@node3 ~]# grep -v '^#' /etc/my.cnf 
[client]
port            = 3306
socket          = /tmp/mysql.sock
[mysqld]
port            = 3306
socket          = /tmp/mysql.sock
skip-external-locking
key_buffer_size = 256M
max_allowed_packet = 1M
table_open_cache = 256
sort_buffer_size = 1M
read_buffer_size = 1M
read_rnd_buffer_size = 4M
myisam_sort_buffer_size = 64M
thread_cache_size = 8
query_cache_size= 16M
thread_concurrency = 4
datadir = /mydata/data
innodb_file_per_table = on
skip_name_resolve = on
[mysqldump]
quick
max_allowed_packet = 16M
[mysql]
no-auto-rehash
[myisamchk]
key_buffer_size = 128M
sort_buffer_size = 128M
read_buffer = 2M
write_buffer = 2M
[mysqlhotcopy]
interactive-timeout


我這裏提供一個腳本,基本上可以實現mariadb編譯安裝自動化:

[root@node3 ~]# cat installmysql.sh 
#!/bin/bash
#install mysql
mysql_dir="/usr/local/mysql"
mysql_datadir="/mydata/data"
mysql_logdir="/mydata/data/"
mysql_passwd="oracle"
function install_mysql()  {
yum groupinstall -y Development Tools
yum install -y cmake ncurses-devel openssl-devel openssl
cd /root/
useradd -M -s /sbin/nologin mysql
mkdir -p $mysql_datadir
chown mysql.mysql -R $mysql_datadir
tar zxf mariadb-10.0.12.tar.gz 
cd mariadb-10.0.12
cmake . -DCMAKE_INSTALL_PREFIX=$mysql_dir/ \
-DMYSQL_DATADIR=$mysql_datadir \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DENABLED_LOCAL_INFILE=1 \
-DMYSQL_TCP_PORT=3306 \
-DWITH_SSL=system \
-DWITH_ZLIB=system \
-DWITH_LIBWRAP=0 \
-DCMAKE_THREAD_PREFER_PTHREAD=1 \
-DEXTRA_CHARSETS=all \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \
-DWITH_DEBUG=0
make && make install
rm -rf /etc/my.cnf
rm -rf /etc/init.d/mysqld
mkdir $mysql_logdir/relaylog
mkdir $mysql_logdir/binlog
cp /root/my.cnf /etc/my.cnf
cp support-files/mysql.server /etc/init.d/mysqld
chmod 755 /etc/init.d/mysqld
chkconfig --add mysqld
chkconfig mysqld on
chown mysql.mysql -R $mysql_logdir
chown mysql.mysql -R $mysql_datadir
$mysql_dir/scripts/mysql_install_db --user=mysql --basedir=$mysql_dir --datadir=$mysql_datadir
/sbin/service mysqld start
echo 'export PATH=$PATH:'$mysql_dir'/bin' >> /etc/profile
source /etc/profile
$mysql_dir/bin/mysql -e "grant all privileges on *.* to root@'%' identified by '$mysql_passwd' with grant option;"
$mysql_dir/bin/mysql -e "flush privileges;"
$mysql_dir/bin/mysql -e "delete from mysql.user where password='';"
/sbin/service mysqld restart
echo "mysql install success!"
}
install_mysql


將數據庫源碼包和配置好的my.cnf文件放置在/root目錄下後即可進行編譯安裝;


在node3,node4和node6編譯安裝完成後即可進行雙主單從複製架構實現;



四.構建雙主單從複製架構


1.雙主複製的數據庫主配置文件配置

node3節點的配置:

[root@node3 ~]# vim /etc/my.cnf 
[mysqld]                     #在此配置段中增加如下內容;
log-bin=mysql-bin
binlog_format=mixed
server-id       = 1
relay-log=relay-bin
auto_increment_offset=1
auto_increment_increment=2
log_slave_updates       = 1


node4節點的配置:

[root@node4 ~]# vim /etc/my.cnf 
[mysqld]
log-bin=mysql-bin
binlog_format=mixed
server-id       = 10
relay-log       = relay-bin
auto_increment_offset=2
auto_increment_offset=2
log_slave_updates       = 1


從節點node6:

node6節點的配置:

[root@node6 ~]# vim /etc/my.cnf 
[mysqld]
log-bin=mysql-bin
binlog_format=mixed
server-id       = 20
relay-log       = relay-bin
log_slave_updates       = 1
read_only       = on


修改過剛纔的配置文件以後,在各節點重新啓動mysqld服務器;

# service mysqld restart
Shutting down MySQL..                                      [  OK  ]
Starting MySQL.                                            [  OK  ]



2.創建複製使用的mysql用戶

爲了方便,我們就授權一個repluser賬戶在172.16.0.0這個網段內都能實現複製;

在node3和node4節點上執行如下指令:

MariaDB [(none)]> grant replication slave,replication client on *.* to repluser@'172.16.%.%' identified by 'replpass';
MariaDB [(none)]> flush privileges;



3.同步數據

由於我們都是新裝的庫,數據是同步的,但是我們也簡單操作以下步驟,開始配置同步數據到複製結尾,都不要讓任何的mysql服務器寫入數據,避免導致數據不同步。

查看兩個節點的時間點;

node3節點的時間點;
MariaDB [(none)]> show master status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000006 |      653 |              |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
node4節點的時間點:
MariaDB [(none)]> show master status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000006 |      653 |              |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)


兩個節點的時間點都是一致的,數據是一致的,那就方便設置了;



4.雙主複製模型開啓設置

node3節點啓動:
#開啓複製;
MariaDB [(none)]> change master to master_host='172.16.31.21',master_user='repluser',master_password='replpass',master_log_file='mysql-bin.000006',master_log_pos=653;
#開啓複製進程;
MariaDB [(none)]> start slave;


node4節點啓動:
MariaDB [(none)]> change master to master_host='172.16.31.20',master_user='repluser',master_password='replpass',master_log_file='mysql-bin.000006',master_log_pos=653;
MariaDB [(none)]> start slave;



5.查看節點的複製狀態信息;

node3的節點的主從複製狀態:

MariaDB [(none)]> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 172.16.31.21
                  Master_User: repluser
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000006
          Read_Master_Log_Pos: 653
               Relay_Log_File: relay-bin.000002
                Relay_Log_Pos: 535
        Relay_Master_Log_File: mysql-bin.000006
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
信息略;
        Seconds_Behind_Master: 0 
1 row in set (0.00 sec)


node4節點的主從複製狀態信息;

MariaDB [(none)]> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 172.16.31.20
                  Master_User: repluser
                  Master_Port: 3306
                Connect_Retry: 5
              Master_Log_File: mysql-bin.000006
          Read_Master_Log_Pos: 653
               Relay_Log_File: relay-bin.000002
                Relay_Log_Pos: 535
        Relay_Master_Log_File: mysql-bin.000006
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
信息略;
        Seconds_Behind_Master: 0
 
1 row in set (0.00 sec)


6.簡單的雙主複製測試;

我們在node3節點插入測試數據庫;

在hellodb中的teachers表中插入數據:

[root@node3 ~]# mysql -uroot -poracle < hellodb.sql
登錄數據庫:
[root@node3 ~]# mysql -uroot -poracle
#切換到hellodb數據庫;
MariaDB [(none)]> use hellodb;
Database changed
#先查看teachers表;
MariaDB [hellodb]> select * from teachers;
+-----+---------------+-----+--------+
| TID | Name          | Age | Gender |
+-----+---------------+-----+--------+
|   1 | Song Jiang    |  45 | M      |
|   2 | Zhang Sanfeng |  94 | M      |
|   3 | Miejue Shitai |  77 | F      |
|   4 | Lin Chaoying  |  93 | F      |
+-----+---------------+-----+--------+
4 rows in set (0.00 sec)
#插入兩條新數據;
MariaDB [hellodb]> insert into teachers(name,age,gender) values('Huang Yaoshi',56,'M'),('Feng Qingyang',100,'M');
Query OK, 2 rows affected (0.04 sec)
Records: 2  Duplicates: 0  Warnings: 0
#再次查看teachers表,觀察ID的變化;
MariaDB [hellodb]> select * from teachers;
+-----+---------------+-----+--------+
| TID | Name          | Age | Gender |
+-----+---------------+-----+--------+
|   1 | Song Jiang    |  45 | M      |
|   2 | Zhang Sanfeng |  94 | M      |
|   3 | Miejue Shitai |  77 | F      |
|   4 | Lin Chaoying  |  93 | F      |
|   5 | Huang Yaoshi  |  56 | M      |
|   7 | Feng Qingyang | 100 | M      |
+-----+---------------+-----+--------+
6 rows in set (0.00 sec)

node3節點的ID自增是以奇數爲順序的,說明我們的雙主複製架構完成了。


7.配置從服務器節點node6:

拷貝數據

(假如是你完全新安裝mysql主從服務器,這個一步就不需要。因爲新安裝的master和slave有相同的數據)

關停Master服務器,將Master中的數據拷貝到從服務器節點中,使得Master和slave中的數據同步,並且確保在全部設置操作結束前,禁止在Master和slave服務器中進行寫操作,使得兩數據庫中的數據一定要相同!

停止node3節點和node6節點的數據庫:
# service mysqld stop
刪除node6節點的數據庫文件:
[root@node6 ~]# mkdir /backup
[root@node6 ~]# mv /mydata/data/* /backup/
[root@node6 ~]# ls /mydata/data/
將node3節點的數據庫數據全部複製到節點node6:
[root@node3 mydata]# scp -p -r data/* node6:/mydata/data/
記得更改數據庫數據目錄裏的所有權限爲mysql:
[root@node6 ~]# chown -R mysql:mysql /mydata/data/
將其中原有的中繼日誌刪除:
[root@node6 ~]# rm -rf /mydata/data/relay* 
配置完成後啓動服務器:
# service mysqld start
啓動從節點的中繼日誌:
MariaDB [(none)]> change master to master_host='172.16.31.20',master_user='repluser',master_password='replpass',master_log_file='mysql-bin.000009',master_log_pos=326;
啓動中繼日誌進程;
MariaDB [(none)]> start slave;
查看從節點的狀態:
MariaDB [(none)]> show slave status \G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 172.16.31.20
                  Master_User: repluser
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000009
          Read_Master_Log_Pos: 326
               Relay_Log_File: relay-bin.000002
                Relay_Log_Pos: 535
        Relay_Master_Log_File: mysql-bin.000009
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
信息略。。。
查看從節點的數據跟主節點是否一致:
MariaDB [(none)]> use hellodb;
Database changed
MariaDB [hellodb]> select * from teachers;
+-----+---------------+-----+--------+
| TID | Name          | Age | Gender |
+-----+---------------+-----+--------+
|   1 | Song Jiang    |  45 | M      |
|   2 | Zhang Sanfeng |  94 | M      |
|   3 | Miejue Shitai |  77 | F      |
|   4 | Lin Chaoying  |  93 | F      |
|   5 | Huang Yaoshi  |  56 | M      |
|   7 | Feng Qingyang | 100 | M      |
+-----+---------------+-----+--------+
6 rows in set (0.00 sec)

OK,從節點配置完畢;



五.MMM高可用服務器構建


1.如果你是編譯安裝的mysql-mmm,那麼你就需要安裝依賴的perl庫了

由於我這裏是EPEL源提供的mysql-mmm,所以自動解決了依賴問題;建議你也配置好EPEL源後進行安裝,非常方便;

mysql-mmm需要依賴的所有文件如下:

dejavu-lgc-sans-mono-fonts.noarch 0:2.30-2.el6         
perl-Date-Manip.noarch 0:6.24-1.el6           
perl-Email-Date-Format.noarch 0:1.002-5.el6            
perl-Log-Dispatch.noarch 0:2.27-1.el6         
perl-Log-Dispatch-FileRotate.noarch 0:1.19-4.el6       
perl-Log-Log4perl.noarch 0:1.30-1.el6         
perl-MIME-Lite.noarch 0:3.027-2.el6                    
perl-MIME-Types.noarch 0:1.28-2.el6           
perl-Mail-Sender.noarch 0:0.8.16-3.el6                 
perl-Mail-Sendmail.noarch 0:0.79-12.el6       
perl-MailTools.noarch 0:2.04-4.el6                     
perl-Params-Validate.x86_64 0:0.92-3.el6      
perl-TimeDate.noarch 1:1.16-13.el6                     
perl-XML-DOM.noarch 0:1.44-7.el6              
perl-XML-RegExp.noarch 0:0.03-7.el6                    
perl-YAML-Syck.x86_64 0:1.07-4.el6            
rrdtool.x86_64 0:1.3.8-7.el6                           
rrdtool-perl.x86_64 0:1.3.8-7.el6  
perl-Algorithm-Diff.noarch 0:1.1902-9.el6              
perl-Class-Singleton.noarch 0:1.4-6.el6         
perl-DBD-MySQL.x86_64 0:4.013-3.el6                    
perl-Net-ARP.x86_64 0:1.0.6-2.1.el6             
perl-Path-Class.noarch 0:0.25-1.el6                    
perl-Proc-Daemon.noarch 0:0.14-9.el6            
perl-Proc-ProcessTable.x86_64 0:0.48-1.el6

    


2.mysql-mmm軟件包介紹

mysql-mmm軟件包包含四個軟件:

主軟件包:
mysql-mmm.noarch 0:2.2.1-2.el6 
客戶端軟件包:
mysql-mmm-agent.noarch 0:2.2.1-2.el6
監控軟件包:
mysql-mmm-monitor.noarch 0:2.2.1-2.el6
工具包:
mysql-mmm-tools.noarch 0:2.2.1-2.el6



3.在所有節點安裝mysql-mmm的軟件包組;

# yum install -y mysql-mmm*


查看安裝的後生成的文件:

[root@node3 ~]# rpm -ql mysql-mmm
/etc/logrotate.d/mysql-mmm
/etc/mysql-mmm
/etc/mysql-mmm/mmm_common.conf
/usr/share/doc/mysql-mmm-2.2.1
/usr/share/doc/mysql-mmm-2.2.1/COPYING
/usr/share/doc/mysql-mmm-2.2.1/INSTALL
/usr/share/doc/mysql-mmm-2.2.1/README
/usr/share/doc/mysql-mmm-2.2.1/VERSION
/usr/share/doc/mysql-mmm-2.2.1/mysql-mmm-2.2.1.pdf
/usr/share/perl5/vendor_perl/MMM/Common
/usr/share/perl5/vendor_perl/MMM/Common/Angel.pm
/usr/share/perl5/vendor_perl/MMM/Common/Config.pm
/usr/share/perl5/vendor_perl/MMM/Common/Log.pm
/usr/share/perl5/vendor_perl/MMM/Common/PidFile.pm
/usr/share/perl5/vendor_perl/MMM/Common/Role.pm
/usr/share/perl5/vendor_perl/MMM/Common/Socket.pm
/usr/share/perl5/vendor_perl/MMM/Common/Uptime.pm
/var/lib/mysql-mmm
/var/log/mysql-mmm
/var/run/mysql-mmm


4.在node3和node4兩個主服務器節點配置mmm代理和監控賬號的權限

#前面已經執行過了,就不用執行了,讓複製,monitor使用同一個用戶,注意權限就可以行了。
MariaDB [(none)]> grant replication client,replication slave on *.* to 'repluser'@'172.16.%.%' identified by 'replpass';
MariaDB [(none)]> grant super,replication client,replication slave,process on *.* to 'mmm_agent'@'172.16.%.%' identified by 'agent_password';
MariaDB [(none)]> flush privileges;
在node3和node4節點都執行一遍;


5.配置mysql-mmm的配置文件;

所有的配置選項都集合在了一個叫/etc/mysql-mmm/mmm_common.conf的單獨文件中,系統中所有主機的該文件內容都是一樣的, 配置完後不要忘記了拷貝這個文件到所有的主機(包括監控主機)!,內容如下:

[root@node3 ~]# cat /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        repluser                            #複製授權帳號
    replication_password    replpass                            #複製授權密碼
    agent_user              mmm_agent                           #mmm-agent的帳號
    agent_password          agent_password                      #mmm-agent的密碼
</host>
#定義數據庫節點
<host db1>
    ip      172.16.31.20
    mode    master
    peer    db2
</host>
<host db2>
    ip      172.16.31.21
    mode    master
    peer    db1
</host>
<host db3>
    ip      172.16.31.23
    mode    slave
</host>
#可寫角色主機節點
<role writer>
    hosts   db1, db2
    ips     172.16.31.100
    #互斥角色只有一個ip,並且同一時間只能分配給一個主機,你可以指定一個優先(preferred)主機,如果這個主機是ONLINE狀態,那麼角色就會被切換到這個主機。
    mode    exclusive
</role>
#可讀角色主機節點
<role reader>
    hosts   db1, db2, db3
    ips     172.16.31.101,172.16.31.102,172.16.31.103
    #負載均衡角色可以有多個IP,這些IP被均衡的分配給多個主機,所以沒有一個主機可以比其他主機多出兩個角色。
    mode    balanced
</role>

配置完成後複製到所有節點,包括監控節點node5;


在數據庫主機上我們需要編輯/etc/mysql-mmm/mmm_agent.conf文件,根據其他主機的不同更改db1的值(db2就將db1更改成db2,db3就將db1改爲db3):

[root@node3 ~]# vim /etc/mysql-mmm/mmm_agent.conf 
include mmm_common.conf
# The 'this' variable refers to this server.  Proper operation requires 
# that 'this' server (db1 by default), as well as all other servers, have the 
# proper IP addresses set in mmm_common.conf.
this db1

在監控主機上我們需要編輯/etc/mysql-mmm/mmm_mon.conf文件:

[root@node5 ~]# cat /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
    #監控的數據庫服務器的IP
    ping_ips            172.16.31.20,172.16.31.21,172.16.31.23
    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        repluser
    monitor_password    replpass
</host>
debug 0



6.配置完成後,啓動監控服務,在監控主機上啓動:

[root@node5 ~]# /etc/init.d/mysql-mmm-monitor start
Starting MMM Monitor Daemon:                               [  OK  ]
查看進程啓動情況:
[root@node5 ~]# ps aux |grep mmm
root      2325  0.0  1.3 161564 13608 ?        S    19:29   0:00 mmm_mond
root      2326  3.3  6.6 698592 67780 ?        Sl   19:29   0:00 mmm_mond
root      2339  1.7  0.9 150600 10044 ?        S    19:29   0:00 perl /usr/libexec/mysql-mmm/monitor/checker ping_ip
root      2343  2.2  1.1 181676 11920 ?        S    19:29   0:00 perl /usr/libexec/mysql-mmm/monitor/checker mysql
root      2346  1.8  0.9 150600 10044 ?        S    19:29   0:00 perl /usr/libexec/mysql-mmm/monitor/checker ping
root      2349  2.5  1.1 181676 11960 ?        S    19:29   0:00 perl /usr/libexec/mysql-mmm/monitor/checker rep_backlog
root      2352  3.0  1.1 181676 11976 ?        S    19:29   0:00 perl /usr/libexec/mysql-mmm/monitor/checker rep_threads
root      2355  0.0  0.0 103256   832 pts/0    S+   19:29   0:00 grep mmm


7.在數據庫服務器節點上啓動agent服務;node3,node4,node6節點都需要執行:

[root@node3 ~]# /etc/init.d/mysql-mmm-agent start
Starting MMM Agent Daemon:                                 [  OK  ]
[root@node4 ~]# /etc/init.d/mysql-mmm-agent start
Starting MMM Agent Daemon:                                 [  OK  ]
[root@node6 ~]# /etc/init.d/mysql-mmm-agent start
Starting MMM Agent Daemon:                                 [  OK  ]


在節點上查看進程及監聽端口狀態:

就拿node6舉例了:

[root@node6 ~]# ps aux |grep mmm
root     12821  0.0  0.9 149664 10044 ?        S    19:32   0:00 mmm_agentd
root     12823  0.1  1.0 149796 10256 ?        S    19:32   0:00 mmm_agentd
root     12878  0.0  0.0 103252   828 pts/0    S+   19:33   0:00 grep mmm


查看監聽端口:

[root@node6 ~]# netstat -tunlp |grep mmm
tcp        0      0 172.16.31.23:9989           0.0.0.0:*                   LISTEN      12823/mmm_agentd

注意:如果不能啓動,可以查看/var/log/mysql-mmm/mmm_agentd.log 文件的提示,或者啓動時候的報錯,最大的可能是perl對應模塊沒有安裝成功,成功安裝對應的模塊就可以解決問題了.


8.在監控主機上查看集羣節點狀態:

[root@node5 ~]# mmm_control mode
ACTIVE
[root@node5 ~]# mmm_control show
  db1(172.16.31.20) master/ONLINE. Roles: reader(172.16.31.101), writer(172.16.31.100)
  db2(172.16.31.21) master/ONLINE. Roles: reader(172.16.31.102)
  db3(172.16.31.23) slave/ONLINE. Roles: reader(172.16.31.103)

所有節點都處於ONLINE在線狀態;


我們的MMM集羣搭建就完畢了,我們進行一次健康檢查:

[root@node5 ~]# mmm_control checks all
db2  ping         [last change: 2015/01/25 19:29:41]  OK
db2  mysql        [last change: 2015/01/25 19:29:41]  OK
db2  rep_threads  [last change: 2015/01/25 19:29:41]  OK
db2  rep_backlog  [last change: 2015/01/25 19:29:41]  OK: Backlog is null
db3  ping         [last change: 2015/01/25 19:29:41]  OK
db3  mysql        [last change: 2015/01/25 19:29:41]  OK
db3  rep_threads  [last change: 2015/01/25 19:29:41]  OK
db3  rep_backlog  [last change: 2015/01/25 19:29:41]  OK: Backlog is null
db1  ping         [last change: 2015/01/25 19:29:41]  OK
db1  mysql        [last change: 2015/01/25 19:29:41]  OK
db1  rep_threads  [last change: 2015/01/25 19:29:41]  OK
db1  rep_backlog  [last change: 2015/01/25 19:29:41]  OK: Backlog is null


監控節點的集羣節點健康檢查都是成功的,我們的MMM集羣是成功的。



9.集羣的故障切換測試:

測試看兩個mysql服務器能否實現故障自動切換

停掉作爲寫的db1上的mysql,查看寫的服務器會不會自動轉移到db2上去

[root@node3 ~]# service mysqld stop
Shutting down MySQL..                                      [  OK  ]
停掉幾秒鐘後用mmm_control show查看:
[root@node5 ~]# mmm_control show
  db1(172.16.31.20) master/HARD_OFFLINE. Roles: 
  db2(172.16.31.21) master/ONLINE. Roles: reader(172.16.31.102), writer(172.16.31.100)
  db3(172.16.31.23) slave/ONLINE. Roles: reader(172.16.31.101), reader(172.16.31.103)


我們可以看到已經把db2當作主寫服務器;


再來看看db1恢復後會是什麼情況:

[root@node3 ~]# service mysqld start
Starting MySQL.                                            [  OK  ]
[root@node5 ~]# mmm_control show
  db1(172.16.31.20) master/ONLINE. Roles: reader(172.16.31.103)
  db2(172.16.31.21) master/ONLINE. Roles: reader(172.16.31.102), writer(172.16.31.100)
  db3(172.16.31.23) slave/ONLINE. Roles: reader(172.16.31.101)

我們可以看到當db1恢復後就充當slave的角色了!只有當db2掛了以後db1又會擔當起主服務器的寫入功能


10.測試寫入數據是否同步


在mmm-monitor上連接172.16.31.21,嘗試寫入數據,然後查看三個服務器是否同步數據。

[root@node5 ~]# mysql -uroot -poracle -h172.16.31.21
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 613
Server version: 5.5.5-10.0.12-MariaDB-log Source distribution
Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
#查看數據庫;
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| binlog             |
| hellodb            |
| information_schema |
| mysql              |
| performance_schema |
| relaylog           |
| test               |
+--------------------+
7 rows in set (0.00 sec)
#使用hellodb數據庫;
mysql> use hellodb;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
#查看teachers表;
mysql> select * from teachers;
+-----+---------------+-----+--------+
| TID | Name          | Age | Gender |
+-----+---------------+-----+--------+
|   1 | Song Jiang    |  45 | M      |
|   2 | Zhang Sanfeng |  94 | M      |
|   3 | Miejue Shitai |  77 | F      |
|   4 | Lin Chaoying  |  93 | F      |
|   5 | Huang Yaoshi  |  56 | M      |
|   7 | Feng Qingyang | 100 | M      |
+-----+---------------+-----+--------+
6 rows in set (0.00 sec)
#插入一些數據;
mysql> insert into teachers(name,age,gender) values('Wang Chongyang',95,'m');
Query OK, 1 row affected (0.04 sec)
#查看數據修改情況;
mysql> select * from teachers;
+-----+----------------+-----+--------+
| TID | Name           | Age | Gender |
+-----+----------------+-----+--------+
|   1 | Song Jiang     |  45 | M      |
|   2 | Zhang Sanfeng  |  94 | M      |
|   3 | Miejue Shitai  |  77 | F      |
|   4 | Lin Chaoying   |  93 | F      |
|   5 | Huang Yaoshi   |  56 | M      |
|   7 | Feng Qingyang  | 100 | M      |
|   8 | Wang Chongyang |  95 | M      |
+-----+----------------+-----+--------+
7 rows in set (0.00 sec)
#退出數據庫;
mysql> \q
Bye


我們在節點node3上查看數據是否同步:

[root@node3 ~]# mysql -uroot -poracle
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 229
Server version: 10.0.12-MariaDB-log Source distribution
Copyright (c) 2000, 2014, Oracle, SkySQL Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> use hellodb;
Database changed
MariaDB [hellodb]> select * from teachers;
+-----+----------------+-----+--------+
| TID | Name           | Age | Gender |
+-----+----------------+-----+--------+
|   1 | Song Jiang     |  45 | M      |
|   2 | Zhang Sanfeng  |  94 | M      |
|   3 | Miejue Shitai  |  77 | F      |
|   4 | Lin Chaoying   |  93 | F      |
|   5 | Huang Yaoshi   |  56 | M      |
|   7 | Feng Qingyang  | 100 | M      |
|   8 | Wang Chongyang |  95 | M      |
+-----+----------------+-----+--------+
7 rows in set (0.00 sec)
MariaDB [hellodb]> \q
Bye

在從服務器節點node6查看數據是否同步:

[root@node6 ~]# mysql -uroot -p
Enter password: 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 645
Server version: 10.0.12-MariaDB-log Source distribution
Copyright (c) 2000, 2014, Oracle, SkySQL Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> use hellodb;
Database changed
MariaDB [hellodb]> select * from teachers;
+-----+----------------+-----+--------+
| TID | Name           | Age | Gender |
+-----+----------------+-----+--------+
|   1 | Song Jiang     |  45 | M      |
|   2 | Zhang Sanfeng  |  94 | M      |
|   3 | Miejue Shitai  |  77 | F      |
|   4 | Lin Chaoying   |  93 | F      |
|   5 | Huang Yaoshi   |  56 | M      |
|   7 | Feng Qingyang  | 100 | M      |
|   8 | Wang Chongyang |  95 | M      |
+-----+----------------+-----+--------+
7 rows in set (0.00 sec)
MariaDB [hellodb]> \q
Bye


數據全部同步了,我們的MMM集羣是完美成功了的。



至此,基於Master-Master replication manager for Mysql的高可用雙主複製集羣搭建完畢。


有關MMM的文檔,可以查看http://isadba.com/此網站的大神翻譯的文檔,很不錯,關於配置方面的選項這個翻譯中都介紹的很詳細了,我就不在這裏敘述了。

我也把文檔放在附件裏了,如果需要可以去下載。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章