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

[经验分享] MYSQL-3m架构回顾

[复制链接]
发表于 2018-10-1 13:35:47 | 显示全部楼层 |阅读模式
  Master-Master replication manager for Mysql
  我们先来回顾一下mmm的概念,它是一套灵活的基于perl编写的脚本程序,自己本身不提供mysql服务的功能,它是用来对mysql replication 进行监控和故障迁移,并能管理mysql Master-Master复制的配置。(同一时间只有一个节点是可写的)。附带的工具套件可以实现多个slaves的read负载均衡。
  被管理的mysql server机需要安装相关的agent脚本,mysql-mmm的监控端就可以对安装过此监控脚本的mysql server 进行监控。
  但是在出现多台可写的mysql server 时,mmm为了防止写入冲突,保证数据有效性,在同一时间,它只允许一台mysql server进行写入操作,所以呢,它并不适用与有着大并发写入请求的生产环境。但是呢,当有多台可读的mysql server 存在的时候,它可以通过一些其他软件的配合,来实现读取请求的负载均衡,这样大大提高mysql server 的读取性能。
  最亮的来了,在运行某一台mysql server 处于不可用状态的时候,mmm可以将原有的操作请求迁移到其他的mysql server,从而实现了服务的高可用性。包括写请求迁移,读请求迁移,主从同步的master迁移。
  mmm同时也提供了一套很好的运维管理工具,可以实现简单快捷的数据备份与维护。简化管理员的日常维护成本。
  mysql-mmm的组成以及原理
  三个脚本:
  mmm_mond:
  监控进程,负责所有的监控工作,决定和处理所有节点角色活动。此脚本需要在监管机上运行。
  mmm_agentd:
  运行在每个mysql服务器上的代理进程,完成监控的探针工作,执行简单的远端服务设置,此脚本需要在被监管机器上运行。
  mmm_control:
  提供管理mmm_mond进程的命令。
  原理:
  mmm的监管端会提供多个虚拟IP 我们简称VIP,包括一个可写VIP,多个可读的VIP,通过监管的管理,这些IP会绑定在可用mysql之上,当某台mysql 故障时,监管机就会将它的虚拟IP迁移到其他的mysql。
  所以呢,我们要在mysql中添加相关的授权用户,以便能够让mysql可以支持监理机的监控,授权的用户一般包括2个,mmm_minitor和 mmm_agent 两个用户,如果你想使用mmm的备份工具呢,还需要再添加一个mmm_tools用户。
  mysql-mmm架构的实现:
  拓扑:五台服务器,包括:一台建立机,两台mysql-master,两台mysql-slave
  RHEL6.x ,64位环境。
  真实IP分配:
  监管机:server.uplooking.com  192.168.10.254
  mysql: master1.uplooking.com 192.168.10.10
  mysql: master2.uplooking.com 192.168.10.20
  mysql: slave1.uplooking.com 192.168.10.30
  mysql: slave2.uplooking.com 192.168.10.40
  虚拟IP分配:
  192.168.10.110  write
  192.168.10.120 read
  192.168.10.130 read
  192.168.10.140 read
  192.168.10.150 read
  开始配置:
  step1:起服务
  先把源码包的四台mysql服务器搭建好,修改主配置文件。
  192.168.10.10  my.cnf
  server_id=10
  log_bin=mysql
  log_slave_updates=1
  auto_increment_increment=2
  auto_increment_offset=1
  skip-name-resolve
  :wq
  192.168.10.20  my.cnf
  server_id=20
  log_bin=mysql
  log_slave_updates=1
  auto_increment_increment=2
  auto_increment_offset=2
  skip-name-resolve
  :wq
  选项解析:my.cnf
  auto_increment_offset=1   指定自增长字段的起始值
  auto_increment_increment=2  指定自增长字段自增长的步长
  skip-name-resolve    不做主机名解析
  log_slave_updates=1    允许级联复制
  自增长字段的意义主要在于限制两台可写入服务器在同时收到写入请求的时候的冲突。
  --------------------------------------------
  192.168.10.30 my.cnf
  server_id=30
  log_bin=mysql
  log_slave_updates=1
  :wq
  192.168.1.103  my.cnf
  server_id=40
  log_bin=mysql
  log_slave_updates=1
  :wq
  -------------------------------------------
  你会发现我把所有的bin_log日志都命名为了mysql,仅仅是习惯问题,有些配置我们要知其然,知其所以然,比如说,我为什么要加那一条不做主机名解析? 对mysql比较了解的朋友第一时间就会反映到binlog日志的命名,默认情况下mysql是根据你的主机名命名binlog日志的,主从关系的建立也就依靠这binlog日志,说到这里,我们再来回顾下主从mysql
  主从mysql在建立主从关系的时候,会涉及到两个进程,一个是Slave_IO_running,一个是Slave_SQL_running, IO负责的是把主服务器的binlog日志里的内容拷贝到本机的ralaybinlog日志里,
  SQL进程呢则是负责执行本机的relaybinlog日志里的sql语句,从而把数据写进表里。
  所以说,在你主从同步的过程中,slave需要与所指向的master的日志同步,日志中的position也要同步,所以在mmm中的主从我们需要让他保持binlog日志的同步,不然一台master故障,在切换另一台master的时候日志是同步不过来的。
  10-40 mysql-server 主机   : service  mysql  start
  step2:配置双主:
  同步两台master的数据库:
  master1 :mysqldump   --all-database > /tmp/mysql-all.sql
  scp  /tmp/mysql-all.sql   root@192.168.10.20:/tmp
  master2:mysql < /tmp/mysql-all.sql
  两台master建立主主关系:

  master1上做授权:grant  replication slave on *.* to slave @”%” >  flush privileges

  master2 上做授权:grant >  flush privileges
  master1 上做回指:
  >change master to
  master_host='192.168.10.20',
  master_user='slave'
  master_password='slave'
  master_log_file='mysql-binlog'
  master_log_pos=120;
  master2上做回指:
  >change master to
  master_host='192.168.10.10',
  master_user='slave'
  master_password='slave'
  master_log_file='mysql-binlog'
  master_log_pos=120;
  可以查看一下主从状态:
  echo  “show slave status\G;” | mysql
  .....
  slave_io_running:yes
  slave_sql_running:yes
  ......
  ok !  双主搭建完毕。
  step3:配置两台slave:

  master1上做授权:grant replication slave on *.* to 'slave@192.168.10.40' >
  grant replication slave on *.* to 'slave@192.168.10.30' >  slave1、2分别回指:
  >change master to
  master_host='192.168.10.10',
  master_user='slave'
  master_password='slave'
  master_log_file='mysql-binlog'
  master_log_pos=120;
  两台slave全部指向了master1
  ok,slave配置完成。 基本的框架结构起来了,开始配置mmm。
  step4:配置mmm
  在所有服务器上安装mysql-mmm
  安装依赖包
  yum -y install  perl-Class-Singleton
  (启动mysql-mmm-montior进程时需要此软件包提供的Singleton 类)
  yum -y install  perl-Params-Validate
  yum -y install perl-XML-DOM
  yum -y install perl-XML-DOM-XPath
  yum -y install perl-MailTools
  rpm -ivh perl-Log-Log4perl-1.26-1.el6.rf.noarch.rpm
  (启动mysql-mmm-agent进程时需要此软件包提供的Log-Log4perl 类)
  tar -zxvf Algorithm-Diff-1.1902.tar.gz
  (启动mysql-mmm-agent进程时需要此软件包提供的Algorithm-Diff类)
  cd Algorithm-Diff-1.1902
  perl  Makefile.PL
  make
  make test
  make install
  tar -zxvf Proc-Daemon-0.03.tar.gz
  (启动mysql-mmm-agent进程时需要此软件包提供的Daemon类)
  cd Proc-Daemon-0.03
  perl    Makefile.PL
  make
  make  test
  make  install
  cd Net-ARP-1.0.8  (分配虚拟Ip地址)
  perl    Makefile.PL
  make
  make  install
  安装mysql-mmm
  tar -zxvf mysql-mmm-2.2.1.tar.gz
  mysql-mmm-2.2.1
  make install
  安装目录
  /usr/lib/perl5/vendor_perl/5.8.8/MMM                 MMM 使用的 perl 模块
  /usr/lib/mysql-mmm                                              MMM 的脚本揑件
  /usr/sbin                                                               MMM 的命令保存路径
  /var/log/mysql-mmm                                             MMM 的日志保存路径
  /etc                                                                      MMM 配置文件保存的路径
  /etc/mysql-mmm                                                  MMM 配置文件保存的路径,优先级最高
  /etc/init.d/                                                            agentd 和 monitor 的启劢关闭脚本
  在10 、20、30、40 上做用户授权(监控用户monitor   代理用户agent)

  grant  replication  client  on *.*  to  monitor@"%">
  grant  replication client,process,super   on *.*  to  agent@"%">  在所有主机上编辑mmm_common.conf  文件
  [root@localhost mysql-mmm]# cat /etc/mysql-mmm/mmm_common.conf
  active_master_role      writer
  
  cluster_interface               eth0
  pid_path                        /var/run/mmm_agentd.pid
  bin_path                        /usr/lib/mysql-mmm/
  replication_user            slave
  replication_password    slave
  agent_user                      agent
  agent_password              agent
  
  
  ip                                      192.168.10.10
  mode                                    master
  peer                                    db20
  
  
  ip                                      192.168.10.20
  mode                                    master
  peer                                    db10
  
  
  ip                                      192.168.10.30
  mode                                    slave
  
  
  ip                                      192.168.10.40
  mode                                    slave
  
  
  hosts                                   db10, db20
  ips                                     192.168.10.110   #指定负责写操作数据库服务器使用的虚拟ip
  mode                                    exclusive
  
  
  hosts                                   db20, db30,db40
  ips                                     192.168.10.120, 192.168.10.130, 192.168.10.140    #指定负责读操作数据库服务器使用的虚拟ip
  mode                                    balanced
  
  [root@localhost mysql-mmm]#
  参数解释:
  peer的意思是等同,表示db1与db2是同等的。
  ips指定VIP
  mode exclusive 只有两种模式:exclusive是排他,在这种模式下任何时候只能一个host拥有该角色
  balanced模式下可以多个host同时拥有此角色。一般writer是exclusive,reader是balanced
  在4台数据库服务器10、20、30、40上 编辑mmm_agent.conf  (此文件监控主机上可以没有)
  [root@localhost mysql-mmm]# cat /etc/mysql-mmm/mmm_agent.conf
  include mmm_common.conf
  this db10  #此处修改为当前数据库服务器的主机名(主机头名字即可)
  在4台数据库服务器10、20、30、40上启动代理进程agent
  [root@localhost ~ ]# /etc/init.d/mysql-mmm-agent start
  Daemon bin: '/usr/sbin/mmm_agentd'
  Daemon pid: '/var/run/mmm_agentd.pid'
  Starting MMM Agent daemon... Ok
  [root@localhost mysql-mmm]#ps aux | grep mmm_agentd   默认监听9989端口
  编辑监控主机254的配置文件 mmm_mon.conf
  [root@localhost mysql-mmm]# cat mmm_mon.conf
  include mmm_common.conf
  
  ip                                      192.168.10.254
  pid_path                                /var/run/mmm_mond.pid
  bin_path                                /usr/lib/mysql-mmm/
  status_path                             /var/lib/misc/mmm_mond.status
  ping_ips                                192.168.10.10, 192.168.10.20, 192.168.10.30, 192.168.10.40          #4台数据库服务器的真实ip地址。
  
  
  monitor_user                    monitor
  monitor_password                monitor
  
  debug 0
  [root@localhost mysql-mmm]#
  由于文件太多,在这里做下RP:
  /etc/mysql-mmm/mmm_common.conf    所有主机,大家心里有数,有几台服务器,都扮演什么角色
  /etc/mysql-mmm/mmm_agent.conf    被监控主机,告诉大家自己是什么角色.
  /etc/init.d/mysql-mmm-agent start     被监控主机,运行agent进程
  /etc/mysql-mmm/mmm_mon.conf     告诉mmm脚本,我是监控。
  /etc/init.d/mysql-mmm-monitor start    监控主机,运行monitor进程。
  在监控服务器104上查看4台数据库服务器的状态
  监控名 mmm_control命令简介
  [root@server3 mysql-mmm]# mmm_control    help
  help                   查看帮助信息
  ping                   ping监控
  show                   查看状态信息
  checks [|all [|all]]  显示检查状态,包括(ping、mysql、rep_threads、rep_backlog)
  set_online       设置某host为online状态
  set_offline      设置某host为offline状态
  mode          打印当前的模式,是ACTIVE、MANUAL、PASSIVE?默认ACTIVE模式
  set_active    更改为active模式
  set_manual    更改为manual模式
  set_passive     更改为passive模式
  move_role [--force]   - move exclusive role  to host
  #更改host的模式,比如更改处于slave的mysql数据库角色为write
  (Only use --force if you know what you are doing!)
  set_ip         为host设置ip,只有passive模式的时候才允许更改!
  测试mysql  mmm 配置:
  1、在监控主机192.168.1.104上执行  mmm_control  show
  2、停止192.168.1.100 上的数据库服务,再执行mmm_control  show命令,发现192.168.1.101 使用虚拟Ip 192.168.1.12
  3、在slave角色的数据库服务器上 查看是否获取到监控主机分配的虚拟ip地址 ,执行命令  ip   a  或 ip  addr   show
  使用ifconfig  命令看不到网卡获取的虚拟Ip地址。

  4、分别在2台,master角色的主机上做用户授权:grant all  on  *.*  to   root@"%" >  在客户端访问master数据库服务器:mysql  -h192.168.1.12  -uroot  -p123  (能够登陆成功说明配置成功)


运维网声明 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-607179-1-1.html 上篇帖子: 了解mysql的三种不同安装方式的区别 下篇帖子: UCenter info: MySQL Query Error的解决方法----For Discuz!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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