mysql-mmm架构深度详解
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架构深度详解相关推荐
- MySQL 主从架构配置详解
原文http://www.codeceo.com/article/mysql-master-slave.html 无论是哪一种数据库,数据的安全都是至关重要的,因此熟练掌握数据库的安全备份功能,是作为 ...
- hbase 二进制数据写入_分布式数据库HBase的架构设计详解(有彩蛋)
原标题:分布式数据库HBase的架构设计详解(有彩蛋) 本文根据DBAplus社群第99期线上分享整理而成,文末还有好书送哦~ 讲师介绍 陈鸿威 云财经大数据CTO 曾任百度高级工程师,现主持设计开发 ...
- 深度 | 详解可视化利器t-SNE算法:数无形时少直觉
T 分布随机近邻嵌入(T-Distribution Stochastic Neighbour Embedding)是一种用于降维的机器学习方法,它能帮我们识别相关联的模式.t-SNE 主要的优势就是保 ...
- 域控制器的深度详解!
域控制器的深度详解! 参考链接:https://www.youcheyihou.com/news/595827 汽车智能网联化带来信息流大量增加,汽车电子电气(EE)架构将迎来升级,如同中国古代历史社 ...
- WCF服务端运行时架构体系详解[下篇]
作为WCF中一个核心概念,终结点在不同的语境中实际上指代不同的对象.站在服务描述的角度,我们所说的终结点实际上是指ServiceEndpoint对象.如果站在WCF服务端运行时框架来说,终结点实际上指 ...
- MySQL之SQL优化详解(二)
目录 MySQL之SQL优化详解(二) 1. SQL的执行顺序 1.1 手写顺序 1.2 机读顺序 2. 七种join 3. 索引 3.1 索引初探 3.2 索引分类 3.3 建与不建 4. 性能分析 ...
- laravel 调试mysql_Laravel - MySQL数据库的使用详解3(Query Builder用法2:新增、修改、删除)...
五.新增.修改.删除操作 在前文中我介绍了如何使用Query Builder(查询构造器)进行数据查询,下面接着介绍如何使用它进行数据的增.删.改操作.同样假设我们有如下用户表(user): 1,新增 ...
- MySQL高级之explain详解
MySQL高级之explain详解 文章目录 MySQL高级之explain详解 一.expalin命令详解 1.使用方式 2.结果显示 3.主要的字段信息 4.作用 二.id字段 三.select_ ...
- NodeJS+Express+mySQL服务端开发详解
NodeJS+Express+mySQL服务端开发详解 随着NodeJS的发展,现在已经被很多人熟知,NodeJS已经成为了前端开发人员必备的技能.本文不会对NodeJS过多介绍 如果你感兴趣可以访问 ...
- 分布式 | Dubbo 架构设计详解
转载自 分布式 | Dubbo 架构设计详解 Dubbo是Alibaba开源的分布式服务框架,它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合).从服务 ...
最新文章
- 语音识别(ASR)评估指标-WER(字错误率)和SER(句错误率)
- c语言 爬虫 socket,爬虫遇到 Socket,莫慌,肝就完了!
- AI人必看!89页全网最全清华知识图谱报告
- LoadRunner 测试Oracle数据库及Siebel性能
- 面向对象的继承关系体现在数据结构上时,如何表示
- iOS开发之检查更新
- shell 删除了hdfs 文件_从零开始学大数据(三) Shell操作HDFS文件系统-中
- IntelliJ IDEA 2017.2 x64 安装Scala
- 项目兼容ie8技术要点
- oracle中季末最后一天,oracle有关时间计算,得到季度第一天、最后一天
- 使用HTML注释标签,超详细的HTML !–…– 注释标签使用实例.pdf
- Linux文件权限管理命令
- Python import其他文件夹的文件
- JAVA程序设计(11)-----面对对象0基础设计 麻将 创建麻将牌 然后洗牌 发牌~ 恩 就这样...
- grafana 中国地图 echarts
- 【微信公众号控制硬件14 】 分享安信可微信公众号定位NB-IoT模组的源码和实现过程,可实现远程查看模组定位位置。(附带源码)
- SAP FICO面试题
- python爬数据是什么意思-python爬虫爬取的数据可以做什么
- 跟着Code走,详解Symbian Client/Server架构
- ftp服务器软件,推荐几款免费的ftp服务器软件,ftp客户端下载
热门文章
- iOS Weak底层详解
- CNN——残差网络实现
- 科研必备之图像局部区域放大——画中画形式
- lol人物模型提取(三)
- mac无法安装dmg文件,报无可装载系统错误
- 百问网7天物联网智能家居 学习心得 打卡第三天
- 第13期 《仰望星空,脚踏实地》 12月刊
- (踩坑日记)Win10下安装Ubuntu18.04(包括NIVIDIA驱动安装)+主题美化+设置多cuda切换+通过anaconda下安装tensorflow1.x-gpu以及pytorch-gpu
- 面试算法 香槟塔 ,算法:暴力算法
- Java单身狗,java 的23种设计模式 之单身狗和隔壁老王的故事