mysql+mmm实现HA

 引言

Master-Slave的数据库机构解决了很多问题,特别是read/write比较高的web2.0应用:

1、写操作全部在Master结点执行,并由Slave数据库结点定时(默认60s)读取Masterbin-log

2、将众多的用户读请求分散到更多的数据库节点,从而减轻了单点的压力

这是对Replication的最基本陈述,这种模式的在系统Scale-out方案中很有引力(如有必要,数据可以先进行Sharding,再使用replication)

它的缺点是:

1Slave实时性的保障,对于实时性很高的场合可能需要做一些处理

2、高可用性问题,Master就是那个致命点(SPOF:Single point of failure)

本文主要讨论的是如何解决第2个缺点。

DB的设计对大规模、高负载的系统是极其重要的。高可用性(High availability)在重要的系统(critical System)是需要架构师事先考虑的。存在SPOF:Single point of failure的设计在重要系统中是危险的。

 

Master-Master Replication

1、使用两个MySQL数据库db01,db02,互为MasterSlave,即:

一边db01作为db02master,一旦有数据写向db01时,db02定时从db01更新

另一边db02也作为db01master,一旦有数据写向db02时,db01也定时从db02获得更新

(这不会导致循环,MySQL Slave默认不会记录Master同步过来的变化)

2、但从AppServer的角度来说,同时只有一个结点db01扮演Master,另外一个结点db02扮演Slave,不能同时两个结点扮演Master。即AppSever总是把write操作分配某个数据库(db01),除非db01 failed,被切换。

3、如果扮演Slave的数据库结点db02 Failed了:

a)此时appServer要能够把所有的read,write分配给db01read操作不再指向db02

b)一旦db02恢复过来后,继续充当Slave角色,并告诉AppServer可以将read分配给它了.

4、如果扮演Master的数据库结点db01 Failed

a)此时appServer要能够把所有的写操作从db01切换分配给db02,也就是切换Masterdb02充当

b)db01恢复过来后,充当Slave的角色,Masterdb02继续扮演。

 

Master-Master with n Slaves Replication


mysql+mmm实现HA_第1张图片

 

每一个MySQL服务器器结点需要运行mmmd_agent,同时在另外的一个机器上(可以是独立的一台机器,也可以是和AppServer共享同一个服务器)运行mmmd_mon。形成1 * mmmd_mon + n * mmmd_agent的部署架构。

 

MMM利用了虚拟IP的技术:1个网卡可以同时使用多个IP

(所以使用MMM时,需要2*n+1IPnmysql数据库结点个数,包括master,slave)

 

当有数据库结点fail时,mmmd_mon检测不到mmmd_agent的心跳或者对应的MySQL服务器的状态,mmmd_mon将进行决定,并下指令给某个正常的数据库结点的mmmd_agent,使得该mmmd_agent“篡位使用()刚才fail的那个结点的虚拟IP,使得虚拟IP实际从指向fail的那个机器自动转为此时的这个正常机器。


整体架构的原理:


配置步骤:

一、Node1 node2 双向 master-master(此配置省略,可参考本博客mysql双主配置文章)。

二、安装部署MMM

 

 

目标主机:

Node1

192.168.1.2

Node2

192.168.1.3

Mon

192.168.1.4

 

1、三台服务器所需安装软件包

 

 

wget http://ftp.osuosl.org/pub/nslu2/sources/Algorithm-Diff-1.1902.tar.gz

wget http://ftp.riken.go.jp/pub/pub/lang/CPAN/modules/by-module/Proc/EHOOD/Proc-Daemon-0.03.tar.gz 

wget http://mysql-master-master.googlecode.com/files/mysql-master-master-1.2.6.tar.gz

yum -y  install  perl-DBD-MySQL

1)先安装两个perl包

Algorithm-Diff-1.1902.tar.gz

Proc-Daemon-0.03.tar.gz

perl安装过程

perl Makefile.PL

make

make test

make install

 

2)安装MMM

./install.pl

 

 

2、配置两台MMM客户端

 

$cd /usr/local/mmm/etc/examples

$cp mmm_agent.conf.examples ../mmm_agent.conf

$cp mmm_common.conf.example ../mmm_common.conf

配置文件所需要修改的地方如下:

(1) 两台mmm客户端的mmm_agent.conf主要内容

 

# Master-Master Manager config (agent)

#

include mmm_common.conf

# Paths

pid_path /usr/local/mmm/var/mmmd_agent.pid

# MMMD command socket tcp-port and ip

bind_port 9989

# Define current server id

this db1              //NODE2上将db1换成db2(this db2)

mode master

peer db2              //NODE2上将db2换成db1(peer db1)

# Cluster hosts addresses and access params

host db1

ip 192.168.1.2         //node1的真实IP

port 3306

    user rep_agent

    password RepAgent

host db2

ip 192.168.1.3        //node2的真实IP

port 3306

    user rep_agent

    password RepAgent

(2)两台mmm客户端的mmm_common.conf主要内容

 

# Cluster interface
cluster_interface eth0

# Debug mode
debug no

# Paths
bin_path /usr/local/mmm/bin

# Logging setup
log mydebug
    file /usr/local/mmm/var/mmm-debug.log
    level debug

log mytraps
    file /usr/local/mmm/var/mmm-traps.log
    level trap
    email root@localhost

# Email notification settings
email notify
    from_address [email protected]
    from_name MMM Control

# Define roles
active_master_role writer

# MMMD command socket tcp-port
agent_port 9989
monitor_ip 127.0.0.1


# Cluster hosts addresses and access params
host db1
    ip 192.168.1.2
    port 3306
    user rep_monitor
    password RepMonitor
    mode master
    peer db2

host db2
    ip 192.168.1.3
    port 3306
    user rep_monitor
    password RepMonitor
    mode master
    peer db1

# Define roles that are assigned to the above hosts
# Mysql Reader role
role reader            //设置读规则
    mode balanced     //模式为均摊
    servers db1, db2   //规则覆盖db1 db2
    ip 192.168.1.7, 192.168.1.8      //这里是虚拟IP
# Mysql Writer role
role writer         //写规则
    mode exclusive   //模式为独占
    servers db1, db2  //规则负载db1 db2
    ip 192.168.1.9   / /两台数据库公用一个虚拟ip为写,采用HA模式,默认db1使用,db1下线db2接管此ip
# Replication credentials used by slaves to connect to the master
#replication_user replication
#replication_password slave

# Checks parameters

# Ping checker
check ping
    check_period 1
    trap_period 5
    timeout 2

# Mysql checker
# (restarts after 10000 checks to prevent memory leaks)
check mysql
    check_period 1
    trap_period  2
    timeout 2
    restart_after 10000

# Mysql replication backlog checker
# (restarts after 10000 checks to prevent memory leaks)
check rep_backlog
    check_period 5
    trap_period 10
    max_backlog 60
    timeout 2
    restart_after 10000

# Mysql replication threads checker
# (restarts after 10000 checks to prevent memory leaks)
check rep_threads
    check_period 1
    trap_period 5
    timeout 2
    restart_after 10000
 
(3)两台mmm客户端分别 设置权限(MMM客户端)
#mysql -u root -p
GRANT ALL PRIVILEGES on *.* to  'rep_agent'@'%'  identified  by 'RepAgent';
GRANT ALL PRIVILEGES on *.* to  'rep_monitor'@'%'  identified by  'RepMonitor';
 
3.配置MMM服务端

$cd /usr/local/mmm/etc/examples

$cp mmm_mon.conf.examples ../mmm_mon.conf

$cp mmm_common.conf.example ../mmm_common.conf

(1)mmm_mon.conf内容只改宕机切换模式

# Choose the default failover method [manual|wait|auto]

failover_method auto

(2)mmm_common.conf主要内容和node1和node2的内容一致。

 

4.MMM测试

(1)启动MMM客户端

#/usr/local/mmm/scripts/init.d/mmm_agent start
Starting MMM Agent daemon: MySQL Multi-Master Replication Manager
Version: 1.2.6
Ok
以上信息说明客户端启动正常
(2)启动MMM服务端
#/usr/local/mmm/scripts/init.d/mmm_mon start
# 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;)
 
停止 192.168.1.3 mysql服务
# 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
 
参考文献:
http://milan22.blog.51cto.com/539416/301430
http://zhumeng8337797.blog.163.com/blog/static/100768914201134910584/?suggestedreading&wumii
http://wiliiwin.blog.51cto.com/928128/223208
http://bbs.chinaunix.net/thread-2083649-1-1.html

 

 

 

 

 

 

你可能感兴趣的:(职场,休闲,mmm)