Mysql mmm安装指南(翻译)

1,454 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,454
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Mysql mmm安装指南(翻译)

  1. 1. mysql-mmm 安装指南注意:本指南只是一个草稿,如果你觉得有些地方需要改善、 扩展或者修正的话,你可以随意更改。本指南所描述的是基于 Debian Lenny (5.0)平台的 mysql-mmm2 的安装(不包含 mmm tools)。一个最基本的安装必须至少包含 2 个数据库服务器和一个监控服务器,在这个指南中,我用了 5 台基于 Debian Lenny (5.0)平台的服务器function ip hostname serveri dMonitoring host 192.168.100.100 mon -master 1 192.168.100.101 db1 1master 2 192.168.100.102 db2 2slave 1 192.168.100.103 db3 3slave 2 192.168.100.104 db4 4我用了以下的虚拟 IP,他们将会在被 mmm 分配ip role description192.168.100.200 writer 你的应用程序应该连接到这个 ip 进行写操作192.168.100.201 reader 你的应用程序应该链接到这些 ip 中的一个进行192.168.100.202 reader 读操作192.168.100.203 reader192.168.100.204 readerMaster1 的基本配置首先我们在所有的主机上安装 mysqlaptitude install mysql-server然后我们修改/etc/mysql/my.cnf 文件的配置,加入以下行,确保所有的主机使用的不同的server id:server_id =1log_bin = /var/log/mysql/mysql-bin.loglog_bin_index = /var/log/mysql/mysql-bin.log.indexrelay_log = /var/log/mysql/mysql-relay-binrelay_log_index = /var/log/mysql/mysql-relay-bin.indexexpire_logs_days = 10max_binlog_size = 100Mlog_slave_updates = 1read_only =1
  2. 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, PROCESSrelication user 用于复制 REPLICATION SLAVE创建用户语句的代码如下:GRANT REPLICATION CLIENT ON *.* TO mmm_monitor@192.168.0.%IDENTIFIED BY monitor_password;GRANT SUPER, REPLICATION CLIENT, PROCESS ON *.* TOmmm_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. 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:/tmpdb1$ scp /tmp/database-backup.sql <user>@192.168.0.13:/tmpdb1$ scp /tmp/database-backup.sql <user>@192.168.0.14:/tmp然后将备份导入到 db2, db3 and db4:db2$ mysql -u root -p < /tmp/database-backup.sqldb3$ mysql -u root -p < /tmp/database-backup.sqldb4$ 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. 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. 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. 6. MMM 安装创建用户可选的:创建 MMM 脚本和配置文件的所有者,这将能为安全地管理监控脚本提供更简单的方法。useradd --comment "MMM Script owner" --shell /sbin/nologin mmmd监控主机首先安装依存包:aptitude install liblog-log4perl-perl libmailtools-perl liblog-dispatch-perl libclass-singleton-perllibproc-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-perllibproc-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. 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. 8. mode balanced</role>不要忘记了拷贝这个文件到所有的主机(包括监控主机)!在数据库主机上我们需要编辑 /etc/mysql-mmm/mmm_agent.conf 文件,根据其他主机的不同更改 db1 的值(db2 就将 db1 更改成 db2):include mmm_common.confthis 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 0ping_ips 选项是通过 ping 这些 ip 来确认监控机的网络连接是正常的,我配置的是我的交换机(192.168.0.1)和其他四台数据库服务器。启动 MMM启动代理在数据库服务器上编辑/etc/default/mysql-mmm-agent 来开启代理
  9. 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 toAWAITING_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 toAWAITING_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 toAWAITING_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 toAWAITING_RECOVERY. Use mmm_control set_online db4 to switch it online.现在我们设置我们的主机为在线状态( db1 最先,因为其他的主机是从 db1 复制更新的!):
  10. 10. mon$ mmm_control set_online db1OK: State of db1 changed to ONLINE. Now you can wait some time and check its new roles!mon$ mmm_control set_online db2OK: State of db2 changed to ONLINE. Now you can wait some time and check its new roles!mon$ mmm_control set_online db3OK: State of db3 changed to ONLINE. Now you can wait some time and check its new roles!mon$ mmm_control set_online db4OK: State of db4 changed to ONLINE. Now you can wait some time and check its new roles!官方文档链接:http://mysql-mmm.org/mmm2:guide

×