安装环境: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 日志:
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
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服务的一个标识,发邮件时显示在邮件主题中的信息
} script "/etc/keepalived/check_slave.pl 127.0.0.1" #健康检查脚本路径,脚本需要我们指定
interval 2 #检查心跳
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
}
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数据库了,赶快验证下!