MySQL - MMM 实现 MySQL 高可用

  • MMM (Master-Master replication manager for MySQL,MySQL 主主复制管理器)是一套支持双主故障切换和双主日常管理的脚本程序。MMM 使用 Perl 语言开发,主要用来监控和管理 MySQL Master-Master(双主)复制,虽然也叫双主复制,但是业务上同一时刻只允许对一个主进行写入,另一台备选主上提供部分读服务,以加速在主主切换时备选主的预热,可以说 MMM 这套脚本程序一方面实现了故障切换的功能,另一方面其内部附加的工具脚本也可以实现多个 Slave 的 read 负载均衡。
  • MMM提供了自动和手动两种方式移除一组服务器中复制延迟较高的服务器的虚拟 ip,同时它还可以备份数据,实现两节点之间的数据同步等。由于 MMM 无法完全保证数据的一致性,所以 MMM 适用于对数据的一致性要求不是很高,但是又想最大程度的保证业务可用性的场景。对于那些对数据的一致性要求很高的业务,非常不建议采用 MMM 这种高可用架构。
  • 关于 MMM 高可用架构的说明如下:
    mmm_mon:监控进程,负责所有的监控工作,决定和处理所有节点角色活动。此脚本需要在监管机上运行。
    mmm_agent:运行在每个 MySQL 服务器上的代理进程,完成监控的探针工作和执行简单的远端服务shezhi.cijiaoben需要在被监管机上运行。
    mmm_control:一个简单的脚本,提供管理 mmm_mond 进程的命令。
    mysql-mmm 的监管端会提供多个虚拟 IP (VIP),包括一个可写 VIP,多个可读 VIP,通过监管的管理,这些 IP 会绑定在可用 MySQL 之上,当某一台 MySQL 宕机时,监管会将 VIP 迁移至其他 MySQL。

部署环境

主机 操作系统 IP地址 VIP地址
mysql-m1主服务器 CentOS 7.4 x86_64 192.168.100.200 192.168.100.100(Writer)
mysql-m2主服务器 CentOS 7.4 x86_64 192.168.100.201 192.168.100.100(Writer)
mysql-monitor CentOS 7.4 x86_64 192.168.100.204
mysql-m3从服务器 CentOS 7.4 x86_64 192.168.100.202 192.168.100.101(Reader)
mysql-m4从服务器 CentOS 7.4 x86_64 192.168.100.203 192.168.100.102(Reader)

开始部署

  • 安装所需软件包,修改配置文件(四台MySQL服务器操作一致)
  1. 搭建ALI云源,安装epel-release源。

    wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo    #下载ALI云源
    yum -y install epel-release    #安装epel-release源
    yum clean all && yum makecache    #清空缓存,生成新的缓存文件
  2. 安装 MariaDB 数据库,开启服务(和MySQL同源,搭建步骤相同)
    yum -y install mariadb-server mariadb
    systemctl stop firewalld.service
    setenforce 0
    systemctl start mariadb
  3. 修改数据库主配置文件,发往其他主机并启动服务器
    # 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_slow_queris.log    #慢日志文件位置
    binlog-ignore-db=mysql,information_schema    #不生成二进制文件的库
    character_set_server=utf8    #使用的字符集
    log_bin=mysql_bin    #二进制日志文件功能
    server_id=1
    log_slave_updates=true    #开启同步
    sync_binlog=1
    auto_increment_increment=2
    auto_increment_offset=1
    # scp /etc/my.cnf [email protected]:/etc
    # scp /etc/my.cnf [email protected]:/etc
    # scp /etc/my.cnf [email protected]:/etc
    # 注:另外三台主机的配置文件里的server_id要做修改,保证不一致即可
  • 配置主主复制(m1和m2两台主服务器互相同步)
  • 查看对方的日志文件名称和偏移值
    mysql> show master status;
  • 主服务器互相提升访问权限(m1、m2服务器分别执行)
    # mysql-m1
    grant replication slave on *.* to ‘replication‘@‘172.168.100.%‘ identified by ‘123456‘;
    # 使用账户为replication 密码为123456
    change master to master_host=‘172.168.100.201‘,master_user=‘replication‘,master_password=‘123456‘,master_log_file=‘mysql_bin.000003‘,master_log_pos=245;
    # 当在MariaDB-m1上执行时,master_host地址为MariaDB-m2地址
    ···
    # mysql-m2
    grant replication slave on *.* to ‘replication‘@‘172.168.100.%‘ identified by ‘123456‘;
    change master to master_host=‘172.168.100.200‘,master_user=‘replication‘,master_password=‘123456‘,master_log_file=‘mysql_bin.000003‘,master_log_pos=245;
    # 当在MariaDB-m2上执行时,master_host地址为MariaDB-m1地址
  • 开启同步,查看服务器的主从状态
    start slave;
    show slave status\G;
    # Slave_IO_Running: Yes
    # Slave_SQL_Running: Yes
  • 配置m3、m4服务器作为从服务器
    show master status;
    # 查看m1服务器的日志文件以及偏移值(注意日志文件和偏移值的改变)
    # m1和m2互相同步,在此只需执行m1即可
    change master to master_host=‘172.168.100.200‘,master_user=‘replication‘,master_password=‘123456‘,master_log_file=‘mysql_bin.000004‘,master_log_pos=245;
    # m3和m4上分别执行
  • 分别查看m3和m4的主从状态
    start slave;
    show slave status\G;
    # Slave_IO_Running: Yes
    # Slave_SQL_Running: Yes
  • 安装配置MMM架构
    前面我们使用wget配置了ALI云源并简易安装 MariaDB 来代替 MySQL ,并搭建了主主同步,主从复制以便完成实验,现在我们来完成MMM架构
  • 安装mysql-mmm,修改配置文件(五台主机配置相同)
    # yum -y install mysql-mmm*     //前面我们配置了epel源,直接yum安装
    # vim /etc/mysql-mmm/mmm_common.conf  //配置如下
    active_master_role      writer
    <host default>
    cluster_interface       ens33
    pid_path                /run/mysql-mmm-agent.pid
    bin_path                /usr/libexec/mysql-mmm/
    replication_user        replication
    replication_password    123456
    agent_user              mmm_agent
    agent_password          123456
    </host>
    <host db1>
    ip      172.168.100.200
    mode    master
    peer    db2
    </host>
    <host db2>
    ip      172.168.100.201
    mode    master
    peer    db1
    </host>
    <host db3>
    ip      172.168.100.202
    mode    slave
    </host>
    <host db4>
    ip      172.168.100.203
    mode    slave
    </host>
    <role writer>
    hosts   db1, db2
    ips     172.168.100.100
    mode    exclusive
    </role>
    <role reader>
    hosts   db3, db4
    ips     172.168.100.101, 172.168.100.102
    mode    balanced
    </role>
  • 快速为其他主机修改配置文件
    scp mmm_common.conf [email protected]:/etc/mysql-mmm/
    scp mmm_common.conf [email protected]:/etc/mysql-mmm/
    scp mmm_common.conf [email protected]:/etc/mysql-mmm/
    scp mmm_common.conf [email protected]:/etc/mysql-mmm/
  • 在主机上修改mmm_agent.conf文件的名称
    # vim /etc/mysql-mmm/mmm_agent.conf
    this db1  //按照规划分别修改为db1、db2、db3、db4
  • 在所有主机上对mmm_agent、mmm_moniter进行授权
    mysql> grant super, replication client, process on *.* to ‘mmm_agent‘@‘192.168.100.%‘ identified by ‘123456‘;
    mysql> grant replication client on *.* to ‘mmm_monitor‘@‘192.168.100.%‘ identified by ‘123456‘;
    # flush privileges;  //重新加载权限表
  • 配置监控主机(在mysql-monitor上配置)
    # vim /etc/mysql-mmm/mmm_mon.conf
    include mmm_common.conf
    <monitor>
    ip                  127.0.0.1
    pid_path            /run/mysql-mmm-monitor.pid
    bin_path            /usr/libexec/mysql-mmm
    status_path         /var/lib/mysql-mmm/mmm_mond.status
    ping_ips            172.168.100.200,172.168.100.201,172.168.100.202,172.168.100.203
    auto_set_online     10    #上线时间修改为10s
    # The kill_host_bin does not exist by default, though the monitor will
    # throw a warning about it missing.  See the section 5.10 "Kill Host
    # Functionality" in the PDF documentation.
    #
    # kill_host_bin     /usr/libexec/mysql-mmm/monitor/kill_host
    #
    </monitor>
    <host default>
    monitor_user        mmm_monitor
    monitor_password    123456
    </host>
    debug 0
  • 关闭防火墙及增强×××
    systemctl disable firewalld.service
    systemctl stop firewalld.service
    setenforce 0
  • 启动服务,查看各节点状态
    systemctl start mysql-mmm-monitor.service
    # ERROR: Can‘t connect to monitor daemon!,如若出现报错,可尝试重启服务解决
    mmm_control check all
    # 检查监控服务器对所有主机的监控是否完善
    # 检查结果全部OK,则部署完成

至此,MySQL-MMM已经部署成功,进一步的话,我们可以结合Amoeba实现读写分离,Writer 的虚拟VIP可以写入数据库,而 Reader 可以用来读取数据。并通过Keepalived对 monitor 服务器进行双机热备。

原文地址:http://blog.51cto.com/13625676/2155451

时间: 2024-10-12 00:10:29

MySQL - MMM 实现 MySQL 高可用的相关文章

分享MYSQL中的各种高可用技术(源自姜承尧大牛)

图片和资料来源于MYSQL大牛姜承尧老师(MYSQL技术内幕作者) 姜承尧: 网易杭州研究院 技术经理 主导INNOSQL的开发 mysql高可用各个技术的比较 数据库的可靠指的是数据可靠 数据库可用指的是数据库服务可用 可靠的是数据:例如工商银行,数据不能丢失 可用的是服务:服务器不能宕机 灵活运用MYSQL的各种高可用技术来达到下面各种级别的高可用要求 要达到99.9%:使用MYSQL复制技术 要达到99.99%:使用MYSQL NDB 集群和虚拟化技术 要达到99.999%:使用share

基于heartbeat v1配置mysql和httpd的高可用双主模型

一.配置高可用集群的前提:(以两节点的heartbeat为例) ⑴时间必须保持同步 ⑵节点之间必须用名称互相通信 建议使用/etc/hosts,而不要用DNS 集群中使用的主机名为`uname -n`表示的主机名: ⑶ping node(仅偶数节点才需要) ⑷ssh密钥认证进行无障碍通信: 二.heartbeat v1的配置 程序主配置文件:ha.cf 认证密钥:authkeys, 其权限必须为组和其它无权访问: 资源配置文件:haresources /usr/share/doc/heartbe

mysql主主+keepalived高可用

mysql主主+keepalived高可用 1.两台主机 host: db1 外网:11.0.0.51 内网:172.16.1.51 db2 外网:11.0.0.52 内网:172.16.1.52 2.两台主机分别下载mysql cd /usr/chris/src wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.16-linux-glibc2.12-x86_64.tar.gz useradd mysql -u 550 -s

Consul, ProxySQL and MySQL MHA(mysql 读写分离,高可用)

背景:mysql 官方目前没有提供比较成熟,稳定的高可用的方案,使得Mysql的高可用方案相对较少,一般都只有简单的主从,今天和大家分享一个Consul, ProxySQL and MySQL MHA架构的高可用方案: 架构特性:1,高可用2,读写分离,查询路由3,sql过滤等功能 Installation of Consul:Firstly, we'll need to install the required packages, download the Consul archive and

基于MMM搭建MySQL Replication集群高可用架构

MMM介绍 MMM是Multi-Master Replication Manager for MySQL的缩写,它是MySQL提供的一个多主复制管理器,其核心是使用perl语言编写的一组脚本.实际上MMM是比较早期甚至有点老的一种用于构建高可用MySQL架构的方式,但因其还有一定的应用场景,所以本文将会演示一下如何搭建一个MMM架构. MMM 由两个组件组成: monitor:监控集群内数据库的状态,在出现异常时发布切换命令,一般和数据库分开部署 agent:运行在每个 MySQL 服务器上的代

MySql:利用keepalived构建高可用MySQL-HA

关于MySQL-HA,目前有多种解决方案,比如heartbeat.drbd.mmm.共享存储,但是它们各有优缺点.heartbeat.drbd配置较为复杂,需要自己写脚本才能实现MySQL自动切换,对于不会脚本语言的人来说,这无疑是一种脑裂问题:对于mmm,生产环境中很少有人用,且mmm 管理端需要单独运行一台服务器上,要是想实现高可用,就得对mmm管理端做HA,这样无疑又增加了硬件开支:对于共享存储,个人觉得MySQL数据还是放在本地较为安全,存储设备毕竟存在单点隐患.使用MySQL双mast

keepalived+mysql双主复制高可用方案

MySQL双主复制,即互为Master-Slave(只有一个Master提供写操作),可以实现数据库服务器的热备,但是一个Master宕机后不能实现动态切换.而Keepalived通过虚拟IP,实现了双主对外的统一接口以及自动检查.失败切换机制.联合使用,可以实现MySQL数据库的高可用方案. 实验环境:OS:centos 6.x x86_64系统MySQL版本: :mysql 5.6.22   64 位A: master :192.168.79.3 3306B: slave :192.168.

keepalived+amoeba+mysql-mmm+mysql实现mysql读写分离及高可用

最近尝试了一下mysql的读写分离和高可用的搭建.搭好之后体验了一下,效果还不错.这里跟大家分享一下. 1.首先介绍一下mysql-mmm这个工具是干嘛使的? 众所周知,mysql自身提供了AB复制.我们也可以很轻松的实现master-master双向复制,同时再为其中的一个master节点搭建一个slave库.这样就实现了master1与master2之间的双向复制,同时master1与slave1之间主从复制这样的架构.这样整个体系中就存在两个master,正常情况下只有一个master对外

使用DNS轮询+NGINX+PHP+NFS+MYSQL实现集群高可用

该实验使用四台虚拟机搭建,本来数据库作为网站的核心,是不能放在DNS服务器上的,这里迫于虚拟机台数的限制,只能暂时放在DNS服务器上来演示实验,真实环境中数据库是不能放在DNS服务器上的. 如上图所示 DNS+mysql服务器         IP:10.6.0.180 WEB1服务器                      IP:10.6.0.186 WEB2服务器                      IP:10.6.0.187 PHP+NFS服务器               IP: