文章目录
1. 问题
1.1 lvs内核模块
ip_vs
1.2 健康问题
- 某台Real Server在down了怎么办?
- LVS本身down了怎么办?
2. lvs健康检测脚本
vim check_lvs.sh
#!/bin/bash
VIP=192.168.17.100
PORT=80
RS=(192.168.17.2 192.168.17.3)
LOG=check_lvs.log
addrs() {
ipvsadm -a -t $VIP:$PORT -r $1:$PORT -g
echo "add $1 to ipvs" >> $LOG
}
delrs() {
ipvsadm -d -t $VIP:$PORT -r $1
echo "del $1 to ipvs" >> $LOG
}
checkrs() {
for i in ${RS[*]}
do
num=`curl -I -s -o /dev/null -w %{
http_code} http://$i`
if [ $num -eq 200 -a $(ipvsadm -ln|grep $i|wc -l) -eq 0 ];then
addrs $i
elif [ $num -ne 200 -a $(ipvsadm -ln|grep $i|wc -l) -ne 0 ];then
delrs $i
fi
done
}
while true
do
checkrs
sleep 5
done
3. keepalived介绍
3.1 keepalived 简介
keepalived是linux下一个轻量级的高可用解决方案,它与HACMP实现功能类似,都可以实现服务或者网络的高可用,但是又有差别:
- hacmp是一个专业的、功能完善的高可用软件,它提供了HA软件所需的基本功能,比如心跳检测和资源接管,检测集群中的系统服务,在集群节点间转移共享ip地址所有者等,hacmp功能强大,但是部署和使用相对麻烦,同时也是商业化软件.
- keepalived主要是通过虚拟路由冗余来实现高可用功能,虽然他没有hacmp功能强大,但是keepalived部署使用相对简单,所有配置只需要一个配置文件即可完成.
3.2 keepalived 体系结构
keepalived的体系结构从整体上分为两层,分别是用户空间层和内核空间层。
- SchedulerI/OMultiplexer是一个I/O复用分发调度器,它负载安排Keepalived所有内部的任务请求;
- Memory Mngt是一个内存管理机制,这个框架提供了访问内存的一些通用方法;
- Control Plane 是keepalived的控制版面,可以实现对配置文件编译和解析;
- Core componets 这部分主要包含了5个部分;
- Watchdog:是计算机可靠领域中极为简单又非常有效的检测工具,Keepalived正是通过它监控Checkers和VRRP进程的。
- Checkers:这是Keepalived最基础的功能,也是最主要的功能,可以实现对服务器运行状态检测和故障隔离。
- VRRP Stack:这是keepalived后来引用VRRP功能,可以实现HA集群中失败切换功能。负责负载均衡器之间的失败切换FailOver;
- IPVS wrapper:这个是IPVS功能的一个实现,IPVSwarrper模块将可以设置好的IPVS规则发送的内核空间并且提供给IPVS模块,最终实现IPVS模块的负载功能。
- Netlink Reflector:用来实现高可用集群Failover时虚拟IP(VIP)的设置和切换,
3.3 keepalived 进程
keepalived运行时,会启动3个进程,分别为:core(核心进程),check和vrrp
- core:负责主进程的启动,维护和全局配置文件的加载;
- check:负责健康检查
- vrrp:用来实现vrrp协议(主备冗余)
4. keepalived 配置
在上一篇blog基础上修改:LVS之ipvsadm与arptables
4.1 安装keepalived
- 主lvs:server1:上一篇配置
- 备用lvs:server4:192.168.17.4(其他配置与server1相同)
- 安装 ipvsadm、keepalived
yum install -y ipvsadm
yum install -y keepalived
- 删除已有操作
ip addr del 192.168.17.100/24 dev eth0
:删除之前添加的VIP
ipvsadm -C
:删除原有的ipvsadm规则
4.2 修改配置文件
- 主lvs配置:修改配置文件并传输到备用lvs上
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
#全局配置
global_defs {
notification_email {
#邮件报警
root@localhost
}
notification_email_from keepalived@localhost#指定发件人
smtp_server 127.0.0.1#指定smtp服务器地址
smtp_connect_timeout 30#指定smtp连接超时时间
router_id LVS_DEVEL#负载均衡标识,在局域网内应该是唯一的
vrrp_skip_check_adv_addr
#vrrp_strict #严格遵守VRRP协议。(个人实验,可以不遵守)
#下列情况将会阻止启动Keepalived:
#1. 没有VIP地址。2. 单播邻居。3. 在VRRP版本2中有IPv6地址。
vrrp_garp_interval 0 #在一个接口发送的两个免费ARP之间的延迟。可以精确到毫秒级。默认是0
vrrp_gna_interval 0
}
vrrp_instance VI_1 {
state MASTER #指定该keepalived节点的初始状态
interface ens33 #vrrp实例绑定的接口,用于发送VRRP包
virtual_router_id 68 #指定VRRP实例ID,唯一(范围是0-255)
priority 100 #指定优先级,优先级高的将成为MASTER
advert_int 1 #指定发送VRRP通告的间隔。单位是秒
authentication {
auth_type PASS #指定认证方式。PASS简单密码认证(推荐),AH:IPSEC认证(不推荐
auth_pass 1111 #指定认证所使用的密码。最多8位
}
virtual_ipaddress {
#指定VIP地址
192.168.17.100
}
}
virtual_server 192.168.17.100 80 {
delay_loop 6 #健康检查的时间间隔
lb_algo rr #LVS调度算法
lb_kind DR #LVS模式
#persistence_timeout 50 #持久化超时时间,单位是秒。默认是6分钟
protocol TCP #4层协议(TCP|UDP|SCTP)
real_server 192.168.17.2 80 {
weight 1 #给服务器指定权重。默认是1
TCP_CHECK {
#real_server中的健康检查
connect_timeout 3 #连接超时时间。默认是5s
nb_get_retry 3 #get尝试次数
delay_before_retry 3 #在尝试之前延迟多长时间
}
}
real_server 192.168.17.3 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
systemctl restart keepalived.service
:开启服务
scp /etc/keepalived/keepalived.conf server4:/etc/keepalived/
:向备用lvs传输配置文件
- 备用lvs配置
vim /etc/keepalived/keepalived.conf
:将keepalived节点的初始状态定义为BACKUP,其他配置不变
state BACKUP
systemctl restart keepalived.service
:开启服务
4.3 测试
- 发现开启服务后,主lvs自动增加ipvsadm规则并自动绑定VIP到指定接口:
curl
命令测试后,arp
得到的物理地址也与主lvs主机物理地址相对应
- 在主lvs上删除VIP或者其他影响用户访问的操作,备用lvs会自动接管RS(但此时的主LVS并不知道自己down掉了)