一)Keepalived简介
Keepalived起初是为LVS设计的,专门用来监控集群系统中各个服务节点的状态,它根据TCP/IP参考模型的第三、第四层、第五层交换机制检测每个服务节点的状态,如果某个服务器节点出现异常,或者工作出现故障,Keepalived将检测到,并将出现的故障的服务器节点从集群系统中剔除,这些工作全部是自动完成的。
后来Keepalived又加入了VRRP的功能,VRRP(Vritrual Router Redundancy Protocol,虚拟路由冗余协议)出现的目的是解决静态路由出现的单点故障问题,通过VRRP可以实现网络不间断稳定运行,因此Keepalvied 一方面具有服务器状态检测和故障隔离功能,另外一方面也有HA cluster功能。
二)工作原理
keepalived的热备方式基于VRRP协议,采用一主多备方式,即一个master主机,多个backup主机,多个主机共用同一个虚拟IP地址,但优先级不同,同一时间只有一个主机在运行。主备设备之间可以相互监测状态,一但发现主设备故障,则备用设备根据优先级选举出新的master主机,虚拟IP也由故障主机漂移到新的master模式的主机。
三)Keepalived安装及设置
1、安装依赖
yum -y install openssl openssl-devel libnl libnl-devel libnl3 libnfnetlink
2、编译安装keepalived
tar -zxvf keepalived-2.2.2.tar.gz
cd keepalived-2.2.2
./configure --prefix=/usr/local/keepalived
make && make install
3、复制启动脚本变量引用文件。
cd /usr/src/keepalived-2.2.2
cp keepalived/etc/sysconfig/keepalived /etc/sysconfig/
注:默认启动脚本变量引用文件位于/etc/sysconfig,但安装完后,该目录下没有引用变量文件。所以需要复制该文件到默认位置。
4、复制控制脚本
cp keepalived/etc/init.d/keepalived /etc/init.d/
5、添加服务
chkconfig –add keepalived
6、复制配置文件
cd /keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
注:安装完成后,keepalived配置文件是/etc/keepalived/keepalived.conf,且新安装的keepalived配置文件中没有配置。
四)配置文件内容说明
!开始的行为注释
global-defs{} #全局设置
vrrp_instance VI_1{} #热备实例设置
virtual_server #虚拟服务器设置
五)配置双机热备份
环境说明:两台LVS服务器IP分别为192.168.3.34,192.168.3.35,漂移IP地址:192.168.3.200,服务器池IP:192.168.3.135,192.168.3.136,客户机IP为192.168.3.21(这里我们采用了真机),五台主机采用桥接模式连接。
1、服务器Keepalived配置
LVS服务器1配置
global_defs {
router_id LVS_34 #当前主机的ID
}
vrrp_instance VI_1 {
state MASTER #一个热备份组只能有一台master
interface ens33 #承载VIP地址的网卡
virtual_router_id 51 #可以随意指定
priority 100 #0-255,数值越大,优先级越高。
advert_int 1 #心跳监测时间(秒)
authentication { #认证类型
auth_type PASS #密码认证
auth_pass 1111 #认证共享密码
}
virtual_ipaddress{ #漂移IP地址
192.168.3.200
}
}
virtual_server 192.168.3.200 80 {
delay_loop 2 #每隔2秒查询realserver状态
lb_algo rr #lvs算法
lb_kind DR #lvs工作模式
persistence_timeout 50 #同一IP的连接50秒内被分配到同一台realserver
protocol TCP #用TCP协议检查realserver状态
real_server 192.168.3.135 80 {
weight 1 #权重
TCP_CHECK{
connect_port 80
connect_timeout 3 #3秒无响应超时
nb_get_retry 3 #失败重试次数
delay_before_retry 3 #失败重试的间隔时间
}
}
real_server 192.168.3.136 80 {
weight 1
TCP_CHECK{
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
LVS服务器2配置
global_defs {
router_id LVS_35 #当前主机的ID
}
vrrp_instance VI_1 {
state BACKUP #一个热备份组只能有一台master
interface ens33 #承载VIP地址的网卡
virtual_router_id 51 #可以随意指定
priority 100 #0-255,数值越大,优先级越高。
advert_int 1 #心跳监测时间
authentication { #认证类型
auth_type PASS #密码认证
auth_pass 1111 #认证共享密码
}
virtual_ipaddress{ #漂移IP地址
192.168.3.200
}
}
virtual_server 192.168.3.200 80 {
delay_loop 2 #每隔2秒查询realserver状态
lb_algo rr #lvs算法
lb_kind DR #lvs工作模式
persistence_timeout 50 #同一IP的连接50秒内被分配到同一台realserver
protocol TCP #用TCP协议检查realserver状态
real_server 192.168.3.135 80 {
weight 1 #权重
TCP_CHECK
{
connect_port 80
connect_timeout 3 #3秒无响应超时
nb_get_retry 3 #失败重试次数
delay_before_retry 3 #失败重试的间隔时间
}
}
real_server 192.168.3.136 80 {
weight 1
TCP_CHECK
{
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
2、Keepalived的工作模式
抢占模式:系统默认模式。主服务器正常工作时,虚拟IP会在主上,备不提供服务,当主服务优先级低于备的时候,备会自动抢占虚拟IP,这时,主不供服务,备提供服务。也就是说,抢占模式下,不分主备,只管优先级。不管 keepalived.conf 里的 state 配置成 master 还是 backup ,只看谁的priority 优先级高, priority 优先级高的那一个,在故障恢复后,会自动将VIP资源再次抢回来。
非抢占模式:非抢占模式不管priority优先级,只要master机器发生故障,VIP资源就会被切换到backup上,并且,当master机器恢复后,也不会将VIP资源抢回来。除非Backup机器发生故障,才能自动把VIP等资源切换会主库。 这种方式通过参数nopreempt(一般设置在advert_int 的那一行下面)来控制。nopreempt 这个参数只能用户state为backup的情况下才能生效,所以在配置的时候要把master和backup的state都设置成backup,这样才会实现keepalived的非抢占模式!
六)服务器池的配置
1、服务器池的每台服务器先安装配置好相应的应用服务,如httpd
2、设置网卡lo的子接口IP为漂移IP,并关闭arp应答,以服务器池其中一台服务器配置为例:
1)配置群集接口lo:0
cp /etc/sysconfig/network-scripts/ifcfg-lo ifcfg-lo:0
vim ifcfg-lo:0
```
DEVICE=lo:0
IPADDR=192.168.3.200
NETMASK=255.255.255.255
ONBOOT=yes
```
ifup lo:0
2)调整/proc内核参数,关闭ARP响应
vim /etc/sysctl.conf
内容底部添加以下内容:
```
net.ipv4.conf.all.arp_ignore=1
#只回答目标IP地址是来访网络接口本地地址的ARP查询请求
net.ipv4.conf.all.arp_announce=2
#忽略IP数据包的源IP地址,选择该发送网卡上最合适的本地地址作为arp请求的源IP地址。
net.ipv4.conf.default.arp_ignore=1 #忽略arp
net.ipv4.conf.default.arp_announce=2
net.ipv4.conf.lo.arp_ignore=1 #忽略arp
net.ipv4.conf.lo.arp_announce=2
```
sysctl -p
3)添加到群集IP地址的本地路由记录
vim /etc/rc.local #此文件启动时会自动执行
route add -host 192.168.3.200 dev lo:0
#添加一条到群集IP主机地址的路由,dev表示经过的接口。
Leave a Reply