Keepalived:html
Keepalived的做用是检测web服务器的状态,若是有一台web服务器死机,或工做出现故障,Keepalived将检测到,并将有故障的web服务器从系统中剔除,当web服务器工做正常后Keepalived自动将web服务器加入到服务器群中,这些工做所有自动完成,不须要人工干涉,须要人工作的只是修复故障的web服务器。nginx
一.VRRP协议(引用参考: http://bbs.nanjimao.com/thread-790-1-1.html )web
vrrp: 虚拟路由协议(virtual redundant routing protocol)算法
VRRP协议是为消除在静态缺省路由环境下的缺省路由器单点故障引发的网络失效而设计的主备模式的协议,使得在发生故障而进行设备功能切换时能够不影响内外数据通讯,不须要再修改内部网络的网络参数。VRRP协议须要具备IP地址备份,优先路由选择,减小没必要要的路由器间通讯等功能。vim
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选举状态。bash
相关术语:服务器
virtual router: 虚拟路由(一个是基本,2个是理想;再多就意义不大了)又称为vrrp备份组,由一个master设备和一个或多个backup设备组成,被看成一个共享局域网内主机的默认网关。网络
Vrid: 虚拟路由标识0--255;拥有相同vrid的一组路由器构成的一个虚拟路由器;spa
Master路由器: 主路由器只有一个(虚拟路由器中承担报文转发任务的路由器)。.net
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
按Esc键退出编辑模式
:wq (保存并退出)
启动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服务器正常后就会自动消失