您的位置:首页 > 运维架构 > 网站架构

Mysql 5.6 双主互备高可用(Keepalived+mysql) (二)

2015-06-19 10:16 716 查看
安装环境:Redhat 5.8

mysql版本:mysql-5.6.25

DB机器A:192.168.8.193 主机名:mysql01

DB机器B:192.168.8.194 主机名:mysql02

mysql VIP(IP) :192.168.8.198

-------------------------------------------------------------------------------------------------------------------------------------------------

简介:keepalived 是基于虚拟路由冗余协议vrrp来完成它的工作。 长见于高可用集群中,通常搭配 LVS,haproxy

等负载均衡器,主要用作RealServer的健康状态检查以及LoadBalance主机和BackUP主机之间failover的实现。

-------------------------------------------------------------------------------------------------------------------------------------------------

上一篇文章中我们完成了 mysql 的安装,本篇我们开始 lvs+keepalived 软件的安装。

首先我们需要确认机器的内核版本并安装相应的依赖包:

 uname -r  输出结果:

                 2.6.18-308.el5

yum -y install kernel kernel-devel gcc openssl openssl-devel popt

检查当前加载的内核模块,查看是否存在ip_vs模块

 lsmod | grep ip_vs 或者  modprobe -l | grep ipvs 查看有无输出

如果没有,我们需要通过yum安装lvs管理模块ipvs:

yum -y install ipvsadm             #Linux 2.6内核已经集成了lvs软件,ipvsadm为lvs管理工具

modprobe ip_vs                   #加载ip_vs

lsmod | grep  ip_vs              #确认是否存在,输出如下:

ip_vs                 122112  0

调整服务器参数,开启路由转发功能:

vi  /etc/sysctl.conf

net.ipv4.ip_forward= 1  #默认为0

/sbin/sysctl -p   #使修改立即生效

--------------------------------------------------------------------------------------------------------------------------------------------------

关闭SElinux、配置防火墙:

vi /etc/selinux/config

     SELINUX=disabled      #修改

setenforce 0                   #使配置立即生效

vi /etc/sysconfig/iptables

-A RH-Firewall-1-INPUT -d 224.0.0.18 -j ACCEPT      #默认需要使用D类多播地址224.0.0.18 进行心跳通信,这里配置允许vrrp虚拟路由器冗余协议组播地址通信,

-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT    #允许3306端口通过防火墙

/etc/init.d/iptables restart #重启防火墙使配置生效

--------------------------------------------------------------------------------------------------------------------------------------------------

解压并编译安装 keepalived :

tar -zxvf keepalived-1.2.15.tar.gz

./configure --sysconf=/etc --disable-fwmark --prefix=/usr/local/keepalived --with-kernel-dir=/usr/src/kernels/2.6.18-400.1.1.el5-x86_64

make && make install

加入系统服务并随系统开机启动:

chkconfig  --add  keepalived

chkconfig  keepalived on

chkconfig --list  keepalived       输出结果:

                     keepalived      0:关闭  1:关闭  2:启用  3:启用  4:启用  5:启用  6:关闭

配置 keepalived 日志:

vi /etc/sysconfig/keepalived  修改后如下:
KEEPALIVED_OPTIONS="-D -d -S 0"

然后设置系统日志 syslog:

vi /etc/syslog.conf    在最后添加一行

local0.*                               /var/log/keepalived.log

配置 keepalived 环境变量:

echo  export  PATH='$PATH:/usr/local/keepalived/sbin'  >>  /etc/profile

source /etc/profile     #使配置立即生效

启动 keepalived :

service keepalived start   执行后输出:

                启动 keepalived:/bin/bash: keepalived: command not found                                                       

                                             [失败]

默认安装路径为 /usr/local/keepalived/sbin ,这里我们建立一个软连接 ln -s /usr/local/keepalived/sbin/keepalived  /usr/sbin/

或者直接:

cp /usr/local/keepalived/sbin/keepalived /usr/sbin

然后可以正常启动 keepalived 。

-------------------------------------------------------------------------------------------------------------------------------------------------------

keepalived 的配置文件 keepalived.conf 默认在 /etc/keepalived 目录下,启动时会加载,(也可以通过 -f 绝对路径/keepalived.conf

指定要加载的配置)这里我们需要修改 keepalived.conf 文件:此处作为主服务器来配置

vi  /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {  
     notification_email {

     ********@qq.com  #监控报警邮箱,可以设置多个,如果要使用,注意SMTP服务是否开启,一般不采用
     }  

     notification_email_from root@localhost  #设置邮件的发送地址

     smtp_server 127.0.0.1     #设置连接SMTP SERVER的超时时间

     smtp_connect_timeout 30   #邮件服务链接超时的最长时间

     router_id Mysql+LVS       #表示Keepalived服务的一个标识,发邮件时显示在邮件主题中的信息

     }

vrrp_script check_running {    
       script "/etc/keepalived/check_slave.pl 127.0.0.1"  #健康检查脚本路径,脚本需要我们指定

       interval 2        #检查心跳

}

vrrp_instance HA_1 {  

     state BACKUP      #两台这里都是BACKUP,只有MASTER和BACKUP两种状态,必须保持大写   
     interface eth0        #网卡,通过ifconfig命令查看

     virtual_router_id    #虚拟路由标识,同一个vrrp实例使用唯一的标识,同一个vrrp_instance下,MASTER和BACKUP必须一致

     priority 100             #另一台从服务器改为90,定义优先级,数字越大,优先级越高。在一个vrrp_instance下,MASTER的优先级必须大于BACKUP的优先级

     advert_int 1            #设定MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒

     nopreempt             #不抢占,只在优先级高的机器上设置即可,优先级低的机器不设置,另一台需要删除此项

     authentication {                    #认证信息
     auth_type PASS

     auth_pass 123456

     } 

track_script {
     check_running

     }

     virtual_ipaddress {
     192.168.8.198/24 dev eth0     # Mysql的对外服务IP,即VIP

     }

--------------------------------------------------------------------------

Mysql 监控脚本 check_slave.pl

vi /etc/keepalived/check_slave.pl #编辑:  

#!/usr/bin/perl -w

use DBI;

use DBD::mysql;

# CONFIG VARIABLES

$SBM = 120;

$db = "shenguo_test";           #$db 数据库名称

$host = $ARGV[0];

$port = 3306;

$user = "repl_user";               #user 数据库用户名

$pw = "repl_passwd";            #pw 数据库密码

# SQL query

$query = "show slave status";

$dbh = DBI->connect("DBI:mysql:$db:$host:$port", $user, $pw, { RaiseError => 0,PrintError => 0 });

if (!defined($dbh)) {

exit 1;

}

$sqlQuery = $dbh->prepare($query);

$sqlQuery->execute;

$Slave_IO_Running =  "";

$Slave_SQL_Running = "";

$Seconds_Behind_Master = "";

while (my $ref = $sqlQuery->fetchrow_hashref()) {

$Slave_IO_Running = $ref->{'Slave_IO_Running'};

$Slave_SQL_Running = $ref->{'Slave_SQL_Running'};

$Seconds_Behind_Master = $ref->{'Seconds_Behind_Master'};

}

$sqlQuery->finish;

$dbh->disconnect();

if ( $Slave_IO_Running eq "No" || $Slave_SQL_Running eq "No" ) {

exit 1;

} else {

if ( $Seconds_Behind_Master > $SBM ) {

exit 1;

} else {

exit 0;

}

}

#脚本至此结束

执行命令,添加脚本可执行权限:

chmod +x  /etc/keepalived/check_slave.pl

---------------------------------------------------------------------------------------------------------------------------------------------------

以上为主服务器 keepalived 的安装与配置,从服务器以相同的方式安装,但是要注意文中提到的主从不同的配置项。

完成所有软件的安装和配置后,我们就可以通过 VIP 地址连接mysql数据库了,赶快验证下!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息