目录
2.3、LVS项目已提供了一个实现可伸缩网络服务的Linux Virtual Server框架
4.1、Virtual Server via Direct Routing(VS/DR)
4.2、Virtual Server via Network Address Translation(VS/NAT)
4.3、Virtual Server via IP Tunneling(VS/TUN)
2.2.2.2 基于VIP的keepalived高可用架构讲解
2.2.2.1 LVS基础概念解析
1、LVS简介
1.1、LVS是什么
LVS的英文全称是Linux Virtual Server,即Linux虚拟服务器。它是我们国家的章文嵩博士的一个开源项目。
在linux内核2.6中,它已经成为内核的一部分,在此之前的内核版本则需要重新编译内核
1.2、LVS能干什么
LVS主要用于多服务器的负载均衡。它工作在网络 4 层,可以实现高性能,高可用的服务器集群技术。
它廉价,可把许多低性能的服务器组合在一起形成一个超级服务器。他易用,配置非常简单,
且有多种负载均衡的方法。他稳定可靠,即使在集群的服务器中某台服务器无法正常工作,
也不影响整体效果。另外可扩展性也非常好。
Nginx工作在 7 层网络模型下
2、Linux Virtual Server项目
2.1、Load Balancer(负载调度器)
负载调度器能无缝地将网络请求调度到真实服务器上,从而使得服务器集群的结构对客户是透明的,
客户访问集群系统提供的网络服务就像访问一台高性能、高可用的服务器一样。
由于我们的负载调度技术是在linux内核中实现的,
我们称之为linux虚拟服务器(Linux Virtual Server)
2.2、Linux Virtual Server项目的目标
使用集群技术和Linux操作系统实现一个高性能、高可用的服务器,
它具有很好的可伸缩性(Scalability)、可靠性(Reliability)、可管理性(Manageability)
2.3、LVS项目已提供了一个实现可伸缩网络服务的Linux Virtual Server框架
IPVS:提供了含有三种IP负载均衡技术的IP虚拟服务器软件
KTCPVS:基于内容请求分发的内核Layer-7交换机
Cluster Management:集群管理软件
2.4、可以利用LVS框架实现
高可伸缩、高可用的Web、Cache、Mail和Media等网络服务
可以开发支持庞大用户数、高可伸缩、高可用的电子商务应用
3、网络分层
3.1、网络 7 层
7层是指OSI七层协议模型:
应用层(Application)、表示层(Presentation)、会话层(Session)、
传输层(Transport)、网络层(Network)、数据链路层(Data Link)、物理层(Physical)
Nginx工作在7层网络模型下
3.2、网络 5 层
5层只是OSI和TCP/IP的综合,是业界产生出来的非官方协议模型,但是很多具体的应用。
实际应用还是TCP/IP的四层结构。
为了方便可以把下两层称为网络接口层。
五层体系结构包括:应用层、运输层、网络层、数据链路层、物理层。
3.3、网络 4 层
4层是指TCP/IP四层模型,主要包括:应用层、运输层、网络层、网络接口层。
LVS工作在4层网络模型下。
4、IP虚拟服务器---IPVS
IPVS:IP Virtual Server
在调度器的实现技术中,IP负载均衡技术是效率最高的。
IPVS软件实现了三种IP负载均衡技术,它们的大致原理如下:
4.1、Virtual Server via Direct Routing(VS/DR)
直接路由的虚拟服务器
VS/DR通过改写请求报文的MAC地址,将请求发送到真实服务器,而真实服务器将相应直接返回给客户。
同VS/TUN技术一样,VS/DR技术可极大地提高集群系统的伸缩性。这种方法没有IP隧道的开销,对集群中的真实服务器也没有必须支持IP隧道协议的要求,但是要求调度器域真实服务器都有一块网卡连在同一物理网段上。
4.2、Virtual Server via Network Address Translation(VS/NAT)
网络地址转换的虚拟服务器
通过网络地址转换,调度器重写请求报文的目标地址,根据预设的调度算法,将请求分派给后端的真实服务器;
真实服务器的响应报文通过调度器时,报文的源地址被重写,再返回给客户,完成整个负载调度过程。
4.3、Virtual Server via IP Tunneling(VS/TUN)
IP隧道的虚拟服务器
采用NAT技术时,由于请求和响应报文都必须经过调度器地址重写,当客户请求越来越多时,调度器的处理能力将成为瓶颈。
为了解决这个问题,调度器把请求报文通过IP隧道转发至真实服务器,而真实服务器将响应直接返回给客户,
所以调度器只处理请求报文。由于一般网络服务应答比请求报文大许多,采用VS/TUN技术后,
集群系统的最大吞吐量可以提高10倍。
5、IPVS调度算法
针对不同的网络服务需求和服务器配置,IPVS调度器实现了如下八种负载调度算法:
5.1、轮叫
(Round Robin),就是轮询
5.2、加权轮叫
(Weighted Round Robin),硬件配置不一致,配置加权
5.3、最少链接
(Least Connections),现有链接数最少的(最闲的)
5.4、加权最少链接
(Weighted Least Connections),采用最少链接的策略,并配置加权
5.5、基于局部性的最少链接
(Locality-Based Least Connections),采用最少链接的策略,当请求IP为某些时,固定的转到某个地区链接最少的服务器
常用于缓存系统:根据目标IP地址对应一个服务器
5.6、带复制的基于局部性最少链接
(Locality-Based Least Connections with Replication)
与“基于局部性的最少链接”的区别:相同的目标IP的请求,对应到一组服务器
5.7、目标地址散列
(Destination Hashing),根据请求报文的目标IP地址,进行使用Hash的散列函数,静态的散列方式
如果目标地址有IP,就将请求固定对应到一台服务器
5.8、源地址散列
(Source Hashing),根据源地址散列到一台服务器,静态的散列方式
6、内核Layer-7交换机KTCPVS
由于用户空间TCP Gateway的开销太大,我们提出在操作系统的内核中实现Layer-7交换方法,
来避免用户空间与核心空间的切换和内存复制的开销。在Linux操作系统的内核中,我们实现了Layer-7交换,
称之为KTCPVS(Kernel TCP Virtual Server)---核心TCP虚拟服务器。
虽然应用层交换处理复杂,它的伸缩性有限,但应用层交换带来了以下好处:
内核Layer-7交换机KTCPVS---优点
7、LVS集群特点
7.1、功能
1、有实现三种IP负载均衡技术和八种连接调度算法的IPVS软件。
2、在IPVS内部实现上,采用了高效的Hash函数和垃圾回收机制,能正确处理所调度报文相关的ICMP消息
3、虚拟服务的设置数目没有限制,每个虚拟服务有自己的服务器集
4、它支持持久的虚拟服务(如HTTTP Cookie和HTTPS等需要该功能的支持),并提供详尽的统计数据,
如连接的处理速率和报文的流量等。
5、针对大规模拒绝服务(Deny of Service)攻击,实现了三种防卫策略。
6、有基于内容请求分发的应用层交换软件KTCPVS,它也是在Linux内核中实现。
7、有相关的集群管理软件对资源进行检测,能及时将故障屏蔽,实现系统的高可用性。
8、主、从调度器能周期性地进行状态同步,从而实现更高的可用性
7.2、适用性
后端服务器可运行任何支持TCP/IP的操作系统,包括Linux,各种Unix(如FreeBSD、Sun Solaris、HP Unix等),
Mac/OS和Windows NT/2000等。负载调度器能够支持绝大多数的TCP和UDP协议。
7.3、性能
LVS服务器集群有伸缩性,可支持几百万个并发连接。配置100M网卡,集群系统的吞吐量可高达1Gbits/s;
如配置千兆网卡,则系统的最大吞吐量可接近10Gbits/s。
7.4、可靠性
LVS服务器集群软件已经在很多大型的、关键性的站点得到很好的应用,所以它的可靠性在真实应用得到很好的证实。
有很多调度器运行一年多,未作一次重启动。
7.5、软件许可证
LVS集群软件是按GPL(GNU Public License)许可证发行的自由软件,这意味着你可以得到软件的源代码,
有权对其进行修改,但必须保证你的修改也是以GPL方式发行。
8、LVS与Nginx对比
2.2.2.2 基于VIP的keepalived高可用架构讲解
1、Keepalived简介
1.1、Keepalived的作用
是检测服务器的状态。如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,
并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后
Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,
需要人工做的只是修复故障的服务器。
1.2、Keepalived的特性
1、配置文件简单
可通过简单配置实现高可用功能
2、稳定性强
keepalived是一个类似于layer3/4/7交换机机制的软件,具备我们平时说的第3层、第4层、第7层交换机的功能,
常用于前端负载均衡器的高可用服务,当主服务器出现故障时,可快速进行切换,检测机制灵活,成功率高。
第3层:是指通过ICMP协议跟业务服务器交互、检查
第4层:通过TCP协议,对状态进行检查
第7层:网络层协议(比如:http协议),这种业务层协议进行检查
3、成本低廉
开源软件,可直接下载配置使用,没有额外费用
4、应用范围广
因为keepalived可应用在多个层面,所以它几乎可以对所有应用做高可用,包括LVS、数据库、Http服务、
nginx负载均衡等等
5、支持多种类型
支持主从模式、主主模式高可用,可根据业务场景灵活选择
2、Keepalived工作原理
2.1、Keepalived内部工作分为以下5个部分
1、WatchDog监控checkers和VRRP进程的状况
2、Checkers负责真实服务器的健康检查healthchecking
3、VRRP Stack负责负载均衡器之间的失败切换
4、IPVS wrapper用来发送设定的规则到内核IPVS代码
5、Netlink Reflector用来设定vrrp的vip地址等
2.2、VRRP协议
VRRP:Virtual Router Redundancy Protocol(虚拟路由冗余协议)
Keepalived是以VRRP协议为实现基础的
1、VRRP根据优先级来确定虚拟路由器中每台路由器的角色(Master路由器或Backup路由器)。
2、VRRP优先级的取值范围为0到255(数值越大表明优先级越高),可配置的范围是1到254。
3、优先级0为系统保留,给路由器放弃Master位置时候使用,255则是系统保留,给IP地址拥有者使用。
4、优先级越高,则越有可能成为Master路由器。当两台优先级相同的路由器同时竞争Master时,比较接口IP地址大小,接口地址大者当选为master。
2.3、Keepalived主要有3个模块
1、core模块
keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析
2、check模块
负责健康检查,包括常见的各种检查方式
3、vrrp模块
是来实现vrrp协议的
3、Keepalived应用场景
在网络层、数据链路层,运行着4个重要的协议
IP:互联网协议
ICMP:互联网控制报文协议
ARP:地址转换协议
RARP:反向地址转换协议
3.1、网络层场景
Keepalived在网络层采用的最常见的工作方式是通过ICMP协议向服务器集群中的那个节点发送
一个ICMP数据包(类似于ping实现的功能),如果某个节点没有返回响应数据包,那么认为此节点
发生了故障,Keepalived将报告此节点失效,并从服务器集群中剔除故障节点。
ICMP:Internet Control Message Protocol(Internet控制报文协议),工作在第3层
3.2、传输层场景
1、提供了2个主要的协议:传输控制协议TCP、用户数据协议UDP
2、TCP可以提供可靠的数据传输服务、IP地址和端口代表TCP的一个连接端,要获得TCP服务,需要先建立连接。
3、Keepalived在传输层就是利用TCP的端口连接和扫描技术来判断集群点是否正常。
4、Keepalived一旦探测到服务端口没有响应数据,就认为服务端口发生异常,然后强制将此端口对应的节点
从服务器集群组中移除。
工作在第4层
3.3、应用层场景
可运行ftp、telnet、http、DNS等各种不同类型的高层协议。
用户可以自定义Keepalived的工作方式
工作在第7层
4、高可用集群
4.1、HA---高可用
HA:high available,高可用
1、高可用性集群是通过系统的可靠性(reliability)和可维护性(maintainability)来度量的。
2、通常用平均无故障时间(MTTF)来度量系统的可靠性
3、用平均维修时间(MTTR)来度量系统的可维护性
4、HA = MTTF / (MTTF + MTTR) * 100%
平均无故障时间/总时间
总时间=平均无故障时间 + 平均维修时间
4.2、高可用集群实现
高可用工作方式:
1、主从方式(非对称方式)
2、双机双工方式(互备互援)
3、集群工作方式(多服务器互备方式)
高可用的资源分类:
1、网络高可用
2、服务器高可用
3、存储高可用
4、服务高可用
开源的高可用解决方案:
keepalived:通过实现vrrp协议来实现地址漂移
5、高可用架构
5.1、主从高可用架构
1、在系统中,有一个Master节点和一个Backup节点,其中Master节点对线上业务提供服务,
Backup与Master节点之间保持心跳。
2、当Master节点因宕机服务不可用时,系统会切换到Backup节点上,提供服务。
3、当宕机Master节点恢复后,系统将该Master作为Backup加入集群。
Backup---备份
5.2、双主高可用架构
1、在系统中,有2个Master节点,均对线上业务提供服务,两个Master节点之间保持心跳。
2、当某一台Master节点因宕机服务不可用时,系统会将流量全部导向剩余的Master节点,继续提供服务。
3、当宕机Master节点恢复后,系统将该Master加入集群,提供服务。
6、Keepalived高可用集群的解决方案
1、keepalived在一个节点上启动之后,会生成一个Master主进程,这个主进程又会生成两个子进程,分别是:
1、VRRP Stack:实现VRRP协议
2、Checkers:检测ipvs后端realserver的健康状况检测
2、VRRP双方节点都启动以后,要实现状态转换的,刚开始启动的时候,初始状态都是Backup,而后向其它节点发送通告,
以及自己的优先级信息,谁的优先级高,就转换为Master,否则就还是Backup。
3、这时候服务就在状态为Master的节点上启动,为用户提供服务,如果,该节点挂了,则转换为Backup,优先级降低,
另一个节点转换为Master,优先级上升,服务就在此节点启动,VIP、VMAC都会被转移到这个节点上,为用户提供服务。
2.2.2.3 搭建LVS负载均衡集群
1、负载均衡集群简介
1、主流开源软件:LVS、keepalived、haproxy、nginx等
2、LVS属于4层负载均衡,Nginx属于7层负载均衡,Haproxy既可以认为是4层,也可以做7层使用。
4层:主要是TCP协议
7层:主要是HTTP协议、Mail
3、LVS:可以分发除80外的其他端口的通信,eg:MySQL
Nginx:仅仅支持HTTP、HTTPS、Mail
Haproxy:也支持MySQL
4、相比较来说,LVS更稳定,能承受更多的请求,
而Nginx更加灵活,能实现更多个性化的需求。
2、LVS简介
1、LVS是由国人章文嵩开发
2、LVS是基于TCP/IP做的路由和转发,稳定性和效率很高
3、LVS是工作于Linux内核中的
4、LVS有三种常见的模式:NAT、DR、IP Tunnel
5、LVS架构中有一个核心角色叫做分发器(Load Balancer),它用来分发用户的请求
2.1、LVS集群的6个角色
DS:Director Server,指的是前端负载均衡器节点
RS:Real Server,后端真实的工作服务器
VIP:Virtual IP,向外部直接面向用户请求,作为用户请求的目标的IP地址
DIP:Director Server IP,主要用于和内部主机通讯的IP地址
RIP:Real Server IP,后端服务器的IP地址
CIP:Client IP,访问客户端的IP地址
3、LVS NAT模式
1、这种模式借助iptables的nat表来实现
2、用户的请求到分发器后,通过预设的iptables规则,把请求的数据包转发到后端的RS上去
3、RS需要设定网关为分发器的内网IP
4、用户请求的数据包和返回给用户的数据包全部经过分发器,所以分发器成为瓶颈
5、在nat模式中,只需要分发器有公网IP即可,所以比较节省公网IP资源
4、LVS IP Tunnel模式
1、这种模式需要有一个公共的IP配置在分发器和所有的RS上,我们把它叫做VIP
2、客户端请求的目标IP为VIP,分发器接收到请求数据包后,会对数据包做一个加工,会把目标IP改为RS的IP,这样数据包就到了RS上
3、RS接收数据包后,会还原原始数据包,这样目标IP为VIP,因为所有RS上配置了这个VIP,所以它会认为是它自己
5、LVS DR模式
1、这种模式,也需要有一个公共的IP配置在分发器和所有RS上,也就是VIP
2、和IP Tunnel不同的是,它会把数据包的MAC地址修改为RS的MAC地址
3、RS接收数据包后,会还原原始数据包,这样目标IP为VIP,因为所有RS上配置了这个VIP,所以它会认为是它自己
6、LVS集群搭建