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

[经验分享] MySQL-MMM的读写分离及高可用

[复制链接]

尚未签到

发表于 2018-9-27 06:14:32 | 显示全部楼层 |阅读模式
  用途
  mmm是基于信息探测方式进行mysql主从复制架构的监测与故障转移
  mmm可以做到负载均衡,100%的数据可用性
  mmm所涉及的检查项   服务器可达性,服务可达性,复制线程可控性
  如图: 当 master1在宕机时, mmm可以将之前分摊的流量进行转移,甚至于将从服务器提升为主
  延续双主模型.
DSC0000.jpg

  mmm-agent端状态一览
  online 节点可用
  replication_delay 复制延迟或无法进行(检查req_backlog文件)
  replication_fail 复制失败
  awating_recovery 等待恢复
  hard_offline  主机离线
  admin_offline  主控端离线
  unknown  未知错误
  规划如下
  172.16.43.200  主控机器负责监测与资源的管理
  172.16.43.1  vip(172.16.43.11)  master1 主主复制第一台(可读写)
  172.16.43.2  vip(172.16.43.12)  master2 主主复制第二台(只读)
  172.16.43.3  vip(172.16.43.13)  slave   主从方式复制 1 , 2 的信息(只读)
  实验过程如下
  主控安装安装: ansible, mysql客户端, mysql-mmm
  集群节点安装如下: mariadb, mysql-agent
  i)  主机互信,ansible部署的关键
yum -y install ansible-1.5.4-1.el6.noarch.rpm  
vim /etc/ansible/hosts
  
# 主控节点完成
  
[masterserver]
  
master1.king.com
  
master2.king.com
  
.
  
[slaveserver]
  
slave.king.com
  
# 主控节点完成互信多个被管理节点不重复了
  
ssh-keygen -t rsa
  
ssh-copy-id -i .ssh/id_rsa.pub root@slave.king.com
  
.
  
# 主控节点完成安装mysql-mmm*
  
yum -y install mysql mysql-mmm*
  
.
  
# 实现mmm配置文件有两种
  
# 1. 主控端   mmm_common, mmm_mon
  
# 2. 集群端   mmm_common, mmm_agent
  
# 主控端配置common   /etc/mysql-mmm/mmm_common.conf
  
active_master_role  writer
  
.
  

  
cluster_interface       eth0
  
pid_path                /var/run/mysql-mmm/mmm_agentd.pid
  
bin_path                /usr/sbin
  
replication_user        repl
  
replication_password    repl
  
agent_user              mmm_agent
  
agent_password          agent_password
  

  
.
  

  
ip 172.16.43.1
  
mode master
  
peer master2
  

  
.
  

  
ip 172.16.43.2
  
mode master
  
peer master1
  

  
.
  

  
ip 172.16.43.3
  
mode slave
  

  
.
  
# 谁能写  vip是多少(参照本文配置)
  

  
hosts master1, master2
  
ips 172.16.43.11
  
mode exclusive
  

  
.
  
# 谁能读  vip是多少(参照本文配置)
  

  
hosts master1, master2
  
ips 172.16.43.11, 172.16.43.12, 172.16.43.13
  
mode balanced
  

  
.
  
# 主控节点完成
  
vim /etc/mysql-mmm/mmm_mon.conf
  
# 需要改 ping_ips, 把你想监控的集群加入进入就可以了
  
# 172.16.0.1 是网关ip
  
ping_ips 172.16.0.1, 172.16.43.1, 172.16.43.2, 172.16.43.3
  
.
  

  monitor_user        mmm_monitor
  monitor_password    monitor_password
  

  ii) 安装 mariadb, mysql-agent安装与配置
# 编写 install.yaml, 使用ansible-playbook执行按成安装配置  
- hosts: masterserver:slaveserver
  remote_user: root
  tasks:
  - name: mariadb install
  copy: src=/root/mariadb-10.0.10-linux-x86_64.tar.gz dest=/tmp
  - name: conf service
  command: tar xf /tmp/mariadb-10.0.10-linux-x86_64.tar.gz -C /usr/local
  ###############################################################
  # 见谅下面的 name: x , 写了半天才知道不能在一个name中包含多个command,所以..  #
  ###############################################################
  - name: 1
  command: ln -sv /usr/local/mariadb-10.0.10-linux-x86_64 /usr/local/mysql
  - name: 2
  command: cp /usr/local/mysql/support-files/mysql.server /etc/rc.d/init.d/mysqld
  - name: 3
  command: chmod +x /etc/rc.d/init.d/mysqld
  - name: 4
  command: mkdir /mydata/data -p
  - name: 5
  command: mkdir /mydata/binlogs -p
  - name: 6
  command: mkdir /mydata/relaylogs -p
  - name: 7
  command: useradd -r -s /sbin/nologin mysql -U
  - name: 8
  command: chown mysql.mysql /mydata -R
  - name: 9
  command: chown mysql.mysql /usr/local/mysql -R
  - name: 9-1
  # 将本地配置好的安装文件移植到集群节点, 解压的配置文件可能不符合要求
  copy: src=/usr/local/mysql/scripts/mysql_install_db dest=/usr/local/mysql/scripts/
  - name: 10
  command: /usr/local/mysql/scripts/mysql_install_db --user=mysql --datadir=/mydata/data
  - name: mariadb conf
  # 此处配置文件 /etc/my.cnf 配置好
  # log-bin=/mydata/binlogs/mysql-bin

  #>  # datadir=/mydata/data
  copy: src=/etc/my.cnf dest=/etc/my.cnf
  notify:
  - restart mariadb
  - name: install mysql-mmm-agent
  yum: name=mysql-mmm-agent state=present
  - name: conf mysql-mmm-agent
  copy: src=/etc/mysql-mmm/mmm_common.conf dest=/etc/mysql-mmm
  - name: modify mmm_agent.conf
  command: sed -i 's@^\(this[[:space:]]\).*@\1` item `@' /etc/mysql-mmm/mmm_agent.conf
  with_items:
  - master1
  - master2
  - slave
  - name: 11
  command: sed -i 's@^\(ENABLED=\).*@\11@' /etc/default/mysql-mmm-agent
  handlers:
  - name: restart mariadb
  service: name=mysqld state=restarted
DSC0001.jpg

  不熟yaml的童鞋可以 yaml.org
  iii) 实现双主复制与主从复制
1. 双主配置 (master1.king.com , master2.king.com)  
vim /etc/my.cnf
  
service-id  = 1 | 2 (不可相同分别设置)
  
log-slave-updates = 1
  
*** 自动增长列的配置要隔开
  
auto-increment-offset = 1
  
auto-increment-increment = 2
  
2. 均授权复制账号给对方, 进入命令行

  
mysql> grant replication client, replication slave on *.* to repl@'172.16.%.%'>  
mysql> flush privileges;
  
3. 均授权监控账号

  
mysql> grant replication client on *.* to 'mmm_monitor'@'172.16.%.%'>
  
mysql> grant super, replication client, process on *.* to 'mmm_agent'@'172.16.%.%'>  
4. 均连接对方服务器
  
mysql> change master to master_host='172.16.43.1',master_user='repl', master_password='repl', master_log_file='mysql-bin.000001', master_log_pos=312;
  
5. 均启动复制线程
  
mysql> start salve;
  
.
  
.
  
# 主从复制 (slave.king.com)
  
1、改server-id 配置文件中
  
vim /etc/my.cnf
  
server-id       = 3
  
2, 授权监控账号,进入命令行 mysql

  
mysql> grant replication client on *.* to 'mmm_monitor'@'172.16.%.%'>
  
mysql> grant super, replication client, process on *.* to 'mmm_agent'@'172.16.%.%'>  
3、连接主服务器
  
mysql> change master to master_host='172.16.43.1',master_user='repl', master_password='repl', master_log_file='mysql-bin.000001', master_log_pos=312;
  
4、启动复制线程
  
mysql> start slave;
DSC0002.jpg

DSC0003.jpg

  iv) 启动测试
# mmm的停止与启动  
/etc/init.d/mysql-mmm-agent stop | start
  
/etc/init.d/mysql-mmm-monitor stop | start
  
.
  
# 离线或上线一个节点
  
mmm_control set_offline master1
  
mmm_control set_online master1
  
.
  
# 查看节点状态
  
mmm_control show
  测试1
  如图: 让 master2 离线,读写均不受影响 (抱歉此图没有截图下来,,但最后结果图中有所显示  : )
DSC0004.jpg

  测试2:
  再来一次测试,将master1主节点下线,我们观察一下情况, 在图中我们可以看到读写资源已经迁移到了master2节点
DSC0005.jpg

DSC0006.jpg

  总结
  经过测试可以看出MMM在mysql的高可用表现非常良好,无论是只剩一主还是一主一从,数据的同步确实比较及时准确
  生产环境还需观察...



运维网声明 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-602463-1-1.html 上篇帖子: CentOS下mysql多实例操作指南 下篇帖子: 细聊MySQL的备份与恢复
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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