Mysql-mmm架构深度解读:

主机名:            ip:           vip

mysql_monitor     172.18.3.183

mysql_master01    172.18.3.185        172.18.3.189(write)

mysql_master02    172.18.3.186        172.18.3.190 (read)

mysql_slave01      172.18.3.187                 172.18.3.191 (read)

(1)在所有主机上配置/etc/hosts中添加:

172.18.3.185    mysql_master01

172.18.3.186    mysql_master02

172.18.3.187    mysql_slave01

172.18.3.183    mysql_monitor

(2)首先在3台主机上安装mysql和搭建复制(185和186互为主从,187为185的从)

vi/etc/my.cnf 修改两处地方

log-bin=mysql-bin     去掉注释
server-id = 2         每个主机的id不能重复

将186设置为185的从:

登录数据库,在172.18.3.185上新建授权用户:
MySQL> grant replication slave on *.* to 'epel'@'%' identified by '123456';
MySQL>flush privileges;
MySQL> show master status;(得出一下结果)
+------------------+----------+--------------+------------------+
| File            | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| MySQL-bin.000003 |      374|             |                 |
+------------------+----------+--------------+------------------+
mysql-bin.00003就是我们要开始同步的文件,374就是初始位置。

登录到172.18.3.186,把172.18.3.185设置成自己的主服务器
MySQL>Change master to master_host='172.18.3.185',master_user='replication',master_password='replication',master_log_file='MySQL-bin.000003',master_log_pos=374;(注意Mysql-bin.000003的大小写)
MySQL> start slave;

MySQL> show slave status/G; 查看同步状态(Slave_IO_Running:Yes和Slave_SQL_Running: Yes一定要为YES)

如果做简单的一主一从的话,到这里就可以了,已经完成了;如果要两个服务器互为主从的话,要在172.18.3.185上做相同的设置

如果主数据库有数据的话

数据库锁表操作,不让数据再进行写入动作。mysql> FLUSH TABLES WITH READ LOCK ;

至此,mysql双机互为主从设置完毕。

(3)配置my.cnf

172.18.3.185上:

server-id       = 1

log_slave_updates = 1

auto-increment-increment = 2

auto-increment-offset = 1

172.18.3.186上:

server-id       = 2

log_slave_updates = 1

auto-increment-increment = 2

auto-increment-offset = 2

172.18.3.187上:

server-id       = 3

log_slave_updates = 1

(4)安装mysql-mmm 及相关依赖

执行如下脚本install.sh

#!/bin/bash

yum install gcc -y           #安装gcc

yum install perl* -y         #安装perl依赖包

wget http://xrl.us/cpanm --no-check-certificate

mv cpanm/usr/bin

chmod 755 /usr/bin/cpanm

cat >/root/list << EOF

install Algorithm::Diff

install Class::Singleton

install DBI

install DBD::mysql

install File::Basename

install File::stat

install File::Temp

install Log::Dispatch

install Log::Log4perl

install Mail::Send

install Net::ARP

install Net::Ping

install Proc::Daemon

install Thread::Queue

install Time::HiRes

EOF

for package in `cat /root/list`

do

cpanm $package

done

#安装mysql-mmm

wget http://mysql-mmm.org/_media/:mmm2:mysql-mmm-2.2.1.tar.gz

mv :mmm2:mysql-mmm-2.2.1.tar.gz mysql-mmm-2.2.1.tar.gz

tar xf mysql-mmm-2.2.1.tar.gz

cd  mysql-mmm-2.2.1

make install

到这里已经完成了MMM的基本需求,接下来需要配置具体的配置文件,其中mmm_common.conf,mmm_agent.conf为agent端的配置文件,mmm_mon.conf为monitor端的配置文件。

(5)配置mmm文件

[root@mysql_master01 ~]# cat  /etc/mysql-mmm/mmm_common.conf

active_master_role      writer

<host default>

cluster_interface               br0

pid_path                               /var/run/mmm_agentd.pid

bin_path                               /usr/lib/mysql-mmm/

replication_user        epel

replication_password    123456

agent_user                              mmm_agent

agent_password                  mmm_agent

</host>

<host mysql_master01>

ip                                             172.18.3.185

mode                                    master

peer                                   mysql_master02

</host>

<host mysql_master02>

ip                                             172.18.3.186

mode                                    master

peer                                    mysql_master01

</host>

<host mysql_slave01>

ip                                             172.18.3.187

mode                                    slave

</host>

<role writer>

hosts                                  mysql_master01,mysql_master02

ips                                            172.18.3.189

mode                                    exclusive

</role>

<role reader>

hosts                                    mysql_master02,mysql_slave01

ips                                            172.18.3.190,172.18.3.191

mode                                    balanced

</role>

[root@mysql_master01 ~]#

其中replication_user用于检查复制的用户,agent_user为agent的用户,mode标明是否为主或者备选主,或者从库。mode exclusive主为独占模式,同一时刻只能有一个主,<role write>中hosts表示目前的主库和备选主的真实主机ip或者主机名,ips为对外提供的虚拟机ip地址,<role readr>中hosts代表从库真实的ip和主机名,ips代表从库的虚拟ip地址。

由于其他主机也要配置agent配置文件,我们直接把mmm_common.conf从185拷贝到186和187两台主机的/etc/mysql-mmm下。

scp  /etc/mysql-mmm/mmm_common.conf root@172.18.3.186:/etc/mysql-mmm/

scp  /etc/mysql-mmm/mmm_common.confroot@172.18.3.187:/etc/mysql-mmm/

scp  /etc/mysql-mmm/mmm_common.confroot@172.18.3.183:/etc/mysql-mmm/

配置172.18.3.185:

[root@mysql_master01 ~]# cat /etc/mysql-mmm/mmm_agent.conf

include mmm_common.conf

this mysql_master01

配置172.18.3.186:

[root@mysql_master02 tmp]# cat /etc/mysql-mmm/mmm_agent.conf

include mmm_common.conf

this mysql_master02

配置172.18.3.187:

[root@mysql_slave01 tmp]# cat /etc/mysql-mmm/mmm_agent.conf

include mmm_common.conf

this mysql_slave01

配置172.18.3.183:

[root@mysql_monitor mysql-mmm]# cat /etc/mysql-mmm/mmm_mon.conf

include mmm_common.conf

<monitor>

ip                                             127.0.0.1

pid_path                               /var/run/mmm_mond.pid

bin_path                                /usr/lib/mysql-mmm/

status_path                            /var/lib/misc/mmm_mond.status

ping_ips                               172.18.3.185,172.18.3.186,172.18.3.187

auto_set_online                         10

</monitor>

<host default>

monitor_user                    mmm_monitor

monitor_password                mmm_monitor

</host>

debug 0

[root@mysql_monitor mysql-mmm]#

(6)创建监控用户,这里需要创建3个监控用户,具体描述如下:

用户名         描述                                                   权限

monitor user       MMM的monitor端监控所有的mysql数据库的状态用户           REPLICATION CLIENT

agent user              主要是MMM客户端用于改变的master的read_only状态用户      SUPER,REPLICATION CLIENT,PROCESS

repl                    用于复制的用户                                         REPLICATION SLAVE

在3台服务器进行授权,因为我之前的主主复制,以及主从已经是ok的,所以我在其中一台服务器执行就ok了。用于复制的账号之前已经有了,所以这里就授权两个账号。

复制代码

mysql> GRANT SUPER, REPLICATION CLIENT, PROCESS ON *.* TO'mmm_agent'@'%'   IDENTIFIED BY'mmm_agent';

Query OK, 0 rows affected (0.08 sec)

mysql> GRANT REPLICATION CLIENT ON *.* TO 'mmm_monitor'@'%'IDENTIFIED BY 'mmm_monitor';

Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;

Query OK, 0 rows affected (0.03 sec)

mysql>

到此安装基本完毕

分别在185 ,186,187 上执行/etc/init.d/mysql-mmm-agent start
开启agent,在183上执行/etc/init.d/mysql-mmm-monitor start
 
如果一切正常,即可在monitor上执行命令查看监控数据
 
检查整体状态:
[root@mysql_monitor monitor]# mmm_control checks all
mysql_slave01   ping         [last change: 2016/10/16 20:31:54]  OK
mysql_slave01   mysql        [last change: 2016/10/17 16:01:01]  OK
mysql_slave01   rep_threads  [last change: 2016/10/17 15:14:49]  OK
mysql_slave01   rep_backlog  [last change: 2016/10/16 20:31:54]  OK: Backlog is null
mysql_master02  ping         [last change: 2016/10/16 20:31:54]  OK
mysql_master02  mysql        [last change: 2016/10/17 16:34:33]  OK
mysql_master02  rep_threads  [last change: 2016/10/17 15:13:25]  OK
mysql_master02  rep_backlog  [last change: 2016/10/16 20:31:54]  OK: Backlog is null
mysql_master01  ping         [last change: 2016/10/17 16:26:56]  OK
mysql_master01  mysql        [last change: 2016/10/17 16:28:20]  OK
mysql_master01  rep_threads  [last change: 2016/10/17 15:16:34]  OK
mysql_master01  rep_backlog  [last change: 2016/10/16 20:31:54]  OK: Backlog is null
 
显示服务器状态:
[root@mysql_monitor monitor]# mmm_control show
  mysql_master01(172.18.3.185) master/ONLINE. Roles: writer(172.18.3.189)
  mysql_master02(172.18.3.186) master/ONLINE. Roles: reader(172.18.3.190)
  mysql_slave01(172.18.3.187) slave/ONLINE. Roles: reader(172.18.3.191)
 
查看详细日志:
[root@mysql_monitor monitor]# tail -f /var/log/mysql-mmm/mmm_mond.log
 
 
 
实现效果:
 
mysql_master01(172.18.3.185) master/ONLINE. Roles:writer(172.18.3.189)
mysql_master02(172.18.3.186) master/ONLINE. Roles:reader(172.18.3.190)
mysql_slave01(172.18.3.187) slave/ONLINE. Roles: reader(172.18.3.191)
 
按照配置完成后,默认状态应该是这样,如果出现如下状态
db2(192.168.0.32) master/AWAITING_RECOVERY. Roles:
可以执行mmm_control set_online db2开启。
 
当我们的master01(185)数据库宕机之后,在monitor上查看日志,
[root@mysql_monitor monitor]# tail -7f /var/log/mysql-mmm/mmm_mond.log 
2016/10/17 17:06:18  WARN Check 'rep_backlog' on 'mysql_master01' is in unknown state! Message: UNKNOWN: Connect error (host = 172.18.3.185:3306, user = mmm_monitor)! Can't connect to MySQL server on '172.18.3.185' (111)
2016/10/17 17:06:20  WARN Check 'rep_threads' on 'mysql_master01' is in unknown state! Message: UNKNOWN: Connect error (host = 172.18.3.185:3306, user = mmm_monitor)! Can't connect to MySQL server on '172.18.3.185' (111)
2016/10/17 17:06:30 ERROR Check 'mysql' on 'mysql_master01' has failed for 10 seconds! Message: ERROR: Connect error (host = 172.18.3.185:3306, user = mmm_monitor)! Can't connect to MySQL server on '172.18.3.185' (111)
2016/10/17 17:06:31 FATAL State of host 'mysql_master01' changed from ONLINE to HARD_OFFLINE (ping: OK, mysql: not OK)
2016/10/17 17:06:31  INFO Removing all roles from host 'mysql_master01':
2016/10/17 17:06:31  INFO     Removed role 'writer(172.18.3.189)' from host 'mysql_master01'
2016/10/17 17:06:31  INFO Orphaned role 'writer(172.18.3.189)' has been assigned to 'mysql_master02'
 
[root@mysql_monitor monitor]# mmm_control show
  mysql_master01(172.18.3.185) master/HARD_OFFLINE. Roles: 
  mysql_master02(172.18.3.186) master/ONLINE. Roles: reader(172.18.3.190), writer(172.18.3.189)
  mysql_slave01(172.18.3.187) slave/ONLINE. Roles: reader(172.18.3.191)
 
此时,write vip漂移到master02上,同时slave01也修改为同步master02的数据,当master01故障修好后,开启master01,但是write vip依然不会漂移到master01,而且slave01也是依然slave于master02,因为vip一直在master02上。master01只是可以同步master02的数据,只有当master02宕机后,write vip才会漂移到master01.
 
												

mysql-mmm架构深度详解相关推荐

  1. MySQL 主从架构配置详解

    原文http://www.codeceo.com/article/mysql-master-slave.html 无论是哪一种数据库,数据的安全都是至关重要的,因此熟练掌握数据库的安全备份功能,是作为 ...

  2. hbase 二进制数据写入_分布式数据库HBase的架构设计详解(有彩蛋)

    原标题:分布式数据库HBase的架构设计详解(有彩蛋) 本文根据DBAplus社群第99期线上分享整理而成,文末还有好书送哦~ 讲师介绍 陈鸿威 云财经大数据CTO 曾任百度高级工程师,现主持设计开发 ...

  3. 深度 | 详解可视化利器t-SNE算法:数无形时少直觉

    T 分布随机近邻嵌入(T-Distribution Stochastic Neighbour Embedding)是一种用于降维的机器学习方法,它能帮我们识别相关联的模式.t-SNE 主要的优势就是保 ...

  4. 域控制器的深度详解!

    域控制器的深度详解! 参考链接:https://www.youcheyihou.com/news/595827 汽车智能网联化带来信息流大量增加,汽车电子电气(EE)架构将迎来升级,如同中国古代历史社 ...

  5. WCF服务端运行时架构体系详解[下篇]

    作为WCF中一个核心概念,终结点在不同的语境中实际上指代不同的对象.站在服务描述的角度,我们所说的终结点实际上是指ServiceEndpoint对象.如果站在WCF服务端运行时框架来说,终结点实际上指 ...

  6. MySQL之SQL优化详解(二)

    目录 MySQL之SQL优化详解(二) 1. SQL的执行顺序 1.1 手写顺序 1.2 机读顺序 2. 七种join 3. 索引 3.1 索引初探 3.2 索引分类 3.3 建与不建 4. 性能分析 ...

  7. laravel 调试mysql_Laravel - MySQL数据库的使用详解3(Query Builder用法2:新增、修改、删除)...

    五.新增.修改.删除操作 在前文中我介绍了如何使用Query Builder(查询构造器)进行数据查询,下面接着介绍如何使用它进行数据的增.删.改操作.同样假设我们有如下用户表(user): 1,新增 ...

  8. MySQL高级之explain详解

    MySQL高级之explain详解 文章目录 MySQL高级之explain详解 一.expalin命令详解 1.使用方式 2.结果显示 3.主要的字段信息 4.作用 二.id字段 三.select_ ...

  9. NodeJS+Express+mySQL服务端开发详解

    NodeJS+Express+mySQL服务端开发详解 随着NodeJS的发展,现在已经被很多人熟知,NodeJS已经成为了前端开发人员必备的技能.本文不会对NodeJS过多介绍 如果你感兴趣可以访问 ...

  10. 分布式 | Dubbo 架构设计详解

    转载自   分布式 | Dubbo 架构设计详解 Dubbo是Alibaba开源的分布式服务框架,它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合).从服务 ...

最新文章

  1. 语音识别(ASR)评估指标-WER(字错误率)和SER(句错误率)
  2. c语言 爬虫 socket,爬虫遇到 Socket,莫慌,肝就完了!
  3. AI人必看!89页全网最全清华知识图谱报告
  4. LoadRunner 测试Oracle数据库及Siebel性能
  5. 面向对象的继承关系体现在数据结构上时,如何表示
  6. iOS开发之检查更新
  7. shell 删除了hdfs 文件_从零开始学大数据(三) Shell操作HDFS文件系统-中
  8. IntelliJ IDEA 2017.2 x64 安装Scala
  9. 项目兼容ie8技术要点
  10. oracle中季末最后一天,oracle有关时间计算,得到季度第一天、最后一天
  11. 使用HTML注释标签,超详细的HTML !–…– 注释标签使用实例.pdf
  12. Linux文件权限管理命令
  13. Python import其他文件夹的文件
  14. JAVA程序设计(11)-----面对对象0基础设计 麻将 创建麻将牌 然后洗牌 发牌~ 恩 就这样...
  15. grafana 中国地图 echarts
  16. 【微信公众号控制硬件14 】 分享安信可微信公众号定位NB-IoT模组的源码和实现过程,可实现远程查看模组定位位置。(附带源码)
  17. SAP FICO面试题
  18. python爬数据是什么意思-python爬虫爬取的数据可以做什么
  19. 跟着Code走,详解Symbian Client/Server架构
  20. ftp服务器软件,推荐几款免费的ftp服务器软件,ftp客户端下载

热门文章

  1. iOS Weak底层详解
  2. CNN——残差网络实现
  3. 科研必备之图像局部区域放大——画中画形式
  4. lol人物模型提取(三)
  5. mac无法安装dmg文件,报无可装载系统错误
  6. 百问网7天物联网智能家居 学习心得 打卡第三天
  7. 第13期 《仰望星空,脚踏实地》 12月刊
  8. (踩坑日记)Win10下安装Ubuntu18.04(包括NIVIDIA驱动安装)+主题美化+设置多cuda切换+通过anaconda下安装tensorflow1.x-gpu以及pytorch-gpu
  9. 面试算法 香槟塔 ,算法:暴力算法
  10. Java单身狗,java 的23种设计模式 之单身狗和隔壁老王的故事