美团面试题:如何设计负载均衡架构支撑千万级用户的高并发访问?
Posted 狸猫技术窝
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了美团面试题:如何设计负载均衡架构支撑千万级用户的高并发访问?相关的知识,希望对你有一定的参考价值。
还没关注?伸出中指点这里
1.1 负载均衡介绍
1.1.1 负载均衡的妙用
负载均衡(Load Balance)集群提供了一种廉价、有效、透明的方法,来扩展网络设备和服务器的负载、带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。
单台计算机无法承受大规模的并发访问或数据流量了,此时需要搭建负载均衡集群把流量分摊到多台节点设备上分别处理,即减少用户等待响应的时间又提升了用户体验;
7*24小时的服务保证,任意一个或多个有限后端节点设备宕机,不能影响整个业务的运行。
1.1.2 为什么要用lvs
工作在网络模型的7层,可以针对http应用做一些分流的策略,比如针对域名、目录结构,nginx单凭这点可利用的场合就远多于LVS了。
最新版本的Nginx也支持4层TCP负载,曾经这是LVS比Nginx好的地方。
n Nginx对网络稳定性的依赖非常小,理论上能ping通就就能进行负载功能,这个也是它的优势之一,相反LVS对网络稳定性依赖比较大。
n Nginx安装和配置比较简单,测试起来比较方便,它基本能把错误用日志打印出来。LVS的配置、测试就要花比较长的时间了,LVS对网络依赖比较大。
那为什么要用lvs呢?
ü 简单一句话,当并发超过了Nginx上限,就可以使用LVS了。
ü 日1000-2000W PV或并发请求1万以下都可以考虑用Nginx。
ü 大型门户网站,电商网站需要用到LVS。
1.2 LVS介绍
LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统,可以在UNIX/LINUX平台下实现负载均衡集群功能。该项目在1998年5月由章文嵩博士组织成立,是中国国内最早出现的自由软件项目之一。
1.2.1 相关参考资料
LVS官网:http://www.linuxvirtualserver.org/index.html
相关中文资料
LVS项目介绍
http://www.linuxvirtualserver.org/zh/lvs1.html
LVS集群的体系结构
http://www.linuxvirtualserver.org/zh/lvs2.html
LVS集群中的IP负载均衡技术
http://www.linuxvirtualserver.org/zh/lvs3.html
LVS集群的负载调度
http://www.linuxvirtualserver.org/zh/lvs4.html
1.2.2 LVS内核模块ip_vs介绍
早在2.2内核时, IPVS就已经以内核补丁的形式出现。从2.4.23版本开始,IPVS软件就合并到Linux内核的常用版本的内核补丁的集合。
从2.4.24以后IPVS已经成为Linux官方标准内核的一部分。
ü LVS无需安装
ü 安装的是管理工具,第一种叫ipvsadm,第二种叫keepalive
ü ipvsadm是通过命令行管理,而keepalive读取配置文件管理
ü 后面我们会用Shell脚本实现keepalive的功能
1.3 LVS集群搭建
1.3.1 集群环境说明
主机说明
[root@lb03 ~]# cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core)[root@lb03 ~]# uname -a
Linux lb03 3.10.0-693.el7.x86_64 #1 SMP Tue Aug 22 21:09:27 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
[root@lb03 ~]# systemctl status firewalld.service
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
Active: inactive (dead)
Docs: man:firewalld(1)
[root@lb03 ~]# getenforce
Disabled
web环境说明
[root@lb03 ~]# curl 10.0.0.17
web03
[root@lb03 ~]# curl 10.0.0.18
web04
web服务器的搭建参照:
Tomcat:
http://www.cnblogs.com/clsn/p/7904611.html
Nginx:
http://www.cnblogs.com/clsn/p/7750615.html
1.3.2 安装ipvsadm管理工具
安装管理工具
yum -y install ipvsadm
查看当前LVS状态,顺便激活LVS内核模块。
ipvsadm
查看系统的LVS模块。
[root@lb03 ~]# lsmod|grep ip_vs
ip_vs_wrr 12697 1
ip_vs 141092 3 ip_vs_wrr
nf_conntrack 133387 1 ip_vs
libcrc32c 12644 3 xfs,ip_vs,nf_conntrack
1.3.3 LVS集群搭建
配置LVS负载均衡服务(在lb03操作)
步骤2:清除当前所有LVS规则(-C)
步骤3:设置tcp、tcpfin、udp链接超时时间(--set)
步骤4:添加虚拟服务(-A),-t指定虚拟服务的IP端口,-s 指定调度算法 调度算法见man ipvsadm, rr wrr 权重轮询 -p 指定超时时间
步骤5:将虚拟服务关联到真实服务上(-a) -r指定真实服务的IP端口 -g LVS的模式 DR模式 -w 指定权重
步骤6:查看配置结果(-ln)
命令集:
ip addr add 10.0.0.13/24 dev eth0
ipvsadm -C
ipvsadm --set 30 5 60
ipvsadm -A -t 10.0.0.13:80 -s wrr -p 20
ipvsadm -a -t 10.0.0.13:80 -r 10.0.0.17:80 -g -w 1
ipvsadm -a -t 10.0.0.13:80 -r 10.0.0.18:80 -g -w 1
ipvsadm -ln
检查结果:
[root@lb03 ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 10.0.0.13:80 wrr persistent 20
-> 10.0.0.17:80 Route 1 0 0
-> 10.0.0.18:80 Route 1 0 0
ipvsadm参数说明:(更多参照 man ipvsadm)
1.3.4 在web浏览器配置操作
步骤2:修改内核参数抑制ARP响应
命令集:
ip addr add 10.0.0.13/32 dev lo
cat >>/etc/sysctl.conf<<eof
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
EOF
sysctl -p
至此LVS集群配置完毕!
1.3.5 进行访问测试
浏览器访问:
命令行测试:
[root@lb04 ~]# curl 10.0.0.13
web03
抓包查看结果:
arp解析查看:
[root@lb04 ~]# arp -n
Address HWtype HWaddress Flags Mask Iface
10.0.0.254 ether 00:50:56:e9:9f:2c C eth0
10.0.0.18 ether 00:0c:29:ea:ca:55 C eth0
10.0.0.13 ether 00:0c:29:de:7c:97 C eth0
172.16.1.15 ether 00:0c:29:de:7c:a1 C eth1
10.0.0.17 ether 00:0c:29:4a:ac:4a C eth0
1.4 负载均衡(LVS)相关名词
术语说明:
DS:Director Server。指的是前端负载均衡器节点。
RS:Real Server。后端真实的工作服务器。
VIP:向外部直接面向用户请求,作为用户请求的目标的IP地址。
DIP:Director Server IP,主要用于和内部主机通讯的IP地址。
RIP:Real Server IP,后端服务器的IP地址。
CIP:Client IP,访问客户端的IP地址。
1.4.1 LVS集群的工作模式--DR直接路由模式
DR技术可极大地提高集群系统的伸缩性。但要求调度器LB与真实服务器RS都有一块物理网卡连在同一物理网段上,即必须在同一局域网环境。
DR直接路由模式说明:
h)直接对外的访问业务,例如web服务做RS节点,RS最好用公网IP地址。如果不直接对外的业务,例如:mysql,存储系统RS节点,最好只用内部IP地址。
以上是关于美团面试题:如何设计负载均衡架构支撑千万级用户的高并发访问?的主要内容,如果未能解决你的问题,请参考以下文章 |