详解MySQL高可用MMM搭建方案及架构原理

先来看看架构,如下图:

部署

1.修改hosts

在所有的服务器中执行相同的操作。

vim /etc/hosts

192.168.137.10 master
192.168.137.20 backup
192.168.137.30 slave
192.168.137.40 monitor

2.添加mysql用户

只需要在所有的数据库端执行即可,监控端不需要。

GRANT REPLICATION CLIENT ON *.* TO 'mmm_monitor'@'192.168.137.%' IDENTIFIED BY 'mmm_monitor';
GRANT SUPER,REPLICATION CLIENT, PROCESS ON *.* TO 'mmm_agent'@'192.168.137.%' IDENTIFIED BY 'mmm_agent';
flush privileges;

注意:repl用户在搭建主从服务的时候已经创建好了。

 3.安装监控软件

注意:监控端全部安装,但是监控端只需要用到mysql-mmm-monitor,mysql-mmm-agent不需要启动。

数据库端只需要安装mysql-mmm-agent

1.在监控服务器执行

wget http://mirrors.ustc.edu.cn/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
rpm –ivh epel-release-6-8.noarch.rpm
yum –y install mysql-mmm*

2.在数据库服务器上执行,每个数据库服务器上都要执行

wget http://mirrors.ustc.edu.cn/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
rpm –ivh epel-release-6-8.noarch.rpm
yum -y install mysql-mmm-agent

路径说明:

4.配置文件

db服务器配置文件:mmm_agent.conf,mmm_common.conf

监控服务器的配置文件:mmm_mon.conf,mmm_common.conf(该文件所有服务器一样)

配置db服务器

1.修改master服务器

vim /etc/mysql-mmm/mmm_common.conf
active_master_role  writer  ###积极的master角色的标示,所有的db服务器都需要开启read_only参数,对于writer服务器监控代理会自动将read_only属性关闭。

<host default>
 cluster_interface  eth0  #####群集的网络接口
 pid_path    /var/run/mysql-mmm/mmm_agentd.pid ####pid路径
 bin_path    /usr/libexec/mysql-mmm/    #####可执行文件路径
 replication_user  repl   #######复制用户
 replication_password repl   #######复制用户密码
 agent_user    mmm_agent  #######代理用户,用于更改只读操作
 agent_password   mmm_agent  #######代理用户密码
</host>

<host master>   ##########master1的host名
 ip  192.168.137.10 #####master1的ip
 mode master  ########角色属性,master代表是主
 peer backup  ########与master1对等的服务器的host名,也就是master2的服务器host名
</host>

<host backup>  ####和master的概念一样
 ip  192.168.137.20
 mode master
 peer master
</host>

<host slave>  #####从库的host名,如果存在多个从库可以重复一样的配置
 ip  192.168.137.30 ####从的ip
 mode slave #####slave的角色属性代表当前host是从
</host>

<role writer> ####writer角色配置
 hosts master,backup ####能进行写操作的服务器的host名,如果不想切换写操作这里可以只配置master,这样也可以避免因为网络延时而进行write的切换,但是一旦master出现故障那么当前的MMM就没有writer了只有对外的read操作。
 ips  192.168.137.100 #####对外提供的写操作的虚拟IP
 mode exclusive #####exclusive代表只允许存在一个主,也就是只能提供一个写的IP
</role>

<role reader> #####read角色配置
 hosts backup,slave ######对外提供读操作的服务器的host名,当然这里也可以把master加进来
 ips  192.168.137.120,192.168.137.130,192.168.137.140 ###对外提供读操作的虚拟ip,这两个ip和host不是一一对应的,并且ips也hosts的数目也可以不相同,如果这样配置的话其中一个hosts会分配两个ip
 mode balanced ###balanced代表负载均衡
</role>

同时将这个文件拷贝到其它的服务器包括监控服务器,配置不变

scp /etc/mysql-mmm/mmm_common.conf slave:/etc/mysql-mmm/
scp /etc/mysql-mmm/mmm_common.conf backup:/etc/mysql-mmm/
scp /etc/mysql-mmm/mmm_common.conf monitor:/etc/mysql-mmm/

2.代理文件配置

vim /etc/mysql-mmm/mmm_agent.conf

注意:这个配置只配置db服务器,监控服务器不需要配置,this后面的host名改成当前服务器的host命令,master2和slave也改成对应的服务器的host名。

3.启动代理进程

chkconfig mysql-mmm-agent on
service mysql-mmm-agent start

每台db服务器上都需要启动

配置监控服务器

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 #####群集的状态文件,也就是执行mmm_control show操作的显示来源。
 ping_ips   192.168.137.10,192.168.137.20,192.168.137.30 ######被监控的db服务器的ip地址
 auto_set_online  0 ####设置自动online的时间,默认是超过60s就将它设置为online,默认是60s,这里将其设为0就是立即online

 # 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 ####监控db服务器的用户
 monitor_password mmm_monitor ####监控db服务器的密码
</host>

debug 0  #######debug 0正常模式,1为debug模式

注意:配置文件中的注释是为了便于理解,在部署的时候最好把注释去掉以免因为注释造成的潜在影响。

启动监控进程

chkconfig mysql-mmm- monitor on
service mysql-mmm-monitor start

注意:无论是在db端还是在监控端如果有对配置文件进行修改操作都需要重启代理进程和监控进程。

操作分析

日志文件

日志文件往往是分析错误的关键,所以要善于利用日志文件进行问题分析。

db端:/var/log/mysql-mmm/mmm_agentd.log

监控端:/var/log/mysql-mmm/mmm_mond.log

命令文件

mmm_agentd :db代理进程的启动文件

mmm_mond :监控进程的启动文件

mmm_backup :备份文件

mmm_restore :还原文件

mmm_clone

mmm_control:监控操作命令文件

db服务器端只有mmm_agentd程序,其它的都是在monitor服务器端。

mmm_control用法

mmm_control程序可以用于监控群集状态、切换writer、设置online\offline操作等。

Valid commands are:
 help        - show this message ###帮助信息
 ping        - ping monitor ###ping当前的群集是否正常
 show        - show status ####群集在线状态检查
 checks [<host>|all [<check>|all]] - show checks status #####执行监控检查操作
 set_online <host>     - set host <host> online ####将host设置为online
 set_offline <host>    - set host <host> offline ###将host设置为offline
 mode        - print current mode. ####打印输出当前的mode
 set_active      - switch into active mode.
 set_manual      - switch into manual mode.
 set_passive      - switch into passive mode.
 move_role [--force] <role> <host> - move exclusive role <role> to host <host> ####移除writer服务器为指定的host服务器
          (Only use --force if you know what you are doing!)
 set_ip <ip> <host>    - set role with ip <ip> to host <host>

1.检查所有的db服务器群集状态

[root@monitor mysql-mmm]# mmm_control checks all
master ping   [last change: 2016/06/07 16:31:24] OK
master mysql  [last change: 2016/06/07 16:31:24] OK
master rep_threads [last change: 2016/06/07 16:31:24] OK
master rep_backlog [last change: 2016/06/07 16:31:24] OK: Backlog is null
slave ping   [last change: 2016/06/07 16:31:24] OK
slave mysql  [last change: 2016/06/07 16:31:24] OK
slave rep_threads [last change: 2016/06/07 16:31:24] OK
slave rep_backlog [last change: 2016/06/07 16:31:24] OK: Backlog is null
backup ping   [last change: 2016/06/07 16:31:24] OK
backup mysql  [last change: 2016/06/07 16:31:24] OK
backup rep_threads [last change: 2016/06/07 16:31:24] OK
backup rep_backlog [last change: 2016/06/07 16:31:24] OK: Backlog is null

检查项包括:ping、mysql是否正常运行、复制线程是否正常等

2.检查群集环境在线状况

[root@monitor mysql-mmm]# mmm_control show
 backup(192.168.137.20) master/ONLINE. Roles: reader(192.168.137.120)
 master(192.168.137.10) master/ONLINE. Roles: writer(192.168.137.100)
 slave(192.168.137.30) slave/ONLINE. Roles: reader(192.168.137.130)

3.对指定的host执行offline操作

[root@monitor mysql-mmm]# mmm_control set_offline backup
OK: State of 'backup' changed to ADMIN_OFFLINE. Now you can wait some time and check all roles!
[root@monitor mysql-mmm]# mmm_control show
 backup(192.168.137.20) master/ADMIN_OFFLINE. Roles:
 master(192.168.137.10) master/ONLINE. Roles: writer(192.168.137.100)
 slave(192.168.137.30) slave/ONLINE. Roles: reader(192.168.137.120), reader(192.168.137.130)

4.对指定的host执行onine操作

[root@monitor mysql-mmm]# mmm_control set_online backup
OK: State of 'backup' changed to ONLINE. Now you can wait some time and check its new roles!
[root@monitor mysql-mmm]# mmm_control show
 backup(192.168.137.20) master/REPLICATION_FAIL. Roles:
 master(192.168.137.10) master/ONLINE. Roles: writer(192.168.137.100)
 slave(192.168.137.30) slave/ONLINE. Roles: reader(192.168.137.120), reader(192.168.137.130)

[root@monitor mysql-mmm]# mmm_control show
 backup(192.168.137.20) master/ONLINE. Roles: reader(192.168.137.120)
 master(192.168.137.10) master/ONLINE. Roles: writer(192.168.137.100)
 slave(192.168.137.30) slave/ONLINE. Roles: reader(192.168.137.130)

5.执行write切换

1.查看当前的slave对应的master

[root@slave ~]# mysql -uroot -proot -e 'show slave status \G;'
Warning: Using a password on the command line interface can be insecure.
*************************** 1. row ***************************
    Slave_IO_State: Waiting for master to send event
     Master_Host: 192.168.137.10
     Master_User: repl
     Master_Port: 3306
    Connect_Retry: 60
    Master_Log_File: mysql-bin.000073
   Read_Master_Log_Pos: 1461
    Relay_Log_File: mysql-relay-bin.000006
    Relay_Log_Pos: 283
  Relay_Master_Log_File: mysql-bin.000073
    Slave_IO_Running: Yes
   Slave_SQL_Running: Yes

2.writer切换,要确保mmm_common.conf文件中的writer属性有配置对应的host,否则无法切换

[root@monitor mysql-mmm]# mmm_control move_role writer backup
OK: Role 'writer' has been moved from 'master' to 'backup'. Now you can wait some time and check new roles info!
[root@monitor mysql-mmm]# mmm_control show
 backup(192.168.137.20) master/ONLINE. Roles: reader(192.168.137.120), writer(192.168.137.100)
 master(192.168.137.10) master/ONLINE. Roles:
 slave(192.168.137.30) slave/ONLINE. Roles: reader(192.168.137.130)

3.save从库自动切换到了新的master

[root@slave ~]# mysql -uroot -proot -e 'show slave status \G;'
Warning: Using a password on the command line interface can be insecure.
*************************** 1. row ***************************
    Slave_IO_State: Waiting for master to send event
     Master_Host: 192.168.137.20
     Master_User: repl
     Master_Port: 3306
    Connect_Retry: 60
    Master_Log_File: mysql-bin.000039
   Read_Master_Log_Pos: 120
    Relay_Log_File: mysql-relay-bin.000002
    Relay_Log_Pos: 283
  Relay_Master_Log_File: mysql-bin.000039
    Slave_IO_Running: Yes
   Slave_SQL_Running: Yes

其它处理问题

如果不想让writer从master切换到backup(包括主从的延时也会导致写VIP的切换),那么可以在配置/etc/mysql-mmm/mmm_common.conf时,去掉<role write>中的backup

<role writer> ####writer角色配置
 hosts master ###这里只配置一个Hosts
 ips  192.168.137.100 #####对外提供的写操作的虚拟IP
 mode exclusive #####exclusive代表只允许存在一个主,也就是只能提供一个写的IP
</role>

这样的话当master出现故障了writer写操作不会切换到backup服务器,并且slave也不会指向新的master,此时当前的MMM之前对外提供写服务。

总结

主从的延时会导致写VIP的切换。

1.对外提供读写的虚拟IP是由monitor程序控制。如果monitor没有启动那么db服务器不会被分配虚拟ip,但是如果已经分配好了虚拟ip当monitor程序关闭了原先分配的虚拟ip不会立即关闭外部程序还可以连接访问(只要不重启网络),这样的好处就是对于monitor的可靠性要求就会低一些,目前还不知道能维持多长的时间,但是如果这个时候其中的某一个db服务器故障了就无法处理切换,也就是原先的虚拟ip还是维持不变,挂掉的那台DB的虚拟ip会变的不可访问。

2.agent程序受monitor程序的控制处理write切换,从库切换等操作。如果monitor进程关闭了那么agent进程就起不到什么作用,它本身不能处理故障。

3.monitor程序负责监控db服务器的状态,包括Mysql数据库、服务器是否运行、复制线程是否正常、主从延时等;它还用于控制agent程序处理故障。

4.monitor会每隔几秒钟监控db服务器的状态,如果db服务器已经从故障变成了正常,那么monitor会自动在60s之后将其设置为online状态(默认是60s可以设为其它的值),有监控端的配置文件参数“auto_set_online”决定,群集服务器的状态有三种分别是:HARD_OFFLINE→AWAITING_RECOVERY→online

5.默认monitor会控制mmm_agent会将writer db服务器read_only修改为OFF,其它的db服务器read_only修改为ON,所以为了严谨可以在所有的服务器的my.cnf文件中加入read_only=1由monitor控制来控制writer和read,root用户和复制用户不受read_only参数的影响

以上就是本文的全部内容,希望本文对大家学习mysql有所帮助。

(0)

相关推荐

  • MySQL下高可用故障转移方案MHA的超级部署教程

    MHA介绍 MHA是一位日本MySQL大牛用Perl写的一套MySQL故障切换方案,来保证数据库系统的高可用.在宕机的时间内(通常10-30秒内),完成故障切换,部署MHA,可避免主从一致性问题,节约购买新服务器的费用,不影响服务器性能,易安装,不改变现有部署.      还支持在线切换,从当前运行master切换到一个新的master上面,只需要很短的时间(0.5-2秒内),此时仅仅阻塞写操作,并不影响读操作,便于主机硬件维护.   在有高可用,数据一致性要求的系统上,MHA 提供了有用的功能

  • MySQL高可用解决方案MMM(mysql多主复制管理器)

    一.MMM简介: MMM即Multi-Master Replication Manager for MySQL:mysql多主复制管理器,基于perl实现,关于mysql主主复制配置的监控.故障转移和管理的一套可伸缩的脚本套件(在任何时候只有一个节点可以被写入),MMM也能对从服务器进行读负载均衡,所以可以用它来在一组用于复制的服务器启动虚拟ip,除此之外,它还有实现数据备份.节点之间重新同步功能的脚本.MySQL本身没有提供replication failover的解决方案,通过MMM方案能实

  • Keepalived+HAProxy实现MySQL高可用负载均衡的配置

     Keepalived 由于在生产环境使用了mysqlcluster,需要实现高可用负载均衡,这里提供了keepalived+haproxy来实现. keepalived主要功能是实现真实机器的故障隔离及负载均衡器间的失败切换.可在第3,4,5层交换.它通过VRRPv2(Virtual Router Redundancy Protocol) stack实现的. Layer3:Keepalived会定期向服务器群中的服务器.发送一个ICMP的数据包(既我们平时用的Ping程序),如果发现某台服务的

  • MySQL数据库的高可用方案总结

    高可用架构对于互联网服务基本是标配,无论是应用服务还是数据库服务都需要做到高可用.虽然互联网服务号称7*24小时不间断服务,但多多少少有一些时候服务不可用,比如某些时候网页打不开,百度不能搜索或者无法发微博,发微信等.一般而言,衡量高可用做到什么程度可以通过一年内服务不可用时间作为参考,要做到3个9的可用性,一年内只能累计有8个小时不可服务,而如果要做到5个9的可用性,则一年内只能累计5分钟服务中断.所以虽说每个公司都说自己的服务是7*24不间断的,但实际上能做到5个9的屈指可数,甚至根本做不到

  • keeplive+mysql+drbd高可用架构安装步骤

    DRBD(DistributedReplicatedBlockDevice)是一个基于块设备级别在远程服务器直接同步和镜像数据的开源软件,类似于RAID1数据镜像,通常配合keepalived.heartbeat等HA软件来实现高可用性. DRBD是一种块设备,可以被用于高可用(HA)之中.它类似于一个网络RAID-1功能,当你将数据写入本地文件系统时,数据还将会被发送到网络中另一台主机上.以相同的形式记录在一个文件系统中. 本地(master)与远程主机(backup)的保证实时同步,如果本地

  • MySQL高可用MMM方案安装部署分享

    1 install mysql 请参考http://www.jb51.net/article/47094.htm 2. Basic configuration of master 1 3. Create users GRANT REPLICATION CLIENT ON *.* TO 'mmm_monitor'@'%' IDENTIFIED BY 'mmm_monitor'; GRANT SUPER, REPLICATION CLIENT, PROCESS ON *.* TO 'mmm_agen

  • 详解MySQL高可用MMM搭建方案及架构原理

    先来看看架构,如下图: 部署 1.修改hosts 在所有的服务器中执行相同的操作. vim /etc/hosts 192.168.137.10 master 192.168.137.20 backup 192.168.137.30 slave 192.168.137.40 monitor 2.添加mysql用户 只需要在所有的数据库端执行即可,监控端不需要. GRANT REPLICATION CLIENT ON *.* TO 'mmm_monitor'@'192.168.137.%' IDEN

  • 详解MySQL主从复制读写分离搭建

    MySQL主从设置 MySQL主从复制,读写分离的设置非常简单: 修改配置my.cnf文件 master 和 slave设置的差不多: [mysqld] log-bin=mysql-bin server-id=222 log-bin=mysql-bin的意思是:启用二进制日志. server-id=222的意思是设置了服务器的唯一ID,默认是1,一般取IP最后一段,可以写成别的,只要不和其他mysql服务器重复就好. 这里,有的MySQL默认的my.cnf文件引用了/etc/mysql/conf

  • 详解Mysql数据库平滑扩容解决高并发和大数据量问题

    目录 1 停机方案 2 停写方案 3 平滑扩容之双写方案(中小型数据) 4 平滑扩容之2N方案大数据量问题解决 4.1 扩容问题 4.2 解决方案 4.3 双主架构思想 4.4 环境部署 5 数据库秒级平滑2N扩容实践 5.1 新增数据库VIP 5.2 应用服务增加动态数据源 5.3 解除原双主同步 5.4 安装MariaDB扩容服务器 5.5 增加KeepAlived服务实现高可用 5.6 清理数据并验证 1 停机方案 发布公告 停止服务 离线数据迁移(拆分,重新分配数据) 数据校验 更改配置

  • MySQL高可用架构之MHA架构全解

    目录 一.介绍 二.组成 三.工作过程 四.架构 五.实例展示 MHA(Master HA)是一款开源的 MySQL 的高可用程序,它为 MySQL 主从复制架构提供了 automating master failover 功能.MHA 在监控到 master 节点故障时,会提升其中拥有最新数据的 slave 节点成为新的master 节点,在此期间,MHA 会通过于其它从节点获取额外信息来避免一致性方面的问题.MHA 还提供了 master 节点的在线切换功能,即按需切换 master/sla

  • 如何搭建 MySQL 高可用高性能集群

    目录 MySQL NDB Cluster 是什么 搭建集群的前置工作 开始部署集群 部署管理服务器 部署数据服务器 部署 SQL 服务 所有集群服务部署完毕,我们来测试一下集群是否真的部署成功 数据库集群部署成功了,总结一下集群的注意事项 MySQL NDB Cluster 是什么 MySQL NDB Cluster 是 MySQL 的一个高可用.高冗余版本,适用于分布式计算环境. 文档链接 搭建集群的前置工作 至少准备 3 台服务器,一台作为管理服务器,两台作为数据服务器和 SQL 服务器,当

  • Ubuntu 18.04.4安装mysql的过程详解 亲测可用

    1 sudo apt-get update 2 sudo apt-get install mysql-server 3 sudo mysql_secure_installation # 初始化配置 #1 VALIDATE PASSWORD PLUGIN can be used to test passwords... Press y|Y for Yes, any other key for No: N (我的选项) #2 Please set the password for root here

  • Ubuntu 18.04.4安装mysql的过程详解 亲测可用

    下面看下Ubuntu 18.04.4安装mysql的过程,内容如下所示: 1 sudo apt-get update 2 sudo apt-get install mysql-server 3 sudo mysql_secure_installation # 初始化配置 #1 VALIDATE PASSWORD PLUGIN can be used to test passwords... Press y|Y for Yes, any other key for No: N (我的选项) #2

  • 详解MySQL连接挂死的原因

    一.背景 近期由测试反馈的问题有点多,其中关于系统可靠性测试提出的问题令人感到头疼,一来这类问题有时候属于"偶发"现象,难以在环境上快速复现:二来则是可靠性问题的定位链条有时候变得很长,极端情况下可能要从 A 服务追踪到 Z 服务,或者是从应用代码追溯到硬件层面. 本次分享的是一次关于 MySQL 高可用问题的定位过程,其中曲折颇多但问题本身却比较有些代表性,遂将其记录以供参考. 架构 首先,本系统以 MySQL 作为主要的数据存储部件.整一个是典型的微服务架构(SpringBoot

  • 详解MySQL的半同步

    前言 年后在进行腾讯二面的时候,写完算法的后问的第一个问题就是,MySQL的半同步是什么?我当时直接懵了,我以为是问的MySQL的两阶段提交的问题呢?结果确认了一下后不是两阶段提交,然后面试官看我连问的是啥都不知道,就直接跳过这个问题,直接聊下一个问题了.所以这次总结一下这部分的知识内容,文字内容比较多,可能会有些枯燥,但对于这方面感兴趣的人来说还是比较有意思的. MySQL的主从复制 我们的一般在大规模的项目上,都是使用MySQL的复制功能来创建MySQL的主从集群的.主要是可以通过为服务器配

随机推荐