基于mysql-mmm实现MySQL数据库的高可用

MMM简介

MMM(Master-Master Replication Manager for MySQL)MySQL主主复制管理器,实现了对MySQL双主复制架构的监控,故障转移和管理。mysql-mmm在实现过程中提供了多个虚拟IP,包括用于写操作的虚拟IP和用于读操作的虚拟IP。在双主复制架构中仅有其中的一台主节点可用于写操作,所有节点包括从节点对外提供读操作。当其中的一个从节点故障时,它持有的虚拟IP会自动转移至其他节点上。若故障的是主节点,它持有的写操作的虚拟IP和读操作的虚拟IP都会自动转移至另外一个主节点,向它同步数据的从节点也会将主服务器指向另一个主节点。

另外用于监控的monitor需要单独部署,可以对monitor节点部署高可用以解决其单点故障。mysql-mmm仅能对mysql数据库实现高可用,若要实现读写分离,负载均衡可以使用Ameoba或mysql-proxy。

实现过程

服务器架构

实验环境:

服务器 主机名 IP地址 server-id
master1 node1 192.168.1.106 1
master2 node2 192.168.1.126 2
slave1 node3 192.168.1.127 3
slave2 node4 192.168.1.131 4
monitor node5 192.168.1.132

虚拟IP:

    write:192.168.1.200

    read:192.168.1.201,192.168.1.202,192.168.1.203

配置过程

1)首先在master和slave节点上安装mariadb-10数据库,5个节点实现时间同步。

2)node1和node2实现双主复制架构

node1上配置文件(以实现半同步复制):

[[email protected] ~]# vim /etc/mysql/my.cnf 
server-id       = 1
binlog_format = row
datadir = /data/mydata
sync_binlog = 1
autocommit = off
relay-log = /data/relaylog/relay-log
innodb_support_xa = 1
sync_master_info = 1
sync_relay_log = 1
sync_relay_log_info = 1
auto-increment-increment = 2
auto-increment-offset = 1
slave_parallel_threads = 3
rpl_semi_sync_master_enabled = 1
rpl_semi_sync_master_timeout = 1000
rpl_semi_sync_slave_enabled = 1
log_slave_updates = 1

node2上配置文件(已实现半同步复制,其余配参数与node1上相同):

server-id       = 2
...........
auto-increment-increment = 2
auto-increment-offset = 2

在两个节点上创建授权账号:

MariaDB [(none)]> grant replication slave,replication client on *.* to [email protected]‘192.168.1.%‘ identified by ‘repuser‘;
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> flush privileges;

相互以对方为主服务器:

node1上:

MariaDB [(none)]> change master to master_host=‘192.168.1.126‘,master_user=‘repuser‘,master_password=‘repuser‘,master_log_file=‘master-bin.000004‘,master_log_pos=657;

node2上:

MariaDB [(none)]> change master to master_host=‘192.168.1.106‘,master_user=‘repuser‘,master_password=‘repuser‘,master_log_file=‘master-bin.000004‘,master_log_pos=657;

node1,node2上启动线程:

MariaDB [(none)]> start slave;

3)从服务器node3和node4向node1同步数据

node3配置文件:

server-id       = 3
datadir = /data/mydata
relay-log = /data/relaylog/relay-log
read_only       = 1
slave_parallel_threads = 3
sync_master_info = 1
sync_relay_log = 1
sync_relay_log_info = 1
rpl_semi_sync_slave_enabled = 1

node4配置文件(省略部分与node3一致):

server-id       = 4
.......
.......

将node3和node4的主服务器指向node1:

MariaDB [(none)]> change master to master_host=‘192.168.1.106‘,master_user=‘repuser‘,master_password=‘repuser‘,master_log_file=‘master-bin.000004‘,master_log_pos=657;

node3,node4上启动线程:

MariaDB [(none)]> start slave;

4)部署MMM

mysql-mmm工作时,有如下几个服务进程:

mmm_agentd:运行在各mysql服务器上,代理进程。

mmm_control:运行在监控节点上,通过命令行管理mmm_mond进程

mmm_mond:运行在监控节点上,监控守护进程,执行节点的移除等

首先在各个mysql服务器上安装mysql-mmm-agent,在监控节点上安装mysql-mmm-monitor。

在node1-4上:

yum install mysql-mmm-agent

在node5上:

yum install mysql-mmm-monitor

添加代理、监控账号,在其中一个主节点上完成即可。

MariaDB [(none)]> GRANT REPLICATION CLIENT ON *.* TO ‘mmm_monitor‘@‘192.168.1.%‘ IDENTIFIED BY ‘mmm_monitor‘;
MariaDB [(none)]> GRANT SUPER, REPLICATION CLIENT, PROCESS ON *.* TO ‘mmm_agent‘@‘192.168.1.%‘   IDENTIFIED BY ‘mmm_agent‘;
MariaDB [(none)]> flush privileges;

所有主机上配置/etc/mysql-mmm/mmm_common.conf(node1-5上),简单起见通过ansible完成。

active_master_role      writer
 
<host default>
    cluster_interface       eth0
    pid_path                /var/run/mysql-mmm/mmm_agentd.pid
    bin_path                /usr/libexec/mysql-mmm/
    replication_user        repuser              #复制用户
    replication_password    repuser              #复制用户密码
    agent_user              mmm_agent            #代理用户
    agent_password          mmm_agent            #代理用户密码
</host>
 
<host db1>
    ip      192.168.1.106
    mode    master
    peer    db2
</host>
 
<host db2>
    ip      192.168.1.126
    mode    master
    peer    db1
</host>
 
<host db3>
    ip      192.168.1.127
    mode    slave
</host>
 
<host db4>
    ip      192.168.1.131
    mode    slave
</host>
 
<role writer>
    hosts   db1, db2              #用于写操作的节点
    ips     192.168.1.200         #用于写操作的虚拟IP
    mode    exclusive             #db1,db2仅有一个被用于写操作
</role>
<role reader>
    hosts   db1, db2, db3, db4    #用于读操作的节点
    ips     192.168.1.201, 192.168.1.202, 192.168.1.203   #用于读操作的虚拟IP
    mode    balanced              #虚拟IP会被均匀分配给以上节点
</role>

在monitor节点上(node5)配置/etc/mysql-mmm/mmm_mon.conf:

[[email protected] ~]# vim /etc/mysql-mmm/mmm_mon.conf 
include mmm_common.conf
 
<monitor>
    ip                  127.0.0.1
    pid_path            /var/run/mysql-mmm/mmm_mond.pid
    bin_path            /usr/libexec/mysql-mmm
    status_path         /var/lib/mysql-mmm/mmm_mond.status
    ping_ips            192.168.1.106,192.168.1.126,192.168.1.127,192.168.1.131   #被监控的服务器IP地址
    auto_set_online     60
</monitor>
 
<host default>
    monitor_user        mmm_monitor          #监控用户
    monitor_password    mmm_monitor          #监控用户密码
</host>
 
debug 0

在各个被监控节点上配置mmm_agent.conf(如果是db2则最后行为this db2,对应于mmm_common.conf文件中的配置)

[[email protected] mysql-mmm]# vim /etc/mysql-mmm/mmm_agent.conf
include mmm_common.conf
 
# The ‘this‘ variable refers to this server.  Proper operation requires 
# that ‘this‘ server (db1 by default), as well as all other servers, have the 
# proper IP addresses set in mmm_common.conf.
this db1

在各个mysql服务器节点上启动服务:

[[email protected] mysql-mmm]# service mysql-mmm-agent start
Starting MMM Agent Daemon:                                 [  OK  ]

在monitor上启动服务:

[[email protected] ~]# service mysql-mmm-monitor start
Starting MMM Monitor Daemon:                               [  OK  ]

在monitor节点上查看mysql服务器状态:

对应节点上的虚拟IP也已经启用:

指向master1(node1)的从服务器有3台,现在停止master1上的mysql服务。

[[email protected] ~]# service mysqld stop
Shutting down MySQL..                                      [  OK  ]

由图可见master1已显示为offline,且用于写操作的虚拟IP(192.168.1.200)已转移至master2上。在master2上查看有多少个从服务器向本机同步数据。

可以看到两台从服务器已经指向master2(Master_id为2),完成部署.................^_^

时间: 2024-12-18 17:36:46

基于mysql-mmm实现MySQL数据库的高可用的相关文章

MySQL/MariaDB基于MMM实现读写分离及高可用

前言 MMM(Master-Master replication managerfor Mysql,Mysql主主复制管理器)是一套灵活的脚本程序,基于perl实现,用来对mysql replication进行监控和故障迁移,并能管理mysql Master-Master复制的配置(同一时间只有一个节点是可写的). MMM 优缺点 优点:高可用性,扩展性好,出现故障自动切换,对于主主同步,在同一时间只提供一台数据库写操作,保证的数据的一致性. 缺点:Monitor节点是单点,可以结合Keepal

MySQL数据库的优化(下)MySQL数据库的高可用架构方案

MySQL数据库的优化(下)MySQL数据库的高可用架构方案 2011-03-09 08:53 抚琴煮酒 51CTO 字号:T | T 在上一篇MySQL数据库的优化中,我们跟随笔者学习了单机MySQL数据库的优化,今天我们继续跟随笔者学习MySQL优化的集群方案. AD:51CTO 网+首届APP创新评选大赛火热启动——超百万资源等你拿! [51CTO独家特稿]在上一篇MySQL数据库的优化中,我们跟随笔者学习了单机MySQL数据库的优化,今天我们继续跟随笔者学习MySQL优化的集群方案. 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

Mysql+Keepalived双主热备高可用操作步骤详细解析

mysql+keepalived双主热备高可用的介绍: 我们通常说的双机热备是指两台机器都在运行,但并不是两台机器都同时在提供服务.当提供服务的一台出现故障的时候,另外一台会马上自动接管并且提供服务,而且切换的时间非常短.MySQL双主复制,即互为Master-Slave(只有一个Master提供写操作),可以实现数据库服务器的热备,但是一个Master宕机后不能实现动态切换.使用Keepalived,可以通过虚拟IP,实现双主对外的统一接口以及自动检查.失败切换机制,从而实现MySQL数据库的

mysql+keepalived 双主热备高可用

理论介绍:我们通常说的双机热备是指两台机器都在运行,但并不是两台机器都同时在提供服务.当提供服务的一台出现故障的时候,另外一台会马上自动接管并且提供服务,而且切换的时间非常短.MySQL双主复制,即互为Master-Slave(只有一个Master提供写操作),可以实现数据库服务器的热备,但是一个Master宕机后不能实现动态切换.使用Keepalived,可以通过虚拟IP,实现双主对外的统一接口以及自动检查.失败切换机制,从而实现MySQL数据库的高可用方案. 环境说明:版本 version

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

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