keepalived热备方式
Keepalived 采用 VRRP(Virtual Router Redundancy Protocol,虚拟路由冗余协议)热备份协议,以软件的方式实现 Linux 服务器的多机热备功能。VRRP 是针对路由器的一种备份解决方案——由多台路由器组成一个热备组,通过共用的虚拟IP 地址对外提供服务; 每个热备组内同一时刻只有一台主路由器提供服务,其他路由器处于冗余状态。若当前在线的路由器失效,则其他路由器会自动接替(优先级决定接替顺序)虚拟 IP 地址,以继续提供服务,热备组内的每台路由器都可能成为主路由器,虚拟路由器的 IP 地址(VIP)可以在热备组内的路由器之间进行转移,所以也称为漂移 IP 地址。使用 Keepalived 时,漂移地址的实现不需要手动建立虚接口配置文件(如 ens33∶0),而是由 Keepalived 根据配置文件自动管理。
资源列表
操作系统 | IP | 主机名 |
Centos7.9 | 192.168.10.51 | master |
Centos7.9 | 192.168.10.52 | node |
Centos7.9 | 192.168.10.53 | web1 |
Centos7.9 | 192.168.10.54 | web2 |
修改主机名
hostnamectl set-hostname master
hostnamectl set-hostname node
hostnamectl set-hostname web1
hostnamectl set-hostname web2
关闭防火墙,安全机制
systemctl stop firewalld.service
setenforce 0
安装keepalived,ipvsadm
#加载ipvs模块
modprobe ip_vs
cat /proc/net/ip_vs
yum -y install keepalived ipvsadm
cd /etc/keepalived/
cp keepalived.conf keepalived.conf.bak
编辑keepalived配置文件
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id master
}
vrrp_instance VI_1 {
state MASTER # 两个 DS,一个为 MASTER 一个为 BACKUP
interface ens33 # 当前 IP 对应的网络接口,通过 ifconfig 查询
virtual_router_id 62 # 虚拟路由 ID(0-255),在一个 VRRP 实例中主备服务器 ID 必须一样
priority 100 # 优先级值设定:MASTER 要比 BACKUP 的值大
advert_int 1 # 通告时间间隔:单位秒,主备要一致
authentication { # 认证机制,主从节点保持一致即可
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.10.100 # VIP,可配置多个
}
}
# web 配置
virtual_server 192.168.10.100 80 {
delay_loop 3 # 设置健康状态检查时间
lb_algo rr # 调度算法,这里用了 rr 轮询算法
lb_kind DR # 这里测试用了 Direct Route 模式
#persistence_timeout 50 # 持久连接超时时间,注意添加此项配置客户端连续请求时,请求到同一节点
protocol TCP
real_server 192.168.10.53 80 {
weight 1
TCP_CHECK {
connect_timeout 10
retry 3 # 旧版本为 nb_get_retry
delay_before_retry 3 # 重试间隔3秒
connect_port 80
}
}
real_server 192.168.10.54 80 {
weight 1
TCP_CHECK {
connect_timeout 10
retry 3
delay_before_retry 3
connect_port 80
}
}
}
#使用scp命令把配置文件传送到第二台备节点上
scp /etc/keepalived/keepalived.conf root@192.168.10.52:/etc/keepalived/
#启动服务、查看虚拟网卡vip
systemctl start keepalived
ip addr show dev ens33
调整响应参数
#启动服务、查看虚拟网卡vip
systemctl start keepalived
ip addr show dev ens33
# 调整 proc 响应参数
## 对于 DR 群集模式来说,由于 LVS 负载调度器和各节点需要共用 VIP 地址,应该关闭 Linux 内核的重定向参数响应
## 数据包的入接口和路由后的指定的出接口是同一个接口,所以需要关闭重定向
echo 'net.ipv4.conf.all.send_redirects = 0' >> /etc/sysctl.conf
echo 'net.ipv4.conf.default.send_redirects = 0' >> /etc/sysctl.conf
echo 'net.ipv4.conf.ens33.send_redirects = 0' >> /etc/sysctl.conf
sysctl -p
在两台web服务器下载httpd
yum -y install httpd
#准备网页文件
echo "<h1>this is web1</h1>" > /var/www/html/index.html
echo "<h1>this is web2</h1>" > /var/www/html/index.html
#编写虚拟网卡配置文件
vi /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
ONBOOT=yes
IPADDR=192.168.10.100
NETMASK=255.255.255.255
#重启网卡
systemctl restart network
#设置路由
yum -y install net-tools
route add -host 192.168.10.100 dev lo:0
route -n
#调整 proc 响应参数
#添加系统只响应目的IP为本地IP的ARP请求
#系统不使用原地址来设置ARP请求的源地址,而是物理mac地址上的IP
vi /etc/sysctl.conf
#在文本末尾添加即可
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
#刷新proc参数
sysctl -p
使用浏览器访问http://192.168.10.100即可查看网页,多刷新几次即可验证负载均衡
关闭主节点的keepalived依然可以访问,即可验证高可用性
#关闭keepalived
systemctl stop keepalived
可以编写脚本执行后一直访问,关闭主节点之后验证是否还会访问成功
vim keepalived.sh
#!/bin/bash
for i in $(seq 1 1000)
do
curl 192.168.10.100 #改为自己的VIP即可
sleep 1
done
chmod +x keepalived.sh
./keepalived.sh