高并发站点不仅要考虑网站后端服务的稳定,还需要考虑服务能否接入巨大流量、承受巨大流量,如上图:

1:流量接入,可以采用Lvs+Nginx集群,这种方式能接入的QPS能高达数百万
2:通过Lvs实现Nginx集群,Nginx+Tomcat实现后端服务集群,完成了从接入层流量处理到后端服务集群高并发处理

1. Lvs介绍

LVS(Linux Virtual Server),即Linux虚拟服务器。它用于多服务器的负载均衡,工作在网络四层,可以实现高性能,高可用的服务器集群技术,它稳定可靠,即使在集群的服务器中某台服务器无法正常工作,也不影响整体效果。是基于TCP/IP做的路由和转发,稳定性和效率极高。

一个LVS集群往往包含以下角色:

1:DS:Director Server。虚拟服务,负责调度2:RS:Real Server。后端真实的工作服务器。3:VIP:向外部直接面向用户请求,作为用户请求的目标的IP地址4:DIP:Director Server IP,DS的IP5:RIP:Real Server IP,后端服务器的IP地址6:CIP:Client IP,访问客户端的IP地址

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:192.168.183.150

3.1 Vip配置

关闭网络配置管理器(每台机器都要做)

systemctl stop NetworkManager
systemctl disable NetworkManager

配置虚拟IP(VIP 192.168.183.133中配置)

/etc/sysconfig/network-scripts创建文件ifcfg-ens33:1,内容如下:

BOOTPROTO=static
DEVICE=ens33:1
ONBOOT=yes
IPADDR=192.168.183.150
NETMASK=255.255.255.0

重启网络服务:

service network restart

我们可以看到在原来的网卡上面添加了一个虚拟IP 150。

同时需要对192.168.183.134192.168.183.135构建虚拟机IP,但只是用于返回数据,而不能被用户访问到,这时候需要操作ifcfg-lo

IPADDR=127.0.0.1,这里127.0.0.1属于本地回环地址,不属于任何一个有类别地址类。它代表设备的本地虚拟接口,所以默认被看作是永远不会宕掉的接口。

NETMASK=255.255.255.255

192.168.183.134
ifcfg-lo拷贝一份ifcfg-lo:1,并修改ifcfg-lo:1配置,内容如下:

刷新lo:

ifup lo

查看IP可以发现lo下多了150ip。

192.168.100.133知行和上面相同的操作。

3.2 LVS集群管理工具安装

ipvsadm用于对lvs集群进行管理,需要手动安装。DS安装即可。

安装命令:

yum install ipvsadm

版本查看:

ipvsadm -Ln

效果如下:

3.3 地址解析协议

192.168.183.134192.168.183.135中操作。

arp_ignore和arp_announce参数都和ARP协议相关,主要用于控制系统返回arp响应和发送arp请求时的动作。这两个参数很重要,特别是在LVS的DR场景下,它们的配置直接影响到DR转发是否正常。

arp-ignore:arp_ignore参数的作用是控制系统在收到外部的arp请求时,是否要返回arp响应(0~8,2-8用的很少)

配置文件:/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,需要安装相关工具yum install net-tools

route add -host 192.168.183.150 dev lo:1

添加了一个host地址,目的是用于接收数据报文,接收到了数据报文后会交给lo:1处理。(防止关机失效,需要将上述命令添加到/etc/rc.local中)

添加完host后,可以查看一下:route -n,能明显看到效果。

上述配置我们同样要在192.168.183.135中配置。

3.4 集群配置

ipvsadm命令讲解:

ipvsadm -A:用于创建集群
ipvsadm -E:用于修改集群
ipvsadm -D:用于删除集群
ipvsadm -C:用于清除集群数据
ipvsadm -R:用于重置集群配置规则
ipvsadm -S:用于保存修改的集群规则
ipvsadm -a:用于添加一个rs节点
ipvsadm -e:用于修改一个rs节点
ipvsadm -d:用于删除一个rs节点

添加集群TCP服务地址:(外部请求由该配置指定的VIP处理)

ipvsadm -A -t 192.168.183.150:80 -s rr

参数说明:

-A:添加集群配置
-t:TCP请求地址(VIP)
-s:负载均衡算法

负载均衡算法:

算法 说明
rr 轮询算法,它将请求依次分配给不同的rs节点,也就是RS节点中均摊分配。这种算法简单,但只适合于RS节点处理性能差不多的情况
wrr 加权轮训调度,它将依据不同RS的权值分配任务。权值较高的RS将优先获得任务,并且分配到的连接数将比权值低的RS更多。相同权值的RS得到相同数目的连接数。
Wlc 加权最小连接数调度,假设各台RS的全职依次为Wi,当前tcp连接数依次为Ti,依次去Ti/Wi为最小的RS作为下一个分配的RS
Dh 目的地址哈希调度(destination hashing)以目的地址为关键字查找一个静态hash表来获得需要的RS
SH 源地址哈希调度(source hashing)以源地址为关键字查找一个静态hash表来获得需要的RS
Lc 最小连接数调度(least-connection),IPVS表存储了所有活动的连接。LB会比较将连接请求发送到当前连接最少的RS.
Lblc 基于地址的最小连接数调度(locality-based least-connection):将来自同一个目的地址的请求分配给同一台RS,此时这台服务器是尚未满负荷的。否则就将这个请求分配给连接数最小的RS,并以它作为下一次分配的首先考虑。

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

参数说明:

-a:给集群添加一个节点
-t:指定VIP地址
-r:指定real server地址
-g:表示LVS的模式为dr模式

添加了节点后,我们通过ipvsadm -Ln查看,可以看到多了2个节点。

此时集群列表中客户端请求数据和TCP通信数据会持久化保存,为了更好看到效果,我们可以把时间设置成2秒保存,如下命令:

ipvsadm --set 2 2 2

此时我们请求http://192.168.183.150/测试

可以发现请求会在两台Nginx轮询切换。

使用 Lvs + Nginx 集群搭建高并发架构相关推荐

  1. nginx集群与高并发

    本篇介绍nginx,nginx的作用是反向代理和负载均衡. 目录 一.nginx简介 二.nginx安装 三.nginx配置 3.1 在nginx上部署两个项目 3.2 nginx负载均衡 四.ngi ...

  2. Zookeeper+Hadoop+Hbase+Hive+Kylin+Nginx集群搭建

    Zookeeper+Hadoop+Hbase+Hive+Kylin+Nginx集群搭建 一.虚拟机安装Centos7 1.准备工作 2.centos7安装过程 3.关闭防火墙(关键) 二.安装jdk ...

  3. Zookeeper+Hadoop+Hbase+Hive+Kylin+Nginx集群搭建五(Hive篇)

    Zookeeper+Hadoop+Hbase+Hive+Kylin+Nginx集群搭建五(Hive篇) 七.Hive安装配置 1.准备工作 2.安装hive 全文请看:https://blog.csd ...

  4. Zookeeper+Hadoop+Hbase+Hive+Kylin+Nginx集群搭建六(Kylin篇)

    Zookeeper+Hadoop+Hbase+Hive+Kylin+Nginx集群搭建六(kylin篇) 八.Kylin搭建 1.安装 2.配置环境变量 3.配置kylin 4.启动使用 5.问题 全 ...

  5. Zookeeper+Hadoop+Hbase+Hive+Kylin+Nginx集群搭建三(zookeeper篇)

    Zookeeper+Hadoop+Hbase+Hive+Kylin+Nginx集群搭建三(zookeeper篇) 四.Zookeeper集群搭建 1.下载安装zookeeper安装包 2.文件配置 3 ...

  6. Zookeeper+Hadoop+Hbase+Hive+Kylin+Nginx集群搭建一(虚拟机篇)

    Zookeeper+Hadoop+Hbase+Hive+Kylin+Nginx集群搭建一(虚拟机篇) 一.虚拟机安装Centos7 1.准备工作 2.centos7安装过程 3.关闭防火墙(关键) 二 ...

  7. Zookeeper+Hadoop+Hbase+Hive+Kylin+Nginx集群搭建四(Hbase篇)

    Zookeeper+Hadoop+Hbase+Hive+Kylin+Nginx集群搭建四(Hbase篇) 五.Hbase集群搭建 1.准备工作(下载与时间同步) 2.安装解压 3.环境变量配置 4.文 ...

  8. Zookeeper+Hadoop+Hbase+Hive+Kylin+Nginx集群搭建十一(Nginx负载均衡篇)

    Zookeeper+Hadoop+Hbase+Hive+Kylin+Nginx集群搭建十一(Nginx负载均衡篇) 十三.Nginx负载均衡 1.Nginx安装环境 2.编译 3.启动测试 4.ngi ...

  9. 故障转移集群搭建高可用文件共享服务器

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.故障转移集群是什么? 二.什么是仲裁盘? 三.添加故障转移集群功能 四.故障转移集群的建立 五.配置集群仲裁盘 六 ...

  10. Windos(nginx集群搭建)

    集群: 是指在多台不同的服务器中部署相同应用或服务模块,构成一个集群,通过 负载均衡设备对外提供服务. 为什么需要分布式和集群 (统一一个ip或域名进行访问) 性能 可用性(是否能够完成用户的需求) ...

最新文章

  1. python绘制月亮_用python画月亮的代码是什么?
  2. 用div来创建田字布局
  3. ^_^ 一看就忘不了的IE页面 ^_^
  4. 自定义应用Crash时系统显示的对话框
  5. centos安装docker显示 No package docker-ce available
  6. grep与egrep的区别
  7. mix2s 升级android p,小米推送小米MIX2S 安卓P稳定版更新 这两个隐藏升级你发现了吗?...
  8. Decoders Matter for Semantic Segmentation: Data-Dependent Decoding Enables Flexible Feature Aggregat
  9. 二下语文书电子课本_沪教版牛津英语小学五年级上册高清电子课本教材书(三年级起点)...
  10. POJ 2728 Desert King:最优比率生成树
  11. void value not ignored as it ought to be 报错原因
  12. Atitit atitit 编程语言之道补充 s22 attilax 艾龙 著 1. 程序设计是个什么概念呢?历史发展 1 1.1. 连接电缆 2 1.2. 程序内置纸带打点 2 1.3. FORT
  13. 生产环境和开发环境_生产环境 VS 开发环境,关于Kubernetes的四大认识误区
  14. RS232标准9针串口引脚定义
  15. npm启动报错——端口被占用
  16. 页面加载数学公式,mathjax转html
  17. 凉茶配方案终审 加多宝赔偿近2亿元
  18. PLSQL Developer13.0.4安装破解教程
  19. 折腾T480及VMware
  20. IoT物联网平台如何实现设备全球分发、就近接入?

热门文章

  1. 暴风激活工具,劫持Chrome浏览器主页
  2. xmpp 即时通讯协议研究
  3. typora输入LATEX数学公式语法总结
  4. c语言图形编程.pdf,C语言图形编程
  5. 520用Java制作一个表白app
  6. java短信接口代码_java调用短信接口代码
  7. transcad安装教程_北京道亨线路软件SLCAD3.0
  8. Sublime Text, MikTeX (或TeXLive), SumatraPDF 配置LaTeX开发环境
  9. win10 Matlab2017a .m相关文件关联
  10. python 网络音乐播放器(二):tkinter 实现歌词同步滚动