3. 这比上一个还要复杂,即:
当一个 Master Fail 时,所有的 Slave 不再从原来失败的那个 Master(db01)获取更新日
志,而应该“自动”切换到最新充当 Master 角色的数据库 db02。
MMM,a greate project!
MMM 的基本信息请参考它的网站(见后"参考资料")
MMM 有 3 个重要的器件:
1、mmmd_mon - monitoring script which does all monitoring work and makes all
decisions about roles moving and so on.
2、mmmd_agent - remote servers management agent script, whichprovides monitoring
node with simple set of remote services to makeservers management easier, more
flexible abd highly portable.
3、mmm_control - simple script dedicated to management of the mmmd_mon processes
by commands.
每一个 MySQL 服务器器结点需要运行 mmmd_agent,同时在另外的一个机器上(可以是
独立的一台机器,也可以是和 AppServer 共享同一个服务器)运行 mmmd_mon。形成 1 *
mmmd_mon + n * mmmd_agent 的部署架构。
MMM 利用了虚拟 IP 的技术:1 个网卡可以同时使用多个 IP。
(所以使用 MMM 时,需要 2*n+1 个 IP,n 为 mysql 数据库结点个数,包括 master,slave)
5. node1
node2
一、配置 node1 node2 数据库服务器 replication 双向 master-master
1、配置 node1 同步
Mkdir /var/log/mysql
Chown mysql.mysql /var/log/mysql
my.cnf at db1 should have following options:
server-id = 1
log_bin = mysql-bin
master_host 192.168.1.2
master_port 3306
master_user replication
master_password slave
mysql> grant replication slave on *.* to 'replication'@'%' identified by 'slave';
show slave statusG;的结果:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
2、配置 node2 同步
Mkdir /var/log/mysql
Chown mysql.mysql /var/log/mysql
my.cnf at db1 should have following options:
server-id = 2
log_bin = mysql-bin
master_host 192.168.1.3
master_port 3306
master_user replication
master_password slave
6. mysql> grant replication slave on *.* to 'replication'@'%' identified by 'slave';
show slave statusG;的结果:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
二、安装部署 MMM
目标主机:
Node1 192.168.1.2
Node2 192.168.1.3
Mon 192.168.1.4
1、安装 mon 主机软件包
前提:
-- Algorithm-Diff-1.1902.tar.gz
-- Proc-Daemon-0.03.tar.gz
RPM mysql-server-5.0.22-2.1
RPM mysql-5.0.22-2.1
RPM perl-DBD-MySQL-3.0007-1.fc6
-- mmm-1.0.tar.bz2
先安裝 2 个 perl 的包:
-- Algorithm-Diff-1.1902.tar.gz
-- Proc-Daemon-0.03.tar.gz
perl 包的安裝過程都是:
perl Makefile.PL
make
make test
make install
安裝 mmm:
7. ./install.pl
2、安装 node1 node2 agent 软件包(使用 agent 功能)
mmm-1.0.tar.bz2
安裝 mmm:
./install.pl
三台主机安装以上软件后进行配置过程
三:node1 node2 的 agent 配置过程
$cd /usr/local/mmm/etc
$cp examples/mmm_agent.conf.examples ../mmm_agent.conf
node1 配置文件所需要修改的地方如下
cluster_interface eth0 --配置 IP 所用的网卡
# Define current server id this db1
this db1
mode master
# For masters peer db2
Peer db2
# Cluster hosts addresses and access params
host db1
ip 192.168.1.2
port 3306
user rep_agent
password RepAgent
host db2
ip 192.168.1.3
port 3306
user rep_agent
password RepAgent
Node2 配置文件所需要修改的地方如下
# Cluster interface
cluster_interface eth0 --配置 IP 所用的网卡
# Define current server id this db1
this db2
mode master
8. # For masters peer db2
Peer db1
# Cluster hosts addresses and access params
host db1
ip 192.168.1.2
port 3306
user rep_agent
password RepAgent
host db2
ip 192.168.1.3
port 3306
user rep_agent
password RepAgent
设置权限(node1/node2)
GRANT ALL PRIVILEGES on *.* to 'rep_monitor'@'%' identified by 'RepMonitor';
四、修改 mon 主机的配置文件 所需要修改的地方如下:
文件位置:/usr/local/mmm/etc/mmm_mon.conf
# Cluster interface
cluster_interface eth0 ----配置 IP 所用的网卡
# Cluster hosts addresses and access params
host db1 数据库名
ip 192.168.1.2 node1 ip
port 3306 node1 port
user rep_monitor node1 用户(供 mon 监控使用,该用户需要在 db 上添
加)
password RepMonitor 对应密码
mode master 模式
peer db2 slave 指定
host db2 意义同上
9. ip 192.168.1.3
port 3306
user rep_monitor
password RepMonitor
mode master
peer db1
#后续如有添加需求,请按照上面格式填写
active_master_role writer
# Mysql Reader role 读规则
role reader
mode balanced 模式为均摊
servers db1,db2 规则覆盖 db1 db2(如有更多 slave 继续填写,别忘了
ip )
ip 192.168.1.7, 对应 ip 虚拟的 IP
192.168.1.8
# Mysql Writer role
role writer 写规则
mode exclusive 模式为独占
servers db1,db2 规则负载 db1 db2
ip 192.168.1.9 两台数据库公用一个 ip 为写,采用 HA 模式,默认 db1 使用,db1 下
线 db2 接管此 ip
五:测试 MMM
在 db1/db2 上启动 agent 功能
/usr/local/mmm/scripts/init.d/mmm_agent start
在 mon 上启动 mon 功能
/usr/local/mmm/scripts/init.d/mmm_mon start
10. 并对 mon 进行检测
# mmm_control set_online db1
# mmm_control set_online db2
# mmm_control show 查看分配情况
正常情况下:
# mmm_control show
Servers status:
db1(192.168.1.2): master/ONLINE. Roles: reader(192.168.1.7;), writer(192.168.1.9;)
db2(192.168.1.3): master/ONLINE. Roles: reader(192.168.1.8;)
stop 192.168.1.3
# mmm_control show
Servers status:
db1(192.168.1.2): master/ONLINE. Roles: reader(192.168.1.7;), writer(192.168.1.9;)
db2(192.168.1.3): master/REPLICATION_FAIL. Roles: None
检测出 1.3 出了故障.
等一会..进行了切换!因为读写是轮循的.这时写切到了 3
# mmm_control show
Servers status:
db1(192.168.1.2): master/ONLINE. Roles: reader(192.168.1.7;)
db2(192.168.1.3): master/ONLINE. Roles: reader(192.168.1.8;), writer(192.168.1.9;)
Telnet 任何一个虚拟 IP 3306 都是通的
五、mysql_proxy 与 mysql MMM 集成的必要性
1、实现 mysql 数据库层的负载均衡
2、数据库节点实现 HA 动态切换
3、读写分离,降低主数据库负载
六、安装 mysql proxy
1、下载 proxy 代码包
从 svn 上获取最新代码
svn co http://svn.mysql.com/svnpublic/mysql-proxy/trunk mysql-proxy