mysql高可用方案之MMM
环境规划:主db1 IP:192.168.1.247 host:tong1
主db2 IP:192.168.1.248 host:tong2
从db3 IP:192.168.1.249 host:tong3
monitor IP:192.168.1.249 host:tong3
数据库:mysql-5.6.21
mysql dba技术群 378190849
武汉-linux运维群 236415619
1.网络环境布置
tong1数据节点:
# ifconfigeth0
eth0 Link encap:EthernetHWaddr 10:78:D2:C7:83:03
inet addr:192.168.1.247Bcast:192.168.1.255Mask:255.255.255.0
inet6 addr: fe80::1278:d2ff:fec7:8303/64 Scope:Link
UP BROADCAST RUNNING MULTICASTMTU:1500Metric:1
RX packets:4953337 errors:0 dropped:0 overruns:0 frame:0
TX packets:78512 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:346785301 (330.7 MiB)TX bytes:5389268 (5.1 MiB)
# cat /etc/hosts
192.168.1.247 tong1
192.168.1.248 tong2
192.168.1.249 tong3
#
tong2数据节点:
# ifconfigeth0
eth0 Link encap:EthernetHWaddr 10:78:D2:C7:17:E8
inet addr:192.168.1.248Bcast:192.168.1.255Mask:255.255.255.0
inet6 addr: fe80::1278:d2ff:fec7:17e8/64 Scope:Link
UP BROADCAST RUNNING MULTICASTMTU:1500Metric:1
RX packets:4930658 errors:0 dropped:0 overruns:0 frame:0
TX packets:19441 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:315661835 (301.0 MiB)TX bytes:2133138 (2.0 MiB)
# cat /etc/hosts
192.168.1.247 tong1
192.168.1.248 tong2
192.168.1.249 tong3
#
tong3监控节点:
# ifconfigeth0
eth0 Link encap:EthernetHWaddr 10:78:D2:C8:F7:50
inet addr:192.168.1.249Bcast:192.168.1.255Mask:255.255.255.0
inet6 addr: fe80::1278:d2ff:fec8:f750/64 Scope:Link
UP BROADCAST RUNNING MULTICASTMTU:1500Metric:1
RX packets:6864426 errors:0 dropped:0 overruns:0 frame:0
TX packets:99046 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:694563286 (662.3 MiB)TX bytes:7322797 (6.9 MiB)
# cat /etc/hosts
192.168.1.247 tong1
192.168.1.248 tong2
192.168.1.249 tong3
#
2.在监控节点上tong3安装mysql-mmm软件
下载地址:http://mysql-mmm.org/downloads
# tar xvf mysql-mmm-2.2.1.tar.gz
# cd mysql-mmm-2.2.1
# make && make install
# mmm_
mmm_agentd mmm_backup mmm_clone mmm_controlmmm_mond mmm_restore
# ll /etc/mysql-mmm/
total 16
-rw-r-----. 1 root root 33 Apr 29 14:06 mmm_agent.conf
-rw-r-----. 1 root root684 Apr 29 14:06 mmm_common.conf
-rw-r-----. 1 root root321 Apr 29 14:06 mmm_mon.conf
-rw-r-----. 1 root root 1293 Apr 29 14:06 mmm_tools.conf
#
3.在tong1,tong2,tong3节点安装mysql数据库(步骤一样)
# wget http://mirrors.sohu.com/mysql/MySQL-5.6/mysql-5.6.23-linux-glibc2.5-x86_64.tar.gz
# tar xvf mysql-5.6.23-linux-glibc2.5-x86_64.tar.gz-C /usr/local/
# cd /usr/local/
# mv mysql-5.6.23-linux-glibc2.5-x86_64/ mysql-5.6.23
# cd mysql-5.6.23/
# ./scripts/mysql_install_db --user=mysql --group=mysql --basedir=/usr/local/mysql-5.6.23 --datadir=/usr/local/mysql-5.6.23/data
# cp -a my.cnf/etc/
# cp -a support-files/mysql.server/etc/init.d/mysqld
# chkconfig--add mysqld
# chkconfigmysqld on
# vim /etc/my.cnf
basedir = /usr/local/mysql-5.6.23
datadir = /usr/local/mysql-5.6.23/data
port = 3306
server_id = 20 --server_id在三台主机不同,分别用10,20,30表示
socket = /tmp/mysql.sock
# pkillmysqld
# /etc/init.d/mysqldrestart
# /usr/local/mysql-5.6.23/bin/mysqladmin-u root password 'system'
# /usr/local/mysql-5.6.23/bin/mysql -u root -p--输入密码system
Enter password:
Welcome to the MySQL monitor.Commands end with ; or \g.
Your MySQL connection> Server version: 5.6.23 MySQL Community Server (GPL)
Copyright (c) 2000, 2015, 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> exit
Bye
#
4.将tong1和tong2配置成主主架构
tong1节点配置文件:
# vim /etc/my.cnf
basedir = /usr/local/mysql-5.6.23
datadir = /usr/local/mysql-5.6.23/data
port = 3306
server_id = 20
socket = /tmp/mysql.sock
replicate-do-db=tong --复制tong数据库
replicate-ignore-db=mysql --忽略mysql数据库
log-bin=mysql-bin --开启二进制日志
log-bin-index=mysql-bin-index
auto_increment_offset=1
auto_increment_increment=2
relay-log=relay-log --开启中继日志
relay-log-index=relay-log-index
log_slave_updates --当任意一台主宕机,从可以接管主应用
sync-binlog=1
#
tong2节点配置文件:
# vim /etc/my.cnf
basedir = /usr/local/mysql-5.6.23
datadir = /usr/local/mysql-5.6.23/data
port = 3306
server_id = 10
socket = /tmp/mysql.sock
replicate-do-db=tong
replicate-ignore-db=mysql
log-bin=mysql-bin
log-bin-index=mysql-bin-index
auto_increment_offset=2
auto_increment_increment=2
relay-log=relay-log
relay-log-index=relay-log-index
log_slave_updates
sync-binlog=1
#
tong3节点配置文件:
# vim /etc/my.cnf
basedir = /usr/local/mysql-5.6.23
datadir = /usr/local/mysql-5.6.23/data
port = 3306
server_id = 30
socket = /tmp/mysql.sock
replicate-do-db=tong
replicate-ignore-db=mysql
#
配置主主模式:
tong1节点:
# /etc/init.d/mysqld restart
Shutting down MySQL.... SUCCESS!
Starting MySQL. SUCCESS!
# mysql -u root -p
Enter password:
Welcome to the MySQL monitor.Commands end with ; or \g.
Your MySQL connection> Server version: 5.6.23-log MySQL Community Server (GPL)
Copyright (c) 2000, 2015, 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> grant replication slave,replication client on *.* to repl_user@'192.168.1.%'> Query OK, 0 rows affected (0.00 sec)
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 | 120 | | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
mysql>
tong2节点:
# mysql -u root -p
Enter password:
Welcome to the MySQL monitor.Commands end with ; or \g.
Your MySQL connection> Server version: 5.6.23-log MySQL Community Server (GPL)
Copyright (c) 2000, 2015, 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> grant replication slave,replication client on *.* to repl_user@'192.168.1.%'> Query OK, 0 rows affected (0.00 sec)
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 | 120 | | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
mysql> change master to master_host='192.168.1.247',master_port=3306,master_user='repl_user',master_password='system!#%246',master_log_file='mysql-bin.000001',master_log_pos=120; --复制tong1中的数据
Query OK, 0 rows affected, 2 warnings (0.50 sec)
mysql> start slave; --开启从服务
Query OK, 0 rows affected (0.05 sec)
mysql>
tong1节点:
mysql>change master to master_host='192.168.1.248',master_port=3306,master_user='repl_user',master_password='system!#%246',master_log_file='mysql-bin.000001',master_log_pos=120; --复制tong2中的数据
Query OK, 0 rows affected, 2 warnings (0.22 sec)
mysql> start slave;
Query OK, 0 rows affected (0.05 sec)
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.1.248
Master_User: repl_user
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 120
>
>
> Slave_IO_Running: Yes --主主同步成功
Slave_SQL_Running: Yes
Replicate_Do_DB: tong
Replicate_Ignore_DB: mysql
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 120
> Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 10
Master_UUID: de5d22d1-ed4b-11e4-9390-1078d2c717e8
Master_Info_File: /usr/local/mysql-5.6.23/data/master.info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Slave has read all> Master_Retry_Count: 86400
Master_Bind:
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp:
Master_SSL_Crl:
Master_SSL_Crlpath:
Retrieved_Gtid_Set:
Executed_Gtid_Set:
Auto_Position: 0
1 row in set (0.00 sec)
mysql>
5.测试主主架构是否生效
tong1节点:
mysql> create table a(a int);
Query OK, 0 rows affected (0.39 sec)
mysql> insert into a values(1);
Query OK, 1 row affected (0.03 sec)
mysql> select * from a;
+------+
| a |
+------+
| 1 |
+------+
1 row in set (0.00 sec)
mysql>
tong2节点:
mysql> \u tong
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
mysql> select * from a;
+------+
| a |
+------+
| 1 |
+------+
1 row in set (0.00 sec)
mysql> insert into a values(2);
Query OK, 1 row affected (0.03 sec)
mysql> select * from a;
+------+
| a |
+------+
| 1 |
| 2 |
+------+
2 rows in set (0.00 sec)
mysql>
6.将tong3设置成tong1节点的从机
# /etc/init.d/mysqldrestart
Shutting down MySQL.. SUCCESS!
Starting MySQL. SUCCESS!
# mysql -u root -p
Enter password:
Welcome to the MySQL monitor.Commands end with ; or \g.
Your MySQL connection> Server version: 5.6.23 MySQL Community Server (GPL)
Copyright (c) 2000, 2015, 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> change master to master_host='192.168.1.247',master_port=3306,master_user='repl_user',master_password='system!#%246',master_log_file='mysql-bin.000001',master_log_pos=120; --复制tong1中的数据
Query OK, 0 rows affected, 2 warnings (0.27 sec)
mysql> start slave;
Query OK, 0 rows affected (0.07 sec)
mysql> \u tong
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
mysql> select * from a; --数据已同步
+------+
| a |
+------+
| 1 |
| 2 |
+------+
2 rows in set (0.00 sec)
mysql>
7.在三个数据库节点分别创建监控用户和代理用户
mysql> grant replication client on *.* to 'mmm_moniton'@'192.168.1.%'> Query OK, 0 rows affected (0.00 sec)
mysql>grant super,replication client,process on *.* to 'mmm_agent'@'192.168.1.%'> Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql>
8.在监控节点修改配置文件
# cd /etc/mysql-mmm/
# ll
total 16
-rw-r-----. 1 root root 33 Apr 29 14:06 mmm_agent.conf
-rw-r-----. 1 root root684 Apr 29 14:06 mmm_common.conf
-rw-r-----. 1 root root321 Apr 29 14:06 mmm_mon.conf
-rw-r-----. 1 root root 1293 Apr 29 14:06 mmm_tools.conf
# vim mmm_common.conf
active_master_role writer
cluster_interface eth0 --心跳网卡接口
pid_path /var/run/mmm_agentd.pid
bin_path /usr/lib/mysql-mmm
replication_user repl_user --复制用户名和密码
replication_password system!#%246
agent_user mmm_agent --代理用户名和密码
agent_password agent
--主机名
ip 192.168.1.247 --tong1的IP地址
mode master --主模式
peer tong1 --主机名
ip 192.168.1.248
mode master
peer tong2
ip 192.168.1.249
mode slave --从服务器
hosts tong1, tong2 --tong1和tong2可写
ips 192.168.1.120
mode exclusive
hosts tong1, tong2, tong3 --三台可读
ips 192.168.1.121
mode balanced
# vim mmm_mon.conf
include mmm_common.conf
ip 127.0.0.1
pid_path /var/run/mmm_mond.pid
bin_path /usr/lib/mysql-mmm
status_path /var/lib/misc/mmm_mond.status
ping_ips 192.168.1.247, 192.168.1.248, 192.168.1.249
auto_set_online 10
monitor_user mmm_moniton --监控用户名和密码
monitor_password moniton
debug 1 --为1是开启服务打印日志,为0是只开启服务
# cat mmm_agent.conf
include mmm_common.conf
this tong3 --主机名
#
9.将tong3节点的mmm_common.conf复制到tong1和tong2节点中
# scp mmm_common.conf tong1:/etc/mysql-mmm/
mmm_common.conf 100%674 0.7KB/s 00:00
You have mail in /var/spool/mail/root
# scp mmm_common.conf tong2:/etc/mysql-mmm/
mmm_common.conf 100%674 0.7KB/s 00:00
#
tong1,tong2修改mmm_agent.conf文件并启动服务
# cat mmm_agent.conf
include mmm_common.conf
this tong1 --修改主机名
# /etc/init.d/mysql-mmm-agent restart --重启服务
Daemon bin: '/usr/sbin/mmm_agentd'
Daemon pid: '/var/run/mmm_agentd.pid'
Daemon bin: '/usr/sbin/mmm_agentd'
Daemon pid: '/var/run/mmm_agentd.pid'
Shutting down MMM Agent daemon. Ok
Daemon bin: '/usr/sbin/mmm_agentd'
Daemon pid: '/var/run/mmm_agentd.pid'
Starting MMM Agent daemon... Ok
#
tong3启动mmm-mysql-agent和mysql-mmm-monitor服务
# /etc/init.d/mysql-mmm-agentrestart
Daemon bin: '/usr/sbin/mmm_agentd'
Daemon pid: '/var/run/mmm_agentd.pid'
Daemon bin: '/usr/sbin/mmm_agentd'
Daemon pid: '/var/run/mmm_agentd.pid'
Shutting down MMM Agent daemon. Ok
Daemon bin: '/usr/sbin/mmm_agentd'
Daemon pid: '/var/run/mmm_agentd.pid'
Starting MMM Agent daemon... Ok
# /etc/init.d/mysql-mmm-monitorrestart
Daemon bin: '/usr/sbin/mmm_mond'
Daemon pid: '/var/run/mmm_mond.pid'
Daemon bin: '/usr/sbin/mmm_mond'
Daemon pid: '/var/run/mmm_mond.pid'
Shutting down MMM Monitor daemon:not running.
Daemon bin: '/usr/sbin/mmm_mond'
Daemon pid: '/var/run/mmm_mond.pid'
Starting MMM Monitor daemon: Ok
# mmm_controlshow
tong1(192.168.1.247) master/ONLINE. Roles: writer(192.168.1.120)
tong2(192.168.1.248) master/ONLINE. Roles:
tong3(192.168.1.249) slave/ONLINE. Roles: reader(192.168.1.121)
# mmm_controlset_offline tong1
OK: State of 'tong1' changed to ADMIN_OFFLINE. Now you can wait some time and check all roles!
# mmm_controlshow
tong1(192.168.1.247) master/ADMIN_OFFLINE. Roles:
tong2(192.168.1.248) master/ONLINE. Roles: writer(192.168.1.120)
tong3(192.168.1.249) slave/ONLINE. Roles: reader(192.168.1.121)
# mmm_controlset_offline tong3
OK: State of 'tong3' changed to ADMIN_OFFLINE. Now you can wait some time and check all roles!
# mmm_controlshow
tong1(192.168.1.247) master/ADMIN_OFFLINE. Roles:
tong2(192.168.1.248) master/ONLINE. Roles: reader(192.168.1.121), writer(192.168.1.120)
tong3(192.168.1.249) slave/ADMIN_OFFLINE. Roles:
# mmm_controlset_online tong1
OK: State of 'tong1' changed to ONLINE. Now you can wait some time and check its new roles!
# mmm_controlset_online tong3
OK: State of 'tong3' changed to ONLINE. Now you can wait some time and check its new roles!
# mmm_controlshow
tong1(192.168.1.247) master/ONLINE. Roles: reader(192.168.1.121)
tong2(192.168.1.248) master/ONLINE. Roles: writer(192.168.1.120)
tong3(192.168.1.249) slave/ONLINE. Roles:
You have mail in /var/spool/mail/root
页:
[1]