MySQL数据库高可用之mmm

一:MMM简介
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在所有主机上配置/etc/hosts文件,添加如下内容:
192.168.179.10 master1
192.168.179.20 master2
192.168.179.30 slave1
192.168.179.40 slave2
192.168.179.50 monitor1

2在所有主机上安装perl perl-devel perl-CPAN libart_lgpl.x86_64 rrdtool.x86_64 rrdtool-perl.x86_64包
(ip可以自己定义)
语法:yum -y install perl-* libart_lgpl.x86_64 rrdtool.x86_64 rrdtool-perl.x86_64
在这里插入图片描述

使用centos7在线yum源安装安装perl的相关库
如果使用国外云会卡顿可转换云
Cpan进入cpan中

cpan[3]> o conf urllist (查看当前使用的云服务)
urllist 
0 [http://cpan.mirror.digitalpacific.com.au/]
1 [http://cpan.lagoon.nc/pub/CPAN/]
Type 'o conf' to view all configuration items
cpan[4]> o conf urllist pop http://cpan.lagoon.nc/pub/CPAN/ (删除云)
Please use 'o conf commit' to make the config permanent!
cpan[5]> o conf urllist pop http://cpan.mirror.digitalpacific.com.au/ (删除云)
Please use 'o conf commit' to make the config permanent!
cpan[6]> o conf commit(查看提交)
commit: wrote '/root/.cpan/CPAN/MyConfig.pm'
cpan[7]> o conf urllist push http://mirrors.ustc.edu.cn/CPAN/ (添加云)
Please use 'o conf commit' to make the config permanent!
cpan[8]> o conf urllist push http://mirrors.aliyun.com/CPAN/(添加云)
Please use 'o conf commit' to make the config permanent!
cpan[9]> o conf commit
commit: wrote '/root/.cpan/CPAN/MyConfig.pm'
cpan[10]> o conf urllist
urllist 
0 [http://mirrors.ustc.edu.cn/CPAN/]
1 [http://mirrors.aliyun.com/CPAN/]
Type 'o conf' to view all configuration items

退出云quit
使用yum源安装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

3在master1、master2、slave1、slave2主机上安装mysql5.7和配置复制 master1和master2互为主从, slave1、slave2为master1的从 在每个mysql的配置文件/etc/my.cnf中加入以下内容, 注意server-id不能 重复。
master1主机:

log-bin = mysql-bin 
binlog_format = mixed 
server-id = 1 
relay-log = relay-bin 
relay-log-index = slave-relay-bin.index 
log-slave-updates = 1 
auto-increment-increment = 2 
auto-increment-offset = 1

在这里插入图片描述

master2主机:

log-bin = mysql-bin 
binlog_format = mixed 
server-id = 2 
relay-log = relay-bin 
relay-log-index = slave-relay-bin.index 
log-slave-updates = 1 
auto-increment-increment = 2 
auto-increment-offset = 2

在这里插入图片描述

slave1主机:

server-id = 3 
relay-log = relay-bin 
relay-log-index = slave-relay-bin.index 
read_only = 1

在这里插入图片描述

slave2主机:

server-id = 4 
relay-log = relay-bin 
relay-log-index = slave-relay-bin.index 
read_only = 1

在这里插入图片描述

在完成了对my.cnf的修改后,通过systemctl restart mysqld重新启动mysql服务4台数据库主机若要开启防火 墙,要么关闭防火墙或者创建访问规则:
firewall-cmd --permanent --add-port=3306/tcp
firewall-cmd --add-port=3306/tcp
在这里插入图片描述

主从配置(master1和master2配置成主主,slave1和slave2配置成master1的从):
在master1上授权:
grant replication slave on . to rep@‘192.168.179.%’ identified by ‘123456’;
在这里插入图片描述

在master2上授权:
grant replication slave on . to rep@‘192.168.179.%’ identified by ‘123456’;
在这里插入图片描述

把master2、slave1和slave2配置成master1的从库: 在master1上执行show master status; 获取binlog文件和 Position点
语法:show master status;
在这里插入图片描述

在master2、slave1和slave2执行
change master to master_host=‘192.168.31.83’,master_port=3306,master_user=‘rep’,master_password=‘12 3456’,master_log_file=‘mysql-bin.000001’,master_log_pos=452;
在这里插入图片描述

验证从服务
Show slave status
Master2 slave1 slave2
在这里插入图片描述

如果Slave_IO_Running和Slave_SQL_Running都为yes,那么主从就已经配置OK了 把master1配置成master2的从 库: 在master2上执行show master status ;获取binlog文件和Position点
语法:show master status
在这里插入图片描述

在master1上执行
在这里插入图片描述

验证主从复制master1服务
在这里插入图片描述

如果Slave_IO_Running和Slave_SQL_Running都为yes,那么主从就已经配置OK了

4、mysql-mmm配置: 在4台 mysql节点上创建用户 创建代理账号
语法1:grant super,replication client,process on . to ‘mmm_agent’@‘192.168.179.%’ identified by ‘123456’;
语法2:grant replication client on . to ‘mmm_monitor’@‘192.168.179.%’ identified by ‘123456’;
在这里插入图片描述

因为之前的主从复制,以及主从已经是ok的,所以我在master1服务器执行就ok了。 检查master2和 slave1、slave2三台db上是否都存在监控和代理账号
语法1:select user,host from mysql.user where user in (‘mmm_monitor’,’mmm_agent’)
语法2:show grants for ‘mmm_agent’@‘192.168.179.%’
show grants for ‘mmm_monitor’@‘192.168.179.%’
在这里插入图片描述

  1. mysql-mmm安装 在monitor主机上安装监控程序
    在这里插入图片描述

在数据库服务器(master1、master2、slave1、slave2)上安装代理

6置mmm 编写配置文件,五台主机必须一致: 完成安装后,所有的配置文件都放到了/etc/mysqlmmm/下面。管理服务器和数据库服务器上都要包含一个共同的文件mmm_common.conf
在这里插入图片描述
在这里插入图片描述

将此文件传于剩下主机
语法:for i in master2 slave1 slave2 monitor ;do scp mmm_common.conf $i:/etc/mysql-mmm/;done
在这里插入图片描述

调整mmm的主配文件
语法:vim mmm_agent.conf
This xxxx(查看本机属于哪个设置的名称)
在这里插入图片描述

在mmm配置添加第二行
语法:vim /etc/init.d/mysql-mmm-agent
Source /root/.bash_profile
在这里插入图片描述

启动mmm
语法:
chkconfig --add /etc/init.d/mysql-mmm-agent
chkconfig mysql-mmm-agent on
/etc/init.d/mysql-mmm-agent start
在这里插入图片描述

查看服务是否开启在开启端口
语法:
ss -anpt|grep mmm
firewall-cmd --add-port=9989/tcp --permanent
firewall-cmd --reload
在这里插入图片描述

把上述配置复制到另几台主机上
语法:for i in master2 slave1 slave2 ;do scp /etc/init.d/mysql-mmm-agent $i:/etc/init.d/;done
在这里插入图片描述

复制完需开启mmm服务与端口
语法:
chkconfig --add /etc/init.d/mysql-mmm-agent
chkconfig mysql-mmm-agent on
/etc/init.d/mysql-mmm-agent start
ss -anpt|grep mmm
firewall-cmd --add-port=9989/tcp --permanent
firewall-cmd --reload
在这里插入图片描述

在monitor中文件修改mmm
语法:
vim mmm_mon.conf

添加auto_set_online 0
ping-ips 后改为主从ip192.168.179.133,192.168.179.138,192.168.179.139,192.168.179.140
password密码(更改为设置的密码)
添加:
<check default>
check_period 5
trap_period 10
timeout 2
restart_after 10000
max_backlog 86400
</check>

在这里插入图片描述

修改mmm文件
语法:
vim /etc/init.d/mysql-mmm-monitor
添加source /root/.bash_profile
chkconfig --add /etc/init.d/mysql-mmm-monitor
/etc/init.d/mysql-mmm-monitor start
在这里插入图片描述
在这里插入图片描述

查看mmm
mmm_control show
在这里插入图片描述

在主从上ld上写
语法:
vim /etc/ld.so.conf
添加:/usr/local/mysql/lib
在这里插入图片描述

执行文件后刷新
语法:
ldconfig

在monitor主机上写入
mmm_control checks master1(master2,slave1,slave2)
mmm_control show
在这里插入图片描述
在这里插入图片描述

此时就可以上四台上查看ip
语法:show slave status\G
Master1:
在这里插入图片描述

Master2
在这里插入图片描述

Slave1
在这里插入图片描述

Slave2
在这里插入图片描述

如果master2无反应moitor上
/etc/init.d/mysqld stop

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值