一、Mysql-mmm集群技术概述;

概述:MMM(Master-Master replication manager for MySQL)是一套支持双主故障切换和双主日常管理的脚本程序。MMM使用Perl语言开发,主要用来监控和管理MySQL Master-Master(双主)复制,可以说是mysql主主复制管理器。

虽然叫做双主复制,但是业务上同一时刻只允许对一个主进行写入,另一台备选主上提供部分读服务,以加速在主主切换时刻备选主的预热,可以说MMM这套脚本程序一方面实现了故障切换的功能,另一方面其内部附加的工具脚本也可以实现多个slave的read负载均衡。

MMM提供了自动和手动两种方式移除一组服务器中复制延迟较高的服务器的虚拟ip,同时它还可以备份数据,实现两节点之间的数据同步等。由于MMM无法完全的保证数据一致性,所以MMM适用于对数据的一致性要求不是很高,但是又想最大程度的保证业务可用性的场景。

二、Mysql-mmm优缺点;

三、Mysql-mmm内部工作架构;

进程类型:

mmm_mond:监控进程,负责所有的监控工作,决定和处理所有节点角色活动。此脚本需要在监管机上运行;

mmm_agentd:运行在每个mysql服务器上(Master和Slave)的代理进程,完成监控的探针工作和执行简单的远端服务设置。此脚本需要在被监管机上运行;

mmm_control:一个简单的脚本,提供管理mmm_mond进程的命令;

mmm搭建:

  • 部署master1节点的ntp服务以及域名解析;
  • 配置master2、slave1、slave2、monitor节点同步ntp时间及域名解析(在此只列举master2单台主机配置);
  • 分别在master1、master2、slave1、slave2节点上安装mysql服务(在此只列举master1单台主机配置);
  • 配置master1实现双主复制;
  • 配置master2实现双主复制;
  • 配置slave1和slave2实现主从复制(在此只列举slave1单台主机配置);
  • 分别在master1、master2、slave1、slave2四个节点安装mysql-mmm软件程序并且配置agent指定本机的节点名称(在此只列举master1单台主机配置);
  • 在master1节点上授权monitor节点连接数据库集群;
  • 安装monitor节点上的mysql-mmm软件程序;
  • 配置 monitor节点上的mysql-mmm的配置文件并且复制到各个mysql节点;
  • 启动master1、master2、slave1、slave2四个节点上的mysql-mmm服务(在此只列举master1单台主机配置);
  • 启动monitor节点上的mysql-mmm服务并查看集群状态;
  • 客户端验证测试读写数据;
  • 将master1主节点的mysql服务停止,测试集群状况;
  • 关闭slave1和slave2节点的写功能,使其处于只读状态;
  • 客户端访问测试slave节点是否可写;
  • 部署双主双从节点的ntp服务以及域名解析;

[root@master1 ~]# cat <<END >>/etc/hosts192.168.100.208 master1192.168.100.209 master2192.168.100.210 slave1192.168.100.211 slave2192.168.100.212 monitorEND
####一共要配置四个服务器,剩余一个用来安装mmm

配置每个服务器的名称

在每个/etc/hostsname文件中写入:master1 ,master2 ,slave1 , slave2 ,monitor

配置时间同步:

[root@master2 ~]# yum -y install ntpdate
[root@master2 ~]# /usr/sbin/ntpdate 192.168.100.101
ech 9 Aug 18:04:38 ntpdate[1106]: adjust time server 192.168.100.101 offset 0.299673 sec
[root@master2 ~]# echo "/usr/sbin/ntpdate 192.168.100.101">>/etc/rc.local
[root@master2 ~]# chmod +x /etc/rc.local
  • 配置master1实现双主复制;

先打开中继日志

[root@master1 ~]# cat <<END >>/etc/my.cnfserver-id=1log-bin=mysql-binlog-slave-updates                                        ##开启二进制日志配置sync_binlog=1auto_increment_increment=2auto_increment_offset=1relay-log=relay1-log-binrelay-log-index=slave-relay1-bin.index        ##开启二进制中继日志END注解:sync_binlog=1                                                ##主机每次提交事务的时候把二进制日志的内容同步到磁盘上,所以即使服务器崩溃,也会把时间写入到日志中;auto_increment_increment=2                  ##以下两参数用于主主复制中,用于错开增值,防止键值冲突

开启mysql给master授权,查看日志文件状态,然后进行连接

[root@master1 ~]# systemctl restart mysqld[root@master1 ~]# mysql -uroot -p123123mysql> show master status;+------------------+----------+--------------+------------------+---------------------------------------+| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |+------------------+----------+--------------+------------------+---------------------------------------+| mysql-bin.000001 |      120 |              |                  |                   |+------------------+----------+--------------+------------------+---------------------------------------+mysql> grant replication slave on *.* to 'master'@'192.168.100.%' identified by '123123';Query OK, 0 rows affected (0.00 sec)mysql> flush privileges;Query OK, 0 rows affected (0.00 sec)mysql> change master to master_host='对方ip',master_user='授权的用户(master)',master_password='123123',master_log_file='mysql-bin.000001',master_log_pos=查看日志的状态码;
Query OK, 0 rows affected, 2 warnings (0.01 sec)

在master2主机中做同样的配置(开启二进制文件和中继日志,查看日志编码,授权,change链接)

接下来配置双从服务器:

  • 配置slave1slave2实现主从复制(在此只列举slave1单台主机配置);

1.两个从服务器开启中继日志

[root@slave1 ~]# cat <<END >>/etc/my.cnfserver-id=4relay-log=relay4-log-binrelay-log-index=slave-relay4-bin.indexEND

开启mysql服务,登录,进行连接第一个主服务器,查看状态和表格,确认是否成功


[root@slave1 ~]# systemctl restart mysqld[root@slave1 ~]# mysql -uroot -p123123mysql> change master to master_host='192.168.100.101',master_user='master',master_password='123123',master_log_file='mysql-bin.000001',master_log_pos=120;Query OK, 0 rows affected, 2 warnings (0.02 sec)mysql> start slave;Query OK, 0 rows affected (0.01 sec)mysql> show slave status\G;*************************** 1. row ***************************Slave_IO_State: Waiting for master to send eventMaster_Host: 192.168.100.101Master_User: masterMaster_Port: 3306Connect_Retry: 60Master_Log_File: mysql-bin.000002Read_Master_Log_Pos: 421Relay_Log_File: relay3-log-bin.000003Relay_Log_Pos: 584Relay_Master_Log_File: mysql-bin.000002Slave_IO_Running: YesSlave_SQL_Running: Yes[root@master1 ~]# mysql -uroot -p123123
##############创建一个表格查看从服务器是否同步
mysql> create database linuxfan;Query OK, 1 row affected (0.00 sec)mysql> show databases;+--------------------+| Database           |+--------------------+| information_schema || linuxfan           || mysql              || performance_schema || test               |+--------------------+mysql> exit[root@master2 ~]# mysql -uroot -p123123mysql> show databases;+--------------------+| Database           |+--------------------+| information_schema || linuxfan           || mysql              || performance_schema || test               |+--------------------+mysql> exit[root@slave1 ~]# mysql -uroot -p123123mysql> show databases;+--------------------+| Database           |+--------------------+| information_schema || linuxfan           || mysql              || performance_schema || test               |+--------------------+mysql> exit
  • 分别在master1master2slave1slave2 monitor五个节点安装mysql-mmm软件程序并且配置agent指定本机的节点名称(在此只列举master1单台主机配置);

配置本地yum源,上传Mysql_mmm_rpm文件夹到master1/root

scp -r Mysql_mmm_rpm root@192.168.100.209:/root/

scp -r Mysql_mmm_rpm root@192.168.100.210:/root/

scp -r Mysql_mmm_rpm root@192.168.100.214:/root/

scp -r Mysql_mmm_rpm root@192.168.100.212:/root/

配置本地yum源

cat /etc/yum.repos.d/dgf.repo

[local]name=localbaseurl=file:///mntenabled=1gpgcheck=0[Mysql_mmm_rpm]name=Mysql_mmm_rpmbaseurl=file:///root/Mysql_mmm_rpmenabled=1gpgcheck=0

将yum源分别传送到其他四个服务器

[root@master1 ~]# cd /etc/yum.repos.d/

scp dgf.repo root@192.168.100.209:/etc/yum.repos.d/
scp dgf.repo root@192.168.100.210:/etc/yum.repos.d/scp dgf.repo root@192.168.100.214:/etc/yum.repos.d/scp dgf.repo root@192.168.100.212:/etc/yum.repos.d/

使用yum安装mmm包

[root@master1 ~]# yum -y install mysql-mmm mysql-mmm-agent mysql-mmm-tools

配置各个服务器的db数字,用于管理

[root@master1 ~]# vi /etc/mysql-mmm/mmm_agent.conf

include mmm_common.conf# The 'this' variable refers to this server.  Proper operation requires# that 'this' server (db1 by default), as well as all other servers, have the# proper IP addresses set in mmm_common.conf.this db1:wq[root@master2 ~]# egrep -v "^#|^$" /etc/mysql-mmm/mmm_agent.confinclude mmm_common.confthis db2[root@slave1 ~]# egrep -v "^#|^$" /etc/mysql-mmm/mmm_agent.confinclude mmm_common.confthis db3[root@slave2 ~]# egrep -v "^#|^$" /etc/mysql-mmm/mmm_agent.confinclude mmm_common.confthis db4
  • master1节点上授权monitor节点连接数据库集群;

进行两个用户的授权,mmm_monitor进行服务器的监控,mmm_agent进行服务器的调度

[root@master1 ~]# mysql -uroot -p123123

mysql> grant replication client on *.* to 'mmm_monitor'@'192.168.100.%' identified by 'monitor';Query OK, 0 rows affected (0.00 sec)mysql> grant super,replication client,process on *.* to 'mmm_agent'@'192.168.100.%' identified by 'agent';Query OK, 0 rows affected (0.00 sec)mysql> flush privileges;Query OK, 0 rows affected (0.00 sec)mysql> exit权限注解:

replication client:权限用于执行show master status等命令。这些命令是用来查看复制状态的;

replication slave:是用于连接主库从库进行读取二进制文件进而实现复制的;

super:杀死mysql中连接的进程,设置全局变量,重置主从配置的权限;
process:具有查看当前运行的sql的权限 ,以及explain执行计划;

  • 安装monitor节点上的mysql-mmm软件程序;
[root@monitor ~]# yum -y install mysql-mmm mysql-mmm-tools mysql-mmm-monitor

修改配置mmm管理配置文件

配置 monitor节点上的mysql-mmm的配置文件并且复制到各个mysql节点;
[root@monitor ~]# vi /etc/mysql-mmm/mmm_common.conf
active_master_role      writer              ##指定活跃角色为写角色
<host default>cluster_interface       eth0            ##承载的网卡$$$$修改为自己的网卡pid_path                /var/run/mysql-mmm/mmm_agentd.pidbin_path                /usr/libexec/mysql-mmm/     ##可执行文件路径replication_user        master         ##mysql集群主从复制账户replication_password    123123           $$$自己的授权时的密码agent_user              mmm_agent   ##monitor连接集群的账户agent_password          agent
</host>
<host db1>                        $$$$$修改为自己的IPip      192.168.100.101mode    masterpeer    db2                     $$$$$主服务器的从服务器        ##指定对立的节点名
</host>
<host db2>ip      192.168.100.102         $$$$$修改为自己的IPmode    masterpeer    db1                    $$$$$主服务器的从服务器
</host>
<host db3>ip      192.168.100.103         $$$$$修改为自己的IPmode    slave
</host>
<host db4>ip      192.168.100.104             $$$$$修改为自己的IPmode    slave
</host>
<role writer>hosts   db1, db2ips     192.168.100.250mode    exclusive                 ##同一时间存在单个主
</role>
<role reader>hosts   db3, db4ips     192.168.100.251, 192.168.100.252mode    balanced             ##轮询
</role>

使用for循环将文件送给其他四个服务器:

for i in 101 102 103 104;do scp /etc/mysql-mmm/mmm_common.conf root@192.168.100.$i:/etc/mysql-mmm/; done        ##将配置文件复制到mysql节点

修改配置文件:/etc/mysql-mmm/mmm_mon.conf

[root@monitor ~]# vi  /etc/mysql-mmm/mmm_mon.confinclude mmm_common.conf<monitor>ip                  127.0.0.1pid_path            /var/run/mysql-mmm/mmm_mond.pidbin_path            /usr/libexec/mysql-mmm   status_path         /var/lib/mysql-mmm/mmm_mond.status   ping_ips            192.168.100.101, 192.168.100.102, 192.168.100.103, 192.168.100.104                                                  ##指定监听的所有节点ip(添加时记得都好分隔)auto_set_online     60                            ##判定其online的时间,超过60s认为其down</monitor><host default>monitor_user        mmm_monitor           ##monitor的工作用户monitor_password    monitor</host>debug 0

重载磁盘,开启(所有服务器)服务,查看端口号是否开启

[root@master1 ~]# systemctl daemon-reload
[root@master1 ~]# systemctl start mysql-mmm-agent
[root@master1 ~]# netstat -utpln |grep mmm
tcp        0      0 192.168.100.101:9989    0.0.0.0:*               LISTEN      

全部没有问题就可以进行测试了:

1.先查看他们的状态:

[root@monitor ~]# mmm_control show
# Warning: agent on host db4 is not reachabledb1(192.168.100.101) master/ONLINE. Roles: writer(192.168.100.250)db2(192.168.100.102) master/ONLINE. Roles: db3(192.168.100.103) slave/ONLINE. Roles: reader(192.168.100.251) db4(192.168.100.104) slave/ONLINE. Roles: reader(192.168.100.252)

2.将第一个服务器直接关机测试:

[root@monitor ~]# mmm_control show
# Warning: agent on host db4 is not reachabledb1(192.168.100.101) master/HARD_OFFLINE. Roles: db2(192.168.100.102) master/ONLINE. Roles: writer(192.168.100.250)db3(192.168.100.103) slave/ONLINE. Roles: reader(192.168.100.251)db4(192.168.100.104) slave/ONLINE. Roles:

可以发现,服务器vip自动飘到了第二个上面

Mysql-mmm高可用集群(有mysql环境)相关推荐

  1. 运维企业专题(11)RHCS高可用集群下MySql数据库与共享磁盘(单点写入、多点写入)的设置

    实验环境 主机名 IP 服务 server1 172.25.6.1 ricci,luci, iscsi,mysql-server server2 172.25.6.2 ricci,iscsi,mysq ...

  2. mysql vip_MySQL高可用集群的VIP切换

    一.目的 实现在mysql高可用集群的VIP切换,不涉及数据补偿 二.基础环境 python3.0+ 三.具体三大部分 1.启动条件检测检测集群是否down机 方式 select 1 检测主库是否有V ...

  3. PXC高可用集群(MySQL)

    1. PXC集群概述 1.1. PXC介绍 Percona XtraDB Cluster(简称PXC) 是基于Galera的MySQL高可用集群解决方案 Galera Cluster是Codershi ...

  4. keepalived+MHA实现mysql主从高可用集群

    本节索引 原理分析 实验环境准备 主从复制集群 安装MHA包 初始化MHA 配置Keepalived 故障出现 故障恢复 总结 一 原理分析 1 MHA简介: MHA(Master High Avai ...

  5. MySQL数据库高可用集群搭建-PXC集群部署

    Percona XtraDB Cluster(下文简称PXC集群)提供了MySQL高可用的一种实现方法.集群是有节点组成的,推荐配置至少3个节点,但是也可以运行在2个节点上. PXC原理描述: 分布式 ...

  6. galeracluster高可用集群安装(mysql)

    参考文档 https://galeracluster.com/library/documentation/install-mysql.html 参考书籍:数据中台建设实战 文章基于centos7 my ...

  7. MySQL MHA高可用集群部署及故障切换(图文详解)

    文章目录 MySQL MHA 一.MHA概念 1.MHA 的组成 2.MHA 的特点 二.搭建MySQL+MHA 实验思路 实验环境.安装包 1.所有服务器,关闭系统防火墙和安全机制 2.修改 mas ...

  8. Mysql+MHA高可用集群

    http://www.ttlsa.com/mysql/step-one-by-one-deploy-mysql-mha-cluster/ 转载于:https://www.cnblogs.com/cci ...

  9. nfs mysql_heatbeat-gui实现基于nfs的mysql高可用集群

    一.简述HA高可用集群 高可用集群就是当集群中的一个节点发生各种软硬件及人为故障时,集群中的其他节点能够自动接管故障节点的资源并向外提供服务.以实现减少业务中断时间,为用户提供更可靠,更高效的服务. ...

  10. 企业主流MySQL高可用集群

    选型 10款常见MySQL高可用方案选型解读 MYSQL(高可用方案) 目前最流行的是:主从复制.基于Galera的方案 企业主流MySQL高可用集群 了解 MySQL 集群之前,先看看单节点数据库的 ...

最新文章

  1. Python yield 用法
  2. Redis操作ZSet类型
  3. 如何给 SAP Spartacus Storefront 创建新的页面
  4. duilib进阶教程 -- 改进窗口拖动 (12)
  5. linux查服务器总内存大小,在linux 下怎么查看服务器的cpu和内存的硬件信息
  6. atitit 技术选型之道. attilax著 艾龙著 1. 标准 2 1.1. 符合趋势度 2 1.2. 简单易用 2 1.3. 文档丰富度 2 1.4. 下载便利性 2 1.5. 性能 2 1.
  7. WPF/WinForm 如何生成单文件的EXE
  8. 如何把img格式转换成vmdk格式
  9. 数据库学习-关于存在量词exists的理解
  10. 贝多芬交响曲全集(转)
  11. leaflet 画扇形
  12. [安全分享]斗鱼360补天沙龙分享-跨域资源那些事
  13. 使用html和js制作饼图,使用js画图之饼图
  14. 【DB.Oracle】同义词——SYNONYM
  15. Java语言西安交大高起专_2018年西安交大网络学院高起专/本英语入学考试复习题...
  16. 游戏设计与开发_Unity游戏开发——设计模式概述
  17. 硬货来了,RTE2022 大会技术专场:人性化、软硬件结合
  18. 【附源码】计算机毕业设计SSM网上游戏商店设计
  19. 索尼录音笔power和hold_「sony录音笔」想咨询一下各位索尼录音笔怎么关机 - 鲲鹏装修网...
  20. 1523. 在区间范围内统计奇数数目 -力扣

热门文章

  1. 2021APMCM赛后总结——边缘检测
  2. 戴记严选GM3323D 鼠标左右键失效 解决办法
  3. 更改高通平台开机logo和开机动画以及fastboot界面显示
  4. 1056: 幸运数字 Python
  5. 谷歌 Android 13 曝光
  6. 基于Vue实现的问卷调查平台
  7. “懂行人”加码远程医疗建设,陕西省人民医院用科技打破时空限制
  8. 超详细Office Online Server部署
  9. FFmpeg视频解码流程详解及demo
  10. 也谈Eclipse未自动在gen目录下生成R.java