keepalived是Linux下一个轻量级的高可用解决方案,keepalived主要通过虚拟路由冗余(VRRP)来实现高可用功能,防止因为单点故障导致整个系统架构的不可用的发生。可以实现诸如“服务器状态检测”、“故障隔离”、“高可用集群”的功能。
keepalived最主要的目的是能够自己调用ipvsadm命令来生成规则,并且能够自动实现将用户需求的访问地址转移到其他节点上。
keepalived在一个节点上提供VIP向外提供服务,将用户的请求转发到后端的real servel上去。
keepalived自身启动一个服务,它能够工作在两个节点上也可以是多个节点,其中当前持有资源的节点称为活动节点Master,另一个称为备用节点backup;对于Master和backup来讲,Master这个节点会不停的向backup这个节点通告心跳,但他的通告是基于VRRP这种机制来实现的,Master这个节点会一直处于存活状态的,备用节点backup一旦接收不到主节点的心跳传递过来的VRRP信息之后,他就会把资源抢过来在本地使用并在本地生效规则;这个规则的生效是:本地有个服务,它只需要把本地的keepalived的那个生效服务中的某个模块把他生效起来就可以了,所以keepalived自身是模块化设计的,它有着诸多模块;有些模块是监控生效ipvs的,去监控配置文件中跟ipvs相关的一些应用;他的主要目的是为ipvs提供高可用性,keepalived除了能实现资源转移之外,还能自身调用ipvs命令来生成规则;而且还能够实现后端realserver的健康状态检测。
keepalived是轻量级,适用于节点少的场景;支持多个节点,但是对于同一组服务来讲,仍然跟此前的法则一样,只能有一个节点是活动的,因为VIP只能在一个节点上运行,所以他是一主多从的模式;可以有一个主Master多个backup;但是backup越大浪费越大,资源占用越大。
需要注意的是:virtual_server_group、virtual_server是用来配置LVS。LVS配置是专门为keepalived LVS集成准备的。这里LVS配置并不是指真的安装LVS然后用ipvsadm来配置他,而是用keepalived的配置文件来代替ipvsadm来配置LVS,这样会方便很多,一个配置文件搞定这些,维护方便,配置方便。
二、keepalived的部署 2.1、软件安装
1、系统内核参数修改
vi /etc/sysctl.conf
net.ipv4.ip_forward = 1 –把0改为1。功能:设置或重新设置联网功能,如IP转发、IP碎片去除以及源路由检查等。
使配置生效:sysctl -p
2、下载keepalived安装软件包
wgethttp://www.keepalived.org/software/keepalived-1.2.12.tar.gz
tar xzf keepalived-1.2.12.tar.gz
cd keepalived-1.2.12
yum install -y gcc openssl-devel popt-devel
yum -y install libnl*
./configure
make && make install
3、把keepalived对应文件拷贝到相应目录,并把执行文件加入到服务启动
cp /usr/local/etc/rc.d/init.d/keepalived/etc/init.d/
cp /usr/local/etc/sysconfig/keepalived/etc/sysconfig/
chmod x /etc/init.d/keepalived
chkconfig –add keepalived
chkconfig keepalived on
mkdir /etc/keepalived
ln -s /usr/local/sbin/keepalived /usr/sbin/
4、测试keepalived启动
service keepalived start
service keepalived status
ps -ef | grep keep
5、下载ipvsadm
yum install -y ipvsadm
2.2、日志文件配置
4、配置日志文件:
vi /etc/sysconfig/keepalived
KEEPALIVED_OPTIONS="-D -d -S 0"
vi /etc/rsyslog.conf
local0.* /var/log/keepalived.log
–重启系统日志服务
/etc/init.d/rsyslog restart
–重启keepalived服务
service keepalived restart
–查看keepalived日志
more /var/log/keepalived.log
2.3、keepalived配置
5、编写mysql.sh脚本
对于为什么需要使用这个脚本的解释:
因为keepalived本身(在此种配置方法里)监控不到除自己之外的其他服务(mysql)的运行情况,所以在自己的keepalived服务不停止的情况下,另一个节点一直认为对方仍在存活,导致vip不会被切换,而不能通过另外一台keepalived服务器访问绑定在他上的mysql(此种配置是一个keepalived对应一个mysql,只能访问绑定到自己的mysql,没有做负载均衡)。所以在这里把自己的服务停下再启动,以把VIP飘过去。当然还可使用另外的方法配置,比如:vrrp_script(可参考“六、其他场景”的小节2)。
另外,需要说明的是,如果配置为MASTER、BACKUP,那么VIP的漂移是通过权重判断的
vi /usr/local/script/mysql.sh
[root@hadoops2 script]#vi /usr/local/script/mysql.sh
#!/bin/bash
/etc/init.d/keepalived restart #注:在数据库为另外单独的真实机时,不能分开停启,否则停了启不来。
并赋予可执行权限:
chmod u x /usr/local/script/mysql.sh
6、在当前主203上配置keepalived.conf
vi /etc/keepalived/keepalived.conf
[root@hadoops3 keepalived-1.2.12]#vi /etc/keepalived/keepalived.conf
#! Configuration File for keepalived
global_defs {
router_id hadoops3 #修改为自己的主机名
}
vrrp_instance VI_1 {
state BACKUP #都修改成BACKUP
interface eth0
virtual_router_id 60 #默认51 主从都修改为60
priority 100 #初始优先级(1-254之间),另一台改为80,备用节点必须比主节点优先级低。
advert_int 1 #通告几个
nopreempt #不抢占资源,意思就是它活了之后也不会再把主抢回来
authentication { #认证机制
#设置验证信息,两个节点必须一致
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.171.200
}
}
virtual_server 192.168.171.200 3306 {
delay_loop 6 #每隔6秒检测Realserver健康状况
lb_algo wrr #LVS算法,其他算法请参考ipvsadm十大算法
lb_kind DR #LVS模式,DR模式即直接路由,其他还有TUN和NAT两种模式。
nat_mask 255.255.255.0
persistence_timeout 50 #会话保持时间
protocol TCP
real_server 192.168.171.203 3306 { #真实ip转发端口,请注意80和后面{之间有个空格!
weight 1 # 权重
notify_down /usr/local/script/mysql.sh #检测到服务down后执行的脚本
TCP_CHECK {
connect_timeout 10 #连接超时时间
nb_get_retry 3 #重连次数
connect_port 3306 #健康检查端口
}
}
}
7、在当前从202上配置keepalived.conf
改优先级、state改为BACKUP,优先级priority改为比MASTER小
[root@hadoops2 script]#vi /etc/keepalived/keepalived.conf
#! Configuration File for keepalived
global_defs {
router_id hadoops2 #修改为自己的主机名
}
vrrp_instance VI_1 {
state BACKUP #都修改成BACKUP
interface eth0
virtual_router_id 60 #默认51 主从都修改为60
priority 80 #在hadoops3上LVS上修改成100
advert_int 1
nopreempt #不抢占资源,意思就是它活了之后也不会再把主抢回来
authentication {
#设置验证信息,两个节点必须一致
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.171.200
}
}
virtual_server 192.168.171.200 3306 {
delay_loop 6
lb_algo wrr #LVS算法
lb_kind DR #LVS模式
nat_mask 255.255.255.0
persistence_timeout 50 #会话保持时间
protocol TCP
real_server 192.168.171.202 3306 {#真实ip转发端口
weight 1
notify_down /usr/local/script/mysql.sh #检测到服务down后执行的脚本
TCP_CHECK {
connect_timeout 10 #连接超时时间
nb_get_retry 3 #重连次数
connect_port 3306 #健康检查端口
}
}
}
2.4、配置发送邮件功能(可选)
1、下载环境依赖
yum-y install perl-CPAN
cpanNet::SMTP_auth
2、编写如下脚本:标黄处对应修改下
#!/usr/bin/perl -w
use Net::SMTP_auth;
use strict;
my $mailhost = \\\’smtp.163.com\\\’;
my $mailfrom = \\\’shanshan20060801@163.com\\\’;
my @mailto = (\\\’619901002@qq.com\\\’);
my $subject = \\\’keepalived up on 202;
my $text = "邮件n从linux发来的。";
my $user = \\\’shanshan20060801@163.com\\\’;
my $passwd = \\\’xxxxxxxx\\\’;
&SendMail();
##############################
# Send notice mail
##############################
sub SendMail() {
my $smtp = Net::SMTP_auth->new( $mailhost, Timeout => 120, Debug => 1 )
or die "Error.n";
$smtp->auth( \\\’LOGIN\\\’, $user, $passwd );
foreach my $mailto (@mailto) {
$smtp->mail($mailfrom);
$smtp->to($mailto);
$smtp->data();
$smtp->datasend("To: $mailton");
$smtp->datasend("From:$mailfromn");
$smtp->datasend("Subject: $subjectn");
$smtp->datasend("n");
$smtp->datasend("$textnn");
$smtp->dataend();
}
$smtp->quit;
}
执行测试,发现邮件发送成功。
[root@hadoops3script]#/etc/keepalived/sendmail.pl
在如下位置添加:notify_master /etc/keepalived/sendmail.pl
在主从vip切换的时候即会发送邮件。
2.5、测试
8、先重启主hadoops3,在重启hadoops2,可以看到现在vip在hadoops3上
然后停止主hadoops3上的mysql服务,发现vip又飘到了hadoops2上。
期间,在hadoops3上绑定的mysql服务未启动时,hadoops3的日志会显示反复重启keepalived服务,直至绑定在其上的mysql正常启动后。
如下:
tail -f/var/log/messages
到此,部署完毕!
更多关于云服务器,域名注册,虚拟主机的问题,请访问西部数码官网:www.west.cn