mysql-mmm官方安装指南翻译

                     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;

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

(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;

debianubuntu中,从db1复制/etc/mysql/debian.cnf文件中的密码到db2db3db4,这个密码是用来启动和停止数据库的

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

 

 

设置同步

通过下面的命令设置在db2, db3db4上的复制

(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

 

现在我们要设置db1db2上复制,首先我们要确定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了,试着在db1db2上插入数据,然后看看会不会同步更新到所有的节点上去。
 
 

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

 

posted @ 2010-11-01 17:40  飞鸿无痕  阅读(417)  评论(0编辑  收藏  举报