事前的IP规划图如下:
两台LVS+Keepalived的IP规划如下:
虚拟IP(VIP):192.168.235.20
主节点IP:192.168.235.21
备节点IP:192.168.235.22
RealServer(两台nginx)的IP规划如下:
192.168.235.101
192.168.235.103
完成后规划图如下所示:
一、LVS主机(192.168.235.21,192.168.235.22)安装安装ipvsadm
yum install -y ipvsadm
二、LVS主机(192.168.235.21,192.168.235.22)安装Keepalvie
参考安装链接:
https://blog.csdn.net/qq_34871626/article/details/107774077 ,安装完成到第7步骤即可。
三、LVS主机(192.168.235.21,192.168.235.22)创建网络子接口,这里的ifcfg-ens33根据自己的情况:
cd /etc/sysconfig/network-scripts/
cp ifcfg-ens33 ifcfg-ens33:1
修改文件:
vi ifcfg-ens33:1
修改后文件内容如下:
BOOTPROTO=static
#跟拷贝后的网卡信息文件名名字要对应
DEVICE=ens33:1
ONBOOT=yes
#修改为虚拟ip
IPADDR=192.168.235.20
NETMASK=255.255.255.0
重启网络:
service network restart
执行:
ip addr
可以看到相应的信息,说明配置成功了。
四、分别进入RealServer192.168.235.101和192.168.235.103,配置虚拟网络子接口(回环接口),对ifcfg-lo进行拷贝并修改
cd /etc/sysconfig/network-scripts/
cp ifcfg-lo ifcfg-lo:1
vi ifcfg-lo:1
修改内容如下:
#与拷贝后文件名对应
DEVICE=lo:1
#虚拟ip地址
IPADDR=192.168.235.20
#掩码修改为255
NETMASK=255.255.255.255
NETWORK=127.0.0.0
# If you're having problems with gated making 127.0.0.0/8 a martian,
# you can change this to something else (255.255.255.255, for example)
BROADCAST=127.255.255.255
ONBOOT=yes
NAME=loopback
刷新lo:
ifup lo
执行
ip addr
获取到配置的lo信息说明配置成功:
五、分别设置RealServer的arp响应级别(arp-ignore)及通告行为(arp-announce)
arp-ignore(处理请求):
0:只要本机配置了IP,就能响应请求
1:请求的目标地址到达对应的网络接口,才会响应请求
arp-announce(返回响应):
0:本机上任何网络接口都能向外通告,所有网卡都能接受到通告
1:尽可能避免本网卡与不匹配的目标进行通告
2:只在本网卡通告
执行:
vi /etc/sysctl.conf
插入以下信息:
net.ipv4.conf.all.arp_ignore=1
net.ipv4.conf.default.arp_ignore=1
net.ipv4.conf.lo.arp_ignore=1
net.ipv4.conf.all.arp_announce=2
net.ipv4.conf.default.arp_announce=2
net.ipv4.conf.lo.arp_announce=2
刷新配置:
sysctl -p
六、RealServer192.168.235.101和192.168.235.103添加lo路由:
#安装route命令包
yum install net-tools
#添加路由配置
route add -host 192.168.235.20 dev lo:1
#防止重启后丢失改路由配置
echo "route add -host 192.168.235.20 dev lo:1" >> /etc/rc.local
七、修改Keepalived配置:
vi /etc/keepalived/keepalived.conf
主节点配置如下:
! Configuration File for keepalived
global_defs {
router_id LVS_21
}
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 41
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.235.20
}
}
#配置集群地址访问的IP+端口,端口和nginx保持一致
virtual_server 192.168.235.20 80 {
#健康检查时间,单位是秒
delay_loop 6
#负载均衡算法,默认是轮询
lb_algo rr
#LVS模式,NAT/DR/TUN
lb_kind DR
#会话持久化时间
persistence_timeout 50
#协议
protocol TCP
#负载均衡的真实服务器地址
real_server 192.168.235.101 80 {
#轮询权重配比
weight 1
#设置健康检查
TCP_CHECK{
#检查的端口
connect_port 80
#超时时间
connect_timeout 2
#重试次数
nb_get_retry 5
#间隔时间
delay_before_retry 3
}
}
real_server 192.168.235.103 80 {
weight 1
TCP_CHECK{
connect_port 80
connect_timeout 2
nb_get_retry 5
delay_before_retry 3
}
}
}
备节点配置如下:
! Configuration File for keepalived
global_defs {
router_id LVS_22
}
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 41
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.235.20
}
}
virtual_server 192.168.235.20 80 {
delay_loop 6
lb_algo rr
lb_kind DR
persistence_timeout 50
protocol TCP
real_server 192.168.235.101 80 {
weight 1
TCP_CHECK{
connect_port 80
connect_timeout 2
nb_get_retry 5
delay_before_retry 3
}
}
real_server 192.168.235.103 80 {
weight 1
TCP_CHECK{
connect_port 80
connect_timeout 2
nb_get_retry 5
delay_before_retry 3
}
}
}
八、启动Keepalived:
service start keepalived
九、访问虚拟IP192.168.235.20
注:LVS服务器需要开放80端口及VRRP,RealServer需要开放80端口
#开放80端口
firewall-cmd --zone=public --add-port=80/tcp --permanent
#VRRP
firewall-cmd --direct --permanent --add-rule ipv4 filter INPUT 0 --protocol vrrp -j ACCEPT
访问成功,关闭103节点,再次访问,发现跳转到了101节点:
关闭掉LVS主节点进行访问,也能正常访问,虚拟IP转移到备的LVS节点说明配置成功: