高并发系列---【LVS+keepAlived实现双机主备】
  Afe4H47zX3K6 2023年11月02日 37 0

准备四台服务器,系统centos7。
一、配置虚拟ip
1.在lvs和RS1和RS2上分别执行

systemctl stop NetworkManager
systemctl disable NetworkManager

2.在lvs上

cd /etc/sysconfig/network-scripts/

ll

cp ifcfg-ens33 ifcfg-ens33:1

vi ifcfg-ens33:1
#只保留
BOOTPROTO=static
DEVICE=ens33:1
ONBOOT=yes
IPADDR="192.168.26.101"
NETMASK=255.255.255.0

service network restart

二、安装ipvsadm

yum install -y ipvsadm

ipvsadm -Ln

RS1和RS2:
一、配置虚拟ip

cd /etc/sysconfig/network-scripts/

ll

cp ifcfg-lo ifcfg-lo:1

vi ifcfg-lo:1
#只保留
DEVICE=lo:1
IPADDR=192.168.26.101
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

service network restart

二、配置ARP

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

三、配置虚拟ip路由

#把关于192.168.26.101vip的请求,交给lo:1来处理
route add -host 192.168.26.101 dev lo:1

#此时,vip加入了路由
route -n
#192.168.26.101 0.0.0.0 255.255.255.255 UH 0 0 0 lo

#重启不丢失
echo "route add -host 192.168.26.101 dev lo:1" >> /etc/rc.local

LVS:
一、配置vip集群规则(rr:轮询)

ipvsadm -A -t 192.168.26.101:80 -s rr

#查看集群规则
ipvsadm -Ln

#给vip添加真实服务器(-g:代表DR模式)
ipvsadm -a -t 192.168.26.101:80 -r 192.168.26.128:80 -g
ipvsadm -a -t 192.168.26.101:80 -r 192.168.26.129:80 -g

至此,单节点Lvs+nginx已完成配置。
打开浏览器:访问192.168.26.101:80,能访问通,即可。
注意:
你会发现,无论你怎么刷新,都只访问一台机器,明明配的轮询啊,这是
因为lvs默认同一个用户同一个请求300秒以内,都路由到同一台机器。
可以修改默认时间来验证:-p 0设置为0s
ipvsadm -E -t 192.168.26.101:80 -s rr -p 0

接下来查看ipvsadm默认超时时间

[root@DR1 keepalived]# ipvsadm -L --timeout

Timeout (tcp tcpfin udp): 900 120 300

900 120 300这三个数值分别是TCP TCPFINUDP的时间.也就是说一条tcp的连接经过lvs后,lvs会把这台记录保存15分钟,就是因为这个时间过长,所以大部分人都会发现做好LVS DR之后轮询现象并没有发生,而且我也看到大部分的教程是没有说明这一点的,巨坑!!!!!!因为是实验性质,所以将此数值调整为非常小,使用以下命令调整:

[root@DR1 ~]# ipvsadm --set 1 2 1

调整之后查看调整效果

[root@DR1 ~]# ipvsadm -L --timeout

Timeout (tcp tcpfin udp): 1 2 1

设置完之后,每隔2秒刷新一下浏览器,发现轮询了。

 

给LVS配置keepAlived,实现高可用

LVS-master:
前置工作:

#清除手动新增的vip
rm -rf /etc/sysconfig/network-scripts/ifcfg-ens33:1
service network restart

一、安装keepalived

yum install -y keepalived

vi /etc/keepalived.conf
#保存************************************************
! Configuration File for keepalived

global_defs {
router_id LVS_126
}

vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 126
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.26.101
}
}

#LVS的相关配置
virtual_server 192.168.26.101 80 {
#健康检查时间,单位:s
delay_loop 6

#负载均衡算法,默认轮询rr
lb_algo rr

#LVS的工作模式 NAT|TUN|DR
lb_kind DR
#会话持久化时间
persistence_timeout 0
protocol TCP

#负载均衡的真实服务器
real_server 192.168.26.128 80 {
weight 1

#设置健康检查
TCP_CHECK {
#检查的端口,对应真实服务器的服务端口
connect_port 80
#超时时间3s
connect_timeout 3
#重试次数 3次
nb_get_retry 3
#间隔时间3s
delay_before_retry 3
}
}
real_server 192.168.26.129 80 {
weight 1

#设置健康检查
TCP_CHECK {
#检查的端口,对应真实服务器的服务端口
connect_port 80
#超时时间3s
connect_timeout 3
#重试次数 3次
nb_get_retry 3
#间隔时间3s
delay_before_retry 3
}
}
}
#***********************************************

#清除lvs用命令配置的集群策略
ipvsadm -C

#重启keepalived
systemctl restart keepalived
#设置开机自启动
systemctl enable keepalived
#查看keepalived的keepalived.conf是否生效,如果有策略列表,则证明keepalived配置成功,若没有策略列表,则说明配置文件有问题,检查ip或大括号是否正确。
ipvsadm -Ln

LVS-backup:
前置工作:

#清除手动新增的vip
rm -rf /etc/sysconfig/network-scripts/ifcfg-ens33:1
service network restart

一、安装keepalived

yum install -y keepalived

vi /etc/keepalived.conf
#保存************************************************
! Configuration File for keepalived

global_defs {
#LVS127的id
router_id LVS_127
}

vrrp_instance VI_1 {
#备份
state BACKUP
#根据自己使用的网卡决定
interface ens33
#和master一样
virtual_router_id 126
#优先级,官方建议相差50
priority 50
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.26.101
}
}

#LVS的相关配置
virtual_server 192.168.26.101 80 {
#健康检查时间,单位:s
delay_loop 6

#负载均衡算法,默认轮询rr
lb_algo rr

#LVS的工作模式 NAT|TUN|DR
lb_kind DR
#会话持久化时间
persistence_timeout 0
protocol TCP

#负载均衡的真实服务器
real_server 192.168.26.128 80 {
weight 1

#设置健康检查
TCP_CHECK {
#检查的端口,对应真实服务器的服务端口
connect_port 80
#超时时间3s
connect_timeout 3
#重试次数 3次
nb_get_retry 3
#间隔时间3s
delay_before_retry 3
}
}
real_server 192.168.26.129 80 {
weight 1

#设置健康检查
TCP_CHECK {
#检查的端口,对应真实服务器的服务端口
connect_port 80
#超时时间3s
connect_timeout 3
#重试次数 3次
nb_get_retry 3
#间隔时间3s
delay_before_retry 3
}
}
}
#*********************************************

#清除lvs用命令配置的集群策略
ipvsadm -C

#重启keepalived
service keepalived restart

#查看keepalived的keepalived.conf是否生效,如果有策略列表,则证明keepalived配置成功,若没有策略列表,则说明配置文件有问题,检查ip或大括号是否正确。
ipvsadm -Ln

注意:两台lvs和两台RS服务都要关闭防火墙

LVS主备高可用测试

#1.在lvs-master上执行查看ip命令,你会发现,vip192.168.26.101绑定在ens33网卡上
ip addr
#2.在lvs-backup上执行查看ip命令,你会发现,vip192.168.26.101没有绑定在ens33网卡上
ip addr
#3.停止master的keepalived,此时继续访问http://192.168.26.101:80,仍然能访问通
systemctl stop keepalived
#4.在lvs-master上执行查看ip命令,你会发现,vip192.168.26.101没有了
ip addr
#5.在lvs-backup上执行查看ip命令,你会发现,vip192.168.26.101绑定在ens33网卡上,此时vip成功的从master漂移到了backup上
ip addr
#6.重新启动lvs-master上的keepalived,通过"ip addr"命令发现,此时vip成功的从backup又漂移到了master上
systemctl stop keepalived

Nginx健康检测 

#1."./nginx -s stop"停掉RS1的nginx服务,此时在lvs的master或backup上执行"ipvsadm -Ln"命令,会发现,列表中只剩RS2服务了。此时再访问vip,无论怎么访问,都只会访问到RS2服务。

#2."./nginx -s start"启动RS1的nginx服务,此时在lvs的master或backup上执行"ipvsadm -Ln"命令,会发现,列表中RS1服务又出现了,此时再访问vip,又开始了轮询。

至此已完成keepalived的配置。

 

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  ehrZuhofWJiC   2024年05月17日   39   0   0 服务器linux
Afe4H47zX3K6