Mais conteúdo relacionado Semelhante a Mysql mmm安装指南(翻译) (19) Mysql mmm安装指南(翻译)1. mysql-mmm 安装指南
注意:本指南只是一个草稿,如果你觉得有些地方需要改善、 扩展或者修正的话,
你可以随意更改。本指南所描述的是基于 Debian Lenny (5.0)平台的 mysql-
mmm2 的安装(不包含 mmm tools)。
一个最基本的安装必须至少包含 2 个数据库服务器和一个监控服务器,在这个
指南中,我用了 5 台基于 Debian Lenny (5.0)平台的服务器
function ip hostname serveri
d
Monitoring host 192.168.100.100 mon -
master 1 192.168.100.101 db1 1
master 2 192.168.100.102 db2 2
slave 1 192.168.100.103 db3 3
slave 2 192.168.100.104 db4 4
我用了以下的虚拟 IP,他们将会在被 mmm 分配
ip role description
192.168.100.200 writer 你的应用程序应该连接到这个 ip 进行写操作
192.168.100.201 reader 你的应用程序应该链接到这些 ip 中的一个进行
192.168.100.202 reader 读操作
192.168.100.203 reader
192.168.100.204 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
2. 删除下面这行:
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;
3. 然后获取二进制日志文件目前的位置,我们一会在设置 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,
这个密码是用来启动和停止数据库的
现在所有的数据库的数据都是一致的了,我们可以开始设置主从复制来保持数据一致的状
况了!
设置同步
4. 通过下面的命令设置在 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 STATUSG
*************************** 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 STATUSG
*************************** 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 STATUSG
*************************** 1. row ***************************
5. 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 STATUSG
*************************** 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 上插入数据,然后看看会不会同
步更新到所有的节点上去。
6. 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
7. <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.100.101
mode master
peer db2
</host>
<host db2>
ip 192.168.100.102
mode master
peer db1
</host>
<host db3>
ip 192.168.100.103
mode slave
</host>
<host db4>
ip 192.168.100.104
mode slave
</host>
<role writer>
hosts db1, db2
ips 192.168.100.200
mode exclusive
</role>
<role reader>
hosts db1, db2, db3, db4
ips 192.168.100.201, 192.168.100.202, 192.168.100.203, 192.168. 100.204
8. 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.100.100, 192.168.100.101, 192.168.100.102, 192.168.100.103,
192.168.100.104
</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 来开启代理
9. 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 复制更新
的!):
10. 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