Chinaunix首页 | 论坛 | 博客
  • 博客访问: 7485115
  • 博文数量: 368
  • 博客积分: 9600
  • 博客等级: 上校
  • 技术积分: 18875
  • 用 户 组: 普通用户
  • 注册时间: 2009-01-01 00:00
文章分类

全部博文(368)

文章存档

2017年(9)

2016年(19)

2015年(3)

2014年(6)

2013年(8)

2012年(78)

2011年(66)

2010年(135)

2009年(44)

分类: 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;

然后获取二进制日志文件目前的位置,我们一会在设置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 @192.168.0.12:/tmp

db1$ scp /tmp/database-backup.sql @192.168.0.13:/tmp

db1$ scp /tmp/database-backup.sql @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='', master_log_pos=;

(db3) mysql> CHANGE MASTER TO master_host='192.168.0.11', master_port=3306, master_user='replication',

              master_password='replication_password', master_log_file='', master_log_pos=;

(db4) mysql> CHANGE MASTER TO master_host='192.168.0.11', master_port=3306, master_user='replication',

              master_password='replication_password', master_log_file='', master_log_pos=;

请在 上插入我们前面在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='',

master_log_pos=;

请在 上插入我们前面在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: 
                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-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

 

阅读(4679) | 评论(1) | 转发(4) |
给主人留下些什么吧!~~

luckyfriends2014-11-13 15:54:12

不错