设为首页 收藏本站
查看: 1298|回复: 0

[经验分享] MMM高可用mysql方案

[复制链接]

尚未签到

发表于 2018-10-3 06:47:08 | 显示全部楼层 |阅读模式
  MMM高可用mysql方案是一个通过Perl编写的、基于MySQL主从复制的、成熟完善的MySQL高可用集群解决方案,有一个管理端(monitor)和多个代理端(agent)构成。通过MMM可以实现监控和管理MySQL主主复制和服务状态,同时也可以监控多个slave节点的复制以及运行状态,并且可以做到任意节点发生故障时实现自动切换的功能。在整个集群中,同一时刻只有一个master是可写的。
  MMM套件主要的功能是通过三个脚本来实现的:
  1.mmm_mond
  这是一个监控进程,运行在管理节点上,主要负责对所有数据库的监控工作,同时决定和处理所有节点的角色切换。
  2.mmm_agentd
  这是一个代理进程,运行在每台MySQL服务器上,主要完成监控的测试工作以及执行简单的远端服务设置。
  3.mmm_control
  这是一个简单的管理脚本,用来查看和管理集群运行状态,同时管理mmm_mond进程
  缺点:
  MMM架构需要多个节点,多个ip,对服务器数量有要求;其次,MMM方案在读、写非常繁忙的业务系统下表现不是很稳定,可能会出现复制延时、切换失效等问题。因此,MMM方案并不太适应于数据安全性要求很高,并且读、写频繁的环境中。
  MMM有多种应用架构,最简单的是两个节点的运行环境。如下图:
DSC0000.jpg

  在通过MMMt套件实现的双Master架构中,需要5个ip地址,两个maser节点各有的一个固定不变的物理ip地址,另外还有两个只读ip和一个可写ip,这三个虚拟ip不会固定在任何一个节点上,相反,她会在两个master节点之间来回切换,如何切换取决于节点的可用性。
  在正常情况下(系统、网络正常,MySQL服务正常,主从复制正常,没有复制延迟等),Master1有两个虚拟IP(reader ip和wirter ip),Master2上有一个虚拟IP(reader ip),如果Master1发生故障,那么所有的reader和writer虚拟IP都会被分配至Master2。
  在双Master节点的基础上,增加多个slave节点,即可实现双主多从节点应用架构。如下图:
DSC0001.jpg

  双主多从节点的MySQL架构适合读查询量非常大的业务环境。此架构通过两个Master实现MySQL写操作的高可用,然后在Master后端又增加了多个Slave节点,所有的Slave节点只能进行读查询操作,而多个Slave节点之间可以通过LVS,HAProxy等负载均衡软件实现MySQL读操作的负载均衡。
  此架构需要5台独立的服务器,其中一台MMM管理节点,两台mysql的Master节点,还有两台mysql的slave节点。
  

双主双从集群配置环境  

主机名
物理IP
集群角色
Server_id
Monitor
192.168.88.11
MMM管理器

Master1
192.168.88.20
主Master可读、可写
1
Master2
192.168.88.21
备Master可读、可写
2
Slave1
192.168.88.22
Salve节点只读
3
Slave2
192.168.88.23
Salve节点只读
4  双主双从应用架构读、写分离IP列表

虚拟IP地址
IP角色
功能描述
192.168.88.30
writer IP
应用程序配置中的写入VIP,仅支持单点写入
192.168.88.31 /192.168.88.32/192.168.88.33/192.168.88.34
reader IP
应用程序配置中的读查询VIP,每个数据库节点一个读VIP,可以通过LVS,HAProxy等负载均衡软件对读VIP做负载均衡  MMM的安装与配置
  1.MMM套件安装
  #安装epel源https://fedoraproject.org/wiki/EPEL/zh-cn
  rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
  #在Monitor节点执行如下命令
  yum -y install mysql-mmm*
  #每个MySQL DB节点只要安装mysql-mmm-agent即可
  yum -y install mysql-mmm-agent
  2.MMM集群套件的配置
  在进行MMM套件配置之前,需要配置好Master到Master2主主互为同步,Master1到Slave1、Slave2主从同步。需要注意,在配置Slave1、Slave2和Master同步时,‘master_host’的地址要填Master1节点的物理ip,而不是虚拟ip。
  由于MMM集群套件对数据的读、写进行了严格控制,根据MMM的管理机制,需要首先在所有Mysql主机上设置read_only参数,也就是在/etc/my.cnf的mysqld配置段添加:
  read_only = 1
  在所有MySQL节点创建除复制账号之外的另外两个账号,monitor user和monitor agent:

  GRANT REPLICATION CLIENT ON . TO 'mmm_monitor'@'192.168.88.%'>
  GRANT SUPER,REPLICATION CLIENT,PROCESS ON . TO 'mmm_agent'@'192.168.88.%'>  主要涉及4个配置文件:mmm_mon.conf、mmm_common.conf、mysql-mmm-agent和mmm_agent.conf。其中,mmm_mon.conf仅在MMM管理端配置,mmm_common.conf需要在所有MMM集群节点进行配置,内容完全一样,mmm_agent.conf也需要在所有Mysql节点进行配置。
  (1)配置mmm_common.conf文件
  active_master_role      writer  #当设置这个参数时,集群中所有mysql节点都应该设置‘read_only=1’参数,这样,MMM会根据每个节点的角色进行动态判断,当MMM设置写角色的时候,会自动在可写节点执行‘set global read_only = 0’操作,也就是打开写权限,其他只读的角色保持‘read_only=1’的只读权限,
  
  cluster_interface       eth0    #配置的网络接口,这里不能指定为子接口,如eth0:0
  pid_path                /run/mysql-mmm-agent.pid    #设定PID文件位置
  bin_path                /usr/libexec/mysql-mmm/ #设定MMM可执行文件路径
  replication_user        repl_user   #设定复制的用户名
  replication_password    123456  #设定复制的密码
  agent_user              mmm_agent   #设定更改只读操作的用户
  agent_password          123456      #设定更改操作用户的密码
  
        #设定db1的配置信息,db1会在mmm_agent.conf文件中定义
  ip      192.168.88.20   #设定db1的物理ip地址
  mode    master  #设置db1的角色为Master
  peer    db2 #设置与db1对等的主机名,也就是db1和db2均为Master角色
  
       #设定db2的配置信息,db2会在mmm_agent.conf文件中定义
  ip      192.168.88.21  #设定db2的物理ip地址
  mode    master #设置db2的角色为Master
  peer    db1 #设置与db2对等的主机名,也就是db1和db2均为Master角色
  
        #设定db3的配置信息,db2会在mmm_agent.conf文件中定义
  ip      192.168.88.22   #设定db3的物理ip地址
  mode    slave    #设置db3的角色为Slave
  
        #设定db4的配置信息,db2会在mmm_agent.conf文件中定义
  ip      192.168.88.23   #设定db4的物理ip地址
  mode    slave    #设置db4的角色为Slave
  
         #设置可写角色模式
  hosts   db1, db2        #设置可执行写操作的主机
  ips     192.168.100.250 #设置可写的虚拟IP地址
  mode    exclusive       #设置角色模式为互斥,互斥角色只有一个ip并且同一时间只能分配给一个主机,一般writer角色是exclusive模式
  
         #设置可读角色模式
  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模式
  
  (2)配置mmm_agent.conf文件
  include mmm_common.conf
  this db1        #对应的主机名,Master2对应的主机名为db2
  (3)配置mmm_mon.conf文件
  include mmm_common.conf
  
  ip                  127.0.0.1   #为了安全性,设置只在本机监听,默认端口为9988
  pid_path            /run/mysql-mmm-monitor.pid
  bin_path            /usr/libexec/mysql-mmm
  status_path         /var/lib/mysql-mmm/mmm_mond.status
  ping_ips            192.168.88.1,192.168.88.20,192.168.88.21,192.168.88.22,192.168.88.23        #用于测试网络可用性的ip地址列表,只要其中一个地址能ping通,就代表网络正常,这里不重要,写入本机的IP地址
  flap_duration    3600    #抖动的时间范围,默认3600s
  flap_count       3       #在抖动的时间范围内,最大抖动次数
  auto_set_online     0        #抖动的时间范围过后,则设置自动上线
  
  
  monitor_user        mmm_monitor #monitor user账号
  monitor_password   123456   #monitor user密码
  
  debug 0             #MMM管理端的运行模式,1为debug模式,0为正常模式
  (4)配置mysql-mmm-agent文件
  /etc/default/mysql-mmm-agent,它要在MMM集群的所有Mysql节点设置,此文件内容只有一行:ENABLED=1
  MMM集群中所有配置文件的权限最好设置为640,否则启动MMM服务的时候可能出错。
  #在MMM集群管理端启动mysql-mmm-monitor服务
  systemctl start mysql-mmm-monitor
  #在每个agent端依次启动agent服务
  systemctl start mysql-mmm-agent
  MMM基本维护:
  查看运行状态
  一种是通过MMM集群提供的mmm_control(仅在管理端存在)命令,另一种是查看MMM集群的运行日志信息,MMM集群的运行日志位于每个集群节点的/var/log/mysql-mmm下。
  mmm_control     help            #显示帮助信息
  ping        #测试网络运行状态
  show        #显示MMM集群中所有节点的状态
  checks  [|all []]  #显示MMM集群中指定节点的详细状态或
  显示所有节点的详细运行状态
  set_online     #将一个MMM集群节点设置为online状态
  set_offline  #将一个MMM集群节点设置为offline状态
  mode         #显示MMM集群当前的运行模式,有active、manual和
  passive三种模式,默认是active模式
  set_active        #切换到active模式
  set_manual        #切换到set_manual模式
  set_passive       #切换到passive模式
  move_role [--force]    #在互斥模式下切换角色,例如将写操作
  从db1切换到db2
  set_ip   #用来在被动模式下操作角色
  MMM整合Amoeba应用架构
DSC0002.jpg

  #下载amoeba-mysql-3.0.5-RC-distribution.zip
  wget http://jaist.dl.sourceforge.net/project/amoeba/Amoeba%20for%20mysql/3.x/amoeba-mysql-3.0.5-RC-distribution.zip
  #下载jdk,配置环境变量
  vim /etc/profile
  export JAVA_HOME=/usr/local/jdk1.8.0_171

  export>  export PATH=$JAVA_HOME/bin:$PATH
  Amoeba配置文件比较多,但是仅仅使用读、写分离功能,只需配置dbServers.xml和amoeba.xml,如果需要配置IP访问控制,还需要修改access_list.conf文件。



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-607710-1-1.html 上篇帖子: MySQL无法查看help内容 下篇帖子: mysql连接模块
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表