超详细MySQL主主复制+MMM实现高可用

简介

MMM(Master-Master Replication Manager for MySQL, MySQL主主复制管理器)是一套灵活的脚本程序,基于perl实现,用来对mysql replication进行监控和故障迁移,并能管理mysql Master-Master复制的配置。注意同一时间只有一个节点是可写。MMM的监管端会提供多个虚拟IP(VIP)包括一个可写VIP,多个可读VIP,通过监管的管理,这些IP会绑定在可用mysql之上,当某一台mysql宕机时,会将VIP迁移至其他mysql。

mmm_mond:监控进程,负责所有的监控工作,决定和处理所有节点角色活动。此脚本需要在监管机上运行;
mmm_agentd:运行在每个mysql服务器上的代理进程,完成监控的探针工作和执行简单的远端服务设置。此脚本需要在被监管机上运行;
mmm_control:一个简单的脚本,提供管理mmm_mond进程的命令

实验环境

主机名称 操作系统 IP地址 虚拟IP 主要软件 网络连接模式
master01 CentOS_7.4_x86_64 192.168.100.71 192.168.100.100 mariadb、mysql-mmm NAT
master02 CentOS_7.4_x86_64 192.168.100.72 192.168.100.100 mariadb、mysql-mmm NAT
monitor、客户端 CentOS_7.4_x86_64 192.168.100.73 mariadb、mysql-mmm NAT
slave01 CentOS_7.4_x86_64 192.168.100.74 192.168.100.102 mariadb、mysql-mmm NAT
slave02 CentOS_7.4_x86_64 192.168.100.75 192.168.100.101 mariadb、mysql-mmm NAT

准备工作

一、准备工作

1、编辑主机名

[[email protected] ~]# hostnamectl set-hostname master01
[[email protected] ~]# hostnamectl set-hostname master02
[[email protected] ~]# hostnamectl set-hostname monitor
[[email protected] ~]# hostnamectl set-hostname slave01
[[email protected] ~]# hostnamectl set-hostname slave02
[[email protected] ~]# bash

2、三台主机关闭防火墙及selinux

[[email protected] ~]# systemctl stop firewalld.service
[[email protected] ~]# systemctl disable firewalld.service
[[email protected] ~]# vim /etc/sysconfig/selinux

3、重启服务

[[email protected] ~]# reboot

一、搭建、配置mysql01主服务器

1、配置本地yum源

[[email protected] ~]# cd /etc/yum.repos.d/
[[email protected] yum.repos.d]# mkdir bak #创建备份目录
[[email protected] yum.repos.d]# mv CentOS-* bak/ #将系统yum源仓库进行备份

[[email protected] yum.repos.d]# vim local.repo#创建自建yum源

#添加以下参数:
[local]                           #容器名称
name=local                  #容器说明
baseurl=file:///mnt/sr0  #yum源地址即挂载点
gpgcheck=0                 #"0"代表rpm数字证书验证不生效
enabled=1                    #"1"代表此容器生效

[[email protected] ~]# mkdir /mnt/sr0/
[[email protected] ~]# mount /dev/sr0 /mnt/sr0/ #挂载光盘

2、安装epel源

[[email protected] ~]# yum -y install wget #wget命令用来从指定的URL下载文件
[[email protected] ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo #将官网的yum源下载至本地网络yum源
[[email protected] ~]# yum -y install epel-release #下载epel源扩展
[[email protected] ~]# cat /etc/yum.repos.d/epel.repo

3、替换镜像源

[[email protected] ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo #将epel源的服务器IP地址换成阿里

4、五台主机安装相关软件包

[[email protected] ~]# yum -y install mariadb-server mariadb mysql-mmm*

#解析:
mysql-mmm*:主主复制管理器
mariadb:客户端
mariadb-server:服务器端

5、修改mariadb配置文件

[[email protected] ~]# vim /etc/my.cnf

#添加以下参数:

[mysqld]
log_error=/var/lib/mysql/mysql.err                       #错误日志路径
log=/var/lib/mysql/mysql_log.log                         #通用查询日志
log_slow_queries=/var/lib/mysql/mysql_slow_queris.log    #慢查询日志路径
binlog-ignore-db=mysql,information_schema                #不需要同步的数据库名称
character_set_server=utf8                                #设置默认字符集
log_bin=mysql_bin                                        #启用二进制的日志 !!!!!主从复制核心
server_id=1                                              #服务器id,方便区分,注意每台机子id都不一样
log_slave_updates=true                                   #允许从服务器进行日志更新
sync_binlog=1                                            #允许从服务器同步二进制日志
auto_increment_increment=2                               #字段一次递增多少
auto_increment_offset=1                                  #自增字段的起始值:1,3,5,7……等奇数ID
[client]
default_character_set=utf8                               #设置默认字符集

6、启动mysql服务器

[[email protected] ~]# systemctl start mariadb.service
[[email protected] ~]# netstat -anpt | grep ‘:3306‘

7、设置初始密码

[[email protected] ~]# mysqladmin -uroot password ‘123‘

二、搭建、配置其余三台数据库服务器

其他服务器安装和master01服务器安装相同,安装过程,略……

1、master01服务器上传配置文件

!!!!!!!!!!!一定要注意配置文件参数其他都是一样,server-id一定要改成不一样的

[[email protected] ~]# scp -r /etc/my.cnf [email protected]:/etc/my.cnf
[[email protected] ~]# scp -r /etc/my.cnf [email protected]:/etc/my.cnf
[[email protected] ~]# scp -r /etc/my.cnf [email protected]:/etc/my.cnf

三、配置mysql主主复制

1、配置master01服务器

[[email protected] ~]# mysql -u root -p123 -e "show master status;" #查看master02服务器状态

[[email protected] ~]# mysql -u root -p123 #登陆mariadb
MariaDB [(none)]> grant replication slave on . to ‘replication‘@‘192.168.100.%‘ identified by ‘123456‘;
#授权从服务器复制权限

MariaDB [(none)]> change master to master_host=‘192.168.100.72‘,master_user=‘replication‘,master_password=‘123456‘, master_log_file=‘mysql_bin.000001‘,master_log_pos=388;
#指定master02服务器为主服务器

2、配置master02服务器

MariaDB [(none)]> show master status; #查看master01服务器状态

[[email protected] ~]# mysql -u root -p123 #登陆mariadb
MariaDB [(none)]> grant replication slave on . to ‘replication‘@‘192.168.100.%‘ identified by ‘123456‘;

MariaDB [(none)]> change master to master_host=‘192.168.100.71‘,master_user=‘replication‘,master_password=‘123456‘, master_log_file=‘mysql_bin.000006‘,master_log_pos=554;
#指定master02服务器为主服务器

3、开启两台主主服务器同步功能

MariaDB [(none)]> start slave;

4、查看同步结果

MariaDB [(none)]> show slave status\G; #查看master01服务器状态

MariaDB [(none)]> show slave status\G; #查看master02服务器状态

四、配置slave01、slave02作为master01的从库

1、查看master01服务器二进制日志文件名称以及位置

[[email protected] ~]# mysql -u root -p -e "show master status;"

2、设置slave01作为master01的从库

[[email protected] ~]# mysql -uroot -p
MariaDB [(none)]> change master to master_host=‘192.168.100.71‘,master_user=‘replication‘,master_password=‘123456‘, master_log_file=‘mysql_bin.000006‘,master_log_pos=720;
#指定master01作为主服务器
MariaDB [(none)]> start slave;
MariaDB [(none)]> show slave status\G;

3、再次查看master01服务器状态

4、设置slave02作为master01的从库

[[email protected] ~]# mysql -uroot -p
MariaDB [(none)]> change master to master_host=‘192.168.100.71‘,master_user=‘replication‘,master_password=‘123456‘, master_log_file=‘mysql_bin.000006‘,master_log_pos=720;
#指定master01作为主服务器
MariaDB [(none)]> start slave;
MariaDB [(none)]> show slave status\G;

五、测试主主同步、主从同步

1、master01服务器创建测试数据

[[email protected] ~]# mysql -uroot -p
MariaDB [(none)]> create database test_db;

2、查看其他三台数据库服务器

六、配置MySQL-MMM

1、五台主机编辑common配置文件

[[email protected] ~]# cd /etc/mysql-mmm/
[[email protected] mysql-mmm]# vim mmm_common.conf

#添加、编辑以下参数:
active_master_role      writer
<host default>  #编辑主机默认设置
    cluster_interface       ens33                    #群集接口,这里用的是CentOS7,修改自己对应的网卡名称
    pid_path                /run/mysql-mmm-agent.pid #运行agent保存的pid位置
    bin_path                /usr/libexec/mysql-mmm/  #可执行命令
    replication_user        replication              #Mariadb给予权限的用户
    replication_password    123456                   #Mariadb给予权限的用户密码
    agent_user              mmm_agent                #agent客户端代理用户(需要在所有mysql服务器上设置)
    agent_password          123456                   #agent客户端代理用户密码
</host>

<host db1>  #第一个数据库
    ip      192.168.100.71
    mode    master
    peer    db2 #db1和db2数据库是一对,互相切换
</host>

<host db2>  #第二个数据库
    ip      192.168.100.72
    mode    master
    peer    db1
</host>

<host db3>  #第三个数据库(第一个从数据库)
    ip      192.168.100.74
    mode    slave
</host>

<host db4>  #第四个数据库(第二个从数据库)
    ip      192.168.100.75
    mode    slave
</host>

<role writer> #设置主服务器角色(写操作)
    hosts   db1, db2
    ips     192.168.100.100 #指定虚拟IP
    mode    exclusive #指定模式,db1和db2只能存在一个IP地址,只能有一台主机进行写入操作
</role>

<role reader> #设置从服务器角色(读操作)
    hosts   db3,db4
    ips     192.168.100.101, 192.168.100.102 #指定虚拟IP
    mode    balanced  #负载均衡,读取操作会从db3、db4主机进行
</role>

2、将common配置文件上传至其他4台主机上

[[email protected] mysql-mmm]# scp mmm_common.conf [email protected]:/etc/mysql-mmm/
[[email protected] mysql-mmm]# scp mmm_common.conf [email protected]:/etc/mysql-mmm/
[[email protected] mysql-mmm]# scp mmm_common.conf [email protected]:/etc/mysql-mmm/
[[email protected] mysql-mmm]# scp mmm_common.conf [email protected]:/etc/mysql-mmm/

3、monitor服务器编辑mmm_mon.conf文件

[[email protected] ~]# cd /etc/mysql-mmm/
[[email protected] mysql-mmm]# vim mmm_mon.conf

<host default>
    monitor_user        mmm_monitor
    monitor_password    123456 #修改密码,方便mysql授权
</host>

4、四台数据库服务器授权agent、monitor

[[email protected] ~]# mysql -u root -p
#授权agent
mysql> grant super,replication client,process on . to ‘mmm_agent‘@‘192.168.100.%‘ identified by ‘123456‘;
#授权monitor
mysql> grant replication client on . to ‘mmm_monitor‘@‘192.168.100.%‘ identified by ‘123456‘;
#刷新权限
mysql> flush privileges;

5、修改agent文件

[[email protected] ~]# cd /etc/mysql-mmm/
[[email protected] mysql-mmm]# vim mmm_agent.conf

6、五台服务器启动agent服务

[[email protected] ~]# systemctl start mysql-mmm-agent.service
[[email protected] ~]# systemctl enable mysql-mmm-agent.service

7、monitor服务器编辑mmm_mon文件

[[email protected] ~]# cd /etc/mysql-mmm/
[[email protected] mysql-mmm]# vim mmm_mon.conf

#编辑以下参数
ping_ips            192.168.100.71,192.168.100.72,192.168.100.74,192.168.100.75  #约第8行,添加所有数据库IP地址
auto_set_online     10   #约第9行,代表10秒钟上线

8、monitor服务器启动mmm

[[email protected] ~]# systemctl start mysql-mmm-monitor.service
[[email protected] ~]# mmm_control show

[[email protected] ~]# mmm_control checks all

[[email protected] ~]# mmm_control move_role writer db2 #指定db2服务器绑定虚拟IP
[[email protected] ~]# mmm_control show

七、模拟故障

1、宕掉master01服务器

[[email protected] ~]# mmm_control move_role writer db1 #指定db1服务器绑定虚拟IP
[[email protected] ~]# systemctl stop mariadb.service
[[email protected] ~]# mmm_control show

2、恢复master01绑定虚拟IP

[[email protected] ~]# systemctl start mariadb.service
[[email protected] ~]# mmm_control move_role writer db1
[[email protected] ~]# mmm_control show

3、宕掉slave01服务器

[[email protected] ~]# systemctl stop mariadb.service
[[email protected] ~]# mmm_control show

4、恢复slave01绑定虚拟IP

[[email protected] ~]# systemctl start mariadb.service
[[email protected] ~]# mmm_control show

原文地址:http://blog.51cto.com/11905606/2171900

时间: 2024-08-03 22:06:50

超详细MySQL主主复制+MMM实现高可用的相关文章

mysql主主复制及keepalived高可用群集

mysql主主复制及keepalived高可用 Keepalived+mysql双主来实现MySQL-HA,我们必须保证两台MySQL数据库的数据完全一样,基本思路是两台MySQL互为主从关系(双主),通过Keepalived配置虚拟IP,实现当其中的一台MySQL数据库宕机后,应用能够自动切换到另外一台MySQL数据库,保证系统的高可用. 实验基本拓扑: 主主同步就是两台机器互为主从的关系,在任何一台机器上写入都会同步. 在master1 mysql主配置文件中添加下面参数(/etc/my.c

Keepalived+MySQL主主互备模式实现高可用 &nbsp; &nbsp; &nbsp;

MySQL的高可用方案很多,这是一个配置简单而且实用的高可用解决方案. 实验架构图: 修改DB1配置文件增加以下几项: [mysqld] log-bin=mysql-bin relay-log=mysql-relay-bin server-id=1 replicate-wild-ignore-table=mysql.% replicate-wild-ignore-table=test.% replicate-wild-ignore-table=information_schema.% 修改DB2

MMM搭建高可用mysql集群

简介 MMM(Master-Master replication manager for MySQL)是一套支持双主故障切换和双主日常管理的脚本程序.MMM使用Perl语言开发,主要用来监控和管理MySQL Master-Master(双主)复制,虽然叫做双主复制,但是业务上同一时刻只允许对一个主进行写入,另一台备选主上提供部分读服务,以加速在主主切换时刻备选主的预热,可以说MMM这套脚本程序一方面实现了故障切换的功能,另一方面其内部附加的工具脚本也可以实现多个slave的read负载均衡. M

单表60亿记录等大数据场景的MySQL优化和运维之道 | 高可用架构(转)

转自http://www.php1.cn/Content/DanBiao_60_YiJiLuDengDaShuJuChangJingDe_MySQL_YouHuaHeYunWeiZhiDao_%7C_GaoKeYongJiaGou.html, 更多详细资料请参看原文 此文是根据杨尚刚在[QCON高可用架构群]中,针对MySQL在单表海量记录等场景下,业界广泛关注的MySQL问题的经验分享整理而成,转发请注明出处. 杨尚刚,美图公司数据库高级DBA,负责美图后端数据存储平台建设和架构设计.前新浪高

[转载] 单表60亿记录等大数据场景的MySQL优化和运维之道 | 高可用架构

原文: http://mp.weixin.qq.com/s?__biz=MzAwMDU1MTE1OQ==&mid=209406532&idx=1&sn=2e9b0cc02bdd4a02f7fd81fb2a7d78e3&scene=1&key=0acd51d81cb052bce4ec2a825666e97fe7d6e1072fb7d813361771645e9403309eb1af025691162c663b60ea990c3781&ascene=0&

【转】单表60亿记录等大数据场景的MySQL优化和运维之道 | 高可用架构

此文是根据杨尚刚在[QCON高可用架构群]中,针对MySQL在单表海量记录等场景下,业界广泛关注的MySQL问题的经验分享整理而成,转发请注明出处. 杨尚刚,美图公司数据库高级DBA,负责美图后端数据存储平台建设和架构设计.前新浪高级数据库工程师,负责新浪微博核心数据库架构改造优化,以及数据库相关的服务器存储选型设计. 前言 MySQL数据库大家应该都很熟悉,而且随着前几年的阿里的去IOE,MySQL逐渐引起更多人的重视. MySQL历史 1979年,Monty Widenius写了最初的版本,

MySQL主从复制、读写分离、高可用集群搭建

MySQL主从复制.读写分离.高可用集群搭建  一.服务介绍   1.1 Keepalived     Keepalived,见名知意,即保持存活,其目的是解决单点故障,当一台服务器宕机或者故障时自动切换到其他的服务器中.Keepalived是基于VRRP协议实现的.VRRP协议是用于实现路由器冗余的协议,VRRP协议将两台或多台路由器设备虚拟成虚拟设备,可以对外提供虚拟路由器IP(一个或多个),即漂移IP(VIP). 1.2 ProxySQL ProxySQL是一个高性能,高可用性的MySQL

超详细搭建Memcached主主复制+Keepalived高可用架构

简介 Memcached本身是基于内存的缓存,它的设计本身没有冗余机制.如果一个Memcached节点失去了所有的数据,应用程序可以从数据源中再次获取到数据,可以使用开源软件Magent实现Memcached集群,通过Magen缓存代理,防止单点现象.缓存代理也可以做备份,可以用keepalived软件实现高可用 实验环境 主机名 操作系统 IP地址 相关软件 master CentOS_7.4_x86_64 192.168.100.71 libevent-2.1.8-stable.tar.gz

mysql主主复制+keepalived实现高可用

mysql最简单的高可用 2台pc机 mysql主主复制实现数据的同步 keepalive实现双机热备,保证服务的正常运行 1.环境 Master1  10.0.0.201 Master2 10.0.0.202 2.Master1操作授权 mysql>grant replication slave on *.* to'admin'@'10.0.0.202' identified by '123456';///授权 mysql>show master status\G; 3.Master2操作授