1:LVS(Linux Virtual Server)即为Linux虚拟服务器。
lvs是Linux的负载均衡器,他的特点是只会转发请求,但是不会处理相应。就相当于一扇门,只有进的人,人从其他的出口出去,那么这一扇们的性能就非常好。
Nginx的网络拓扑图(请求,响应都会通过Nginx)
lvs的网络拓扑图(lvs不会处理相应)
2 lvs的三种
2.1:NAT模式(类似于Nginx),所有的请求和相应都会经过lvs,在并发不高的情况下,这种模式也是没有问题的。
2.2 TUN模式,相应不会经过LVS,每个Real Server都必须有网卡,并且每个服务都是暴露在公网的。
2.3 DR 直接路由模式,服务不会暴露在公网中,相应会通过一个路由,由路由做出相应
3:本地实现LVS的DR模式
注意:阿里云不支持虚拟IP,需要购买他的负载均衡,腾讯云虽然支持但是需要额外购买,一个节点最多10个虚拟IP
服务器与ip规划:
LVS - 1台
VIP(虚拟IP):192.168.3.69
DIP(转发者IP/内网IP):192.168.3.68
Nginx - 2台(RealServer)
RIP(真实IP/内网IP):192.168.3.80
RIP(真实IP/内网IP):192.168.3.81
所有计算机节点关闭网络配置管理器,因为有可能会和网络接口冲突:(本地虚拟机)
systemctl stop NetworkManager
systemctl disable NetworkManager
进入ens33所在目录
cd /etc/sysconfig/network-scripts
复制ens33
cp ifcfg-ens33 ifcfg-ens33:1
修改
DEVICE=ens33:1
# 虚拟IP
IPADDR=192.168.3.69
重启网络
service network restart
查看
ip addr
安装ipvsadm
现如今的centos都是集成了LVS,所以ipvs是自带的,相当于苹果手机自带ios,我们只需要安装ipvsadm即可(ipvsadm是管理集群的工具,通过ipvs可以管理集群,查看集群等操作),命令如下:
yum install ipvsadm
安装好后检查
ipvsadm -Ln
为两台RealServer配置网络接口
进入网络配置目录
cd /etc/sysconfig/network-scripts
# 配置子接口
cp ifcfg-lo ifcfg-lo:1
#修改内容
DEVICE=lo:1
#虚拟IP
IPADDR=192.168.3.69
#子网
NETMASK=255.255.255.255
# 然后重启
service network restart 或者 ifup ifcfg-lo:1
为两台Real Service实现arp
配置ARP
打开sysctl.conf:
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
增加一个网关,用于接收数据报文,当有请求到本机,就会交给lo处理
route add -host 192.168.3.69 dev lo:1
如果报route找不到,则
yum install net-tools
防止重启失效,做如下处理,用于开机自启动:
echo "route add -host 192.168.1.150 dev lo:1" >> /etc/rc.local
搭建LVS-DR模式- 使用ipvsadm配置集群规则
创建LVS节点,用户访问的集群调度者
ipvsadm -A -t 192.168.3.69:80 -s rr -p 5
# -A:添加集群
# -t:tcp协议
# ip地址:设定集群的访问ip,也就是LVS的虚拟ip
# -s:设置负载均衡的算法,rr表示轮询
# -p:设置连接持久化的时间
创建2台RS真实服务器
ipvsadm -a -t 192.168.3.69:80 -r 192.168.3.80:80 -g
ipvsadm -a -t 192.168.3.69:80 -r 192.168.3.81: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
虽然配置的是轮训,但是lvs有默认的超时时间
4:lvs+keepalived+nginx
先要删除所有配置的DR
ipvsadm -C
配置keepalived的配置文件
! Configuration File for keepalived
global_defs {
router_id keep_82
}
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 51
priority 50
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
#192.168.200.16
#192.168.200.17
#192.168.200.18
192.168.3.69
}
}
#配置lvs
virtual_server 192.168.3.69 80 { #定义RealServer对应的VIP及服务端口,IP和端口之间用空格隔开
delay_loop 6 #每隔6秒查询realserver状态
lb_algo rr #后端调试算法(load balancing algorithm)
lb_kind DR #LVS调度类型NAT/DR/TUN
persistence_timeout 10 #同一IP的连接10秒内被分配到同一台realserver
protocol TCP #用TCP协议检查realserver状态
real_server 192.168.3.80 80 {
weight 1 #权重,最大越高,lvs就越优先访问
TCP_CHECK { #keepalived的健康检查方式HTTP_GET | SSL_GET | TCP_CHECK | SMTP_CHECK | MISC
connect_timeout 10 #10秒无响应超时
retry 3 #重连次数3次
delay_before_retry 3 #重连间隔时间
connect_port 80 #健康检查realserver的端口
}
}
real_server 192.168.3.81 80 {
weight 1 #权重,最大越高,lvs就越优先访问
TCP_CHECK { #keepalived的健康检查方式HTTP_GET | SSL_GET | TCP_CHECK | SMTP_CHECK | MISC
connect_timeout 10 #10秒无响应超时
retry 3 #重连次数3次
delay_before_retry 3 #重连间隔时间
connect_port 80 #健康检查realserver的端口
}
}
}