云计算学习100天-第31天
Keepalived
概念
- keepalived 是Linux下一个轻量级的高可用解决方案
- 主要是通过虚拟路由冗余协议(VRRP)来实现高可用功能
- Virtual Router Redundancy Protocol
- 起初就是为了补充LVS功能而设计的,用于监控LVS集群内后端真实服务器状态
- 后来加入了VRRP的功能,它出现的目的是为了解决静态路由出现的单点故障问题
功能
- LVS规则管理
- LVS集群真实服务器状态监测
- 管理VIP
主机名 | IP地址 | 角色 |
---|---|---|
pubserver | eth0:192.168.88.240 | ansible主机 |
client | eth0:192.168.88.10 | 客户端 |
lvs1 | eth0:192.168.88.5 | lvs1调度器 |
lvs2 | eth0:192.168.88.6 | lvs2调度器 |
web1 | eth0:192.168.88.100 | web服务器 |
web2 | eth0:192.168.88.200 | web服务器 |
使用Keepalived实现LVS高可用,配置测试高可用负载均衡集群
lvs1和lvs2节点安装LVS和Keepalived软件,在ansible主机上使用剧本安装
vim 11_inst_lvs_kp.yml
---
- name: install soft
hosts: lbs
tasks:
- name: install pkgs #安装软件
yum:
name: ipvsadm,keepalived
state: present
ansible-playbook 11_inst_lvs_kp.yml
配置lvs1节点Keepalived软件
vim /etc/keepalived/keepalived.conf
global_defs {
...
router_id lvs1 #集群节点唯一标识
vrrp_iptables #放行防火墙规则
...
vrrp_strict #严格遵守VRRP规则
...
}
vrrp_instance VI_1 {
state MASTER #状态
interface eth0 #网卡
virtual_router_id 51 #虚拟路由唯一标识符
priority 100 #优先级
advert_int 1 #心跳包间隔时间
authentication { #认证方式
auth_type PASS #密码认证
auth_pass 1111 #集群密码
}
virtual_ipaddress { #定义VIP
192.168.88.15/24 dev eth0 label eth0:0 #VIP地址及绑定网卡和虚接口标签
}
}
virtual_server 192.168.88.15 80 { #定义LVS虚拟服务器
delay_loop 6 #健康检查延时6s开始
lb_algo wrr #调度算法
lb_kind DR #LVS工作模式
persistence_timeout 50 #50s内相同客户端发起请求由同一服务器处理
protocol TCP #虚拟服务器协议
real_server 192.168.88.100 80 { #定义真实服务器
weight 1 #权重
TCP_CHECK { #健康检查方式
connect_timeout 3 #连接超时时间为3s
nb_get_retry 3 #连续3次访问失败则认为真实服务器故障
delay_before_retry 3 #健康检查包时间间隔
}
}
real_server 192.168.88.200 80 {
weight 2
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
# 启动服务测试
ipvsadm -Ln #启动服务前无LVS规则
systemctl enable --now keepalived #加入开机自启并立即启动
ipvsadm -Ln #启动服务后有LVS规则
ip a s | grep 192.168 #VIP已绑定
client客户端同一服务器处理请求
for i in {1..6}
> do
> curl http://192.168.88.15
> done
Welcome to web2
Welcome to web2
Welcome to web2
Welcome to web2
Welcome to web2
Welcome to web2
补充:lvs1节点注释持久连接时长
vim /etc/keepalived/keepalived.conf
...
#persistence_timeout 50
...
systemctl restart keepalived
#client客户端同一服务器处理请求
for i in {1..6};do curl http://192.168.88.15; done
Welcome to web2
Welcome to web1
Welcome to web2
Welcome to web2
Welcome to web1
Welcome to web2
配置lvs2节点Keepalived软件
#将lvs1节点的配置文件复制给lvs2节点 这里用rsync -av命令更安全
scp /etc/keepalived/keepalived.conf root@192.168.88.6:/etc/keepalived/
#进入到lvs2节点编辑配置文件
vim /etc/keepalived/keepalived.conf
#修改如下三行
router_id lvs2 #集群节点唯一标识符
state BACKUP #状态
priority 50 #优先级
ipvsadm -Ln
systemctl start keepalived
ipvsadm -Ln
验证真实服务器健康检查
#web1节点停止nginx服务,模拟web1故障
systemctl stop nginx
#lvs1节点和lvs2节点中查看到LVS规则中web1被擦除
ipvsadm -Ln
TCP 192.168.88.15:80 wrr
-> 192.168.88.200:80 Route 2 0 0
#web1节点启动nginx服务
systemctl start nginx #模拟web1修复
#lvs1节点和lvs2节点中的LVS规则中web1被添加回来
ipvsadm -Ln
TCP 192.168.88.15:80 wrr
-> 192.168.88.100:80 Route 1 0 0
-> 192.168.88.200:80 Route 2 0 0
验证高可用负载均衡
#lvs1节点
ip a s | grep 88.15 #VIP绑定于lvs1
inet 192.168.88.15/24 scope global secondary eth0:0
systemctl stop keepalived #模拟lvs1节点故障
ip a s | grep 88.15 #VIP释放
ipvsadm -Ln #LVS规则被清空
#lvs2节点
[root@lvs2 ~]# ip a s | grep 88.15 #VIP绑定于lvs2
inet 192.168.88.15/24 scope global secondary eth0:0
ipvsadm -Ln
TCP 192.168.88.15:80 wrr
-> 192.168.88.100:80 Route 1 0 0
-> 192.168.88.200:80 Route 2 0 0
client客户端查看,不受影响
for i in {1..6}
do
curl http://192.168.88.15
done
Welcome to web1
Welcome to web2
Welcome to web2
Welcome to web1
Welcome to web2
Welcome to web2