时间:2021-07-01 10:21:17 帮助过:7人阅读
MMM即Multi-Master Replication Manager for MySQL:mysql多主复制管理器,基于perl实现,关于mysql主主复制配置的监控、故障转移和管理的一套可伸缩的脚本套件(在任何时候只有一个节点可以被写入)
MMM也能对从服务器进行读负载均衡,所以可以用它来在一组用于复制的服务器启动虚拟ip
它还有实现数据备份、节点之间重新同步功能的脚本。
MySQL本身没有提供replication failover的解决方案,通过MMM方案能实现服务器的故障转移,从而实现mysql的高可用。
MMM不仅能提供浮动IP的功能,如果当前的主服务器挂掉后,会将你后端的从服务器自动转向新的主服务器进行同步复制,不用手工更改同步配置。
这个方案是目前比较成熟的解决方案。详情请看官网:http://mysql-mmm.org
优点:高可用性,扩展性好,出现故障自动切换,对于主主同步,在同一时间只提供一台数据库写操作,保证的数据的一致性。当主服务器挂掉以后,另一个主立即接管,其他的从服务器能自动切换,不用人工干预。
缺点:monitor节点是单点,不过这个你也可以结合keepalived或者haertbeat做成高可用;至少三个节点,对主机的数量有要求,需要实现读写分离,还需要在前端编写读写分离程序。在读写非常繁忙的业务系统下表现不是很稳定,可能会出现复制延时、切换失效等问题。MMM方案并不太适应于对数据安全性要求很高,并且读、写繁忙的环境中。
适用场景:
MMM的适用场景为数据库访问量大,并且能实现读写分离的场景。
Mmm主要功能由下面三个脚本提供:
mmm_mond 负责所有的监控工作的监控守护进程,决定节点的移除(mmm_mond进程定时心跳检测,失败则将write ip浮动到另外一台master)等等
mmm_agentd 运行在mysql服务器上的代理守护进程,通过简单远程服务集提供给监控节点
mmm_control 通过命令行管理mmm_mond进程
在整个监管过程中,需要在mysql中添加相关授权用户,授权的用户包括一个mmm_monitor用户和一个mmm_agent用户,如果想使用mmm的备份工具则还要添加一个mmm_tools用户。
二、部署实施
1、环境介绍
OS:centos7.2(64位)数据库系统:mysql5.7.13
关闭selinux
配置ntp,同步时间
角色 | IP | hostname | Server-id | Write vip | Read vip |
Master1 | 192.168.0.100 | master1 | 1 | 192.168.0.1 | |
Master2(backup) | 192.168.0.200 | master2 | 2 | 192.168.0.2 | |
Slave1 | 192.168.0.159 | slave1 | 3 | 192.168.0.15 | |
monitor | 192.168.0.133 | monitor | 无 |
2、在所有主机上配置/etc/hosts文件,添加如下内容:
192.168.0.100 master1
192.168.0.200 master2
192.168.0.159 slave1
192.168.0.133 montitor
3在所有主机上安装perl perl-devel perl-CPAN libart_lgpl.x86_64 rrdtool.x86_64 rrdtool-perl.x86_64包
#yum -y install perl-* libart_lgpl.x86_64 rrdtool.x86_64 rrdtool-perl.x86_64
注:使用centos7在线yum源安装
4 安装perl的相关库
#cpan -i Algorithm::Diff Class::Singleton DBI DBD::mysql Log::Dispatch Log::Log4perl Mail::Send Net::Ping Proc::Daemon Time::HiRes Params::Validate Net::ARP Proc::Daemon Log::Log4perl
5在master1、master2、slave1、主机上安装mysql5.7和配置复制
master1和master2互为主从,slave1、为master1的从
在每个mysql的配置文件/etc/my.cnf中加入以下内容, 注意server-id不能重复。
master1主机
:
master2主机:
slave1主机:
6:在完成了对my.cnf的修改后,通过systemctl restart mysqld重新启动mysql服务
7:3台数据库主机若要开启防火墙,要么关闭防火墙或者创建访问规则:
firewall-cmd --permanent --add-port=3306/tcp
firewall-cmd --reload
8主从配置(master1和master2配置成主主,slave1配置成master1的从):
①在master1上授权:
在master2上授权:
②把master2、slave1配置成master1的从库:
在master1上执行show master status; 获取binlog文件和Position点
在master2和slave1执行
③验证主从复制:
master2主机:
slave1主机:
如果Slave_IO_Running和Slave_SQL_Running都为yes,那么主从就已经配置OK了
把master1配置成master2的从库:
在master2上执行show master status ;获取binlog文件和Position点
+------------------+----------+--------------+------------------+----------------------------------------------------+
在master1上执行:
验证主从复制:
如果Slave_IO_Running和Slave_SQL_Running都为yes,那么主从就已经配置OK了
9 , mysql-mmm配置:
在3台mysql节点上创建用户
注意1:因为之前的主从复制,以及主从已经是ok的,所以我在master1服务器执行就ok了。
检查master2和slave1两台db上是否都存在监控和代理账号
或
mmm_monitor用户:mmm监控用于对mysql服务器进程健康检查
mmm_agent用户:mmm代理用来更改只读模式,复制的主服务器等
10、mysql-mmm安装
在monitor主机(192.168.0.133) 上安装监控程序
在数据库服务器(master1、master2、slave1)上安装代理
cd /tmp
wget http://pkgs.fedoraproject.org/repo/pkgs/mysql-mmm/mysql-mmm-2.2.1.tar.gz/f5f8b48bdf89251d3183328f0249461e/mysql-mmm-2.2.1.tar.gz
tar zxf mysql-mmm-2.2.1.tar.gz
cd mysql-mmm-2.2.1
make install
11、配置mmm
编写配置文件,四台主机必须一致:
完成安装后,所有的配置文件都放到了/etc/mysql-mmm/下面。管理服务器和数据库服务器上都要包含一个共同的文件mmm_common.conf,内容如下:
active_master_rolewriter#积极的master角色的标示,所有的db服务器要开启read_only参数,对于writer服务器监控代理会自动将read_only属性关闭。
下面是复制文本的详细解释
<host default>
cluster_interfaceeno16777736#群集的网络接口
pid_path /var/run/mmm_agentd.pid#pid路径
bin_path /usr/lib/mysql-mmm/#可执行文件路径
replication_user rep#复制用户
replication_password 123456#复制用户密码
agent_user mmm_agent#代理用户
agent_password 123456#代理用户密码
</host>
<host master1>#master1的host名
ip 192.168.0.100#master1的ip
mode master#角色属性,master代表是主
peer master2#与master1对等的服务器的host名,也就是master2的服务器host名
</host>
<host master2>#和master的概念一样
ip 192.168.0.200
mode master
peer master1
</host>
<host slave1>#从库的host名,如果存在多个从库可以重复一样的配置
ip 192.168.0.159#从的ip
mode slave#slave的角色属性代表当前host是从
</host>
<role writer>#writer角色配置
hosts master1,master2#能进行写操作的服务器的host名,如果不想切换写操作这里可以只配置master,这样也可以避免因为网络延时而进行write的切换,但是一旦master出现故障那么当前的MMM就没有writer了只有对外的read操作。
ips 192.168.0.1#对外提供的写操作的虚拟IP
mode exclusive#exclusive代表只允许存在一个主,也就是只能提供一个写的IP
</role>
<role reader>#read角色配置
hosts master2,slave1#对外提供读操作的服务器的host名,当然这里也可以把master加进来
ips 192.168.0.2, 192.168.0.3, #对外提供读操作的虚拟ip,这两个ip和host不是一一对应的,并且ips也hosts的数目也可以不相同,如果这样配置的话其中一个hosts会分配两个ip
mode balanced#balanced代表负载均衡
</role>
同时将这个文件拷贝到其它的服务器,配置不变
#for host in master1 master2 slave1 monitor ; do scp /etc/mysql-mmm/mmm_common.conf $host:/etc/mysql-mmm/ ; done
12 代理文件配置
编辑 3台mysql节点机上的/etc/mysql-mmm/mmm_agent.conf
在数据库服务器上,还有一个mmm_agent.conf需要修改,其内容是:
includemmm_common.conf
this master1
注意:这个配置只配置db服务器,监控服务器不需要配置,this后面的host名改成当前服务器的主机名。
启动代理进程
在 /etc/init.d/mysql-mmm-agent的脚本文件的#!/bin/sh下面,加入如下内容
source /root/.bash_profile
添加成系统服务并设置为自启动
注意:添加source /root/.bash_profile目的是为了mysql-mmm-agent服务能启机自启。
自动启动和手动启动的唯一区别,就是激活一个console 。那么说明在作为服务启动的时候,可能是由于缺少环境变量
服务启动失败,报错信息如下:
Daemon bin: ‘/usr/sbin/mmm_agentd‘
Daemon pid: ‘/var/run/mmm_agentd.pid‘
Starting MMM Agent daemon... Can‘t locate Proc/Daemon.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at /usr/sbin/mmm_agentd line 7.
BEGIN failed--compilation aborted at /usr/sbin/mmm_agentd line 7.
failed
解决方法:
# cpan Proc::Daemon
# cpan Log::Log4perl
配置防火墙,或直接关闭防火墙
firewall-cmd --permanent --add-port=9989/tcp
firewall-cmd --reload
注意:以上部署在三台mysql节点上都要完成
13编辑 m