mysql MMM 架构

Posted on Posted in mysql
Tips: 本文创建于2016年3月29日,已超过 2 年,内容或图片可能已经失效!

mysql MMM 架构

1. 环境

系统和架构

  • centos 6.5
  • master1与master2互为主从
  • slava1和slave2,master1为主
  • monitor为mmm管理端

物理地址

Monitor     192.168.88.11  
Master1     192.168.88.20  
Master2     192.168.88.21  
Slave1      192.168.88.22  
Slave2      192.168.88.23  

虚拟 IP

192.168.88.30   #应用程序配置中的写入 VIP,仅支持单点写入  
192.168.88.31   #应用撑血配置中的读查询 VIP,每个数据节点一个读 VIP,可以通过 lvs 等对 vip 做负载均衡  
192.168.88.32  
192.168.88.33  
192.168.88.34  

2. 安装一个 epel 源

http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm  

3. 在 mnoitor 节点执行

yum -y install mysql-mmm*  

4. 在每个 mysql 节点安装 mysql-mmm-ageent

yum -y install mysql-mmm-agent  

检查

[root@c5 mysql-mmm]# 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  

5. 在所有 mysql 节点上,设置 read_only 参数

read_only = 1  

6. 在所有节点创建 mysql 除复制账号外的两个账号,即monitor user 和 monitor agent

grant replication client on *.* to 'mmm_monitor'@'192.168.88.%' identified by 'monitor_password';  
grant super,replication clent, process on *.* to 'mmm_agent'@'192.168.88.%' identified by 'agent_password';  

7. mmm_common.conf

#yum 安装后,默认配置为 /etc/mysql-mmm  
#主要涉及4个配置文件  
  
mmm_mon.conf  #仅在 MMM 管理端进行配置,主要用于设置一些监控参数  
mmm_common.conf #在所有的 MMM 集群节点进行配置,并且内容完全一样,主要用于设置读写节点的 IP 及配置虚拟 IP  
mysql-mmm-agent  
mmm_agent.conf  #在所有的 mysql 节点进行配置,设置每个节点的标识  
  
vim mmm_common.conf  
  
active_master_role      writer  #当设置这个参数时,集群中所有的 mysql 节点都应该设置 "read_only = 1"参数,这样,MMM 会根据每个节点的角色进行动态判断,当 MMM 设置写角色的时候,会自动在可写的节点执行"set global read_only = 0"操作,也就是打开写权限,而其他制度角色则保持"read_only = 1"的只读权限  
  
<host default>   
    cluster_interface       eth0    #配置的网络接口,注意这里不能指定为子接口,例如eth0:0  
    pid_path                /var/run/mysql-mmm/mmm_agentd.pid_path  #设置 pid 文件位置  
    bin_path                /usr/libexec/mysql-mmm/ #设置 MMM 可执行文件路径  
    replication_user        repl_user   #设置复制的用户名  
    replication_password    repl_password   #设置复制的密码  
    agent_user              mmm_agent   #设置更改只读操作的用户,这个用户前面已经建立  
    agent_password          agent_password  #设置更改只读操作用户的密码  
</host>  
  
<host db1>  #设置 db1 的配置信息,db1会在 mmm_agent.conf 文件中指定  
    ip      192.168.88.20   #设置db1的物理地址  
    mode    master  #设置 db1 的角色为 master  
    peer    db2     #设置与 db1对等的主机名,也就是 db1和 db2均为 master 角色  
</host>  
  
<host db2>  #与db 配置类似  
    ip      192.168.88.21  
    mode    master  
    peer    db1  
</host>  
  
<host db3>  #设置 db3 的配置信息,db3 会在 mmm_agent.conf 文件中定义  
    ip      192.168.88.22   #db3的物理地址  
    mode    slave   #设置 db3 的角色为 slave  
</host>  
  
<host db4>  #设置 db4 的配置信息,db4 会在 mmm_agent.conf 文件中定义  
    ip      192.168.88.23   #db4的物理地址  
    mode    slave   #设置 db4 的角色为 slave  
</host>  
  
<role writer>   #设置可写角色模式  
    hosts   db1, db2    #设置可执行写操作的主机,这里指定 db1,db2 均可  
    ips     192.168.88.30   #设置可写的虚拟 ip 地址  
    mode    exclusive   #设置角色的模式为互斥,互斥角色只有一个 IP,并且同一时间只能分配一个主机,一般 writer角色是 exclusive 模式  
</role>  
  
<role reader>   #设置可读角色模式  
    hosts   db1, db2, db3, 
;db4  #设置可执行读操作的主机  
    ips     192.168.88.31, 192.168.88.32, 192.168.88.33, 192.168.88.34  #设置可读的虚拟 IP 地址,可以有多个  
    mode    balanced    #设置角色的模式为负载均衡,在负载均衡角色中,可以有多个 IP,这些 IP 被均衡动态的分配给多台 mysql 主机,一般 reader 角色是 balanced  
</role>  

8. 配置 mmm_agent.conf

vim mmm_agent.conf  
include mmm_common.conf  
this db1    #db2,db3,db4,每个 mysql 节点依次类推  

9. mmm_mon.conf

仅在 MMM管理节点上设置

include mmm_common.conf  
  
<monitor>  
    ip                  127.0.0.1   #为了安全性,设置只在本机监听,mmm_mond 默认监听9988  
    pid_path            /var/run/mysql-mmm/mmm_mond.pid     #设置 mmm_mond 进程 pid 文件位置  
    bin_path            /usr/libexec/mysql-mmm  #MMM 可执行文件路径  
    status_path         /var/lib/mysql-mmm/mmm_mond.status  #MMM 集群的状态文件  
    ping_ips            192.168.88.1, 192.168.88.20, 192.168.88.21, 192.168.88.22, 192.168.88.23    #用于测试网络可用性 IP 地址列表,只要其中有一个地址 ping 通,就代表网络正常,这里不要写入本机地址  
#    flap_duration      3600    #抖动的时间范围,单位秒,这两个参数考虑情况添加  
#    flap_count         3       #在抖动的时间范围内,最大的抖动次数  
    auto_set_online     0   #是否设置自动上线,如果该值大于0,抖动的主机在抖动的时间范围过后,则设置自动上线  
  
    # 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     #moniter user账号,事先已设置过  
    monitor_password     monitor_password   #moniter user 账号对应的密码  
</host>  
  
debug 0     #MMM 管理段的运行模式,1为 debug 模式,0为正常模式  

10. mysql-mmm-agent 文件

此文件在所有的 mysql 节点进行设置,此文件只有一行

vim /etc/default/mysql-mmm-agent  
ENABLED=1 

11. 注意

集群中所有配置文件的权限最好都设置为640,否则启动 MMM 服务的时候可能出错

12. 管理

/etc/init.d/mysql-mmm-monitor   # 集群控制端的服务启动与关闭  
/etc/init.d/mysql-mmm-agent     # 所有 mysql节点服务的启动和关闭  

首先在服务器端启动

/etc/init.d/mysql-mmm-monitor start  

然后依次启动 agent 服务

/etc/init.d/mysql-mmm-agent start  

13. 基本维护管理

[root@c5 mysql-mmm]# mmm_control help  
Valid commands are:  
    help                              - show this message   #显示基本帮助信息  
    ping                              - ping monitor    #测试网络运行状态  
    show                              - show status #显示MMM集群中所有节点的状态  
    checks [<host>|all [<check>|all]] - show checks status  #显示MMM集群中指定节点的详细状态或显示所有节点的详细运行状态  
    set_online <host>                 - set host <host> online  #将一个MMM集群节点设置为online状态  
    set_offline <host>                - set host <host> offline #将一个MMM集群节点设置为offline状态  
    mode                              - print current mode. #显示MMM集群当中的运行模式,有active,manual和passive三种模式,默认是active  
    set_active                        - switch into active mode.    #切换MMM集群到active模式  
    set_manual                        - switch into manual mode.    #切换到manual模式  
    set_passive                       - switch into passive mode.   #切换到passive模式  
    move_role [--force] <role> <host> - move exclusive role <role> to host <host>   #在互斥模式下切换角色,例如将写操作从db1到db2  
                                        (Only use --force if you know what you are doing!)  
    set_ip <ip> <host>                - set role with ip <ip> to host <host>    #用来在被动模式下操纵角色  
  
[root@c5 mysql-mmm]# mmm_control checks all  
db4  ping         [last change: 2016/03/29 10:36:13]  OK  
db4  mysql        [last change: 2016/03/29 10:36:13]  OK  
db4  rep_threads  [last change: 2016/03/29 10:36:13]  OK  
db4  rep_backlog  [last change: 2016/03/29 10:36:13]  OK: Backlog is null  
db2  ping         [last change: 2016/03/29 10:36:13]  OK  
db2  mysql        [last change: 2016/03/29 10:36:13]  OK  
db2  rep_threads  [last change: 2016/03/29 10:36:13]  OK  
db2  rep_backlog  [last change: 2016/03/29 10:36:13]  OK: Backlog is null  
db3  ping         [last change: 2016/03/29 10:36:13]  OK  
db3  mysql        [last change: 2016/03/29 10:36:13]  OK  
db3  rep_threads  [last change: 2016/03/29 10:36:13]  OK  
db3  rep_backlog  [last change: 2016/03/29 10:36:13]  OK: Backlog is null  
db1  ping         [last change: 2016/03/29 10:36:13]  OK  
db1  mysql        [last change: 2016/03/29 10:36:13]  OK  
db1  rep_threads  [last change: 2016/03/29 10:36:13]  OK  
db1  rep_backlog  [last change: 2016/03/29 10:36:13]  OK: Backlog is null  
  
  
[root@c5 mysql-mmm]# mmm_control checks db1  
db1  ping         [last change: 2016/03/29 10:36:13]  OK    #测试网络可用性  
db1  mysql        [last change: 2016/03/29 10:36:13]  OK    #检测mysql服务器是否运行正常  
db1  rep_threads  [last change: 2016/03/29 10:36:13]  OK    #检测mysql的复制线程是否正常运行  
db1  rep_backlog  [last change: 2016/03/29 10:36:13]  OK: Backlog is null   #检测mysql的复制日志是否有挤压 

14. 测试

在客户端,可以用虚拟IP登录mysql,MMM通过虚拟IP进行读写分离模式

故障测试,关闭master1

» 转载请注明来源:呢喃 » mysql MMM 架构

Leave a Reply

Your email address will not be published. Required fields are marked *

14 − 10 =