LVS简介;LVS三种模式;搭建LVS-DR模式;搭建Keepalived+LVS+Nginx高可用集群负载均衡。
LVS负载均衡
网络地址的转换
LVS处于公网,用户可以直接访问;真实服务器处于私网,局域网内,用户无法直接访问。
ip隧道;网卡用于建立隧道;建立隧道以后才能建立通讯;隧道类似复联中的“量子领域”。
用户的响应直接返回给用户,不经过LVS。
上行LVS,量比较小;
下行服务器响应,量比较大。
增加了吞吐量。
集群暴露在公网,不太安全。
请求和响应都经过虚拟ip,真实服务器隐藏,避免暴露在公网中。
【前期准备】服务器与ip规划:
所有计算机节点关闭网络配置管理器,因为有可能会和网络接口冲突:
systemctl stop NetworkManager
systemctl disable NetworkManager
创建子接口:
cp ifcfg-ens33 ifcfg-ens33:1
vim ifcfg-ens33:1
配置参考如下:
*注:配置中的192.168.2.100就是vip ,是提供给外网用户访问的 ip 地址,原理和 Keepalived + Nginx 的 vip 是一样的。
service network restart
ifconfig ens33:1 192.168.2.100/24
安装 ipvsadm
现如今的 centos 都集成了 LVS,所以 ipvs 是自带的,相当于苹果手机自带 ios ,我们只需要安装 ipvsadm 即可( ipvsadm 是管理集群的工具,通过 ipvs 可以管理集群,查看集群等操作),命令如下:
yum install ipvsadm
安装成功后,可以检测一下:
ipvsadm -Ln
图中显示目前版本为1.2.1,此外是一个空列表,啥都没。
*注:关于虚拟 ip 在云上的事儿
1.阿里云不支持虚拟 IP ,需要购买他的负载均衡服务
2.腾讯云支持虚拟 IP ,但是需要额外购买,一台节点最大支持
10个虚拟 ip
配置虚拟网络子接口(回环接口)
进入到网卡配置目录,找到lo(本地环回接口,用户构建虚拟网络子接口),拷贝一份新的随后进行修改:
cd /etc/sysconfig/network-scripts/
cp ifcfg-lo ifcfg-lo:1
修改ifcfg-lo:1
vim ifcfg-lo:1
DEVICE=lo:1
IPADDR=192.168.2.100
NETMASK=255.255.255.255
重启后通过ip addr 查看多了ip192.168.2.100,表示ok:
ARP响应级别与通告行为 的概念
vim /etc/sysctl.conf
# configration for lvs
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
route add -host 192.168.2.100 dev lo:1
route -n
echo "route add -host 192.168.2.100 dev lo:1" >> /etc/rc.local
ipvsadm -A -t 192.168.2.100:80 -s rr -p 5
-A:添加集群
-t:tcp协议
ip地址:设定集群的访问ip,也就是LVS的虚拟ip
-s:设置负载均衡的算法,rr表示轮询
-p:设置连接持久化的时间
ipvsadm -a -t 192.168.2.100:80 -r 192.168.1.171:80 -g
ipvsadm -a -t 192.168.2.100:80 -r 192.168.1.172:80 -g
-a:添加真实服务器
-t:tcp协议
-r:真实服务器的ip地址
-g:设定DR模式
ipvsadm -S
ipvsadm -Ln
ipvsadm -Ln --stats
# 重启ipvsadm,重启后需要重新配置
service ipvsadm restart
# 查看持久化连接
ipvsadm -Ln --persistent-conn
# 查看连接请求过期时间以及请求源ip和目标ip
ipvsadm -Lnc
# 设置tcp tcpfin udp 的过期时间(一般保持默认)
ipvsadm --set 1 1 1
# 查看过期时间
ipvsadm -Ln --timeout
ipvsadm -h
man ipvsadm
上传keepalived
./configure
make
make install
把keepalived注册到系统服务
cd /etc/keepalived/
vim keepalived.conf
global_defs {
router_id LVS_100
}
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.2.100
}
}
#配置集群地址访问的 IP +端口,端口和 nginx 保持一致,都是80 virtual _ virtual_server 192.168.2.100 80 {
#健康检查的时间,单位:秒
delay_loop 6
#配置负载均衡的算法,默认是轮询
lb_algo rr
#设置 LVS 的模式 NAT|TUN|DR
lb_kind DR
#设置会话持久化的事件
persistence_timeout 5
#协议-t
protocol TCP
#负载均衡的真实服务器,也就是 nginx 节点的具体的真实 ip 地址
real_server 192.168.2.128 80{
#轮询的默认权重配比设置为1
weight 1
#设置健康检查 TCP _ CHECK {
#检查的80端口
connect _ port 80
#超时时间2s
connect_timeout 2
#重试次数2次
nb_get_retry 2
#间隔时间3s
delay_before_retry 3
}
real_server 192.168.2.129 80{
#轮询的默认权重配比设置为1
weight 1
#设置健康检查 TCP _ CHECK {
#检查的80端口
connect _ port 80
#超时时间2s
connect_timeout 2
#重试次数2次
nb_get_retry 2
#间隔时间3s
delay_before_retry 3
}
}
global_defs {
router_id LVS_101
}
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 41
priority 50
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.2.100
}
}
#配置集群地址访问的 IP +端口,端口和 nginx 保持一致,都是80 virtual _ virtual_server 192.168.2.100 80 {
#健康检查的时间,单位:秒
delay_loop 6
#配置负载均衡的算法,默认是轮询
lb_algo rr
#设置 LVS 的模式 NAT|TUN|DR
lb_kind DR
#设置会话持久化的事件
persistence_timeout 5
#协议-t
protocol TCP
#负载均衡的真实服务器,也就是 nginx 节点的具体的真实 ip 地址
real_server 192.168.2.128 80{
#轮询的默认权重配比设置为1
weight 1
#设置健康检查 TCP _ CHECK {
#检查的80端口
connect _ port 80
#超时时间2s
connect_timeout 2
#重试次数2次
nb_get_retry 2
#间隔时间3s
delay_before_retry 3
}
real_server 192.168.2.129 80{
#轮询的默认权重配比设置为1
weight 1
#设置健康检查 TCP _ CHECK {
#检查的80端口
connect _ port 80
#超时时间2s
connect_timeout 2
#重试次数2次
nb_get_retry 2
#间隔时间3s
delay_before_retry 3
}
}
ipvsadm -C
ipvsadm -Ln
systemctl restart keeplivad
探讨LVS的持久化机制:https://blog.csdn.net/qq_41959899/article/details/113849405
LVS简介;LVS三种模式;搭建LVS-DR模式;搭建Keepalived+LVS+Nginx高可用集群负载均衡。