1 MMM概述
1.1 关于mysql-mmm
MySQL主主复制管理器
MySQL主主复制配置的监控,故障转移和管理的一套脚本套件;
能对居于标准的主从配置的任意数量的从服务器进行读负载均衡和实现数据备份;
通过MMM方案能实现服务器的故障转移,从而实现mysql的高可用。
1.2 高可用集群介绍:
主备模式 当主不能提供服务的时候备用主机接替它提供服务,这个过程对于客户端是透明的。
1.3 案例 前提环境:主从从结构
5台服务器,2台数据服务器台互为主主,另2台数据服务器为主中的一台的从,1台监控服务器。
master51:192.168.4.51
master52:192.168.4.52
slave53:192.168.4.53
slave54:192.168.4.54
write-vip:192.168.4.100
read-vip:192.168.4.101/102
1.4 主主模式配置
(1)用户授权
在master51上配置
mysql> grant replication slave on *.* to 用户名@192.168.4.52 identified by "密码";
同样的操作在master52上给192.168.4.51授权
(2)启用binlog日志
master51和master52除了server_id不一致其它保持一致
vim /etc/my.cnf
server_id=51
log-bin
binlog-format="mixed"
(3)重启数据库服务器
systemctl restart mysqld
(4)查看正在使用binlog日志文件。
mysql> show master status;
从服务器配置
master51为主数据库,master52为从数据库时:
(1)在52上测试主库授权的用户是否有效
#mysql -h192.168.4.51 -u用户名 -p密码
mysql> show grants;
(2)在52本机数据管理员登录主库信息
mysql> change master to
-> master_host="192.168.4.51",
-> master_user="用户名",
-> master_password="密码",
-> master_log_file=“主的文件名", #show master status可以看到
-> master_log_pos=数字; #查看主的Position(偏移位置)
(5)开启从服务
mysql> start slave;
mysql> show slave status\G;
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
必须保证Slave_IO,Slave_SQL的状态为yes。
(6) master52为主数据库,master51为从数据库时,在master51上操作同上。
2 Mysql-MMM构架
2.1 服务器角色
管理节点:mmm-monitor(服务进程) (55服务器)
#负责所有的监控工作的监控守护进程,决定故障节点的移除或恢复;
数据库节点:mmm-agent(服务进程) (即51---54的服务器)
#运行在Mysql服务器上的代理守护进程,提供简单远程服务集,提供给监控节点;
2.2 核心软件包及作用
Net-ARP:分配虚拟Ip地址
mysql-mmm 构架的核心进程
2.3 配置
(1)tar -xf mysql-mmm-2.2.1.tar.gz(所有主机上安装)
查看说明文件,执行make install
配置文件路径:/etc/mysql-mmm
(2)修改数据节点主机mmm_agentd服务的配置文件
vim /etc/mysql-mmm/mmm_agent.conf #指定服务器在集群中的名称,不能重复
this 主机名 #配置声明自己的主机名
(3)修改管理节点主机mmm_monitor服务的配置文件
vim /etc/mysql-mmm/mmm_mon.conf
include mmm_common.conf #加载公共配置文件
ip 192.168.4.55 #管理节点主机(即监控主机的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.51, 192.168.4.52, 192.168.4.53, 192.168.4.54 #设置被监控的数据库
monitor_user monitor #监控数据库的mysql用户
monitor_password 123456
debug 0 #启动服务不显示启动信息(1显示)
(4)修改公共配置文件
vim /etc/mysql-mmm/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 ser51
#设置主从同步的用户,要和主数据库给本机授权的用户一致,
#可在/var/lib/mysql/master.info 中查看
replication_password 123456
agent_user agent #mmm_agent控制用户
agent_password 123456
ip 192.168.4.51 #主服务器IP
mode master
peer master52 #指定另一台主服务器
ip 192.168.4.52
mode master
peer master51
ip 192.168.4.53
mode slave
ip 192.168.4.54
mode slave
hosts master51, master52 #写的主服务器
ips 192.168.4.100 #设置VIP地址
mode exclusive #独占模式,只允许51/52一个使用
hosts slave53, slave54
ips 192.168.4.101, 192.168.4.102 #reader-vip
mode balanced #均衡模式
(5)根据配置文件设置,在数据节点主机添加对应的授权用户
管理节点监控数据库用户授权
mysql> grant replication client on *.* to monitor@'%' identified by "123456";
数据库节点控制数据库用户授权
mysql> grant replication client,process,super on *.* to agent@'%' identified by "123456";
2.4 安装依赖关系
所有服务器上安装:
书写一个脚本:
vim install.sh
#!/bin/bash
yum -y install perl-*
rpm -q gcc gcc-c++
if [ $? -ne 0 ];then
yum -y install gcc gcc-c++
fi
tar -xf Algorithm-Diff-1.1902.tar.gz
cd Algorithm-Diff-1.1902
perl Makefile.PL
make
make install
cd ..
rpm -ivh perl-Log-Log4perl-1.26-1.el6.rf.noarch.rpm
tar -zxf Proc-Daemon-0.03.tar.gz
cd Proc-Daemon-0.03
perl Makefile.PL
make
make install
cd ..
gunzip Net-ARP-1.0.8.tgz
tar -xf Net-ARP-1.0.8.tar
cd Net-ARP-1.0.8/
perl Makefile.PL
make
make install
2.5启动服务
(1)启动数据节点主机mmm_agentd服务
[root@ser51 ~]# /etc/init.d/mysql-mmm-agent start (stop,status)
[root@ser55 ~]# netstat -anptu |grep 9989
(2)启动管理节点主机mmm_monitor服务
[root@ser55 ~]# /etc/init.d/mysql-mmm-monitor start
[root@ser55 ~]# netstat -anptu |grep 9988
(3)在管理节点主机上,查看监控信息
[root@ser55 ~]# mmm_control show
defined(@array) is deprecated at /usr/share/perl5/vendor_perl/Log/Log4perl/Config.pm line 863.
(Maybe you should just omit the defined()?)
master51(192.168.4.51) master/AWAITING_RECOVERY. Roles
master52(192.168.4.52) master/AWAITING_RECOVERY. Roles
slave53(192.168.4.54) slave/AWAITING_RECOVERY. Roles
slave54(192.168.4.53) slave/AWAITING_RECOVERY. Roles
[root@ser55 ~]# mmm_control set_online master51(agent配置文件里设置的名称;set_offine:不在线状态)
defined(@array) is deprecated at /usr/share/perl5/vendor_perl/Log/Log4perl/Config.pm line 863.
(Maybe you should just omit the defined()?)
master51(192.168.4.51) master/ONLINE. Roles: writer(192.168.4.100)
master52(192.168.4.52) master/ONLINE. Roles:
slave53(192.168.4.54) slave/ONLINE. Roles: reader(192.168.4.102)
slave54(192.168.4.53) slave/ONLINE. Roles: reader(192.168.4.101)
此时ping 192.168.4.100/101/102 都可以ping通(保证该网段这几个ip没有被占用)
(4)数据节点主机查看 VIP 地址?
ip addr show | grep 192.168.4.
2.6 测试
mysql> grant all on *.* to 用户名@'%' identified by "123456"; #授权客户端连接数据库用户
mysql -h192.168.4.100 -u用户名 -p123456
无论关掉master51的还是master52的数据库服务,此时VIP会被其中一个占用,用户连接同样的VIP一样能够连接数据库,且在数据库进行操作后,挂掉主的数据库服务器重启启用后,数据会自动同步。此时VIP不会被抢占。
停掉agent服务,当其中一个主数据库停掉,监控不能够自动切换VIP。