当做为负载均衡服务器的nginx和lvs处理相同的请求时,所有的请求和响应流量都会经过nginx;但是使用lvs时,仅请求流量经过lvs的网络,响应流量由后端服务器的网络返回。
当作为后端的服务器规模庞大时,nginx的网络带宽就成了一个巨大的瓶颈。
但是仅仅使用lvs作为负载均衡的话,一旦后端接受到请求的服务器出了问题,那么这次请求就失败了。但是如果在lvs的后端在添加一层nginx(多个),每个nginx后端再有几台应用服务器,那么结合两者的优势,既能避免单nginx的流量集中瓶颈,又能避免单lvs一次请求失败
使用linux 版本 centos7 3.10.0-123.el7.x86_64
1、配置虚拟ip
// 修改网络配置
cd /etc/sysconfig/network-scripts
//添加配置虚拟ip(192.168.106.188) 到 ifcfg-eno16777736,结果如下
TYPE="Ethernet"
BOOTPROTO="dhcp"
DEFROUTE="yes"
PEERDNS="yes"
PEERROUTES="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_PEERDNS="yes"
IPV6_PEERROUTES="yes"
IPV6_FAILURE_FATAL="no"
NAME="eno16777736"
UUID="acdfaeae-a328-433d-a42f-ce0511f467c7"
DEVICE="eno16777736"
ONBOOT="yes"
IPADDR="192.168.106.145"
IPADDR1="192.168.106.188"
// 重新加载配置
service network restart
//显示OK后,查看虚拟ip是否配置成功,ip addr 如下图(192.168.106.188)已经配置成功
[root@localhost local]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eno16777736: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:d1:d9:ee brd ff:ff:ff:ff:ff:ff
inet 192.168.106.145/24 brd 192.168.106.255 scope global eno16777736
valid_lft forever preferred_lft forever
inet 192.168.106.188/24 brd 192.168.106.255 scope global secondary eno16777736
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fed1:d9ee/64 scope link
valid_lft forever preferred_lft forever
[root@localhost local]#
2、ipvsadm安装(192.168.106.145节点)
// 在网络通的前提下安装命令,输入y
yum install ipvsadm
//安装完成后,查看如下:
ipvsadm -Ln
[root@localhost local]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
3、进入nginx 节点(192.168.106.157、192.168.106.159)
//修改网络输出配置
cd /etc/sysconfig/network-scripts
cp ifcfg-lo ifcfg-lo:1
vim ifcfg-lo:1
//修改如下
DEVICE=lo:1
IPADDR=192.168.106.188
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
//esc + :wq 保存 ,重新加载配置
ifup lo //或者service network restart
//ip addr 查看网络配置
[root@localhost local]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet 192.168.106.188/32 brd 192.168.106.188 scope global lo:1
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:8f:3e:21 brd ff:ff:ff:ff:ff:ff
inet 192.168.106.159/24 brd 192.168.106.255 scope global dynamic ens33
valid_lft 1131sec preferred_lft 1131sec
inet6 fe80::20c:29ff:fe8f:3e21/64 scope link
valid_lft forever preferred_lft forever
[root@localhost local]#
4、配置ARP 响应级别(处理请求)arp-ignore
进入nginx 节点(192.168.106.157、192.168.106.159)
// 在 /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
5、配置响应处理路由
// 添加响应处理路由
route add -host 192.168.106.188 dev lo:1
//route -n 查看
[root@localhost local]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.106.2 0.0.0.0 UG 1024 0 0 ens33
192.168.106.0 0.0.0.0 255.255.255.0 U 0 0 0 ens33
192.168.106.188 0.0.0.0 255.255.255.255 UH 0 0 0 lo
[root@localhost local]#
//配置开机自动加载
echo "route add -host 192.168.106.188 dev lo:1" >> /etc/rc.local
6、ipvsadm 配置(DR模式)
//ipvsadm 配置: -A 添加 -t tcp服务 -s 负载均衡算法 -rr 轮询算法
ipvsadm -A -t 192.168.106.188:80 -s rr
//ipvsadm -Ln 查看集群
[root@localhost local]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.106.188:80 rr
//添加节点到集群 -a 服务器节点 -t tcp服务 -r real server -g DR模式
ipvsadm -a -t 192.168.106.188:80 -r 192.168.106.157:80 -g
ipvsadm -a -t 192.168.106.188:80 -r 192.168.106.159:80 -g
//ipvsadm -Ln 查看集群
[root@localhost local]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.106.188:80 rr
-> 192.168.106.157:80 Route 1 0 0
-> 192.168.106.159:80 Route 1 0 0
[root@localhost local]#
7、至此lvs配置完成,修改win10 hosts配置文件,添加如下:
// C:\Windows\System32\drivers\etc
192.168.106.188 www.wshop.com
浏览器访问http://www.wshop.com/wshop/
lvs将轮询访问两台nginx服务器,nginx相关配置请查看nginx配置篇