mysql MMM 架构

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

环境

centos 6.5

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

物理地址

  1. Monitor     192.168.88.11  
  2. Master1     192.168.88.20  
  3. Master2     192.168.88.21  
  4. Slave1      192.168.88.22  
  5. Slave2      192.168.88.23  

虚拟 IP

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

1、安装一个 epel 源

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

2、在 mnoitor 节点执行

  1. yum -y install mysql-mmm*  

3、在每个 mysql 节点安装 mysql-mmm-ageent

  1. yum -y install mysql-mmm-agent  

检查

  1. [root@c5 mysql-mmm]# rpm -qa | grep mysql-mmm  
  2. mysql-mmm-2.2.1-2.el6.noarch  
  3. mysql-mmm-agent-2.2.1-2.el6.noarch  
  4. mysql-mmm-tools-2.2.1-2.el6.noarch  
  5. mysql-mmm-monitor-2.2.1-2.el6.noarch  

4、在所有 mysql 节点上,设置 read_only 参数

  1. read_only = 1  

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

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

6、mmm_common.conf

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

7、配置 mmm_agent.conf

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

8、mmm_mon.conf

仅在 MMM管理节点上设置

  1. include mmm_common.conf  
  2.   
  3. <monitor>  
  4.     ip                  127.0.0.1   #为了安全性,设置只在本机监听,mmm_mond 默认监听9988  
  5.     pid_path            /var/run/mysql-mmm/mmm_mond.pid     #设置 mmm_mond 进程 pid 文件位置  
  6.     bin_path            /usr/libexec/mysql-mmm  #MMM 可执行文件路径  
  7.     status_path         /var/lib/mysql-mmm/mmm_mond.status  #MMM 集群的状态文件  
  8.     ping_ips            192.168.88.1, 192.168.88.20, 192.168.88.21, 192.168.88.22, 192.168.88.23    #用于测试网络可用性 IP 地址列表,只要其中有一个地址 ping 通,就代表网络正常,这里不要写入本机地址  
  9. #    flap_duration      3600    #抖动的时间范围,单位秒,这两个参数考虑情况添加  
  10. #    flap_count         3       #在抖动的时间范围内,最大的抖动次数  
  11.     auto_set_online     0   #是否设置自动上线,如果该值大于0,抖动的主机在抖动的时间范围过后,则设置自动上线  
  12.   
  13.     # The kill_host_bin does not exist by default, though the monitor will  
  14.     # throw a warning about it missing.  See the section 5.10 "Kill Host   
  15.     # Functionality" in the PDF documentation.  
  16.     #  
  17.     # kill_host_bin     /usr/libexec/mysql-mmm/monitor/kill_host  
  18.     #  
  19. </monitor>  
  20.   
  21. <host default>  
  22.     monitor_user        mmm_monitor     #moniter user账号,事先已设置过  
  23.     monitor_password     monitor_password   #moniter user 账号对应的密码  
  24. </host>  
  25.   
  26. debug 0     #MMM 管理段的运行模式,1为 debug 模式,0为正常模式  

9、mysql-mmm-agent 文件

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

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

10、注意

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

11、管理

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

首先在服务器端启动

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

然后依次启动 agent 服务

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

12、基本维护管理

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

13、测试

在客户端,可以用虚拟IP登录mysql,MMM通过虚拟IP进行读写分离模式
故障测试,关闭master1

» 转载请注明来源:若我若鱼 » mysql MMM 架构

Leave a Reply

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

four × two =