Keepalived:
Keepalived的作用是检测web服务器的状态,如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的web服务器从系统中剔除,当web服务器工作正常后Keepalived自动将web服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的web服务器。
一.VRRP协议(引用参考: http://bbs.nanjimao.com/thread-790-1-1.html )
vrrp: 虚拟路由协议(virtual redundant routing protocol)
VRRP协议是为消除在静态缺省路由环境下的缺省路由器单点故障引起的网络失效而设计的主备模式的协议,使得在发生故障而进行设备功能切换时可以不影响内外数据通信,不需要再修改内部网络的网络参数。VRRP协议需要具有IP地址备份,优先路由选择,减少不必要的路由器间通信等功能。
VRRP协议将两台或多台路由器设备虚拟成一个设备,对外提供虚拟路由器IP(一个或多个),而在路由器组内部,如果实际拥有这个对外IP的路由器如果工作正常的话就是MASTER,或者是通过算法选举产生,MASTER实现针对虚拟路由器IP的各种网络功能,如ARP请求,ICMP,以及数据的转发等;其他设备不拥有该IP,状态是BACKUP,除了接收MASTER的VRRP状态通告信息外,不执行对外的网络功能。当主机失效时,BACKUP将接管原先MASTER的网络功能。
配置VRRP协议时需要配置每个路由器的虚拟路由器ID(VRID)和优先权值,使用VRID将路由器进行分组,具有相同VRID值的路由器为同一个组,VRID是一个0~255的正整数;同一组中的路由器通过使用优先权值来选举MASTER,优先权大者为MASTER,优先权也是一个0~255的正整数。
VRRP协议使用多播数据来传输VRRP数据,VRRP数据使用特殊的虚拟源MAC地址发送数据而不是自身网卡的MAC地址,VRRP运行时只有MASTER路由器定时发送VRRP通告信息,表示MASTER工作正常以及虚拟路由器IP(组),BACKUP只接收VRRP数据,不发送数据,如果一定时间内没有接收到MASTER的通告信息,各BACKUP将宣告自己成为MASTER,发送通告信息,重新进行MASTER选举状态。
相关术语:
virtual router: 虚拟路由(一个是基本,2个是理想;再多就意义不大了)又称为vrrp备份组,由一个master设备和一个或多个backup设备组成,被当作一个共享局域网内主机的默认网关。
Vrid: 虚拟路由标识0--255;拥有相同vrid的一组路由器构成的一个虚拟路由器;
Master路由器: 主路由器只有一个(虚拟路由器中承担报文转发任务的路由器)。
Backup路由器:备节点可以有多个(最少一个),master路由器出现故障时,能够通过竞选等方式成为代替master路由器工作的路由器。
Vip(虚拟路由器的IP地址): 一个虚拟路由器可以拥有多个ip地址,由用户进行设置;
Vmc(虚拟MAC地址):标准格式为:00-00-5E-00-01-[vrid] 虚拟MAC地址由虚拟路由器根据虚拟路由器ID生成的MAC地址;挡虚拟路由器回应ARP请求时,使用虚拟MAC地址,而不是使用真实接口的MAC地址。
Priority:取值范围为0--255,值越高优先级越大;vrrp根据优先级来确定虚拟路由器中每台路由器的地位。
抢占方式:如果backup路由器工作在抢占方式下,当它收到vrrp报文后,会将自己的优先级与通告报文中的优先级进行比较,如果自己的优先级比当前的master路由器的优先级高,就会抢占成为master路由器;否则将保持backup状态。
非抢占方式:如果backup路由器工作在非抢占方式下,则只要master路由器没有出现故障,backup路由器即使随后被配置了更高的优先级也不会成为master路由器。
Ubuntu 安装keepalived (热备份):
下载keepalived:
# wget http://www.keepalived.org/software/keepalived-1.2.18.tar.gz
master服务器端:
解决依赖关系:
# apt-get update && apt-get upgrade
# apt-get install libpop-dev
# apt-get install daemon
安装keepalived:
# tar zxvf keepalived-1.2.18.tar.gz
# cd keepalived-1.2.18
# ./configure --prefix=/usr/local/keepalived
# make
# make install
将keepalived作为系统服务启动:
# mkdir /etc/sysconfig
# cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
# cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
# cp /usr/local/keepalived/sbin/keepalived /sbin/
把keepalived 的配置文件放到/etc/keepalived 下,keepalived默认会读取这个文件。
# mkdir /etc/keepalived
# cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
编辑配置文件,修改以下的内容即可:
# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
sai@localhost # 报警邮件接收人的地址
}
notification_email_from root@localhost # 发送报警邮件发件人地址
smtp_server 127.0.0.1# 发送邮件的服务器地址
smtp_connect_timeout 30# 邮件超时时间(可以根据自己的需求进行设定)
router_id LVS_DEVEL# 一个实例的标识地址(可以有多个实例但不能相同)
}
vrrp_script monitor_nginx {
script “/root/scripts/monitor_nginx.sh”#根据自己的实际路径放置脚本文件
interval 1# 脚本执行间隔
Weight -5#脚本结果导致的优先级变更:5表示优先级加5;-5表示优先级减5
}
vrrp_instance VI_1 {# 虚拟路由器自己的名字
state MASTER# 设置服务器模式,当前为主节点,master端
interface eth0# 实例网卡,也就是提供服务的网卡,来发送vrrp通告
virtual_router_id 51# 设置vrid,这里非常重要,相同的vrid为一个组,他决定,它将决定多播的MAC地址.(建议不要使用默认地址,以免发生冲突)
priority 100# 设置本节点的优先级,优先级高的为master
advert_int 1# 检查间隔,默认为1秒
authentication {
auth_type PASS# 认证方式,可以是pass或者AH两种认证方式
auth_pass 1111# 认证密码
}
virtual_ipaddress {# 设置vip,虚拟ip地址(实现高可用,转移的vip地址)
10.0.1.230# 此地址并不存在,当成为主节点时,此ip地址将会自动生成
}
script_track {
monitor_nginx #跟踪这个monitor_nginx脚本;就是不断去检查这个脚本
}
}
##################################################
之后的内容不用修改,保持默认即可;
--------------------------------------
备份节点服务器步骤与上面相同: 只需要将/etc/keepalived/keepalived.conf中的 MASTER 修改为 BACKUP , 把优先级改为:priority 99 即可!
###################################################
脚本内容如下:
# vim/root/scripts/monitor_nginx.sh
#!/bin/bash
if [ “$(ps -ef | grep “nginx: master process” | grep -v grep)”== “” ]
then
/usr/local/nginx/sbin/nginx
sleep 5
if [ “$(ps -ef | grep “nginx: master process” | grep -v grep)”== “” ]
then
killall keepalived
fi
fi
======================================
将keepalived作为系统启动服务:
# mkdir -p /etc/rc.d/init.d
# cp /usr/share/initramfs-tools/scripts/functions /etc/rc.d/init.d/
# vim /etc/init.d/keepalived +23
修改为:(如下所示)
#daemon keepalived ${KEEPALIVED_OPTIONS}#注释当前行,添加如下内容
daemon keepalived start
创建目录:
#mkdir /var/lock/subsys
(注意: 此目录在服务器重启后会消失,需要将其写到开机启动项中;如写到/etc/rc.local里)
开机启动启动:
# vim /etc/rc.local
修改为以下内容即可:
mkdir /var/lock/subsys
service keepalived start
exit 0
启动keepalived:
# service keepalived start
验证:
# ip addr show # 此时eth0中就会显示之前定义的虚拟IP 地址:10.0.1.230
注意:backup服务器ip addr show 是不会有 10.0.1.230 这个ip地址的;除非等master服务器宕机后,成为主节点后就会自动生成这个虚拟IP地址的;当master服务器正常后就会自动消失。