在Centos7中使用Nginx 三 LVS-DR模式配置与实践

在Centos7中使用Nginx 三 LVS-DR模式配置与实践

(本文只在Centos虚拟机中搭建,在阿里云是没有这样的负载均衡免费的服务的,需要你花软妹币。)
为什么我们要使用LVS呢?为什么会出现LVS+Nginx
nginx用来做http的反向代理,能够upsteam实现http请求的多种方式的均衡转发。由于采用的是异步转发可以做到如果一个服务器请求失败,立即切换到其他服务器,直到请求成功或者最后一台服务器失败为止。这可以最大程度的提高系统的请求成功率。
lvs采用的是同步请求转发的策略。这里说一下同步转发和异步转发的区别。同步转发是在lvs服务器接收到请求之后,立即redirect到一个后端服务器,由客户端直接和后端服务器建立连接。异步转发是nginx在保持客户端连接的同时,发起一个相同内容的新请求到后端,等后端返回结果后,由nginx返回给客户端。
进一步来说:当做为负载均衡服务器的nginx和lvs处理相同的请求时,所有的请求和响应流量都会经过nginx;但是使用lvs时,仅请求流量经过lvs的网络,响应流量由后端服务器的网络返回。
也就是,当作为后端的服务器规模庞大时,nginx的网络带宽就成了一个巨大的瓶颈。

nginx是七层负载均衡,有url转发等,而LVS是工作在四层效率更加高
LVS三大模式
LVS 提供了三种包转发方式:NAT(网络地址映射)、IP Tunneling(IP 隧道)、Direct Routing(直接 路由)。不同的转发模式决定了不同的 cluster 的网络结构

NAT 方式可支持任何的操作系统,以及私有网络,并且只需一个 Internet IP 地址,但是整个系统的 性能受到限制。因为执行 NAT 每次需要重写包,有一定的延迟;另外,大部分应用有 80%的数据是从服 务器流向客户机,也就是用户的请求非常短,而服务器的回应非常大,对负载均衡器形成很大压力,成为 了新的瓶颈。
总结:LVS需要发也需要收性能不高

director(分发器)分配请求到不同的 real server。real server 处理请求后直接回应给用户,这样 director 负载均衡器仅处理客户机与服务器的一半连接。IP Tunneling 技术极大地提高了 director 的调 度处理能力,同时也极大地提高了系统能容纳的最大节点数,可以超过 100 个节点。real server 可以在 任何 LAN 或 WAN 上运行,这意味着允许地理上的分布,这在灾难恢复中有重要意义。服务器必须拥有 正式的 IP 地址用于与客户机直接通信,并且所有服务器必须支持 IP 隧道协议。
总结:但是会暴露你的真实IP,每台服务器返回的数据多需要一个真实的能与客户端通信的ip

DR模式与 IP Tunneling 类似,负载均衡器仅处理一半的连接,避免了新的性能瓶颈,同样增加了系统的可 伸缩性。Direct Routing 与 IP Tunneling 相比,没有 IP 封装的开销,但由于采用物理层(修改 MAC 地址)技术,所有服务器都必须在一个物理网段。
总结:DR模式返回的时候会有一个固定的路由去发数据,这样避免了ip的暴露,同时实现负载均衡

我们主要说DR模式的搭建
首先我们要准备三台虚拟机
LVS-1台:
VIP(虚拟IP):192.168.1.200
DIP(转发者IP/内网IP):192.168.1.153
Nginx - 2台(RealServer)
RIP(真实IP/内网IP):192.168.1.51
RIP(真实IP/内网IP):192.168.1.49
1.进入到网卡配置目录
[root@huaxinfeng53 network-scripts]# cd /etc/sysconfig/network-scripts/
[root@huaxinfeng53 network-scripts]# cp ifcfg-ens33 ifcfg-ens33:1
[root@huaxinfeng53 network-scripts]# vim ifcfg-ens33:1

按我这么配置

DEVICE="ens33:1"
IPV6INIT="yes"
IPADDR=192.168.1.200
BOOTPROTO="static"

配置里面192.168.1.200就是我们的vip,是给外网使用的

重启网络服务
[root@huaxinfeng53 network-scripts]# service network restart
#查看
[root@huaxinfeng53 network-scripts]# ip addr
inet 192.168.1.200/24 brd 192.168.1.255 scope global secondary noprefixroute ens33:1

安装ipvsadm yum的方式
[root@huaxinfeng53 network-scripts]# yum -y install ipvsadm
[root@huaxinfeng53 network-scripts]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
安装ok啦

搭建LVS-DR模式- 为两台RS配置虚拟IP
配置虚拟网络子接口(回环接口)
在另外的两台台nginx上面配置虚拟ip 多是如下的操作
[root@huaxinfeng51 sbin]# cd /etc/sysconfig/network-scripts/
[root@huaxinfeng51 network-scripts]# cp ifcfg-lo ifcfg-lo:1
[root@huaxinfeng51 network-scripts]# vim ifcfg-lo:1
#这样配置

DEVICE=lo:1
IPADDR=192.168.1.200  #配置你刚刚设置的虚拟ip哦
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

[root@huaxinfeng51 network-scripts]# service network restart
[root@huaxinfeng51 network-scripts]# ip addr
看到这里就ok了
inet 192.168.1.200/32 brd 192.168.1.200 scope global lo:1

搭建LVS-DR模式- 为两台RS配置arp
ARP响应级别与通告行为 的概念
arp-ignore:ARP响应级别(处理请求)
0:只要本机配置了ip,就能响应请求
1:请求的目标地址到达对应的网络接口,才会响应请求
arp-announce:ARP通告行为(返回响应)
0:本机上任何网络接口都向外通告,所有的网卡都能接受到通告
1:尽可能避免本网卡与不匹配的目标进行通告
2:只在本网卡通告
配置ARP
vim /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 #刷新配置文件
两台机器上这样配置
route add -host 192.168.1.200 dev lo:1

回到LVS主机上面运行
ipvsadm -A -t 192.168.1.200:80 -s rr -p 5
ipvsadm -a -t 192.168.1.200:80 -r 192.168.1.49:80 -g
ipvsadm -a -t 192.168.1.150:80 -r 192.168.1.51:80 -g

请看效果
在Centos7中使用Nginx 三 LVS-DR模式配置与实践_第1张图片

在Centos7中使用Nginx 三 LVS-DR模式配置与实践_第2张图片
在Centos7中使用Nginx 三 LVS-DR模式配置与实践_第3张图片

配置完毕如果对你有帮助给我点个赞吧谢谢你了

你可能感兴趣的:(CentOS7,linux)