https://cloud.tencent.com/developer/article/1049707
一、问题域
nginx、lvs、keepalived、f5、DNS轮询,每每提到这些技术,往往讨论的是接入层的这样几个问题:
1)可用性:任何一台机器挂了,服务受不受影响
2)扩展性:能否通过增加机器,扩充系统的性能
3)反向代理+负载均衡:请求是否均匀分摊到后端的操作单元执行
二、上面那些名词都是干嘛的
由于每个技术人的背景和知识域不同,上面那些名词缩写(运维的同学再熟悉不过了),还是花1分钟简单说明一下(详细请自行“百度”):
1)nginx:一个高性能的web-server和实施反向代理的软件
2)lvs:Linux Virtual Server,使用集群技术,实现在linux操作系统层面的一个高性能、高可用、负载均衡服务器
3)keepalived:一款用来检测服务状态存活性的软件,常用来做高可用
4)f5:一个高性能、高可用、负载均衡的硬件设备(听上去和lvs功能差不多?)
5)DNS轮询:通过在DNS-server上对一个域名设置多个ip解析,来扩充web-server性能及实施负载均衡的技术
三、接入层技术演进
【裸奔时代(0)单机架构】
裸奔时代的架构图如上:
1)浏览器通过DNS-server,域名解析到ip
2)浏览器通过ip访问web-server
缺点:
1)非高可用,web-server挂了整个系统就挂了
2)扩展性差,当吞吐量达到web-server上限时,无法扩容
注:单机不涉及负载均衡的问题
【简易扩容方案(1)DNS轮询】
假设tomcat的吞吐量是1000次每秒,当系统总吞吐量达到3000时,如何扩容是首先要解决的问题,DNS轮询是一个很容易想到的方案:
此时的架构图如上:
1)多部署几份web-server,1个tomcat抗1000,部署3个tomcat就能抗3000
2)在DNS-server层面,域名每次解析到不同的ip
优点:
1)零成本:在DNS-server上多配几个ip即可,功能也不收费
2)部署简单:多部署几个web-server即可,原系统架构不需要做任何改造
3)负载均衡:变成了多机,但负载基本是均衡的
缺点:
1)非高可用:DNS-server只负责域名解析ip,这个ip对应的服务是否可用,DNS-server是不保证的,假设有一个web-server挂了,部分服务会受到影响
2)扩容非实时:DNS解析有一个生效周期
3)暴露了太多的外网ip
【简易扩容方案(2)nginx】
tomcat的性能较差,但nginx作为反向代理的性能就强多了,假设线上跑到1w,就比tomcat高了10倍,可以利用这个特性来做扩容:
此时的架构图如上:
1)站点层与浏览器层之间加入了一个反向代理层,利用高性能的nginx来做反向代理
2)nginx将http请求分发给后端多个web-server
优点:
1)DNS-server不需要动
2)负载均衡:通过nginx来保证
3)只暴露一个外网ip,nginx->tomcat之间使用内网访问
4)扩容实时:nginx内部可控,随时增加web-server随时实时扩容
5)能够保证站点层的可用性:任何一台tomcat挂了,nginx可以将流量迁移到其他tomcat
缺点:
1)时延增加+架构更复杂了:中间多加了一个反向代理层
2)反向代理层成了单点,非高可用:tomcat挂了不影响服务,nginx挂了怎么办?
【高可用方案(3)keepalived】
为了解决高可用的问题,keepalived出场了(之前的文章“使用shadow-master保证系统可用性”详细介绍过):
此时:
1)做两台nginx组成一个集群,分别部署上keepalived,设置成相同的虚IP,保证nginx的高可用
2)当一台nginx挂了,keepalived能够探测到,并将流量自动迁移到另一台nginx上,整个过程对调用方透明
优点:
1)解决了高可用的问题
缺点:
1)资源利用率只有50%
2)nginx仍然是接入单点,如果接入吞吐量超过的nginx的性能上限怎么办,例如qps达到了50000咧?
【scale up扩容方案(4)lvs/f5】
nginx毕竟是软件,性能比tomcat好,但总有个上限,超出了上限,还是扛不住。
lvs就不一样了,它实施在操作系统层面;f5的性能又更好了,它实施在硬件层面;它们性能比nginx好很多,例如每秒可以抗10w,这样可以利用他们来扩容,常见的架构图如下:
此时:
1)如果通过nginx可以扩展多个tomcat一样,可以通过lvs来扩展多个nginx
2)通过keepalived+VIP的方案可以保证可用性
99.9999%的公司到这一步基本就能解决接入层高可用、扩展性、负载均衡的问题。
这就完美了嘛?还有潜在问题么?
好吧,不管是使用lvs还是f5,这些都是scale up的方案,根本上,lvs/f5还是会有性能上限,假设每秒能处理10w的请求,一天也只能处理80亿的请求(10w秒吞吐量*8w秒),那万一系统的日PV超过80亿怎么办呢?(好吧,没几个公司要考虑这个问题)
【scale out扩容方案(5)DNS轮询】
如之前文章所述,水平扩展,才是解决性能问题的根本方案,能够通过加机器扩充性能的方案才具备最好的扩展性。
facebook,google,baidu的PV是不是超过80亿呢,它们的域名只对应一个ip么,终点又是起点,还是得通过DNS轮询来进行扩容:
此时:
1)通过DNS轮询来线性扩展入口lvs层的性能
2)通过keepalived来保证高可用
3)通过lvs来扩展多个nginx
4)通过nginx来做负载均衡,业务七层路由
四、结论
聊了这么多,稍微做一个简要的总结:
1)接入层架构要考虑的问题域为:高可用、扩展性、反向代理+扩展均衡
2)nginx、keepalived、lvs、f5可以很好的解决高可用、扩展性、反向代理+扩展均衡的问题
3)水平扩展scale out是解决扩展性问题的根本方案,DNS轮询是不能完全被nginx/lvs/f5所替代的
末了,上一篇文章有同学留言问58到家采用什么方案,58到家目前部署在阿里云上,前端购买了SLB服务(可以先粗暴的认为是一个lvs+keepalived的高可用负载均衡服务),后端是nginx+tomcat。
相关推荐
ipvsadm高可靠负载均衡架构中,keepalived负责实现High-availability (HA) 功能控制前端机VIP(虚拟网络地址),当有设备发生故障时,热备服务器可以瞬间将VIP自动切换过来,实际运行中体验只有2秒钟切换时间,DNS服务...
keepalived + lvs 实现web集群高可用6.1 keepalived + lvs_016.2 keepalived + lvs_026.3 nginx + php-fpm_01 的配置6.4 nginx + php-fpm_02 的配置7. 测试后端的网站能否访问8. keepalived + lvs 实现 prox
2.1DNS的负载均衡技术 2.2四层交换技术的负载均衡技术 2.3七层交换技术的负载均衡技术 2.4负载均衡群集的工作模式 3网络需求分析 3.1设计需求分析 3.2技术可行性分析 3.3高可靠性 3.4高安全性 3.5高扩展性和易排除性...
1)接入层架构要考虑的问题域为:高可用、扩展性、反向代理+扩展均衡 2)nginx、keepalived、lvs、f5可以很好的解决高...3)水平扩展scale out是解决扩展性问题的根本方案,DNS轮询是不能完全被nginx/lvs/f5所替代的
3. 一个域名通过 DNS 解析到的 IP 即是 VIP, VIP 以 lo 的方式起在每台 LVS 上, VIP 下面可以挂多台 Nginx, Nginx 端口也可以多个; 4. 为每个 VIP 增加了一个属性: wstype, 用于定义 Nginx 的业务属性; 5. 操作 LVS ...
3.1. 1 构建NTP时间...5. 8 LVS+Keepalived负载均衡 110 5. 9 Squid缓存服务器配置 116 6. Linux下高并发系统内核优化 122 7. Nginx负载均衡机制及常见问题 124 8. Linux运维职业规划 127 9. Linux运维面试总结 127
http,dns,ftp,samba,vsftp,自动挂载,时间同步服务,iscsi,jsp,php,mariadb,keepalived,lvs,nginx,等服务
负载均衡 lvs 负责对数据进行转发 一次请求,一次响应 反向代理 nginx/haproxy 负责代替用户找数据,找到后再发送给用户 两次请求,两次响应 2. arp DNS 为域名解析,将域名解析为IP地址 arp协议 为地址解析协议 将...
(1) 接入层架构要考虑的问题域为:高可用、扩展性、反向代理、负载均衡; (2) Nginx、keepalived、lvs、f5可以很好的...(3) 水平扩展scale out是解决扩展性问题的根本方案,DNS轮询是不能完全被Nginx/lvs/f5所替代的;
DNS轮循 F5 BIG-IP LVS(Linux Virtual Server) L7SW(Layer7 switching) HAProxy Nginx
4.8 部署DNS域名服务 76 4.9 部署DHCP地址服务 80 4.10 部署Kickstart系统 82 4.11 部署LVS负载均衡 86 4.12 部署Mysql服务 89 4.13 部署MariaDB集群 90 4.14 部署Mongodb服务 96 4.15 部署Apache服务 97 4.16 部署...
linux基础入门,常用服务部署(NTP、FTP、Samba、MFS、DNS、DHCP、LVS、MySQL、Mongodb、Nginx、Tomcat、LAMP、LNAMP、Ansible、Zabbix等等)
2、对系统常见应用软件有运维能力,如nginx、mysql、lvs,memcached、redis、tomcat、dns等,能够快速实施部署、配置及排错; 3、熟悉Docker、K8s等容器技术,有Docker集群实际维护经验; 4、能够独立维护大中型...