全部博文(368)
分类: LINUX
2010-11-01 17:40:00
安装指南
翻译:飞鸿无痕
转载请注明出处!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 =
然后为了让我们更改的配置文件生效需要重启下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
db1$ scp
/tmp/database-backup.sql
db1$ scp
/tmp/database-backup.sql
然后将备份导入到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='
(db3) mysql> CHANGE MASTER TO master_host='192.168.0.11', master_port=3306, master_user='replication',
master_password='replication_password', master_log_file='
(db4) mysql> CHANGE MASTER TO master_host='192.168.0.11', master_port=3306, master_user='replication',
master_password='replication_password', master_log_file='
请在
然后用以下命令启动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='
master_log_pos=
请在
启动从进程
(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:
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-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
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
ip 192.168.0.11
mode master
peer db2
ip 192.168.0.12
mode master
peer db1
ip 192.168.0.13
mode slave
ip 192.168.0.14
mode slave
hosts db1, db2
ips 192.168.0.100
mode exclusive
hosts db1, db2, db3, db4
ips 192.168.0.101, 192.168.0.102, 192.168.0.103, 192.168.0.104
mode balanced
不要忘记了拷贝这个文件到所有的主机(包括监控主机)!
在数据库主机上我们需要编辑/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
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_user mmm_monitor
monitor_password monitor_password
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!
官方文档链接:
由于放到博客是格式有的有点乱,欢迎下载doc文档阅读!
http://blogimg.chinaunix.net/blog/upfile2/101103085239.rar