侧边栏壁纸
博主头像
落叶人生博主等级

走进秋风,寻找秋天的落叶

  • 累计撰写 130562 篇文章
  • 累计创建 28 个标签
  • 累计收到 9 条评论
标签搜索

目 录CONTENT

文章目录

MySQL - MMM 实现 MySQL 高可用

2024-05-12 星期日 / 0 评论 / 0 点赞 / 88 阅读 / 9512 字

MMM (Master-Master replication manager for MySQL,MySQL 主主复制管理器)是一套支持双主故障切换和双主日常管理的脚本程序。MMM 使用 Perl 语

  • 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_64192.168.100.200192.168.100.100(Writer)
mysql-m2主服务器CentOS 7.4 x86_64192.168.100.201192.168.100.100(Writer)
mysql-monitorCentOS 7.4 x86_64192.168.100.204
mysql-m3从服务器CentOS 7.4 x86_64192.168.100.202192.168.100.101(Reader)
mysql-m4从服务器CentOS 7.4 x86_64192.168.100.203192.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 mariadbsystemctl stop firewalld.servicesetenforce 0systemctl 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=1log_slave_updates=true    #开启同步sync_binlog=1auto_increment_increment=2auto_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-m1grant replication slave on *.* to 'replication'@'172.168.100.%' identified by '123456';# 使用账户为replication 密码为123456change 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-m2grant 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       ens33pid_path                /run/mysql-mmm-agent.pidbin_path                /usr/libexec/mysql-mmm/replication_user        replicationreplication_password    123456agent_user              mmm_agentagent_password          123456</host><host db1>ip      172.168.100.200mode    masterpeer    db2</host><host db2>ip      172.168.100.201mode    masterpeer    db1</host><host db3>ip      172.168.100.202mode    slave</host><host db4>ip      172.168.100.203mode    slave</host><role writer>hosts   db1, db2ips     172.168.100.100mode    exclusive</role><role reader>hosts   db3, db4ips     172.168.100.101, 172.168.100.102mode    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.confthis 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.confinclude mmm_common.conf<monitor>ip                  127.0.0.1pid_path            /run/mysql-mmm-monitor.pidbin_path            /usr/libexec/mysql-mmmstatus_path         /var/lib/mysql-mmm/mmm_mond.statusping_ips            172.168.100.200,172.168.100.201,172.168.100.202,172.168.100.203auto_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_monitormonitor_password    123456</host>debug 0
  • 关闭防火墙及增强×××

    systemctl disable firewalld.servicesystemctl stop firewalld.servicesetenforce 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 服务器进行双机热备。

广告 广告

评论区