您的位置:首页 > 数据库 > MySQL

mysql-mmm官方安装指南翻译

2010-11-01 17:40 477 查看
mysql-mmm安装指南

翻译:飞鸿无痕

转载请注明出处!http://blog.chinaunix.net/u3/93755/showart.php?id=2379392

由于本人英语水平不是很好,翻译难免有错误,如果有翻译错误的地方,请指出,谢谢!

注意:本指南只是一个草稿,如果你觉得有些地方需要改善、扩展或者修正的话,你可以随意更改。本指南所描述的是基于Debian
Lenny(5.0)平台的mysql-mmm2的安装(不包含mmm
tools)。

一个最基本的安装必须至少包含2个数据库服务器和一个监控服务器,在这个指南中,我用了5台基于DebianLenny(5.0)平台的服务器

function

ip

hostname

serverid

monitoringhost

192.168.0.10

mon

-

master1

192.168.0.11

db1

1

master2

192.168.0.12

db2

2

slave1

192.168.0.13

db3

3

slave2

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

aptitudeinstallmysql-server


然后我们修改/etc/mysql/my.cnf文件的配置,加入以下行,确保所有的主机使用的不同的serverid:

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/mysqlrestart


创建用户

现在我们来创建需要的用户,我们需要创建3个不同的用户

功能

描述

权限

monitoruser

mmm监控用于对mysql服务器进程健康检查

REPLICATIONCLIENT

agentuser

mmm代理用来更改只读模式,复制的主服务器等等

SUPER,REPLICATIONCLIENT,PROCESS

relicationuser

用于复制

REPLICATIONSLAVE

创建用户语句的代码如下:

GRANT
REPLICATIONCLIENTON*.*
TO'mmm_monitor'@'192.168.0.%'IDENTIFIEDBY'monitor_password';

GRANT
SUPER,REPLICATIONCLIENT,PROCESSON*.*TO'mmm_agent'@'192.168.0.%'IDENTIFIEDBY'agent_password';

GRANT
REPLICATIONSLAVEON*.*
TO'replication'@'192.168.0.%'IDENTIFIEDBY'replication_password';

注意:就以上这些允许用户连接的主机而言我们可以设置更多的限制,比如mmm监控主机是从192.168.0.10连接的,mmm代理和复制是从192.168.0.11-192.168.0.14连接的,

服务器之间的数据同步

我们假定db1上的数据是正确的。假如你有一个空的数据库,你仍然需要同步我们刚才创建的些帐号。

首先,当我们创建备份的过程中必须保证没有人更改数据库上的数据:

(db1)mysql>FLUSHTABLESWITHREAD
LOCK;

然后获取二进制日志文件目前的位置,我们一会在设置db2、db3和db4主从复制的时候要用到:

(db1)
mysql>SHOWMASTERSTATUS;

+------------------+----------+--------------+------------------+

|
File|Position|
Binlog_Do_DB|Binlog_Ignore_DB|

+------------------+----------+--------------+------------------+

|
mysql-bin.000002|374|||

+------------------+----------+--------------+------------------+

1rowin
set(0.00sec)

先不要关闭这个mysql命令行模式。假如你关闭了它,那么刚才设置的数据库锁定就会被解锁,因此你需要再开启一个终端,并输入:

db1$mysqldump-uroot-p--all-databases>/tmp/database-backup.sql


现在我们可以对数据库解除锁定了,在上面第一个mysql命令行输入:

(db1)
mysql>UNLOCKTABLES;

复制刚才的数据库备份到db2,
db3anddb4:

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,
db3anddb4:

db2$
mysql-uroot-p</tmp/database-backup.sql

db3$
mysql-uroot-p</tmp/database-backup.sql

db4$
mysql-uroot-p</tmp/database-backup.sql

然后刷新db2,db3
anddb4的权限,我们更改了user表,所以mysql要重新读取这个表

(db2)
mysql>FLUSHPRIVILEGES;

(db3)
mysql>FLUSHPRIVILEGES;

(db4)
mysql>FLUSHPRIVILEGES;

在debian和ubuntu中,从db1复制/etc/mysql/debian.cnf文件中的密码到db2、db3和db4,这个密码是用来启动和停止数据库的

现在所有的数据库的数据都是一致的了,我们可以开始设置主从复制来保持数据一致的状况了!

设置同步

通过下面的命令设置在db2,
db3和db4上的复制

(db2)
mysql>CHANGEMASTERTOmaster_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>CHANGEMASTERTOmaster_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>CHANGEMASTERTOmaster_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上用“showmasterstatus”看到的二进制日志文件名和二进制日志的位置。

然后用以下命令启动3个主机上的slave进程

(db2)
mysql>STARTSLAVE;

(db3)
mysql>STARTSLAVE;

(db4)
mysql>STARTSLAVE;

现在用一下命令检查所有主机上的复制是否正常

(db2)
mysql>SHOWSLAVESTATUS\G

***************************
1.row***************************

Slave_IO_State:Waitingformastertosend
event

Master_Host:192.168.0.11

Master_User:replication

Master_Port:3306

Connect_Retry:60



(db3)
mysql>SHOWSLAVESTATUS\G

***************************
1.row***************************

Slave_IO_State:Waitingformastertosend
event

Master_Host:192.168.0.11

Master_User:replication

Master_Port:3306

Connect_Retry:60



(db4)
mysql>SHOWSLAVESTATUS\G

***************************
1.row***************************

Slave_IO_State:Waitingformastertosend
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>SHOWMASTERSTATUS;

+------------------+----------+--------------+------------------+

|
File|Position|
Binlog_Do_DB|Binlog_Ignore_DB|

+------------------+----------+--------------+------------------+

|
mysql-bin.000001|98|||

+------------------+----------+--------------+------------------+

1rowin
set(0.00sec)

我们用下面的命令配置db1上的复制:

(db1)
mysql>CHANGEMASTERTOmaster_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上用“showmasterstatus”看到的二进制日志文件名和二进制日志的位置。

启动从进程

(db1)
mysql>STARTSLAVE;

检查db1上的复制是否正常

(db1)mysql>SHOWSLAVESTATUS\G
***************************1.row***************************
Slave_IO_State:Waitingformastertosendevent
Master_Host:192.168.0.12
Master_User:<replication>
Master_Port:3306
Connect_Retry:60


所有的复制应该已经ok了,试着在db1和db2上插入数据,然后看看会不会同步更新到所有的节点上去。


MMM安装

创建用户
可选的:创建MMM脚本和配置文件的所有者,这将能为安全地管理监控脚本提供更简单的方法。


useradd
--comment"MMMScriptowner"--shell/sbin/nologinmmmd

监控主机

首先安装依存包:


aptitude
installliblog-log4perl-perllibmailtools-perlliblog-dispatch-perl
libclass-singleton-perllibproc-daemon-perllibalgorithm-diff-perllibdbi-perl
libdbd-mysql-perl

接下来取得最新版本的mysql-mmm-common*.deb和mysql-mmm-monitor*.deb文件,并安装它们:

dpkg-i
mysql-mmm-common_*.debmysql-mmm-monitor*.deb

数据库主机

首先安装依存包:

aptitude
installliblog-log4perl-perllibmailtools-perlliblog-dispatch-perliproute
libnet-arp-perllibproc-daemon-perllibalgorithm-diff-perllibdbi-perl
libdbd-mysql-perl

接下来取得最新版本的mysql-mmm-common*.deb
和mysql-mmm-agent*.deb文件,并安装它们:

dpkg-i
mysql-mmm-common_*.debmysql-mmm-agent_*.deb

配置MMM

所有的配置选项都集合在了一个叫/etc/mysql-mmm/mmm_common.conf的单独文件中,系统中所有主机的该文件内容都是一样的:

active_master_rolewriter

<host
default>

cluster_interfaceeth0

pid_path/var/run/mmmd_agent.pid

bin_path/usr/lib/mysql-mmm/

replication_userreplication

replication_passwordreplication_password

agent_usermmm_agent

agent_passwordagent_password

</host>

<host
db1>

ip192.168.0.11

modemaster

peerdb2

</host>

<host
db2>

ip192.168.0.12

modemaster

peerdb1

</host>

<host
db3>

ip192.168.0.13

modeslave

</host>

<host
db4>

ip192.168.0.14

modeslave

</host>

<role
writer>

hosts
db1,db2

ips192.168.0.100

modeexclusive

</role>

<role
reader>

hostsdb1,db2,db3,db4

ips192.168.0.101,
192.168.0.102,192.168.0.103,192.168.0.104

modebalanced

</role>

不要忘记了拷贝这个文件到所有的主机(包括监控主机)!

在数据库主机上我们需要编辑/etc/mysql-mmm/mmm_agent.conf文件,根据其他主机的不同更改db1的值(db2就将db1更改成db2):

include
mmm_common.conf

thisdb1

在监控主机上我们需要编辑/etc/mysql-mmm/mmm_mon.conf文件:

include
mmm_common.conf

<monitor>

ip127.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_ips192.168.0.1,192.168.0.11,
192.168.0.12,192.168.0.13,192.168.0.14

</monitor>

<host
default>

monitor_usermmm_monitor

monitor_passwordmonitor_password

</host>

debug0

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_controlshow

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:28WARNDetectednewhost'db1':
Settingitsinitialstateto'AWAITING_RECOVERY'.Use'mmm_controlset_online
db1'toswitchitonline.

2009/10/28
23:15:28WARNDetectednewhost'db2':
Settingitsinitialstateto'AWAITING_RECOVERY'.Use'mmm_controlset_online
db2'toswitchitonline.

2009/10/28
23:15:28WARNDetectednewhost'db3':
Settingitsinitialstateto'AWAITING_RECOVERY'.Use'mmm_controlset_online
db3'toswitchitonline.

2009/10/28
23:15:28WARNDetectednewhost'db4':
Settingitsinitialstateto'AWAITING_RECOVERY'.Use'mmm_controlset_online
db4'toswitchitonline.

现在我们设置我们的主机为在线状态(db1最先,因为其他的主机是从db1复制更新的!):

mon$mmm_control
set_onlinedb1

OK:State
of'db1'changedtoONLINE.Nowyoucanwaitsometimeandcheckitsnewroles!

mon$
mmm_controlset_onlinedb2

OK:State
of'db2'changedtoONLINE.Nowyoucanwaitsometimeandcheckitsnewroles!

mon$
mmm_controlset_onlinedb3

OK:State
of'db3'changedtoONLINE.Nowyoucanwaitsometimeandcheckitsnewroles!

mon$
mmm_controlset_onlinedb4

OK:State
of'db4'changedtoONLINE.Nowyoucanwaitsometimeandcheckitsnewroles!

官方文档链接:http://mysql-mmm.org/mmm2:guide

由于放到博客是格式有的有点乱,欢迎下载doc文档阅读!

http://blogimg.chinaunix.net/blog/upfile2/101103085239.rar
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: