LVS负载均衡(Linux Virtual Server)
为什么要使用LVS + Nginx
- LVS基于7层 Nginx基于4层 LVS负载比Nginx高的多,效率也高。
- 单个Ngixn压力大,需要Nginx集群。
- LVS充当Nginx前置的集群调度折。
- Nginx接收请求来回,LVS只接收不响应。
Nginx网络拓扑图

image
LVS网络拓扑图(Real Server 一般用Nginx集群)

image
LVS工作模式
-
NAT (使用模式与Nginx一样)
image -
TUN 服务器会暴露在公网
image -
DR直接路由模式服务器不会暴露在公网
image
搭建LVS DR模式
- 阿里云不支持虚拟ip需购买负载均衡服务,腾讯云支持虚拟ip需要付费购买
- 虚拟机Real Server需要关闭网络管理器 否则可能出现网络接口冲突问题
- systemctl stop NetworkManager
- systemctl disable NetworkManager
- 进入cd /etc/sysconfig/network-scripts/目录查看自己网卡的名字我的是ifcfg-eth0
- 复制一份 cp ifcfg-eth0 ifcfg-eth0:1 并修改成下面的样式
DEVICE="eth0:1"
BOOTPROTO="static"
ONBOOT="yes"
IPADDR=192.168.0.150
NETMASK=255.255.255.0
- service network restart 重启网络
- ip address 查看发现多了一个eth0:1的配置
inet 192.168.0.198/24 brd 192.168.0.255 scope global eth0
valid_lft forever preferred_lft forever
inet 192.168.0.150/24 brd 192.168.0.255 scope global secondary eth0:1
valid_lft forever preferred_lft forever
- 安装ipvsadm 集群工具 yum install ipvsadm
- ipvsadm -Ln 查看集群列表
- 集群服务器也需要创建虚拟ip,在网卡目录下 cp ifcfg-lo ifcfg-lo:1(lo是用来返回数据,用户不能访问吧)
- 重复集群服务器的操作
DEVICE=lo:1
IPADDR=192.168.0.150
NETMASK=255.255.255.255
NETWORK=127.0.0.0
BROADCAST=127.255.255.255
ONBOOT=yes
NAME=loopback
- 刷新 ifup lo
配置ARP(1、请求的目标地址到达对应的网络接口,才会响应请求。2、只在本网卡通告)
- 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
- 请求是host的ip交给lo:1处理 route add host 192.168.0.150 dev lo:1
- route -n 查看
添加到集群
- ipvsadm -A -t 192.168.0.150:80 -s rr 轮询方式添加tcp/ip协议192.168.0.150:80
- ipvsadm -Ln 多出一条记录
- 添加两个节点 -g表示DR模式
- ipvsadm -a -t 192.168.0.150:80 -r 192.168.0.198:80 -g
- ipvsadm -a -t 192.168.0.150:80 -r 192.168.0.199:80 -g
- ipvsadm 不加-p参数会有300秒的持久化时间 一般用默认就可以


