采用master和backup架构模式。
VRRP:虚拟路由冗余协议。可以用于避免单点故障。
keepalived通过vrrp协议,检测状服务器的态,进行协议交换。并选举master。
过程:
1、初始化
2、进行选举,选出master服务器
keepalived安装:
1、编译安装
2、建立服务启动脚本,以便使用service命令控制之
cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/keepalived
chmod +x /etc/init.d/keepalived
因为我们使用非默认路径(/usr/local)安装keepalived, 故需要修改几处路径,以保证keepalived能正常启动, 需要修改的文件如下:
3、修改/etc/init.d/keepalived, 寻找大约15行左右的. /etc/sysconfig/keepalived, 修改为:. /usr/local/keepalived/etc/sysconfig/keepalived, 即指向正确的文件位置
同时在上述行下添加以下内容(将keepavlied主程序所在路径导入到环境变量PATH中):
PATH="$PATH:/usr/local/keepalived/sbin"
export PATH
4、修改/usr/local/keepalived/etc/sysconfig/keepalived文件,设置正确的服务启动参数
KEEPALIVED_OPTIONS="-D -f /usr/local/keepalived/etc/keepalived/keepalived.conf"
5、经过以上修改,keepalived基本安装即可完成,启动测试之:
service keepalived restart
6、切勿忘记将此服务设置为开机启动
chkconfig keepalived on
实战配置:
主-备模式。
keepalived是安装配置在提供服务的服务器上。在这种模式下,虚拟IP在某时刻只能属于某一个节点,另一个节点作为备用节点存在。当主节点不可用时,备用节点接管虚拟IP,提供正常服务。
master:172.10.7.185
slave:172.10.7.186
vIP:172.10.7.188
master和slave提供web服务。虚拟vIP默认在主服务器上,由master提供web服务。当master出现故障关机后,vIP自动切换到slave上,由slave提供web服务。在客户端来看就向没有发送任何事情一样。
master的keepalived配置如下。
global_defs {
router_id LVS_MASTER #全局配置,设置本机id
}
vrrp_script check_web { #定义一个检查脚本,指定脚本文件路径和执行间隔
script "/usr/local/keepalived/bin/check_web.sh"
interval 2
}
vrrp_instance VI_1 {
state MASTER #状态为master,从服务器为backup。必须大写
interface eth0 #指定端口以供虚拟ip的绑定
virtual_router_id 181 #vrrp的组名,主从必须相同且不能与其他组相同
priority 100 #指定优先级,值越大越优先
advert_int 1 #组播信息发送间隔
track_script { #执行前面定义的检查脚本
check_web
}
authentication { #验证信息,两节点相同
auth_type PASS
auth_pass 1111
}
virtual_ipaddress { #执行虚拟ip地址
172.10.7.188
}
}
virtual_server 172.10.7.188 80 { #虚拟服务器的相应端口
delay_loop 6 #延时时间
lb_algo rr #lvs的算法
lb_kind DR #lvs的模式
persistence_timeout 50 #超时时间,在此时间内,同一用户发送多次请求,被转发到同一服务器上
protocol TCP #使用的协议
real_server 172.10.7.185 80 { #真实主机的ip以及端口,从服务器上ip为186,下面一个为185
weight 1 #权重,根据此进行请求的分发比例
TCP_CHECK{
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 172.10.7.186 80 {
weight 1
TCP_CHECK{
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
在从服务器上进行相同的配置,只需改动红色标识的位置。其中在从服务器上的real_server186要写在185的前面。
附上检验脚本:
检测主机的80端口,如果服务没有开启,80端口没有被监听。将重启服务。重启后再没有服务就关闭keepalived服务。
#!/bin/bash
a=`lsof -i:80 | wc -l`
if [ $a -eq 0 ]
then
/usr/local/nginx/sbin/nginx
sleep 3
if [ `lsof -i:80 | wc -l` -eq 0 ]
then
service keepalived stop
fi
fi