原文地址:mysql-mmm 安装配置 作者:chinaunix1116

MMM即Master-Master Replication Managerfor MySQL(mysql主主复制管理器)关于mysql主主复制配置的监控、故障转移和管理的一套可伸缩的脚本套件(在任何时候只有一个节点可以被写入),这个套件也能对居于标准的主从配置的任意数量的从服务器进行读负载均衡,所以你可以用它来在一组居于复制的服务器启动虚拟ip,除此之外,它还有实现数据备份、节点之间重新同步功能的脚本。

MySQL本身没有提供replication failover的解决方案,通过MMM方案能实现服务器的故障转移,从而实现mysql的高可用。MMM不仅能提供浮动IP的功能,更牛的是如果当前的主服务器挂掉后,会将你后端的从自动转向新的主服务器进行同步复制,不用手工更改同步资料。

MMM流程:

1.准备环境,6台机器以上,拓扑图,规划IP,同步hosts,时间

2.安装包

3.配置双master

4.配置slave

5.安装mysql-mmm

6.配置monitor mmm-common.conf 定义d1-d4.IP.虚拟IP

7.Agent端mmm-agent.conf db1-db4

8.Monitor端 monIP地址. Ping真实IP

9.授权用户添加mmm.agent用户(4条)mmm.mom用户(1条)

10.启动

Red Hat Enterprise Linux Server release 6.3

192.168.11.128 desktop128.example.com              monitor

192.168.11.130 desktop130.example.com                master1

192.168.11.131 desktop131.example.com                master2

192.168.11.133 desktop133.example.com                      slave1

192.168.11.134 desktop134.example.com                slave2

虚拟IP:

192.168.11.200 (w)

192.168.11.201 (r)

192.168.11.202 (r)

192.168.11.203 (r)

192.168.11.204 (r)

host

iptables -F

setenforce 0

cat >> /etc/hosts << ENDF

192.168.11.128 desktop128.example.com

192.168.11.133 desktop133.example.com

192.168.11.130 desktop130.example.com

192.168.11.131 desktop131.example.com

192.168.11.134 desktop134.example.com

ENDF

--------------------------------------------------------------

(监管端需要安装)

yum install libart_lgpl perl-Date-Manip
perl-XML-DOM perl-XML-DOM-XPath perl-XML-Parser perl-XML-RegExp rrdtool
perl perl-DBD-MySQL
perl-Params-Validate perl-MailTools perl-Time-HiRes
perl-Class-Singleton -y

(客户端需要安装)

yum install libart_lgpl perl-Date-Manip
perl-XML-DOM perl-XML-DOM-XPath perl-XML-Parser perl-XML-RegExp rrdtool
perl perl-DBD-MySQL
perl-Params-Validate perl-MailTools perl-Time-HiRes
mysql mysql-server mysql-connector-odbc  -y

(监控、客户也可以全部安装)

yum install libart_lgpl perl-Date-Manip
perl-XML-DOM perl-XML-DOM-XPath perl-XML-Parser perl-XML-RegExp rrdtool
perl perl-DBD-MySQL
perl-Params-Validate perl-MailTools perl-Time-HiRes mysql
mysql-server mysql-connector-odbc perl-Class-Singleton -y

光盘中没有的包

rpm -ivh
perl-Algorithm-Diff-1.1902-9.el6.noarch.rpm
perl-Log-Dispatch-2.26-1.el6.rf.noarch.rpm perl-Log-Log4perl-1.26-1.el6.rf.noarch.rpm
perl-Net-ARP-1.0.6-2.1.el6.x86_64.rpm perl-Proc-Daemon-0.06-1.el6.noarch.rpm
perl-Proc-ProcessTable-0.44-4.el6.x86_64.rpm
rrdtool-perl-1.3.8-6.el6.x86_64.rpm perl-IPC-Shareable-0.60-2.el6.rf.noarch.rpm

-----------------------

2台master修改配置文件

master1

在[mysqld]标签下加入

server_id = 1

log_bin = mysql

log_slave_updates = 1

auto_increment_increment = 2

auto_increment_offset = 1         //区分2台master

master2

在[mysqld]标签下加入

server_id = 2

log_bin = mysql

log_slave_updates = 1

auto_increment_increment = 2

auto_increment_offset = 2

------------------------------------------

同步两台机器的数据库

[root@desktop130 ~]# mysqldump
--all-databases > /tmp/mysql-all.sql

[root@desktop130 ~]# scp /tmp/mysql-all.sql
root@desktop131.uplooking.com:/tmp

[root@desktop131 ~]# mysql <
/tmp/mysql-all.sql

-----------------------------------------------

双向master         //都在master1授权,change
master分别做

[root@desktop130 ~]# cat << ENDF |
mysql

> GRANT REPLICATION SLAVE ON *.* TO
'slave'@'192.168.11.130' IDENTIFIED BY

'uplooking';

> GRANT REPLICATION SLAVE ON *.* TO
'slave'@'192.168.11.131' IDENTIFIED BY

'uplooking';

[root@desktop131 mysql]# mysql

mysql> change master to
master_host="192.168.11.130",master_user="slave",master_password="uplooking",master_log_file="mysql.000001",master_log_pos=106;

mysql> slave start;

mysql> show slave status\G

[root@desktop130 mysql]# mysql

mysql> change master to
master_host="192.168.11.131",master_user="slave",master_password="uplooking",master_log_file="mysql.000002",master_log_pos=506;

mysql> slave start;

mysql> show slave status\G

---------------------------------------------------

2台slave

[root@desktop133 ~]# vi /etc/my.cnf

在[mysqld]标签下加入

server-id = 3

[root@desktop133 ~]# service mysqld start

[root@desktop134 ~]# vi /etc/my.cnf

在[mysqld]标签下加入

server-id = 4

[root@desktop134 ~]# service mysqld start

------------------------------

配置两台mysql的slave模式

master1中授权

[root@destop130 ~]# cat << ENDF |
mysql

> GRANT REPLICATION SLAVE ON *.* TO
'slave'@'192.168.11.133' IDENTIFIED BY

'uplooking';

> GRANT REPLICATION SLAVE ON *.* TO
'slave'@'192.168.11.134' IDENTIFIED BY

'uplooking';

> FLUSH PRIVILEGES;

------------------------------------------------

133,134同步主分别在slave1 slave2 change master

mysql> change master to
master_host="192.168.11.130",master_user="slave",master_password="uplooking",master_log_file="mysql.000001",master_log_pos=106;

slave start

show slave status\G

----------------------------------

安装配置mysql-mmm

在每台机器上都安装mysql-mmm

tar xf mysql-mmm-2.2.1.tar.gz

cd mysql-mmm-2.2.1

make install

---------------------------------------------

修改5台机器mmm_common.conf配置文件

[root@desktop131 mysql-mmm-2.2.1]# 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    uplooking

agent_user                          mmm_agent

agent_password                  uplooking

ip                                       192.168.11.130

mode                                  master

peer                             db2

ip                                       192.168.11.131

mode                                  master

peer                             db1

ip                                       192.168.11.133

mode                                  slave

ip                                       192.168.11.134

mode                                  slave

hosts                                  db1, db2                      // 写

ips                                      193.168.11.200            // 虚拟IP

mode                                  exclusive

hosts                                  db1, db2,
db3,db4                             // 读

ips                                      192.168.11.201,192.168.11.202,192.168.11.203,192.168.11.204
   //虚拟ip

mode                                  balanced

将此文件同步到所有机器上

[root@desktop130 ~]# for i in 128 131 133
134 ; do scp /etc/mysql-mmm/mmm_common.conf

192.168.11.$i:/etc/mysql-mmm/ ; done

-------------------------------------

修改agent端配置文件

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

include mmm_common.conf

this db1

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

include mmm_common.conf

this db2

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

include mmm_common.conf

this db3

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

include mmm_common.conf

this db4

----------------------------------------------

修改monitor端配置文件

[root@desktop128 ~]# vi
/etc/mysql-mmm/mmm_mon.conf

include mmm_common.conf

ip                                       192.168.11.128

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.0.1,
192.168.0.2, 192.168.0.3       // 真实IP

monitor_user               mmm_monitor

monitor_password        uplooking

debug 0

---------------------------------------------------------------

master1中授权mmm_agent

[root@desktop130 ~]# mysql

mysql> grant super,replication
client,process on *.* to mmm_agent@192.168.11.130 identified by 'uplooking';

mysql> grant super,replication
client,process on *.* to mmm_agent@192.168.11.131 identified by 'uplooking';

mysql> grant super,replication
client,process on *.* to mmm_agent@192.168.11.133 identified by 'uplooking';

mysql> grant super,replication
client,process on *.* to mmm_agent@192.168.11.134 identified by 'uplooking';

master1中授权mmm_monitor

[root@desktop130 ~]# mysql

mysql> grant replication client on *.*
to mmm_monitor@192.168.11.128 identified by 'uplooking';

mysql> flush privileges;

起monitor服务

[root@desktop128 mysql-mmm]#
/etc/init.d/mysql-mmm-monitor start

4台agent起服务

[root@desktop130 mysql-mmm]# service
mysql-mmm-agent start

[root@desktop128 ~]# netstat -ntlp         //出现以下信息表明监听成功

tcp       
0      0 127.0.0.1:9988              0.0.0.0:*                   LISTEN      20608/mmm_mond

[root@desktop130 ~]# netstat -ntlp

tcp       
0      0 192.168.11.130:9989         0.0.0.0:*                   LISTEN      14782/mmm_agentd

[root@desktop128 mysql-mmm]# mmm_control
show                //找到4台agent,但没有Online

db1(192.168.11.130) master/AWAITING_RECOVERY. Roles:

db2(192.168.11.131) master/AWAITING_RECOVERY. Roles:

db3(192.168.11.133) slave/AWAITING_RECOVERY. Roles:

db4(192.168.11.134) slave/AWAITING_RECOVERY. Roles:

[root@desktop128 mysql-mmm]#

mmm_control set_online db1

mmm_control set_online db2

mmm_control set_online db3

mmm_control set_online db4

如遇以下报错,重启下mysqld

[root@desktop128
Desktop]# mmm_control set_online db3

ERROR: Host 'db3' is
'HARD_OFFLINE' at the moment. It can't be switched to ONLINE.

[root@desktop128 mysql-mmm]# mmm_control
show

db1(192.168.11.130) master/ONLINE. Roles: reader(192.168.11.202)

db2(192.168.11.131) master/ONLINE. Roles: reader(192.168.11.201),
writer(193.168.11.200)

db3(192.168.11.133) slave/ONLINE. Roles: reader(192.168.11.203)

db4(192.168.11.134) slave/ONLINE. Roles: reader(192.168.11.204)

-----------------------------------------------------------------------------

故障模拟

slave1,slave2同步的是master1,把master1挂掉

[root@desktop130 ~]#
iptables -A INPUT -s 192.168.11.128 -j DROP

//添加一条规则,INPUT链 –s 拒绝monitor端网络数据包 –j 直接丢掉

[root@desktop128 Desktop]# mmm_control show

# Warning: agent on host db1 is not
reachable

db1(192.168.11.130) master/HARD_OFFLINE. Roles:

db2(192.168.11.131) master/ONLINE. Roles: reader(192.168.11.204),
writer(193.168.11.200)

db3(192.168.11.133) slave/ONLINE. Roles: reader(192.168.11.201),
reader(192.168.11.203)

db4(192.168.11.134) slave/ONLINE. Roles: reader(192.168.11.202)

然后再恢复master1,看看结果

[root@desktop130 Desktop]#iptables –D INPUT
1

[root@desktop128 Desktop]# mmm_control
set_online db1

[root@desktop128 Desktop]# mmm_control show

db1(192.168.11.130) master/ONLINE. Roles: reader(192.168.11.201)

db2(192.168.11.131) master/ONLINE. Roles: reader(192.168.11.204),
writer(193.168.11.200)

db3(192.168.11.133) slave/ONLINE. Roles: reader(192.168.11.203)

db4(192.168.11.134) slave/ONLINE. Roles: reader(192.168.11.202)

mysql-mmm 安装配置(双主)的更多相关文章

  1. MySQL自动化安装(双主多从读写分离)

    shell #!/bin/bash # Create by # version 1.0 # // # # check out lockfile whether or not exist IsInput ...

  2. mysql数据库之主从复制+双主--MMM

    mysql复制:在主数据库中,前端用户每执行一个写操作/语句,都会在二进制日志中保存一个事件,把这个事件从mysql的服务器中3306端口发送给从服务器,从服务器把这个事件接受下来,接受下来先保存在本 ...

  3. MySQL Replication, 主从和双主配置

    MySQL Replication, 主从和双主配置 MySQL的Replication是一种多个MySQL的数据库做主从同步的方案,特点是异步,广泛用在各种对MySQL有更高性能,更高可靠性要求的场 ...

  4. Centos 7 下安装LDAP 双主同步

    Centos 7 下安装LDAP 双主同步 标签(空格分隔): LDAP 安装说明: 从OpenLDAP2.4.23版本开始所有配置数据都保存在slapd.d目录下的cn=config文件夹中,不再使 ...

  5. Mysql主从安装配置

    Mysql主从安装配置   环境: 主从服务器上的MySQL数据库版本同为5.1.34 主机IP:192.168.0.1 从机IP:192.168.0.2  一. MySQL主服务器配置 1.编辑配置 ...

  6. mysql主从复制安装配置

    mysql主从复制安装配置 基础设置准备 #操作系统: centos6.5 #mysql版本: 5.7 #两台虚拟机: node1:192.168.182.111(主) node2:192.168.1 ...

  7. 记一次 mysql主从复制安装配置 过程

    mysql主从复制安装配置 1.centos安装及准备 去centos官网下载相应source版本的镜像文件并在vmware中安装,安装中会遇到填写installation source,输入以下即可 ...

  8. [mysql]brew 安装 配置 操作 mysql(中文问题)

    mac 下卸载mysqldmg mac下mysql的DMG格式安装内有安装文件,却没有卸载文件--很郁闷的事. 网上搜了一下,发现给的方法原来得手动去删. 很多文章记述要删的文件不完整,后来在stac ...

  9. 阿里云服务器 ECS 部署lamp:centos+apache+mysql+php安装配置方法 (centos7)

    阿里云服务器 ECS 部署lamp:centos+apache+mysql+php安装配置方法 (centos7) 1.效果图 1 2. 部署步骤 1 1. mysql安装附加(centos7) 7 ...

随机推荐

  1. 【C#进阶系列】15 枚举类型和位标志

    实际上本章就只讲枚举类型,因为位标志本来就可以当做一个特殊的枚举类型. 关于枚举类型 枚举类型是一种消灭魔法数字的好方法,使程序更容易编写,阅读和维护. 枚举类型是值类型,然而有别于其它值类型,枚举类 ...

  2. 简单理解——面向切面编程(AOP)

    在传统的编写业务逻辑处理代码时,我们通常会习惯性地做几件事情:日志记录.事务控制及权限控制等,然后才是编写核心的业务逻辑处理代码.当代码编写完成回头再看时,不禁发现,扬扬洒洒上百行代码中,真正用于核心 ...

  3. 使用Struts2标签遍历集合

    遍历Map<String,Object> 遍历Map<Stirng,List<Student>> 遍历List<Map<String,Student&g ...

  4. 2016读书List

    2016年读书书单. 1. <华尔街漫步> + <战胜华尔街>+ <华尔街之狼> 2. <野蛮大陆> 3. <第三帝国的最后十四天> 4. ...

  5. android 查找某个特定文件后缀名

    private void queryFiles(){ String[] projection = new String[] { MediaStore.Files.FileColumns._ID, Me ...

  6. java枚举与.net中的枚举区别

    通过一段时间的项目实践,发现java中的枚举与.net中的枚举有很大的差别,初期造成了我对java中的枚举一些错误理解及部分有缺陷的应用,其实追其原因还是因为我会习惯性的认为java的枚举在作用以及定 ...

  7. 实体类在Windows程序中的高级应用--------------------》》心境是一种境界。

    一.事务 我们在大家学到这,或多或少对事务都有一些理解了.今天的我也对事务有了更深一层的理解对我来说,我想与大家一起分享一下. 解析: 1.ADO.NET提供了事务处理功能 2.C#中开启事务 3.在 ...

  8. jQuery演示10种不同的切换图片列表动画效果

    经常用到的图片插件演示jQuery十种不同的切换图片列表动画效果 在线演示 下载地址 实例代码 <!DOCTYPE html> <html lang="en" c ...

  9. 详解Javascript 函数声明和函数表达式的区别

    Javascript Function无处不在,而且功能强大!通过Javascript函数可以让JS具有面向对象的一些特征,实现封装.继承等,也可以让代码得到复用.但事物都有两面性,Javascrip ...

  10. 使用 jQuery & CSS3 实现优雅的手风琴效果

    手风琴效果常用于切换显示一组内容,这种方式既可以节省网页空间又可以有动画效果.今天,我们将创造一个优雅的手风琴内容效果.这个想法是有悬停时滑出一些垂直手风琴标签.我们将添加一些 CSS3 属性来提升外 ...