免费注册 查看新帖 |

Chinaunix

广告
  平台 论坛 博客 文库
1234下一页
最近访问板块 发新帖
查看: 10733 | 回复: 39
打印 上一主题 下一主题

mysql-mmm官方安装指南 ----翻译 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-11-01 17:41 |只看该作者 |倒序浏览
本帖最后由 飞鸿无痕 于 2010-11-03 08:33 编辑

翻译:飞鸿无痕
转载请注明出处!http://blog.chinaunix.net/u3/93755/showart.php?id=2379392
由于本人英语水平不是很好,翻译难免有错误,如果有翻译错误的地方,请指出,谢谢!

附件是这篇文章的doc文档,阅读起来格式会好看点!欢迎下载!

注意:本指南只是一个草稿,如果你觉得有些地方需要改善、扩展或者修正的话,你可以随意更改。本指南所描述的是基于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

mysql-mmm安装指南(翻译).rar

13.32 KB, 下载次数:

论坛徽章:
0
2 [报告]
发表于 2010-11-01 17:44 |只看该作者
本帖最后由 飞鸿无痕 于 2010-11-01 17:47 编辑

真是郁闷,从文档复制过来就乱套了!放到博客上都没问题的!大家访问这个链接吧:http://blog.chinaunix.net/u3/93755/showart.php?id=2379392
到博客上看舒服一点!

论坛徽章:
9
每日论坛发贴之星
日期:2016-01-04 06:20:00数据库技术版块每日发帖之星
日期:2016-01-04 06:20:00每日论坛发贴之星
日期:2016-01-04 06:20:00数据库技术版块每日发帖之星
日期:2016-01-04 06:20:00IT运维版块每日发帖之星
日期:2016-01-04 06:20:00IT运维版块每日发帖之星
日期:2016-01-04 06:20:00综合交流区版块每日发帖之星
日期:2016-01-04 06:20:00综合交流区版块每日发帖之星
日期:2016-01-04 06:20:00数据库技术版块每周发帖之星
日期:2016-03-07 16:30:25
3 [报告]
发表于 2010-11-01 18:21 |只看该作者
你的博客格式也有问题~~哈哈

论坛徽章:
0
4 [报告]
发表于 2010-11-01 19:07 |只看该作者
回复 3# cenalulu


    挺郁闷,写的doc文档看起来蛮漂亮的,搞到博客上就难看了!

论坛徽章:
0
5 [报告]
发表于 2010-11-02 10:54 |只看该作者
本帖最后由 wangc0727 于 2010-11-02 10:55 编辑

楼主辛苦了,赞一个

mmm我已经用到生产环境了

论坛徽章:
8
综合交流区版块每周发帖之星
日期:2015-12-02 15:03:53数据库技术版块每日发帖之星
日期:2015-10-02 06:20:00IT运维版块每日发帖之星
日期:2015-10-02 06:20:00IT运维版块每日发帖之星
日期:2015-09-14 06:20:00金牛座
日期:2014-10-10 11:23:34CU十二周年纪念徽章
日期:2013-10-24 15:41:34酉鸡
日期:2013-10-19 10:17:1315-16赛季CBA联赛之北京
日期:2017-03-06 15:12:44
6 [报告]
发表于 2010-11-02 12:01 |只看该作者
楼主辛苦了,赞一个

mmm我已经用到生产环境了
wangc0727 发表于 2010-11-02 10:54



    那你谈谈感受吧

论坛徽章:
8
综合交流区版块每周发帖之星
日期:2015-12-02 15:03:53数据库技术版块每日发帖之星
日期:2015-10-02 06:20:00IT运维版块每日发帖之星
日期:2015-10-02 06:20:00IT运维版块每日发帖之星
日期:2015-09-14 06:20:00金牛座
日期:2014-10-10 11:23:34CU十二周年纪念徽章
日期:2013-10-24 15:41:34酉鸡
日期:2013-10-19 10:17:1315-16赛季CBA联赛之北京
日期:2017-03-06 15:12:44
7 [报告]
发表于 2010-11-02 12:02 |只看该作者
回复  cenalulu


    挺郁闷,写的doc文档看起来蛮漂亮的,搞到博客上就难看了!
飞鸿无痕 发表于 2010-11-01 19:07



    将你的word文档分享出来吧

论坛徽章:
0
8 [报告]
发表于 2010-11-02 13:27 |只看该作者
支持无私分享,LZ辛苦了

论坛徽章:
0
9 [报告]
发表于 2010-11-02 14:48 |只看该作者
本帖最后由 飞鸿无痕 于 2010-11-02 14:49 编辑

回复 7# ruochen
好的,呵呵!明天去公司,把它当附件传上来!

论坛徽章:
0
10 [报告]
发表于 2010-11-02 15:44 |只看该作者
好东西呀
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP