-----------------------------
部署集群基础环境
MySQL-MMM架构部署
MySQL-MMM架构使用
部署集群基础环境
192.168.4.10 master1
192.168.4.11 master2
192.168.4.12 slave1
192.168.4.13 slave2
192.168.4.100 monitor
使用5台mysql5.6 其中192.168.4.10、192.168.4.11作为mysql双主服务器,192.168.4.12、 192.168.4.13作为主服务器的从服务器。
192.168.4.100 作为mysql-MMM架构中管理监控服务器,
步骤一:配置hosts本地解析
1.配置本机hosts解析记录
[[email protected] ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.4.10 master1 master1.tarena.com
192.168.4.11 master2 master2.tarena.com
192.168.4.12 slave1 slave1.tarena.com
192.168.4.13 slave2 slave2.tarena.com
192.168.4.100 monitor monitor.tarena.com
2.测试hosts解析成功
[[email protected] ~]# ping -c 3 master1
PING master1 (192.168.4.10) 56(84) bytes of data.
64 bytes from master1 (192.168.4.10): icmp_seq=1 ttl=64 time=0.019 ms
64 bytes from master1 (192.168.4.10): icmp_seq=2 ttl=64 time=0.019 ms
64 bytes from master1 (192.168.4.10): icmp_seq=3 ttl=64 time=0.022 ms
--- master1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2000ms
rtt min/avg/max/mdev = 0.019/0.020/0.022/0.001 ms
---------------------------------------------------
步骤二:部署数据库主机
http://xmomo.blog.51cto.com/5994484/1939747
步骤三:部署双主多从结构
1)数据库授权(4台数据库主机master1,master2,slave1,slave2执行以下操作)
部署主从同步只需要授权一个主从同步用户即可,但是我们要部署mysql-MMM架构,
所以在这里我们将mysql-MMM所需用户一并进行授权设置。再授权一个测试用户,在架构搭建完成时测试使用。
master1设置:
[[email protected] ~]# mysql -uroot -ppwd123
数据库授权部分为了方便试验我直接允许所有地址访问了,生产环境需谨慎
mysql> grant replication slave on *.* to [email protected]"%" identified by "pwd123"; //主从同步授权
Query OK,0 rows affected(0.00 sec)
mysql> grant replication client on *.* to [email protected]"%" identified by "monitor"; //MMM所需架构用户授权
Query OK,0 rows affected(0.06 sec)
mysql> grant replication client,process,super on *.* to [email protected]"%" identified by "agent"; //MMM所需架构用户授权
Query OK,0 rows affected(0.00 sec)
mysql> grant all on *.* to [email protected]"%" identified by "pwd123"; //测试用户授权
Query OK,0 rows affected(0.00 sec)
mysql>
2)开启主数据库bin-log日志、设置server_id(master1,master2)
master1设置:
[[email protected] ~]# vi /etc/my.cnf
[mysqld]
server_id=100 //设置server_id,服务器唯一ID,必须是1至232-1之间的整数
log-bin //(主库必须开启)开启bin-log日志
master2设置:
[[email protected] ~]# vi /etc/my.cnf
[mysqld]
server_id=101
log-bin
重启两台主库的mysql服务
3)从库设置server_id(slave1,slave2)
slave1设置:
[[email protected] ~]#vi /etc/my.cnf
[mysqld]
log-bin //主库必须开启
server-id=102
注意:在集群,所有的服务器ID编号都必须是唯一的。
mysql主库的二进制日志必须要开启,从服务器上二进制日志功能是不需要开启的。
但是,你也可以通过启用从服务器的二进制日志功能,实现数据备份与恢复,此外在一些更复杂的拓扑环境中,mysql从服务器也可以扮演其他从服务器的主服务器。
slave2设置:
[[email protected] ~]#vi /etc/my.cnf
[mysqld]
log-bin
server-id=103
重启两台从库的mysql服务
4)配置主从从从关系
配置master2、slave1、slave2成为master1的从服务器
查看master1服务器bin-log日志使用节点信息:
[[email protected] ~]# mysql -uroot -ppwd123
....
mysql> flush tables with read lock;
mysql> show master status\G
***************************1. row ***************************
File: master1-bin.000001
Position:120
Binlog_Do_DB:
Binlog_Ignore_DB:
Executed_Gtid_Set:
1 row inset(0.00 sec)
mysql>
mysql> unlock tables;
注意:执行完此步骤后不要再操作主服务器mysql,防止主服务器状态值变化
防止其他主机操作主数据库,可以用只读锁表的方式来防止数据库被修改。
flush tables with read lock; 命令的作用是对所有数据库的所有表执行只读锁定,
只读锁定后所有数据库的写操作将被拒绝,但读操作可以继续。
执行锁定可以防止在查看二进制日志信息的同时有人对数据进行修改操作,
最后使用unlock tables; 语句对全局锁执行结束操作。
设置master2为master1的从库:
[[email protected] ~]# mysql -uroot -ppwd123
....
mysql> change master to master_host=‘192.168.4.10‘,master_user=‘slaveuser‘,master_password=‘pwd123‘,master_log_file=‘master1-bin.000001‘,master_log_pos=120;
数据复制的关键操作是配置从服务器去连接主服务器进行数据复制,我们需要告知从服务器建立网络连接所有必要的信息。
使用CHANGE MASTER TO 语句即可完成该项工作,
MASTER_HOST 指定主服务器主机名或IP地址,
MASTER_USER 为主服务器上创建的拥有复制权限的账户名称,
MASTER_PASSWORD 为该账户的密码,
MASTER_LOG_FILE 指定主服务器二进制日志文件名称,
MASTER_LOG_POS 为主服务器二进制日志当前记录的位置。
mysql> start slave; //启动同步进程
注:以为我之前做过主从,在启动同步进程的时候报错(1872)。可以用命令 reset slave; 然后在change master to重新连接。
mysql> show slave status\G //查看主从是否成功
....
启动同步进程后查看IO节点和SQL节点是否为Yes如果均为Yes表示主从正常。
Slave_IO_Running: Yes //IO节点正常
Slave_SQL_Running: Yes //SQL节点正常
....
设置slave1为master1从:
[[email protected] ~]# mysql -uroot -ppwd123
mysql>change master to master_host=‘192.168.4.10‘,master_user=‘slaveuser‘,master_password=‘pwd123‘,master_log_file=‘master1-bin.000001‘,master_log_pos=120;
mysql> start slave;
mysql> show slave status\G
....
Slave_IO_Running: Yes //IO节点正常
Slave_SQL_Running: Yes //SQL节点正常
....
mysql>
设置slave2为master1从:
[[email protected] ~]# mysql -uroot -ppwd123
....
mysql>change master to master_host=‘192.168.4.10‘,master_user=‘slaveuser‘,master_password=‘pwd123‘,master_log_file=‘master1-bin.000001‘,master_log_pos=120;
mysql> start slave;
mysql> show slave status\G
....
Slave_IO_Running: Yes //IO节点正常
Slave_SQL_Running: Yes //SQL节点正常
....
---------------------------------------------------------------------------------------------
5)配置主主从从关系,将master1配置为master2的从
查看master2的bin-log使用信息:
[[email protected] ~]# mysql -uroot -ppwd123
....
mysql> show master status\G
***************************1. row ***************************
File: master2-bin.000001
Position:120
Binlog_Do_DB:
Binlog_Ignore_DB:
Executed_Gtid_Set:
1 row inset(0.00 sec)
设置master1成为master2的从:
[[email protected] ~]# mysql -uroot -ppwd123
....
mysql> change master to master_host=‘192.168.4.11‘,master_user=‘slaveuser‘,master_password=‘pwd123‘,master_log_file=‘master2-bin.000001‘,master_log_pos=120;
mysql> start slave;
Query OK,0 rows affected(0.27 sec)
mysql> show slave status\G
....
Slave_IO_Running: Yes //IO节点正常
Slave_SQL_Running: Yes //SQL节点正常
....
6)测试主主从从架构是否成功
master1更新数据,查看其它主机是否同步:
[[email protected] ~]# mysql -uroot -ppwd123
....
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
+--------------------+
4 rows inset(0.00 sec)
mysql> create database tarena;
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| tarena |
| test |
+--------------------+
5 rows inset(0.00 sec)
mysql>
master2主机查看:
[[email protected] ~]# mysql -uroot -ppwd123 -e "show databases"
Warning: Using a password on the command line interface can be insecure.
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| tarena |
| test |
+--------------------+
slave1主机查看:
[[email protected] ~]# mysql -uroot -ppwd123 -e "show databases"
Warning: Using a password on the command line interface can be insecure.
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| tarena |
| test |
+--------------------+
slave2主机查看:
[[email protected] ~]# mysql -uroot -ppwd123 -e "show databases"
Warning: Using a password on the command line interface can be insecure.
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| tarena |
| test |
+--------------------+
=============================================================
2 mysql-MMM架构部署
使用5台centos服务器,其中192.168.4.10、192.168.4.11作为mysql双主服务器,192.168.4.12、192.168.4.13作为主服务器的从服务器,
192.168.4.100 作为mysql-MMM架构中管理监控服务器,实现监控mysql主从服务器的工作状态及决定故障节点的移除或恢复工作。
步骤一:安装mysql-MMM
安装依赖yum源(mysql集群内5台服务器master1,master2,slave1,slave2,monitor)均需安装
rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
1) 安装监控程序
在管理服务器(monitor)上,执行下面命令:
[[email protected] ~]# yum -y install mysql-mmm-monitor* perl-Time-HiRes*
2) 安装代理程序
mysql集群内4台服务器(master1、master2、slave1、slave2)
# yum -y install mysql-mmm-agent*
....
步骤二:修改配置文件
1)修改公共配置文件
本案例中mysql集群的5台服务器(master1、master2、slave1、slave2、monitor)都需要配置,可以先配好一台后使用scp复制。
[[email protected] ~]# vim /etc/mysql-mmm/mmm_common.conf
active_master_role writer
<host default>
cluster_interface eth0
pid_path /var/run/mmm_agentd.pid
bin_path /usr/lib/mysql-mmm/
replication_user slaveuser //设置主从同步的用户
replication_password pwd123 //设置主从同步用户密码
agent_user agent //mmm-agent控制数据库用户
agent_password agent //mmm-agent控制数据库用户密码
</host>
<host master1> //设置第一个主服务器
ip 192.168.4.10//master1 IP 地址
mode master
peer master2 //指定另外一台主服务器
</host>
<host master2> //指定另外一台主服务器
ip 192.168.4.11
mode master
peer master1
</host>
<host slave1> //设置第一台从服务器
ip 192.168.4.12//slave1 IP 地址
mode slave //本段落配置的是slave服务器
</host>
<host slave2>
ip 192.168.4.13
mode slave
</host>
<role writer> //设置写入服务器工作模式
hosts master1,master2 //提供写的主服务器
ips 192.168.4.200 //设置VIP地址
mode exclusive //排他模式
</role>
<role reader> //设置读取服务器工作模式
hosts slave1,slave2 //提供读的服务器信息
ips 192.168.4.201,192.168.4.202 //多个虚拟IP
mode balanced //均衡模式
</role>
....
2)修改管理主机配置文件(monitor主机配置)
[[email protected] ~]# vim /etc/mysql-mmm/mmm_mon.conf
include mmm_common.conf
<monitor>
ip 192.168.4.100//设置管理主机IP地址
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.4.10,192.168.4.11,192.168.4.12,192.168.4.13 //设置被监控数据库
</monitor>
<host default>
monitor_user monitor //监控数据库mysql用户
monitor_password monitor //监控数据库mysql用户密码
</host>
debug 0
....
[[email protected] ~]#
3)修改客户端配置文件
master1配置
[[email protected] ~]# vi /etc/mysql-mmm/mmm_agent.conf
include mmm_common.conf
this master1
master2配置
[[email protected] ~]# vi /etc/mysql-mmm/mmm_agent.conf
include mmm_common.conf
this master2
slave1配置
[[email protected] ~]# vi /etc/mysql-mmm/mmm_agent.conf
include mmm_common.conf
this slave1
slave2配置
[[email protected] ~]# vi /etc/mysql-mmm/mmm_agent.conf
include mmm_common.conf
this slave2
==========================================================
3 mysql-MMM架构使用
启动MMM集群架构
设置集群中服务器为online状态
mysql-MMM架构部署完成后需要启动,数据库端启动mmm-agent进程,管理端启动mmm-monitor进程,启动完成后设置所有数据库主机状态为online。
步骤一:启动MMM集群架构
1)启动mmm-agent进程
master1操作:
[[email protected] ~]# /etc/init.d/mysql-mmm-agent start
master2操作:
[[email protected] ~]# /etc/init.d/mysql-mmm-agent start
slave1操作:
[[email protected] ~]# /etc/init.d/mysql-mmm-agent start
slave2操作:
[[email protected] ~]# /etc/init.d/mysql-mmm-agent start
2)启动mmm-monitor进程
monitor主机操作:
[[email protected] ~]# /etc/init.d/mysql-mmm-monitor start
步骤二:设置集群中服务器为online状态
控制命令只能在管理端monitor服务器上执行。
查看当前集群中各服务器状态:
[[email protected] ~]# mmm_control show
master1(192.168.4.10)master/AWAITING_RECOVERY. Roles:
master2(192.168.4.11)master/AWAITING_RECOVERY. Roles:
slave1(192.168.4.12)slave/AWAITING_RECOVERY. Roles:
slave2(192.168.4.13)slave/AWAITING_RECOVERY. Roles:
设置4台数据库主机状态为online:
[[email protected] ~]# mmm_control set_online master1
OK: State of ‘master1‘ changed to ONLINE. Now you can wait some time and check its new roles!
[[email protected] ~]# mmm_control set_online master2
OK: State of ‘master2‘ changed to ONLINE. Now you can wait some time and check its new roles!
[[email protected] ~]# mmm_control set_online slave1
OK: State of ‘slave1‘ changed to ONLINE. Now you can wait some time and check its new roles!
[[email protected] ~]# mmm_control set_online slave2
OK: State of ‘slave2‘ changed to ONLINE. Now you can wait some time and check its new roles!
再次查看当前集群中各服务器状态:
[[email protected] ~]# mmm_control show
master1(192.168.4.10)master/ONLINE. Roles:writer(192.168.4.200)
master2(192.168.4.11)master/ONLINE. Roles:
slave1(192.168.4.12)slave/ONLINE. Roles:reader(192.168.4.201)
slave2(192.168.4.13)slave/ONLINE. Roles:reader(192.168.4.202)
步骤三:测试mysql-MMM架构
2)mysql-MMM虚拟IP访问测试
[[email protected] ~]# mysql -h192.168.4.200-uroot -ppwd123 -e "show databases"
Warning: Using a password on the command line interface can be insecure.
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| tarena |
| test |
+--------------------+
[[email protected] ~]#
[[email protected] ~]# mysql -h192.168.4.201-uroot -ppwd123 -e "show databases"
Warning: Using a password on the command line interface can be insecure.
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| tarena |
| test |
+--------------------+
[[email protected] ~]#
[[email protected] ~]# mysql -h192.168.4.202-uroot -ppwd123 -e "show databases"
Warning: Using a password on the command line interface can be insecure.
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| tarena |
| test |
+--------------------+
[[email protected] ~]#
3)主数据库宕机测试
[[email protected] ~]# service mysql stop //停止master1上服务
Shutting down mysql....[确定]
[[email protected] ~]# mmm_control show //查看集群内服务器状态
通过输出信息可以看到虚拟IP从master1切换到master2:
master1(192.168.4.10)master/HARD_OFFLINE. Roles:
master2(192.168.4.11)master/ONLINE. Roles:writer(192.168.4.200)
slave1(192.168.4.12)slave/ONLINE. Roles:reader(192.168.4.201)
slave2(192.168.4.13)slave/ONLINE. Roles:reader(192.168.4.202)
[[email protected] ~]# mysql -h192.168.4.200-uroot -ppwd123 -e "show databases" //访问虚拟IP测试
Warning: Using a password on the command line interface can be insecure.
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| tarena |
| test |
+--------------------+
[[email protected] ~]#
MySQL-MMM集群架构就完成了。
过程中遇到的问题:
我在第一次 mmm_control show 查看集群服务器状态的时候,发现除了master1的状态为AWAITING_RECOVERY, 其他三台为HARD_OFFLINE。
这是因为我最开始创建的monitor用户没有被同步过去,在主库master1 重新创建就好。
查看MYSQL数据库中所有用户 ,
mysql> SELECT DISTINCT CONCAT(‘User: ‘‘‘,user,‘‘‘@‘‘‘,host,‘‘‘;‘) AS query FROM mysql.user;
还有一个问题,我的环境是虚拟机克隆的,配置主从的时候遇到UUID冲突的问题,
停止数据库 把数据库所在目录下的auto.cnf 备份一份之后,删除。 重启就好了。
主库master1 一定要记得开启 log-slave-updates