公司准备做个负载均衡服务器 用linux的lvs 但是突然想到的两个server 要用相同的数据库
你要保持数据的一致性,需要一个共享存贮。共享存贮包括网页,脚本,数据库等数据。这样,当用户连接到不同的服务器时,可以看到相同的内容。也有利于管理员的维护。其实,没有共享存贮也可能实现LVS,但是,你要手工进行数据复制同步,管理负担会很重。
共享存贮,可以通过配置安装有FREENAS的服务器来实现,也可购买支持ISCSI等协议的的网络存贮设备来实现。
至于要不要双网卡,也是看你的性能要求了,理论上,只要通讯正常,单网卡也是可以的。
以下复制章文嵩的LVS原理,请见谅。
一般来说,LVS集群采用三层结构,其体系结构如图1所示,三层主要组成部分为:
•负载调度器(load balancer),它是整个集群对外面的前端机,负责将客户的请求发送到一组服务器上执行,而客户认为服务是来自一个IP地址(我们可称之为虚拟IP地址)上的。
•服务器池(server pool),是一组真正执行客户请求的服务器,执行的服务有WEB、MAIL、FTP和DNS等。
•共享存储(shared storage),它为服务器池提供一个共享的存储区,这样很容易使得服务器池拥有相同的内容,提供相同的服务。
调度器是服务器集群系统的唯一入口点(Single Entry Point),它可以采用IP负载均衡技术、基于内容请求分发技术或者两者相结合。在IP负载均衡技术中,需要服务器池拥有相同的内容提供相同的服务。当客户请求到达时,调度器只根据服务器负载情况和设定的调度算法从服务器池中选出一个服务器,将该请求转发到选出的服务器,并记录这个调度;当这个请求的其他报文到达,也会被转发到前面选出的服务器。在基于内容请求分发技术中,服务器可以提供不同的服务,当客户请求到达时,调度器可根据请求的内容选择服务器执行请求。因为所有的操作都是在Linux操作系统核心空间中将完成的,它的调度开销很小,所以它具有很高的吞吐率。
服务器池的结点数目是可变的。当整个系统收到的负载超过目前所有结点的处理能力时,可以在服务器池中增加服务器来满足不断增长的请求负载。对大多数网络服务来说,请求间不存在很强的相关性,请求可以在不同的结点上并行执行,所以整个系统的性能基本上可以随着服务器池的结点数目增加而线性增长。
共享存储通常是数据库、网络文件系统或者分布式文件系统。服务器结点需要动态更新的数据一般存储在数据库系统中,同时数据库会保证并发访问时数据的一致性。静态的数据可以存储在网络文件系统(如NFS/CIFS)中,但网络文件系统的伸缩能力有限,一般来说,NFS/CIFS服务器只能支持3~6个繁忙的服务器结点。对于规模较大的集群系统,可以考虑用分布式文件系统,如AFS[1]、GFS[23]、Coda[4]和 Intermezzo[5]等。分布式文件系统可为各服务器提供共享的存储区,它们访问分布式文件系统就像访问本地文件系统一样,同时分布式文件系统可提供良好的伸缩性和可用性。此外,当不同服务器上的应用程序同时读写访问分布式文件系统上同一资源时,应用程序的访问冲突需要消解才能使得资源处于一致状态。这需要一个分布式锁管理器(Distributed Lock Manager),它可能是分布式文件系统内部提供的,也可能是外部的。开发者在写应用程序时,可以使用分布式锁管理器来保证应用程序在不同结点上并发访问的一致性。
负载调度器、服务器池和共享存储系统通过高速网络相连接,如100Mbps交换网络、Myrinet和Gigabit网络等。使用高速的网络,主要为避免当系统规模扩大时互联网络成为整个系统的瓶颈。
Graphic Monitor是为系统管理员提供整个集群系统的监视器,它可以监视系统的状态。Graphic Monitor是基于浏览器的,所以无论管理员在本地还是异地都可以监测系统的状况。为了安全的原因,浏览器要通过HTTPS(Secure HTTP)协议和身份认证后,才能进行系统监测,并进行系统的配置和管理
参考:
http://wwwbaiducom/swd=LVS%E9%9B%86%E7%BE%A4%E7%9A%84%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84+linuxvirtualserver&ie=UTF-8&oe=UTF-8&bar=13&tn=webxunlei_5_cb
1、特点不同:lvs基于4层的网络协议的,抗负载能力强,对于服务器的硬件要求除了网卡外,其他没有太多要求。keepalived主要的工作是提供lvs控制器的一个冗余,并且对real服务器做健康检查,发现不健康的real服务器,从lvs集群中剔除,real服务器只负责提供服务。
2、性质不同:LVS是一个开源的软件,可以实现LINUX平台下的简单负载均衡。LVS是Linux Virtual Server的缩写,意思是Linux虚拟服务器。keepalived是一个类似于layer3, 4 & 5交换机制的软件。
3、作用不同:Keepalived主要用作RealServer的健康状态检查以及LoadBalance主机和BackUP主机之间failover的实现。LVS的作用是在网上能找到一些相关技术资源。
扩展资料:
注意事项:
在LVS方案中,虚拟ip地址与普通网络接口大大不同,这点需要特别注意。虚拟ip地址的广播地址是lvs本身,子网掩码是255255255255,因为有若干机器要使用同一个ip地址,用本身做广播地址和把子网掩码设成4个255就不会造成ip地址冲突了,否则lvs将不能正常转发访问请求。
假如两台VS之间使用的互备关系http://wwwhnjcjxnet,那么当一台VS接管LVS服务时,可能会网络不通,这时因为路由器的MAC缓存表里关于vip这个地址的MAC地 址还是被替换的VS的MAC。
-Keepalived
-LVS
其实LVS进行动态负载均衡,根据客户端访问节点的ip进行分流隔离或者负载均衡,是有问题的。原因是实际上无法分辨客户端源ip是真实ip还是代理IP。另外一般情况下客户端过来的访问都是经过我们这边服务端的反向代理的,此时更需要知道真实的ip。反向代理的例子比如,我访问一下Yahoo Finance查看Tesla的股价:
所以,自己公司DevOps搭建负载均衡服务器的时候,一定要考虑这个问题,如何获得发起请求的客户端的真实IP,这个大多数情况下并不能获得;但是如果没有,就是伪负载均衡,只是对反向代理最前面一层进行了负载均衡,并没有对源ip进行负载均衡。
从上面看到实际上 Remote Address 就是反向代理服务器的地址, 是HTTP请求的远程/源地址;三次握手就是用的这个地址,ACK时候也是;如果forgery这个那么HTTP响应报文不能收到,所以这个伪造没有任何意义,即 Remote Address 默认防伪造;而只有 Remote Address 用户的真实IP地址将被丢失,因此有了HTTP扩展头部 X-Forward-For 反向代理服务器转发用户的HTTP请求时,需要将用户的真实IP地址写入到 X-Forward-For 中,以便后端服务能够使用。由于 X-Forward-For 是可修改的,所以 X-Forward-For 中的地址在某种程度上不可信。在进行与安全有关的操作时,只能通过 Remote Address 获取用户的IP地址,不能相信任何请求头
X-Forwarded-For 在Wikipedia的解释: X-Forwarded-For
也就是LB和代理一般是为了降低外部带宽, 一般我们都用了反向代理,属于transparent proxy;
注:
X-Forward-For 跟 Referer 和 User-Agent 一样,都是 HTTP 中的头域。HTTP/11 的 RFC 文档编号为 2616,在 2616 中并未提及 X-Forward-For ,也就是说 HTTP/11 出现的时候 X-Forward-For 还没出生。真正提出 X-Forward-For 的是2014 年的 RFC7239(详见 https://wwwrfc-editororg/rfc/rfc7239txt X-Forward-For 作为HTTP 扩展出现;
RFC7239 很长,实际上跟我们相关的只有几个部分,例如: 1 Abstract ; 75 Example Usage
Abstract 是本文章的摘要,它描述了 RFC7239 的作用:
从这里我们了解到 X-Forward-For 的正向用途是便于服务端识别原始 IP,并根据原始 IP 作出动态处理。例如服务端按照 IP 地址进行负载均衡时,如果能够看破 IP 代理,取得原始 IP 地址,那么就能够作出有效的负载。否则有可能造成资源分配不均,导致假负载均衡的情况出现。
Example Usage 给了一个例子:
X-Forwarded-For 格式:
如果一个 HTTP 请求到达服务器之前,经过了三个代理 Proxy1、Proxy2、Proxy3,IP 分别为 IP1、IP2、IP3,用户真实 IP 为 IP0,那么按照 XFF 标准,服务端最终会收到以下信息:
所以,不论是从代理服务器第一层还是最后一层,都需要收集真实的IP才能进行真正的负载均衡
LVS 是 Linux Virtual Server :Linux 虚拟服务器;是一个虚拟的服务器集群多台机器 LB IP。
负载调度器(load balancer) :它是整个LVS 集群对外的前端机器,负责将client请求发送到一组服务器[多台LB IP]上执行,而client端认为是返回来一个同一个IP通常把这个IP 称为虚拟IP/VIP
服务器池(server pool) :一组真正执行client 请求的服务器,一般是我们的web服务器;除了web,还有FTP,MAIL,DNS
共享存储(shared stored) :它为 server pool 提供了一个共享的存储区,很容易让服务器池拥有相同的内容,提供相同的服务
常用术语
VS:Virtual Server #虚拟服务,一个抽象的服务,用于最开始接收 web 请求的服务
Director, Balancer #负载均衡器、分发器
RS:Real Server # 真正提供服务的服务器
CIP: Client IP #用户端IP,发起请求的客户端 IP,一般是公网 IP
VIP:Director Virtual IP #负载均衡器虚拟IP
DIP:Director IP #负载均衡器IP
RIP:Real Server IP #真正提供 web 服务的服务器的 IP
(1)直接路由模式(LVS-DR)
互联网使用比较多的一种模式
DR模式是通过改写请求报文的目标MAC地址,将请求发给真实服务器的,而真实服务器响应后的处理结果直接返回给客户端用户。同TUN模式一样,DR模式可以极大的提高集群系统的伸缩性。而且DR模式没有IP隧道的开销,对集群中的真实服务器也没有必要必须支持IP隧道协议的要求。但是要求调度器LB与真实服务器RS都有一块网卡连接到同一物理网段上,必须在同一个局域网环境。
DR模式特点
优点:和TUN(隧道模式)一样,负载均衡器也只是分发请求,应答包通过单独的路由方法返回给客户端。与VS-TUN相比,VS-DR这种实现方式不需要隧道结构,因此可以使用大多数操作系统做为物理服务器。
缺点:(不能说缺点,只能说是不足)要求负载均衡器的网卡必须与物理网卡在一个物理段上。
(2)NAT模式(LVS-NAT)
NAT模式是通过网络地址转换的方法来实现调度的。首先调度器(LB)接收到客户的请求数据包时(请求的目的IP为VIP),根据调度算法决定将请求发送给哪个后端的真实服务器(RS)。然后调度就把客户端发送的请求数据包的目标IP地址及端口改成后端真实服务器的IP地址(RIP),这样真实服务器(RS)就能够接收到客户的请求数据包了。真实服务器响应完请求后,查看默认路由(NAT模式下我们需要把RS的默认路由设置为LB服务器。)把响应后的数据包发送给LB,LB再接收到响应包后,把包的源地址改成虚拟地址(VIP)然后发送回给客户端。
NAT模式特点:
1、NAT技术将请求的报文和响应的报文都需要通过LB进行地址改写,因此网站访问量比较大的时候LB负载均衡调度器有比较大的瓶颈,一般要求最多之能10-20台节点
2、只需要在LB上配置一个公网IP地址就可以了。
3、每台内部的节点服务器的网关地址必须是调度器LB的内网地址。
4、NAT模式支持对IP地址和端口进行转换。即用户请求的端口和真实服务器的端口可以不一致。
(3)Full NAT模式(LVS-FullNAT)
客户端对VIP发起请求,Director接过请求发现是请求后端服务。Direcrot对请求报文做full-nat,把源ip改为Dip,把目标ip转换为任意后端RS的rip,然后发往后端,rs接到请求后,进行响应,响应源ip为Rip,目标ip还是DIP,又内部路由路由到Director,Director接到响应报文,进行full-nat。将源地址为VIP,目标地址改为CIP
请求使用DNAT,响应使用SNAT
Full NAT模式特点:
FULL NAT 模式也不需要 LBIP 和realserver ip 在同一个网段;
full nat 跟nat 相比的优点是:保证RS回包一定能够回到LVS;因为源地址就是LVS==> 不确定
full nat 因为要更新sorce ip 所以性能正常比nat 模式下降 10%
(4)IP隧道模式(LVS-Tunnel)
采用NAT模式时,由于请求和响应的报文必须通过调度器地址重写,当客户请求越来越多时,调度器处理能力将成为瓶颈。为了解决这个问题,调度器把请求的报文通过IP隧道转发到真实的服务器。真实的服务器将响应处理后的数据直接返回给客户端。这样调度器就只处理请求入站报文,由于一般网络服务应答数据比请求报文大很多,采用VS/TUN模式后,集群系统的最大吞吐量可以提高10倍。
它和NAT模式不同的是,它在LB和RS之间的传输不用改写IP地址。而是把客户请求包封装在一个IP tunnel里面,然后发送给RS节点服务器,节点服务器接收到之后解开IP tunnel后,进行响应处理。并且直接把包通过自己的外网地址发送给客户不用经过LB服务器。
ip隧道模式特点:
负载均衡器只负责将请求包分发给后端节点服务器,而RS将应答包直接发给用户。所以,减少了负载均衡器的大量数据流动,负载均衡器不再是系统的瓶颈,就能处理很巨大的请求量,这种方式,一台负载均衡器能够为很多RS进行分发。而且跑在公网上就能进行不同地域的分发。
隧道模式的RS节点需要合法IP,这种方式需要所有的服务器支持”IP Tunneling”(IP Encapsulation)协议,服务器可能只局限在部分Linux系统上。
四种模式性能比较:
因为DR模式 IP TUNELL 模式都是在package in 时经过LVS ,在package out是直接返回给client,所以二者的性能比NAT 模式高,但IP TUNNEL 因为是TUNNEL 模式比较复杂,其性能不如DR模式;
FULL NAT 模式因为不仅要更换 DST IP 还更换 SOURCE IP 所以性能比NAT 下降10%
4种模式的性能如下:DR ==> IP TUNNEL ==>NAT ==>FULL NAT
0条评论