在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
高并发站点不仅要考虑网站后端服务的稳定,还需要考虑服务能否接入巨大流量、承受巨大流量,如下图: 1:流量接入,可以采用Lvs+Nginx集群,这种方式能接入的QPS能高达数百万 2:通过Lvs实现Nginx集群,Nginx+Tomcat实现后端服务集群,完成了从接入层流量处理到后端服务集群高并发处理 1. Lvs介绍LVS(Linux Virtual Server),即Linux虚拟服务器。它用于多服务器的负载均衡,工作在网络四层,可以实现高性能,高可用的服务器集群技术,它稳定可靠,即使在集群的服务器中某台服务器无法正常工作,也不影响整体效果。是基于TCP/IP做的路由和转发,稳定性和效率极高。 一个LVS集群往往包含以下角色:
2. Lvs 负载均衡模式lvs提供了3种负载均衡模式,每种负载均衡模式适用的场景有差异,我们来讲解一下这三种负载均衡模式。 2.1 NAT用户的请求到分发器后,通过预设的iptables规则,把请求的数据包转发到后端的RS上去。RS需要设定网关为分发器的内网IP。用户请求的数据包和返回给用户的数据包全部经过分发器,所以分发器称为瓶颈。在NAT模式中,只需要分发器有公网IP即可,所以比较节省公网IP资源。 2.2 TUN这种模式需要有一个公共的IP配置在分发器和所有的RS上,我们把它叫做VIP。客户端请求的目标IP为VIP,分发器接收到请求数据包后,会对数据包做一个加工,会把目标IP改为RS的IP,这样数据包就到了RS上。RS接收数据包后,会还原原始数据包,这样目标IP为VIP,因为所有RS上配置了这个VIP,所以他会认为是它自己。 2.3 DR模式和IP Tunnel较为相似,不同的是,它会把数据包的MAC地址修改为RS的MAC地址。真实服务器将响应直接返回给客户。 这种方式没有IP隧道的开销,对集群中的真实服务期也没有必须支持IP隧道协议的要求,但是要求调度器与真实服务器都有一块网卡连在同一物理网段上。 3. Lvs DR模式配置综合上面分析,我们可以得出结论,DR模式性能效率比较高,安全性很高,因此一般公司都推荐使用DR模式。我们这里也配置DR模式实现Lvs+Nginx集群。 我们准备了3台机器:首先确保三台机器都安装了Nginx。 1:192.168.183.133 (DS) 192.168.183.150 对外提供服务 2:192.168.183.134 (RS) 192.168.183.150 真实服务处理业务流程 3:192.168.183.135 (RS) 192.168.183.150 真实服务处理业务流程 VIP: 3.1 Vip配置关闭网络配置管理器(每台机器都要做) systemctl stop NetworkManager systemctl disable NetworkManager 配置虚拟IP(VIP 192.168.183.133中配置) 在 BOOTPROTO=static DEVICE=ens33:1 ONBOOT=yes IPADDR=192.168.183.150 NETMASK=255.255.255.0 重启网络服务: service network restart 我们可以看到在原来的网卡上面添加了一个虚拟IP 150。 同时需要对 IPADDR=127.0.0.1,这里127.0.0.1属于本地回环地址,不属于任何一个有类别地址类。它代表设备的本地虚拟接口,所以默认被看作是永远不会宕掉的接口。 NETMASK=255.255.255.255
刷新lo: ifup lo 查看IP可以发现lo下多了150ip。
3.2 LVS集群管理工具安装ipvsadm用于对lvs集群进行管理,需要手动安装。DS安装即可。 安装命令: yum install ipvsadm 版本查看: ipvsadm -Ln 效果如下: 3.3 地址解析协议在 arp_ignore和arp_announce参数都和ARP协议相关,主要用于控制系统返回arp响应和发送arp请求时的动作。这两个参数很重要,特别是在LVS的DR场景下,它们的配置直接影响到DR转发是否正常。 arp-ignore:arp_ignore参数的作用是控制系统在收到外部的arp请求时,是否要返回arp响应(0~8,2-8用的很少) 配置文件: 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,需要安装相关工具 route add -host 192.168.183.150 dev lo:1 添加了一个host地址,目的是用于接收数据报文,接收到了数据报文后会交给lo:1处理。(防止关机失效,需要将上述命令添加到/etc/rc.local中) 添加完host后,可以查看一下: 上述配置我们同样要在 3.4 集群配置ipvsadm命令讲解:
添加集群TCP服务地址:(外部请求由该配置指定的VIP处理) ipvsadm -A -t 192.168.183.150:80 -s rr 参数说明:
负载均衡算法:
DS中配置rs(2个)节点: ipvsadm -a -t 192.168.183.150:80 -r 192.168.183.134:80 -g ipvsadm -a -t 192.168.183.150:80 -r 192.168.183.135:80 -g 参数说明:
添加了节点后,我们通过ipvsadm -Ln查看,可以看到多了2个节点。 此时集群列表中客户端请求数据和TCP通信数据会持久化保存,为了更好看到效果,我们可以把时间设置成2秒保存,如下命令: ipvsadm --set 2 2 2 此时我们请求 可以发现请求会在两台Nginx轮询切换。 到此这篇关于使用Lvs+Nginx集群搭建高并发架构的实现示例的文章就介绍到这了,更多相关Lvs Nginx集群搭建高并发内容请搜索极客世界以前的文章或继续浏览下面的相关文章希望大家以后多多支持极客世界! |
请发表评论