mmm实现mysql高可用

一 mysql主从搭建

一 设置hosts解析
[[email protected] conf]# vi /etc/hosts  (三台服务器相同都添加下面三项)
192.168.31.2 M1
192.168.31.3 M2
192.168.31.4 slave1

二 设置各台服务器的名字分别与hosts文件中的对应

三 创建相应的帐号
 GRANT REPLICATION SLAVE , REPLICATION CLIENT ON * . * TO ‘mmm_slave‘@‘192.168.31.%‘ IDENTIFIED BY ‘123456‘; (用于主从和主主复制 M1,M2 上都添加这个用户)
 flush privileges;
 
四 M1 M2 配置成主主模式
M1 配置文件
[mysqld]
innodb_file_per_table=1
log-bin=/data/mysql/mysql-bin.log
binlog_format           = ROW
server-id=1
binlog-do-db=mmm_test
replicate-do-db=mmm_test

M2配置文件
[mysqld]
innodb_file_per_table=1
log-bin=/data/mysql/mysql-bin.log
binlog_format           = ROW
server-id=2
binlog-do-db=mmm_test
replicate-do-db=mmm_test

在M2上执行
change master to master_host=‘192.168.31.2‘,master_user=‘mmm_slave‘,master_password=‘123456‘,master_log_file=‘mysql-bin.000017‘,master_log_pos=326;
start slave;

在M1 上执行 (主主模型)
change master to master_host=‘192.168.31.3‘,master_user=‘mmm_slave‘,master_password=‘123456‘,master_log_file=‘mysql-bin.000001‘,master_log_pos=312;
start slave;

五 配置M1和slave1 主从
slave1 配置文件
[mysqld]
server-id =3
innodb_file_per_table=1
log-bin=/data/mysql/mysql-bin.log
binlog_format           = ROW
replicate-do-db=mmm_test

执行
change master to master_host=‘192.168.31.2‘,master_user=‘mmm_slave‘,master_password=‘123456‘,master_log_file=‘mysql-bin.000017‘,master_log_pos=326;
start slave;

六 安装MySQL-MMM (三台服务器执行结果相同)
[[email protected] software]# wget http://download.fedoraproject.org/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm
[[email protected] software]# rpm -ivh epel-release-5-4.noarch.rpm
[[email protected] software]# yum -y install mysql-mmm*
[[email protected] software]# rpm -qa | grep mysql-mmm
mysql-mmm-2.2.1-2.el6.noarch
mysql-mmm-agent-2.2.1-2.el6.noarch
mysql-mmm-tools-2.2.1-2.el6.noarch
mysql-mmm-monitor-2.2.1-2.el6.noarch

七 在三个节点上授权

GRANT PROCESS,SUPER,REPLICATION CLIENT ON * . * TO ‘mmm_agent‘@‘192.168.31.%‘ IDENTIFIED BY ‘123456‘; (代理帐号,是MMM代理用来变成只读模式和同步master等的)
GRANT REPLICATION CLIENT ON * . * TO ‘mmm_monitor‘@‘192.168.31.%‘ IDENTIFIED BY ‘123456‘; (监听帐号,是MMM监控服务器用来对MySQL服务器做健康检查的)
 flush privileges;

八 配置 MMM 监控、代理服务
    1 三台服务器上修改mmm_common.conf (三台服务器上执行步骤相同)
    [[email protected] conf]# cd /etc/mysql-mmm/
    [[email protected] mysql-mmm]# cp mmm_common.conf mmm_common.conf.bak
    [[email protected] mysql-mmm]# vi mmm_common.conf
    active_master_role      writer

<host default>
        cluster_interface       eth1  # 这里视情况而定 我的三台服务器这里不相同
        pid_path                /var/run/mysql-mmm/mmm_agentd.pid
        bin_path                /usr/libexec/mysql-mmm/
        replication_user        mmm_slave # 前面创建的复制帐号
        replication_password    123456    # 复制帐号的密码
        agent_user              mmm_agent # 前面创建的代理帐号
        agent_password          123456     # 代理帐号的密码
    </host>

<host M1>
        ip      192.168.31.2
        mode    master
        peer    M1
    </host>

<host M2>
        ip      192.168.31.3
        mode    master
        peer    M2
    </host>

<host slave1>
        ip      192.168.31.4
        mode    slave
    </host>

<role writer>
        hosts   M1, M2    # 能够作为writer的服务器
        ips     192.168.31.10 # writer节点的虚拟ip, 应用的写请求将直接连接到这个ip
        mode    exclusive # 排他模式
    </role>

<role reader>
        hosts   M1,M2,slave1 # 作为reader的服务器
        ips     192.168.31.20 # reader节点虚拟ip,应用的读请求将直接连接到这个ip
        mode    balanced # 平衡模式
    </role>

2 修改M1的mmm_agent.conf
    [[email protected] mysql-mmm]# vi 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 M1
    
    3 修改M2的mmm_agent.conf
    [[email protected] mysql-mmm]# vi 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 M2

4 修改slave1的mmm_agent.conf
    [[email protected] mysql-mmm]# vi 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 slave1
    
    5 修改 mon 上的mmm_mon.conf (这里就是M1 共用一台服务器)
    [[email protected] mysql-mmm]# vi mmm_mon.conf
    include mmm_common.conf

<monitor>
        ip                  ip                  192.168.31.2
        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.31.2,192.168.31.3,192.168.31.4
        auto_set_online     10

# 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

九 启动各个相关服务
    1 三台服务器都启动mysql-mmm-agent服务
    [[email protected] mysql-mmm]# /etc/init.d/mysql-mmm-agent start
    [[email protected] mysql-mmm]# /etc/init.d/mysql-mmm-agent start
    [[email protected] mysql-mmm]# /etc/init.d/mysql-mmm-agent start
    
    2 在M1 上启动mysql-mon服务
    [[email protected] mysql-mmm]# /etc/init.d/mysql-mmm-monitor  start

3 查看mysql-mon 监控机上的MMM状态信息
    [[email protected] mysql-mmm]# mmm_control show
    出现Can‘t connect to monitor daemon
    则yum -y install perl-Time-HiRes*
    如果还是出现 Can‘t connect to monitor daemon 则要检查主从是否有问题
    
    [[email protected] ~]# mmm_control show # 再次执行 会出现下面这几行
  M1(192.168.31.2) master/ONLINE. Roles: writer(192.168.31.10)
  M2(192.168.31.3) master/ONLINE. Roles: reader(192.168.31.20)
  slave1(192.168.31.4) slave/ONLINE. Roles:
 
  [[email protected] ~]# mmm_control checks all  # 出现下面这些
M1      ping         [last change: 2015/09/24 00:39:19]  OK
M1      mysql        [last change: 2015/09/24 00:39:19]  OK
M1      rep_threads  [last change: 2015/09/24 00:39:19]  ERROR: Replication is broken
......
M2      rep_backlog  [last change: 2015/09/24 00:39:19]  OK: Backlog is null

十 查看集群日志
[[email protected] ~]# tail -f /var/log/mysql-mmm/mmm_agentd.log
2015/09/23 18:38:11 FATAL Child exited with exitcode 98, restarting after 10 second sleep
2015/09/23 18:38:21 FATAL Listener: Can‘t create socket!
.......
2015/09/24 00:39:13  INFO Added:   writer(192.168.31.10)

[[email protected] ~]# tail -f /var/log/mysql-mmm/mmm_mond.log
2015/09/24 00:35:10  WARN Checker ‘mysql‘ is dead!
......
2015/09/24 00:35:16  INFO Child exited normally (with exitcode 0), shutting down

[[email protected] mysql-mmm]# tail -f /var/log/mysql-mmm/mmm_agentd.log
2015/09/23 02:53:38  INFO END
.......
2015/09/24 00:38:55  INFO Child exited normally (with exitcode 0), shutting down
2015/09/24 00:38:55  INFO Changing active master to ‘M1‘

十一 测试
我们使用在M1 ip a 可以发现 192.168.31.10 在M1上
模拟M1宕机
使用 service mysql stop

在查看  ip a   发现vip 在M2上了。

时间: 2024-10-06 00:40:36

mmm实现mysql高可用的相关文章

通过MMM构建MYSQL高可用集群系统

本文为南非蚂蚁的书籍<循序渐进linux-第二版>-8.4的读笔记 MMM集群套件(MYSQL主主复制管理器) MMM套件主要的功能是通过下面三个脚本实现的 1)mmm_mond 这是一个监控进程,运行在管理节点上,主要负责都所有数据库的监控工作,同时决定和处理所有节点的角色切换 2)mmm_agentd 这是一个代理进程,运行在每个MYSQL服务器上,主要完成监控的测试工作以及执行简单的远端服务设置 3)mmm_control 简单的管理脚本,用来查看和管理集群运行状态,同事管理mmm_mo

MySQL - MMM 实现 MySQL 高可用

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

mysql高可用

1 mmm架构 mysql高可用集群    (mysql MMM   +  mysql主从同步) 1.公共配置 配置固定物理Ip地址   237   42   101   102    77 所有机器之间彼此可以ping通 服务器237   42   101   102 运行mysql数据库服务. 配置YUM源 在所有服务器237   42   101   102    77上安装 rpm  -q  perl  ||  yum  -y  perl yum  -y  install  perl-*

MySQL-MMM实现MySQL高可用读写分离

1.实验环境 1.1.实验拓扑 1.2.主机配置环境说明 主机名 IP地址 角色/用途 MySQL Server_ID master1 192.168.80.101 MySQL主节点,可读写操作 11 master2 192.168.80.102 MySQL备节点,可读写操作 12 slave1 192.168.80.103 MySQL从节点,仅能读 13 slave2 192.168.80.104 MySQL从节点,仅能读 14 monitor 192.168.80.105 MMM管理端 无

第22章 mysql 高可用MMM、MHA

2015-10-25 目录 参考资料 [1] 唐汉明.深入浅出MySQL 数据库开发.优化与管理维护(第2版)[M].北京:人民邮电出版社,2014 [2] Schwartz.高性能MySQL(第3版)[M].北京:电子工业出版社,2013 [3] 分享MYSQL中的各种高可用技术(源自姜承尧大牛) [4] MHA工作原理 [5] 技术实战:基于 MHA 方式实现 MySQL 的高可用(1) [6] mysql HA方案: MHA [7] mysql高可用方案MHA介绍 [8] Mysql5.5

MySQL高可用群集--MMM高可用架构

为什么要使用MySQL高可用群集 在实际生产环境中,当普通的MySQL主从复制和读写分离不能满足实际需求时,就需要考虑MySQL的高可用群集,出于安全角度考虑,当数据访问量过大带来主服务器负载增大,当出现主服务器宕机一个时,保证数据服务不会中断的情况下,从服务器会自动寻找另一主服务器,而从服务器也会像主服务器一样,当其中一个宕机时,依旧可以保证服务不会中断. MMM高可用架构 什么是MMM? MMM(Master-Master replication manager for MySQL)是一套支

# IT明星不是梦 # MySQL高可用集群之MMM

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

优酷土豆资深工程师:MySQL高可用之MaxScale与MHA

本文根据DBAplus社群第67期线上分享整理而成 本次分享主要包括以下内容: 1.MySQL高可用方案 2.为什么选择MHA 3.读写分离方案的寻找以及为什么选择Maxscale 一.MySQL  Failover的方案 常见的Failover方案 MMM MMM缺点: Monitor节点是单点,可以结合Keepalived实现高可用目前MySQL Failover 的方案 Keepalived会有脑裂的风险 在读写繁忙的业务中可能丢数据 MHA + ssh -o 测试心跳 + masterM

MySQL高可用方案探究

来自 http://bbs.chinaunix.net/thread-3769165-1-1.html 最近花了点时间研究了一下mysql的高可用,总结成文档,希望对初学这有帮助. Lvs+Keepalived+Mysql单点写入主主同步高可用方案 http://blog.chinaunix.net/uid-20639775-id-3337448.html Lvs+Keepalived+Mysql单点写入读负载均衡主主同步高可用方案 http://blog.chinaunix.net/uid-2