初探keepalive+mysql-ha架构

一、MHA优缺点

优点:

1、  MHA自动化主服务器故障转移,快速将从服务器晋级为主服务器(通常在10-30s),而不影响复制的一致性,不会有性能损耗,容易安装,不必更改现有的部署环境,适用于任何存储引擎。   

2、  MHA提供在线主服务器切换,改变先正运行的主服务器到另外一台上,这个过程只需0.5-2s的时间,这个时间内数据无法写入。MHA Manager通过ssh连接mysql slave服务器。  

3、  使用半同步复制,可以大大降低数据丢失的风险。MHA可以与半同步复制结合起来。如果只有一个slave已经收到了最新的二进制日志,MHA可以将最新的二进制日志应用于其他所有的slave服务器上,因此他们彼此保持一致性。

缺点:

1、    虽然MHA试图从宕机的主服务器上保存二进制日志,但也会有问题。例如,如果主服务器硬件故障或无法通过ssh访问,MHA没法保存二进制日志,只进行故障转移而丢失最新数据。

2、    当主DB故障,切换到另外的服务器上后,即使恢复了原来的主DB,也不能立即加入整套MHA系统中,得重新部署。而且当发生一次切换后,管理节点的监控进程就会自动退出,需要用脚本来自动启动。另外还得删除app1.failover.complete这个文件,否则新的主DB出现问题MHA就不会切换了。

 

二、简单的架构图

MHA最少需要两台服务器组成,也就是M-S架构,并使用从DB作为监控机。

本次整理的方案使用了4台虚拟机,为M-M-S加监控机的组合。

Mysql请求发往VIP:10.1.1.190,当现有的主(10.1.1.191)故障,VIP会指向10.1.1.192mysql请求也会转过去。

请看简图:

 

 

 

 

一、环境搭建

1、  部署MHA

MHA节点包含三个脚本,依赖perl模块。

save_binary_logs:保存和复制当掉的主服务器二进制日志。

apply_diff_relay_logs:识别差异的relay log事件,并应用于其他salve服务器。

purge_relay_logs:清除relay log文件。

需要在所有mysql服务器上安装MHA节点,MHA管理服务器也需要安装。MHA管理节点模块内部依赖MHA节点模块。MHA管理节点通过ssh连接管理mysql服务器和执行MHA节点脚本。MHA节点依赖perlDBD::mysql模块。

a)    安装MHA Node,4台机器都需要安装

yum –y install perl-DBD-MySQL

wget http://mysql-master-ha.googlecode.com/files/mha4mysql-node-0.54.tar.gz

tar zxf mha4mysql-node-0.54.tar.gz

cd mha4mysql-node-0.54

perl Makefile.PL

make && make install

b)    安装MHA manager,只需要安装在监控机(10.1.1.112

yum –y install perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager

wget http://mysql-master-ha.googlecode.com/files/mha4mysql-manager-0.54.tar.gz

tar zxf mha4mysql-manager-0.54.tar.gz

cd mha4mysql-manager-0.54

perl Makefile.PL

make && make install

需要注意的是mha-managermha-node版本必须一致,另外切记管理机也要安装node包。

 

2、  部署keepalive

2.110.1.1.19110.1.1.192上部署keepalived

wget http://www.keepalived.org/software/keepalived-1.1.17.tar.gz

tar zxvf keepalived-1.1.17.tar.gz

cd keepalived--1.1.17.tar.gz

./configure --prefix=/usr/local/keepalived

make 
make install
cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
mkdir /etc/keepalived

 

MASTER Keepalived的配置:

cat /etc/keepalived/keepalived.conf

#Configuration File for keepalived

 

global_defs {

notification_email {                         ######定义接受邮件的邮箱

  wangjj@hrloo.com

        }

  notification_email_from jiankong@staff.tuge.com    ######定义发送邮件的邮箱

  smtp_server mail.tuge.com

  smtp_connect_timeout 10

}

 

vrrp_script check_mysql {                    ######定义监控mysql的脚本

     script "/etc/keepalived/check_mysql.sh"

     interval 2                              ######监控时间间隔

     weight 2                                ######负载参数

     }

 

vrrp_instance vrrptest {                  ######定义vrrptest实例

        state MASTER                ######服务器状态(主为MASTER,从为BACKUP

        interface eth0                       ######使用的接口

        virtual_router_id 51                 ######虚拟路由的标志,一组lvs的虚拟路由标识必须相同,这样才能切换

        priority 150                         ######服务启动优先级,值越大,优先级越高,BACKUP 不能大于MASTER

        advert_int 1                         ######服务器之间的存活检查时间

        notify /etc/keepalived/alert.sh      ######keepalive发生切换的报警邮件

 

authentication {

        auth_type PASS                       ######认证类型

        auth_pass ufsoft       ######认证密码,一组lvs 服务器的认证密码必须一致

}

 

track_script {                               ######执行监控mysql进程的脚本

     check_mysql

     }

 

virtual_ipaddress {                          ######虚拟IP地址

         10.1.1.190

}

}

 

BACKUP Keepalived的配置

cat /etc/keepalived/keepalived.conf

#Configuration File for keepalived

 

global_defs {

notification_email {                         ######定义接受邮件的邮箱

  wangjj@hrloo.com

        }

  notification_email_from jiankong@staff.tuge.com    ######定义发送邮件的邮箱

  smtp_server mail.tuge.com

  smtp_connect_timeout 10

}

 

vrrp_script check_mysql {                    ######定义监控mysql进程的脚本

     script "/etc/keepalived/check_mysql.sh"

     interval 2                              ######监控时间间隔

     weight 2                                ######负载参数

     }

 

vrrp_instance vrrptest {                  ######定义vrrptest实例

        state BACKUP                ######服务器状态(主为MASTER,从为BACKUP

        interface eth0                       ######使用的接口

        virtual_router_id 51                 ######虚拟路由的标志,一组lvs的虚拟路由标识必须相同,这样才能切换

        priority 100                         ######服务启动优先级,值越大,优先级越高,BACKUP 不能大于MASTER

        advert_int 1                         ######服务器之间的存活检查时间

        notify /etc/keepalived/alert.sh      ######keepalive发生切换的报警邮件

 

authentication {

        auth_type PASS                       ######认证类型

        auth_pass ufsoft       ######认证密码,一组lvs 服务器的认证密码必须一致

}

 

track_script {                               ######执行监控NGINX进程的脚本

     check_mysql

     }

 

virtual_ipaddress {                          ######虚拟IP地址

         10.1.1.190

}

}

 

2.2监控脚本说明:

 

2.2.1监控mysql

/etc/keepalived/check_mysql.sh

#!/bin/bash

if [ "$(ps -ef | egrep "mysqld|mysqld_safe" | grep -v egrep )" == "" ]

 

 then

/etc/init.d/keepalived stop

fi

功能:判断当mysql进程不存在,则killkeepalive,将虚拟IP切换到BACKUP-Keepalive

 

 

2.2.2 监控脚本/etc/keepalived/alert.sh

主要是在keepalive发生切换的时候发邮件报警用的。

posted on 2013-10-11 18:21  web warrior  阅读(819)  评论(0编辑  收藏  举报

导航