热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

LVS+Keepalived+Nginx高可用负载均衡方案

负载均衡的基本思想是把单台服务器的访问分流到多台服务器,避免系统崩溃。以下是几种常见的解决方案。1.Nginx反向代理Nginx通过反向代理技术实现分流ÿ

负载均衡的基本思想是把单台服务器的访问分流到多台服务器,避免系统崩溃。以下是几种常见的解决方案。


1. Nginx反向代理

Nginx通过反向代理技术实现分流,可以按照设定的访问规则将请求转发给相应的后台服务器。
反向代理是指当用户访问网络上某个服务的时候,访问到的实际上是代理服务器,代理服务器转发用户请求到真正处理该业务的后台服务器,最后转发结果回来给用户。后台服务器被代理了,对用户不可见。
相比较的,正向代理则是指我们通常的翻墙过程。用户访问代理服务器,代理服务器转发请求给目标服务器,目标服务器返回结果给代理服务器,再转发回给用户。用户被代理了,对目标服务器不可见。
Nginx支持几种常见的负载调度算法:轮询、加权轮询、ip hash、fair、url hash。一致性哈希算法可保证同一个IP的请求落在同一台后端服务器,其他算法须解决不同服务器的Session共享问题。
Nginx支持健康检查,实现后端服务器的自动上下线,可以提高系统的请求成功率。如果一个服务器请求失败,可立即切换到其他服务器,直到请求成功或者最后一台服务器失败为止。


2. Keepalived+Nginx实现双机热备

当使用一台Nginx作为反向代理服务器时,这台服务器就变得异常重要,须避免出现单点故障。Keepalived是一个基于VRRP协议来实现的服务高可用方案,可以利用其来避免IP单点故障。
使用Keepalived可以轻量级地实现Nginx的双机热备。即前端使用两台服务器,当其中一台服务器发生故障时,另一台服务器接管故障机的公网虚拟IP,继续提供负载均衡服务。


3. LVS+Keepalived+Nginx增加吞吐量和稳定性

Nginx的请求转发是基于HTTP层的,所有流量都要经过Nginx。当后端服务器规模庞大时,Nginx的网络带宽就会成为一个瓶颈。
这时可引入LVS负责第一层负载,通过LVS将请求路由到后端若干台Nginx上,Nginx再转发给内部其中一台应用服务器进行处理,最后Nginx直接将结果转发给用户,无需再经过LVS服务器。
以上过程实际上用到的是LVS/DR(Linux Virtual Server via Direct Routing)技术,它通过改写请求报文的MAC地址,将请求发送到真实服务器,而真实服务器将响应直接返回给客户。
LVS还提供的另外两种IP负载均衡技术是:VS/NAT(Virtual Server via Network Address Translation)和VS/TUN(Virtual Server via IP Tunneling)。
LVS通过MAC地址改写和网络地址转换等方式来同步转发请求,主要是基于网络层和链路层,因而效率非常高。
引入LVS后,Nginx变成了集群,Keepalived主要用来保证LVS的高可用,建立LVS双机热备。LVS 可以对后端Nginx进行健康检查(不能重新发送请求)。LVS也支持多种负载调度算法,如:RR, WRR, LC, WLC, LBLC, LBLCR, DH, SH。


4. DNS和CDN网络优化

DNS(Domain Name System)中一个域名可对应多个IP,因而可通过DNS轮询来实现负载均衡。同时DNS智能解释可保证返回给用户的IP离用户尽可能的近。
还可以进一步按照业务系统拆分二级域名,对于每一个业务系统建立独立的负载均衡层。
CDN(Content Delivery Network)主要用于缓存图片、多媒体文件等各种静态文件资源。将这些静态资源保存到离用户更近的各个网络节点,可以大大提高用户访问效率和节省服务器外网出口带宽。
公众号


推荐阅读
  • LVS实现负载均衡的原理LVS负载均衡负载均衡集群是LoadBalance集群。是一种将网络上的访问流量分布于各个节点,以降低服务器压力,更好的向客户端 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • GreenDAO快速入门
    前言之前在自己做项目的时候,用到了GreenDAO数据库,其实对于数据库辅助工具库从OrmLite,到litePal再到GreenDAO,总是在不停的切换,但是没有真正去了解他们的 ... [详细]
  • Hibernate延迟加载深入分析-集合属性的延迟加载策略
    本文深入分析了Hibernate延迟加载的机制,特别是集合属性的延迟加载策略。通过延迟加载,可以降低系统的内存开销,提高Hibernate的运行性能。对于集合属性,推荐使用延迟加载策略,即在系统需要使用集合属性时才从数据库装载关联的数据,避免一次加载所有集合属性导致性能下降。 ... [详细]
  • Skywalking系列博客1安装单机版 Skywalking的快速安装方法
    本文介绍了如何快速安装单机版的Skywalking,包括下载、环境需求和端口检查等步骤。同时提供了百度盘下载地址和查询端口是否被占用的命令。 ... [详细]
  • 本文介绍了在rhel5.5操作系统下搭建网关+LAMP+postfix+dhcp的步骤和配置方法。通过配置dhcp自动分配ip、实现外网访问公司网站、内网收发邮件、内网上网以及SNAT转换等功能。详细介绍了安装dhcp和配置相关文件的步骤,并提供了相关的命令和配置示例。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • Html5-Canvas实现简易的抽奖转盘效果
    本文介绍了如何使用Html5和Canvas标签来实现简易的抽奖转盘效果,同时使用了jQueryRotate.js旋转插件。文章中给出了主要的html和css代码,并展示了实现的基本效果。 ... [详细]
  • position属性absolute与relative的区别和用法详解
    本文详细解读了CSS中的position属性absolute和relative的区别和用法。通过解释绝对定位和相对定位的含义,以及配合TOP、RIGHT、BOTTOM、LEFT进行定位的方式,说明了它们的特性和能够实现的效果。同时指出了在网页居中时使用Absolute可能会出错的原因,即以浏览器左上角为原始点进行定位,不会随着分辨率的变化而变化位置。最后总结了一些使用这两个属性的技巧。 ... [详细]
  • 【shell】网络处理:判断IP是否在网段、两个ip是否同网段、IP地址范围、网段包含关系
    本文介绍了使用shell脚本判断IP是否在同一网段、判断IP地址是否在某个范围内、计算IP地址范围、判断网段之间的包含关系的方法和原理。通过对IP和掩码进行与计算,可以判断两个IP是否在同一网段。同时,还提供了一段用于验证IP地址的正则表达式和判断特殊IP地址的方法。 ... [详细]
  • 本文介绍了绕过WAF的XSS检测机制的方法,包括确定payload结构、测试和混淆。同时提出了一种构建XSS payload的方法,该payload与安全机制使用的正则表达式不匹配。通过清理用户输入、转义输出、使用文档对象模型(DOM)接收器和源、实施适当的跨域资源共享(CORS)策略和其他安全策略,可以有效阻止XSS漏洞。但是,WAF或自定义过滤器仍然被广泛使用来增加安全性。本文的方法可以绕过这种安全机制,构建与正则表达式不匹配的XSS payload。 ... [详细]
  • 深入解析Linux下的I/O多路转接epoll技术
    本文深入解析了Linux下的I/O多路转接epoll技术,介绍了select和poll函数的问题,以及epoll函数的设计和优点。同时讲解了epoll函数的使用方法,包括epoll_create和epoll_ctl两个系统调用。 ... [详细]
author-avatar
一生的牵扯
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有