mysql-mmm安装指南

翻译:飞鸿无痕

转载请注明出处!http://blog.chinaunix.net/u3/93755/showart.php?id=2379392

由于本人英语水平不是很好,翻译难免有错误,如果有翻译错误的地方,请指出,谢谢!

 

注意:本指南只是一个草稿,如果你觉得有些地方需要改善、扩展或者修正的话,你可以随意更改。本指南所描述的是基于Debian Lenny (5.0)平台的mysql-mmm2的安装(不包含mmm tools)。

一个最基本的安装必须至少包含2个数据库服务器和一个监控服务器,在这个指南中,我用了5台基于Debian Lenny (5.0)平台的服务器

function

ip

hostname

server id

monitoring host

192.168.0.10

mon

-

master 1

192.168.0.11

db1

1

master 2

192.168.0.12

db2

2

slave 1

192.168.0.13

db3

3

slave 2

192.168.0.14

db4

4

我用了以下的虚拟IP,他们将会在被mmm分配

ip

role

description

192.168.0.100

writer

你的应用程序应该连接到这个ip进行写操作

192.168.0.101

reader

你的应用程序应该链接到这些ip中的一个进行读操作

192.168.0.102

reader

192.168.0.103

reader

192.168.0.104

reader

Master1的基本配置

首先我们在所有的主机上安装mysql

aptitude install mysql-server

然后我们修改/etc/mysql/my.cnf文件的配置,加入以下行,确保所有的主机使用的不同的server id:

server_id           = 1

log_bin             = /var/log/mysql/mysql-bin.log

log_bin_index       = /var/log/mysql/mysql-bin.log.index

relay_log           = /var/log/mysql/mysql-relay-bin

relay_log_index     = /var/log/mysql/mysql-relay-bin.index

expire_logs_days    = 10

max_binlog_size     = 100M

log_slave_updates   = 1

read_only           = 1

删除下面这行:

bind-address = 127.0.0.1

当然要配置绑定到你的ip上:

bind-address = <your_IP_address>

然后为了让我们更改的配置文件生效需要重启下mysql服务:

/etc/init.d/mysql restart

创建用户

现在我们来创建需要的用户,我们需要创建3个不同的用户

功能

描述

权限

monitor user

mmm监控用于对mysql服务器进程健康检查

REPLICATION CLIENT

agent user

mmm代理用来更改只读模式,复制的主服务器等等

SUPER, REPLICATION CLIENT, PROCESS

relication user

用于复制

REPLICATION SLAVE

创建用户语句的代码如下:

GRANT REPLICATION CLIENT                 ON *.* TO 'mmm_monitor'@'192.168.0.%' IDENTIFIED BY 'monitor_password';

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

GRANT REPLICATION SLAVE                  ON *.* TO 'replication'@'192.168.0.%' IDENTIFIED BY 'replication_password';

注意:就以上这些允许用户连接的主机而言我们可以设置更多的限制,比如mmm监控主机是从192.168.0.10连接的,mmm代理和复制是从192.168.0.11 - 192.168.0.14连接的,

服务器之间的数据同步

我们假定db1上的数据是正确的。假如你有一个空的数据库,你仍然需要同步我们刚才创建的些帐号。

首先,当我们创建备份的过程中必须保证没有人更改数据库上的数据:

(db1) mysql> FLUSH TABLES WITH READ LOCK;

然后获取二进制日志文件目前的位置,我们一会在设置db2、db3和db4主从复制的时候要用到:

(db1) mysql> SHOW MASTER STATUS;

+------------------+----------+--------------+------------------+

| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |

+------------------+----------+--------------+------------------+

| mysql-bin.000002 |      374 |              |                  |

+------------------+----------+--------------+------------------+

1 row in set (0.00 sec)

先不要关闭这个mysql命令行模式。假如你关闭了它,那么刚才设置的数据库锁定就会被解锁,因此你需要再开启一个终端,并输入:

db1$ mysqldump -u root -p --all-databases > /tmp/database-backup.sql

现在我们可以对数据库解除锁定了,在上面第一个mysql命令行输入:

(db1) mysql> UNLOCK TABLES;

复制刚才的数据库备份到db2, db3 and db4:

db1$ scp /tmp/database-backup.sql <user>@192.168.0.12:/tmp

db1$ scp /tmp/database-backup.sql <user>@192.168.0.13:/tmp

db1$ scp /tmp/database-backup.sql <user>@192.168.0.14:/tmp

然后将备份导入到db2, db3 and db4:

db2$ mysql -u root -p < /tmp/database-backup.sql

db3$ mysql -u root -p < /tmp/database-backup.sql

db4$ mysql -u root -p < /tmp/database-backup.sql

然后刷新db2, db3 and db4的权限,我们更改了user表,所以mysql要重新读取这个表

(db2) mysql> FLUSH PRIVILEGES;

(db3) mysql> FLUSH PRIVILEGES;

(db4) mysql> FLUSH PRIVILEGES;

在debian和ubuntu中,从db1复制/etc/mysql/debian.cnf文件中的密码到db2、db3和db4,这个密码是用来启动和停止数据库的

现在所有的数据库的数据都是一致的了,我们可以开始设置主从复制来保持数据一致的状况了!

设置同步

通过下面的命令设置在db2, db3和db4上的复制

(db2) mysql> CHANGE MASTER TO master_host='192.168.0.11', master_port=3306, master_user='replication',

master_password='replication_password', master_log_file='<file>', master_log_pos=<position>;

(db3) mysql> CHANGE MASTER TO master_host='192.168.0.11', master_port=3306, master_user='replication',

master_password='replication_password', master_log_file='<file>', master_log_pos=<position>;

(db4) mysql> CHANGE MASTER TO master_host='192.168.0.11', master_port=3306, master_user='replication',

master_password='replication_password', master_log_file='<file>', master_log_pos=<position>;

请在<file> 和 <position>上插入我们前面在db1上用“show master status”看到的二进制日志文件名和二进制日志的位置。

然后用以下命令启动3个主机上的slave进程

(db2) mysql> START SLAVE;

(db3) mysql> START SLAVE;

(db4) mysql> START SLAVE;

现在用一下命令检查所有主机上的复制是否正常

(db2) mysql> SHOW SLAVE STATUS\G

*************************** 1. row ***************************

Slave_IO_State: Waiting for master to send event

Master_Host: 192.168.0.11

Master_User: replication

Master_Port: 3306

Connect_Retry: 60

(db3) mysql> SHOW SLAVE STATUS\G

*************************** 1. row ***************************

Slave_IO_State: Waiting for master to send event

Master_Host: 192.168.0.11

Master_User: replication

Master_Port: 3306

Connect_Retry: 60

(db4) mysql> SHOW SLAVE STATUS\G

*************************** 1. row ***************************

Slave_IO_State: Waiting for master to send event

Master_Host: 192.168.0.11

Master_User: replication

Master_Port: 3306

Connect_Retry: 60

现在我们要设置db1从db2上复制,首先我们要确定master_log_file 和 master_log_pos的值:

(db2) mysql> SHOW MASTER STATUS;

+------------------+----------+--------------+------------------+

| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |

+------------------+----------+--------------+------------------+

| mysql-bin.000001 |       98 |              |                  |

+------------------+----------+--------------+------------------+

1 row in set (0.00 sec)

我们用下面的命令配置db1上的复制:

(db1) mysql> CHANGE MASTER TO master_host = '192.168.0.12', master_port=3306, master_user='replication',master_password='replication_password',master_log_file='<file>',

master_log_pos=<position>;

请在<file> 和 <position>上插入我们前面在db2上用“show master status”看到的二进制日志文件名和二进制日志的位置。

启动从进程

(db1) mysql> START SLAVE;

检查db1上的复制是否正常

(db1) mysql> SHOW SLAVE STATUS\G
*************************** 1. row *************************** 
                Slave_IO_State: Waiting for master to send event 
                Master_Host: 192.168.0.12
                Master_User: <replication>
                Master_Port: 3306 
                Connect_Retry: 60 

所有的复制应该已经ok了,试着在db1和db2上插入数据,然后看看会不会同步更新到所有的节点上去。
 
 

MMM安装

创建用户
可选的:创建MMM脚本和配置文件的所有者,这将能为安全地管理监控脚本提供更简单的方法。

useradd --comment "MMM Script owner" --shell /sbin/nologin mmmd

监控主机

首先安装依存包:

aptitude install liblog-log4perl-perl libmailtools-perl liblog-dispatch-perl libclass-singleton-perl libproc-daemon-perl libalgorithm-diff-perl libdbi-perl libdbd-mysql-perl

接下来取得最新版本的mysql-mmm-common*.deb 和mysql-mmm-monitor*.deb文件,并安装它们:

dpkg -i mysql-mmm-common_*.deb mysql-mmm-monitor*.deb

数据库主机

首先安装依存包:

aptitude install liblog-log4perl-perl libmailtools-perl liblog-dispatch-perl iproute libnet-arp-perl libproc-daemon-perl libalgorithm-diff-perl libdbi-perl libdbd-mysql-perl

接下来取得最新版本的mysql-mmm-common*.deb 和mysql-mmm-agent*.deb文件,并安装它们:

dpkg -i mysql-mmm-common_*.deb mysql-mmm-agent_*.deb

配置MMM

所有的配置选项都集合在了一个叫/etc/mysql-mmm/mmm_common.conf的单独文件中,系统中所有主机的该文件内容都是一样的:

active_master_role          writer

<host default>

cluster_interface       eth0

pid_path                /var/run/mmmd_agent.pid

bin_path                /usr/lib/mysql-mmm/

replication_user        replication

replication_password    replication_password

agent_user              mmm_agent

agent_password          agent_password

</host>

<host db1>

ip                      192.168.0.11

mode                    master

peer                    db2

</host>

<host db2>

ip                      192.168.0.12

mode                    master

peer                    db1

</host>

<host db3>

ip                      192.168.0.13

mode                    slave

</host>

<host db4>

ip                      192.168.0.14

mode                    slave

</host>

<role writer>

hosts                   db1, db2

ips                     192.168.0.100

mode                    exclusive

</role>

<role reader>

hosts                   db1, db2, db3, db4

ips                     192.168.0.101, 192.168.0.102, 192.168.0.103, 192.168.0.104

mode                    balanced

</role>

不要忘记了拷贝这个文件到所有的主机(包括监控主机)!

在数据库主机上我们需要编辑/etc/mysql-mmm/mmm_agent.conf文件,根据其他主机的不同更改db1的值(db2就将db1更改成db2):

include mmm_common.conf

this db1

在监控主机上我们需要编辑/etc/mysql-mmm/mmm_mon.conf文件:

include mmm_common.conf

<monitor>

ip                      127.0.0.1

pid_path                /var/run/mmmd_mon.pid

bin_path                /usr/lib/mysql-mmm/

status_path             /var/lib/misc/mmmd_mon.status

ping_ips                192.168.0.1, 192.168.0.11, 192.168.0.12, 192.168.0.13, 192.168.0.14

</monitor>

<host default>

monitor_user            mmm_monitor

monitor_password        monitor_password

</host>

debug 0

ping_ips选项是通过ping这些ip来确认监控机的网络连接是正常的,我配置的是我的交换机(192.168.0.1)和其他四台数据库服务器。

启动MMM

启动代理

(在数据库服务器上)编辑/etc/default/mysql-mmm-agent来开启代理

ENABLED=1

然后启动它:

/etc/init.d/mysql-mmm-agent start

启动监控

(在监控服务器上)编辑/etc/default/mysql-mmm-monitor文件来开启监控

ENABLED=1

然后启动它:

/etc/init.d/mysql-mmm-monitor start

等待几秒钟mmmd_mon启动,在几秒钟后你可以用mmm_control来检查群集的状态

mon$ mmm_control show

db1(192.168.0.11) master/AWAITING_RECOVERY. Roles:

db2(192.168.0.12) master/AWAITING_RECOVERY. Roles:

db3(192.168.0.13) slave/AWAITING_RECOVERY. Roles:

db4(192.168.0.14) slave/AWAITING_RECOVERY. Roles:

因为这是第一次启动,所以我们的监控还不知道我们的主机,因此会设置所有主机的状态为AWAITING_RECOVERY并且会记录一条警告信息!

mon$ tail /var/log/mysql-mmm/mmmd_mon.warn

2009/10/28 23:15:28  WARN Detected new host 'db1': Setting its initial state to 'AWAITING_RECOVERY'. Use 'mmm_control set_online db1' to switch it online.

2009/10/28 23:15:28  WARN Detected new host 'db2': Setting its initial state to 'AWAITING_RECOVERY'. Use 'mmm_control set_online db2' to switch it online.

2009/10/28 23:15:28  WARN Detected new host 'db3': Setting its initial state to 'AWAITING_RECOVERY'. Use 'mmm_control set_online db3' to switch it online.

2009/10/28 23:15:28  WARN Detected new host 'db4': Setting its initial state to 'AWAITING_RECOVERY'. Use 'mmm_control set_online db4' to switch it online.

现在我们设置我们的主机为在线状态(db1最先,因为其他的主机是从db1复制更新的!):

mon$ mmm_control set_online db1

OK: State of 'db1' changed to ONLINE. Now you can wait some time and check its new roles!

mon$ mmm_control set_online db2

OK: State of 'db2' changed to ONLINE. Now you can wait some time and check its new roles!

mon$ mmm_control set_online db3

OK: State of 'db3' changed to ONLINE. Now you can wait some time and check its new roles!

mon$ mmm_control set_online db4

OK: State of 'db4' changed to ONLINE. Now you can wait some time and check its new roles!

官方文档链接:http://mysql-mmm.org/mmm2:guide

由于放到博客是格式有的有点乱,欢迎下载doc文档阅读!

http://blogimg.chinaunix.net/blog/upfile2/101103085239.rar

转载于:https://www.cnblogs.com/feihongwuhen/archive/2010/11/01/7170371.html

mysql-mmm官方安装指南翻译相关推荐

  1. mysql mmm 官方_mysql mmm

    Microsoft Azure部署MYSQL-MMM(3)配置MYSQL-MMM (3)安装配置MYSQL-MMM 在db1.db2.db3安装MMM所需要的Perl模块(所有服务器)执行该脚本,然后 ...

  2. 从零开始配置MySQL MMM

    下面要配置的MySQL Cluster环境包含四台数据库服务器和一台管理服务器,如下: function IP Server Name server id monitor 192.168.84.174 ...

  3. 通过 .gitlab-ci.yml配置任务-官方配置文件翻译

    Gitlab CI yaml官方配置文件翻译 通过 .gitlab-ci.yml配置任务 [TOC] 来源:https://github.com/Fennay/git... 此文档用于描述.gitla ...

  4. Dapper官方教程翻译8:Dapper方法之QueryMultiple(转)

    Dapper官方教程翻译8:Dapper方法之QueryMultiple 2019年02月28日 10:42:22 Day_and_Night_2017 阅读数:120 QueryMultiple方法 ...

  5. 体验MySQL MMM

    今天试验了一把MySQL MMM.(MySQL Master-Master Replication Manager)一个主主复制的管理工具,它提供了主机监控,MySQL服务监控,复制线程等多个方位的监 ...

  6. Android官方文章翻译之管理设备苏醒状态(Managing Device Awake State)(二)

    这是Managing Device Awake State的下半篇,上半篇请看:Android官方文章翻译之管理设备苏醒状态(Managing Device Awake State)(一) 在了解接下 ...

  7. mysql mmm vip_MySQL MMM架构看不到vip地址

    自己搭建好MySQL MMM(Master-Master Replication Manager)高可用架构后看不到vip地址,经过在网上找了大量的文章和自己平时的观察终于发现找出vip地址的方法了, ...

  8. centos7在线yum安装mysql时官方镜像下载过慢的解决方案

    centos7在线yum安装mysql时官方镜像下载过慢的解决方案 参考文章: (1)centos7在线yum安装mysql时官方镜像下载过慢的解决方案 (2)https://www.cnblogs. ...

  9. convert for mysql_DBConvert for MySQL PostgreSQL下载|DBConvert for MySQL PostgreSQL官方下载-太平洋下载中心...

    DBConvert for MySQL & PostgreSQL是其它工具频道下深受用户喜爱的软件,太平洋下载中心提供DBConvert for MySQL & PostgreSQL官 ...

最新文章

  1. JS 面向对象编程之原型(prototype)
  2. 中南大学王斌计算机学院,中南大学 信息科学与工程学院,长沙 410083
  3. 练习mvc做一个知识库(二)
  4. 【BZOJ1009】【codevs2325】GT考试,kmp+矩阵加速DP
  5. 计算机软件职业资格证书查询,电子社保卡可查询职业资格证书啦!
  6. tomcat基本使用(二)
  7. APP自动化测试系列之3种元素定位工具
  8. 嵌入式系统中的几个关键基本概念!
  9. Error launching Console Application PDFLaTeX
  10. #pragma comment(lib,ws2_32.lib)
  11. 小程序随笔(关于香港手机号无法接收短信)
  12. Facebook登录的时候验证邮箱
  13. node.js+cocoscreator自研斗地主游戏
  14. 创新产品访谈:Ntalker V2.5
  15. netty 错误 #[IllegalReferenceCountException: refCnt: 0, decrement: 1]
  16. JS JSP HTML CSS概念
  17. 记最近一周的一个支线任务
  18. 搭建SecureCRT
  19. uni-app 二维码转base64 分享
  20. 双11是结束了,但这场没有硝烟的“战争”却没有结束

热门文章

  1. 魅族使用华为鸿蒙,魅族官宣接入华为鸿蒙,以后我们还能用魅族自家的flyme系统吗?...
  2. rsync通过服务同步、linux日志、screen工具
  3. JS高程5.引用类型(6)Array类型的位置方法,迭代方法,归并方法
  4. Linux 目录简要结构认识
  5. SSL 中证书能否够使用IP而不是域名
  6. 在网页浏览器中原生显示PDF文件
  7. Node.js 学习笔记--- (2)创建一个简单的博客工程
  8. Win8 Metro App里玩XNA:ContentPipeline内容管线问题
  9. 开源公司黄页之腾讯开源软件推荐
  10. linux mysql-5.7.13 源码安装,Linux下安装-配置-mysql-5.7.13