集群: 将许多小的,性能较低的服务器做成一个大的性能高的超级服务器

集群分为负载均衡集群,高可用集群,高性能运算集群

LVS体系结构与工作原理描述

LVS集群负载均衡器接受服务的所有入站客户端计算机请求,并根据调度算法决定哪个集群节点应该处理回复请求。负载均衡器(简称LB)有时也被称为LVS Director(简称Director)

LVS虚拟服务器的体系结构:一组服务器在他们的前端有一个负载调度器(Load Balancer)。 负载调度器能无缝地将网络请求调度到真实服务器上,从而使得服务器集群的结构对客户是透明的,客户访问集群系统提供的网络服务就像访问一台高性能,高可用的服务器一样。客户程序不受服务器集群的影响不需要作任何修改。系统的伸缩性通过在服务集群中透明地加入和删除一个节点来达到,通过检测节点或服务进程故障和正确地重置系统达到高可用性。由于我们的负载调度技术是在Linux内核中实现的,我们称之为Linux虚拟服务器(Linux Virtual Server)。

常见基于IP的负载均衡工作模式

NET模式 :地址转换 只需要一个公网IP,安全性好,类似防火墙私有网络结构

TUN模式:IP隧道模式

DR直接路由模式       重点

FULLNAT淘宝的LVS应用模式   

Virtual Server via Network Address Translation(VS/NAT)

调度时:目的IP改成RIP(DNAT) 
返回时:源IP改成VIP(SNAT)

Virtual Server via Direct Routing(VS/DR)

通过改写请求报文的目标MAC地址,将请求发给真实服务器的,而真实服务器将响应后的处理结果直接返回给客户端用户。要求调度器LB与正式服务器RS节点都有一块网卡连在同一物理网段上,即必须在同一个局域网环境。

DR模式特点

  1. 通过在调度器LB上修改数据包的目的MAC地址实现转发。(源IP地址仍然是CIP,目的IP地址仍然是VIP)
  2. 请求的报文经过调度器,而RS响应处理后的报文无需经过调度器LB,因此,并发访问量大时使用效率很高(和NAT模式相比)
  3. 因DR模式是通过MAC地址的改写机制实现的转发,因此,所有RS节点和调度器LB只能在一个局域网LAN中(缺点)
  4. RS节点的默认网关不需要是调度器LB的DIP,而直接是IDC机房分配的上级路由器的IP(这是RS带有外网IP地址的情况),理论讲:只要RS可以出网即可,不是必须要配置外网IP
  5. 由于DR模式的调度器仅进行了目的MAC地址的改写,因此,调度器LB无法改变请求的报文的目的端口(缺点)
  6. 当前,调度器LB支持几乎所有的UNIX,LINUX系统,但目前不支持WINDOWS系统。真实服务器RS节点可以是WINDOWS系统。
  7. 总的来说DR模式效率很高,但是配置也较麻烦,因此,访问量不是特别大的公司可以用haproxy/nginx取代之。这符合运维的原则:简单,易用,高效。日2000W PV或并发请求1万以下都可以考虑用haproxy/nginx(LVS NAT模式)
  8. 直接对外的访问业务,例如:Web服务做RS节点,RS最好用公网IP地址。如果不直接对外的业务,例如:MySQl,存储系统RS节点,最好只用内部IP地址。

负载均衡架构:第一层敷在调度器,第二层服务器池,第三层共享存储

LVS 负载调度算法

1.轮询 rr

将请求按照顺序轮流分给各个节点,均等对待各个服务器,不管服务器的实际连接和负载

2.加权轮询 wrr

根据服务器的实际处理能力,轮流分配收到的请求访问,自动查询各节点的负载状况,动态调整其权重,.保证性能强的服务器承受更多访问

3.最少链接 lc

优先分配给连接数最少的节点

4.加权最少连接 wlc

服务器性能差异较大的情况下,可为真实服务器自动调整权重,权重高的承受更多连接

5.目的地址哈希调度dh

目的地址哈希调度,以目的地址为关键字查找一个静态hash表来获得需要的RS

6.源地址哈希调度sh

源地址哈希调度,以源地址为关键字查找一个静态hash表来获得需要的RS

LVS集群的特点

(1)功能:

采用了高效的Hash函数和垃圾回收机制,虚拟服务的设置数目没有限制,每个虚拟服务都有自己的服务器集。它支持持久的虚拟服务,并提供详尽的统计数据,如连接的处理速率和报文的流量等。针对大规模拒绝服务(Deny of service)攻击,实现了三种防卫策略:有基于内容请求分发的应用层交换软件KTCPVS,它也是在Linux内核中实现。有相关的集群管理软件对资源进行检测,能及时将故障屏蔽,实现系统的高可用性。主,从调度器能周期性地进行状态同步,从而实现更高的可用性。

(2)适用性:

后端真实服务器可运行任何支持TCP/IP的操作系统,包括Linux,各种Unix(如FreeBSD,Sun Solaris,HP Unix等),Mac/OS和windows NT/2000等。

负载均衡调度器LB能够支持绝大多数的TCP和UDP协议:

协议 内容
TCP HTTP,FTP,PROXY,SMTP,POP3,IMAP4,DNS,LDAP,HTTPS,SSMTP等
UDP DNS,NTP,TCP,视频,音频流播放协议等

无需对客户机和服务作任何修改,可适用大多数Internet服务。

调度器本身当前不支持windows系统。支持大多数的Linux和UINIX系统。

(3)性能:

LVS服务器集群系统具有良好的伸缩性,可支持几百万个并发连接。配置100M网卡,采用VS/TUN或VS/DR调度技术,集群系统的吞吐量可高达1Gbits/s;如配置千兆网卡,则系统的最大吞吐量可接近10Gbits/s

LVS-NAT案例

LVS-NAT部署

ipvsadm 工具参数:

-A  添加虚拟服务器

-D  删除虚拟服务器

-C  删除所有配置条目

-E  修改虚拟服务器

-L  列表查看

-n  不做解析,以数字形式查看

-c  输出当前IPVS连接

-a  添加真实服务器

-d  删除某个节点

-t  指定vip地址及tcp端口

-s  负载均衡调度算法 rr wrr lc wlc lblc lblcr dh sh sed nq 默认wlc

-m  NAT集群模式

-g  DR模式

-i  TUN模式

-w  设置权重(权重为0表示节点暂停)

(1)加载ip_vs模块,安装ipvsadm工具

一般使用分支二
分支一如果内核不支持ipvsadm
wget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.24.tar.gz # <===适合5.x系统
wget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.26.tar.gz # <===适合6.x系统
tar xf ipvsadm-1.26.tar.gz -C /usr/src/
yum -y install kernel-devel gcc gcc-c++        #安装管理ipvsadm内核的包
ls -ld /usr/src/kernels/2.6.32-431.el6.x86_64/     #出现此目录表示成功
drwxr-xr-x 22 root root 4096 8月 16 17:34 /usr/src/kernels/2.6.32-431.el6.x86_64/
ln -s /usr/src/kernels/2.6.32-431.el6.x86_64/ /usr/src/linux #做一个软连接
yum -y install libnl* popt*    #需要通过公网源安装
cd /usr/src/ipvsadm-1.26/
make;make install   #直接编译不需要./configure
lsmod | grep ip_vs   #执行完/sbin/ipvsadm就会有信息
ip_vs 125220 0
libcrc32c 1246 1 ip_vs
ipv6 317340 270 ip_vs,ip6t_REJECT,nf_conntrack_ipv6,nf_defrag_ipv6
#==>出现这个内容就表示LVS已经安装好,并加载到了内核 分支二
modprobe ip_vs        #加载ip_vs模块 cat /proc/net/ip_vs
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn yum -y install ipvsadm    #安装ipvsadm工具

此ln命令的链接路径要和uname -r输出结果内核版本对应,工作中如果做安装虚拟化可能有多个内核路径 
如果没有/usr/src/kernels/2.6.32-431.el6.x86_64/路径,很可能是因为缺少kernel-devel软件包。可通过yum进行安装 
centos5.x版本不能用ipvs1.26

(2)配置调度规则

ipvsadm -A -t 192.168.1.113: -s rr          #添加虚拟服务器 指定IP端口及负载均衡调度算法
ipvsadm -a -t 192.168.1.113: -r 192.168.50.152: -m -w 1    #添加真实服务器 指定权重1
ipvsadm -a -t 192.168.1.113: -r 192.168.50.155: -m -w

ipvsadm -L -n      #查看设置后的配置
IP Virtual Server version 1.2. (size=)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.1.113: rr
-> 192.168.50.152: Masq
-> 192.168.50.155: Masq /etc/init.d/ipvsadm save      #开启ipvsadm
chkconfig ipvsadm on      #开机自启动

(3)开启路由转发

sed -i '7s#0#1#' /etc/sysctl.conf      
sysctl -p

#web服务端的网关需要指向lvs调度器IP   相当于做了个防火墙规则 从外部公网访问进来的请求调度给私网内 web1和web2服务

LVS-DR部署

手工添加lvs转发

配置LVS虚拟VIP

ifconfig eth0: 192.168.50.6 broadcast 192.168.50.6 netmask 255.255.255.0 up

手工执行配置添加LVS服务并增加两台RS

ipvsadm -C                  #清空ipvs历史设置
ipvsadm --set #设置超时时间(tcp tcpfin udp)
ipvsadm -A -t 192.168.50.6: -s rr -p
#说明:
-A:添加一个虚拟路由主机(LB)
-t:指定虚拟路由主机的VIP地址和监听端口
-s:指定负载均衡算法
-p:指定会话保持时间
ipvsadm -a -t 192.168.50.6: -r 192.168.50.150: -g -w
ipvsadm -a -t 192.168.50.6: -r 192.168.50.149: -g -w
#说明:
-a:添加RS节点
-t:指定虚拟路由主机的VIP地址和监听端口
-r:指定RS节点的RIP地址和监听端口
-g:指定DR模式
-w:指定权值

查看lvs配置结果

ipvsadm -L -n
IP Virtual Server version 1.2. (size=)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.50.6: rr persistent
-> 192.168.50.150: Route
-> 192.168.50.149: Route

ipvs配置删除方法

ipvsadm -D -t 192.168.50.240: -s rr       #删除虚拟路由主机
ipvsadm -d -t 192.168.0.240: -r 192.168.0.223: #删除RS节点

 在web服务端手工绑定vip

ifconfig lo: VIP broadcast VIP netmask 255.255.255.255
route add -host VIP dev lo:

关于DR模式RS节点的ARP抑制的问题

  • 因为在DR模式下,RS节点和LVS同处一个局域网网段内。
  • 当网关通过ARP广播试图获取VIP的MAC地址的时候
  • LVS和节点都会接收到ARP广播并且LVS和节点都绑定了192.168.0.240这个VIP,所以都会去响应网关的这个广播,导致冲突现象。
  • 因此,我们需要对RS节点做抑制ARP广播的措施。
echo "" > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo "" > /proc/sys/net/ipv4/conf/lo/arp_announce
echo "" > /proc/sys/net/ipv4/conf/all/arp_ignore
echo "" > /proc/sys/net/ipv4/conf/all/arp_announce             #限制ARP广播

arp抑制技术参数说明

  • : arp_ignore-INTRGER
  • 定义对目标地址为本地IP的ARP询问不同的应答模式 
    • 0(默认值):回应任何网络接口上对任何本地IP地址的arp查询请求。
    • 1:只回答目标IP地址是来访网络接口本地地址的ARP查询请求
    • 2:只回答目标IP地址是来访网络接口本地地址的ARP查询请求,且来访IP必须在该网络接口的子网段内。
    • 3:不回应该网络界面的arp请求,而只对设置的唯一和连接地址做出回应。
    • 4-7:保留未使用
    • 8:不回应所有(本地地址)的arp查询。
  • :arp_announce-INTEGER
  • 对网络接口上,本地IP地址的发出的,ARP回应,作出相应级别的限制:确定不同程度的限制,宣布对来自本地源IP地址发出Arp请求的接口。 
    • 0(默认值):在任意网络接口(eth0,eth1,lo)上的任何本地地址
    • 1:尽量避免不在该网络接口子网段的本地地址做出arp回应,当发起ARP请求的源IP地址是被设置应该经由路由达到此网络接口的时候很有用。此时会检查来访IP是否为所有接口上的子网段内IP之一。如果该来访IP不属于各个网络接口上的子网段内,那么将采用级别2的方式来进行处理。
    • 2:对查询目标使用最适当的本地地址,在此模式下将忽略这个IP数据包的源地址并尝试选择能与该地址通信的本地地址,首要是选择所有的网络接口的子网中外出访问子网中包含该目标IP地址的本地地址。如果没有合适的地址被发现,将选择当前的发送网络接口或其他的有可能接受到该ARP回应的网络接口来进行发送。限制了使用本地的vip地址作为优先的网络接口。

RS节点Web服务器端自动配置脚本

#!/bin/bash
# RS_sever scripts
. /etc/rc.d/init.d/functions
VIP=192.168.0.240
case "$1" in
start)
echo "start LVS of REALServer IP"
interface="lo:`echo $VIP | awk -F "." '{print $4}'`"
/sbin/ifconfig $interface $VIP broadcast $VIP netmask 255.255.255.255 up
route add -host $VIP dev $interface
echo "" > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo "" > /proc/sys/net/ipv4/conf/lo/arp_announce
echo "" > /proc/sys/net/ipv4/conf/all/arp_ignore
echo "" > /proc/sys/net/ipv4/conf/all/arp_announce
;;
stop)
interface="lo:`echo $VIP | awk -F "." '{print $4}'`"
/sbin/ifconfig $interface down
echo "STOP LVS of REALServer IP"
echo "" > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo "" > /proc/sys/net/ipv4/conf/lo/arp_announce
echo "" > /proc/sys/net/ipv4/conf/all/arp_ignore
echo "" > /proc/sys/net/ipv4/conf/all/arp_announce
;;
*)
echo "Usage: $0 {start|stop}"
exit
esac

LVS集群的更多相关文章

  1. 负载均衡之LVS集群

    h3 { color: rgb(255, 255, 255); background-color: rgb(30,144,255); padding: 3px; margin: 10px 0px } ...

  2. LVS集群之NAT模式实现

    LVS集群之NAT模式实现 一.集群的种类 集群系统主要分为 1.HA:高可用集群,又叫双机热备.   (a)原理      2台机器A,B,正常是A提供服务,B待命闲置,当A宕机或服务宕掉,会切换至 ...

  3. LVS集群的体系结构

    2.LVS主要组成部分为: 负载调度器(load balancer/ Director),它是整个集群对外面的前端机,负责将客户的请求发送到一组服务器上执行,而客户认为服务是来自一个IP地址(我们可称 ...

  4. Linux系统(四)负载均衡LVS集群之NAT模式

    序言 提到LVS,就从章文嵩博士开始吧,反正也不知道如何下笔来写这一篇.章大博士,读博时候创建这个lvs软件项目,但是他提倡开源精神,在用户的建议和反馈中,这个花了他两周时间开发的开源软件不断得到改建 ...

  5. Linux系统(五)负载均衡LVS集群之DR模式

    序言 DR模式是lvs集群中三种负载均衡模式的其中一种,那么上一篇中我写啦关于NAT模式的搭建与原理,为什么还要有DR模式与IP隧道模式呢? 首先我们来看3张图.LVS/NAT模式如下图: LVS/I ...

  6. LVS集群之工作原理和调度算法(2)

      LVS的工作机制 LVS里Director本身不响应请求,只是接受转发请求到后方,Realservers才是后台真正响应请求. LVS 工作原理基本类似DNAT,又不完全相像,它是一种四层交换,默 ...

  7. LVS集群之NAT模式实例(3)

    LVS集群NAT模式实例 1. 实验拓扑图 DS 必须有两块网卡,需要在上面做NAT. 2. 实验环境 3台CentOS6.4 64bit的服务器. 类型 IP DR eth0:10.20.73.20 ...

  8. LVS集群DR模式实例(4)

    LVS集群DR模式实例 1. 实验拓扑图 2. 实验环境 3台CentOS6.4 64bit的服务器. 类型 IP DR eth0:10.20.73.20  VIP eth0:0 10.20.73.3 ...

  9. LVS集群TUN模式实例(5)

    LVS集群TUN模式实例 1. 实验拓扑图 2. 实验环境 4台CentOS6.2的服务器. 类型 IP DR eth0:10.20.73.20  VIP eth0:0 10.20.73.30 RS ...

  10. Linux系统(四)LVS集群负载均衡NAT模式

    序言 提到LVS,就从章文嵩博士开始吧,反正也不知道如何下笔来写这一篇.章大博士,读博时候创建这个lvs软件项目,但是他提倡开源精神,在用户的建议和反馈中,这个花了他两周时间开发的开源软件不断得到改建 ...

随机推荐

  1. Marketing Cloud里取得系统contact数目的API

    Marketing Cloud里的Contact标准tile(下图红色tile)上是没有当前系统contact数字显示的,请对比profile tile(下图黑色tile). 客户有需求希望在Laun ...

  2. 变种XSS:持久控制

    变种XSS:持久控制 tig3r · 2015/11/30 10:42 0x00 引言 首先声明,这不是一个新洞,看过 Homakov 文章(最后附)以及译文的人想必对这种漏洞有所了解. 但原文写的太 ...

  3. 基础网络之EfficientNet

    摘要: 一般情况下,我们都会根据当前的硬件资源来设计相应的卷积神经网络,如果资源升级,可以将模型结构放大以获取更好精度.我们系统地研究模型缩放并验证网络深度,宽度和分辨率之间的平衡以得到更好的性能表现 ...

  4. idea中iml文件的问题

    idea中iml文件的问题 iml文件是idea组织工程的文件, 里面记录了各种记录模块, 文件夹以及依赖的信息, 显示如下: <?xml version="1.0" enc ...

  5. CDQ 分治解决和点对有关的问题

    具体可以去这篇博客学习: https://oi-wiki.org/misc/cdq-divide/

  6. C++踩坑记录(一)std:;string的析构

    之前写服务端程序有一个往消息队列里面推json的过程,然后发现推进去C#端取到的无论如何都是个空指针 简单复现一下现场 string str1 = string("hello1") ...

  7. anguar @input绑定的属性变化

    Intercept @Input property change in Angular Bharat TiwariFollow Mar 15, 2018 this post is good for A ...

  8. 记录一下UILabel加载富文本 iOS

    一般情况下我们都习惯用webview加载富文本.但是webview比较消耗内存.然后发现其实本身可以用uilabel加载,性能还不错就记录下~~ 核心方法下面两个 -(NSMutableAttribu ...

  9. Python 字符串 (3) 持续更新

    字符串操作 虽然字符串也是一种序列,但是它和元组一样,不可变的.当你想对它修改时,会引发异常.如 >>> strings = "Let's go">> ...

  10. Windows下安装配置Apache+PHP+Mysql环境

    1.下载相关安装包 Apache下载: http://archive.apache.org/dist/httpd/binaries/win32/ ,选择httpd-2.2.25-win32-x86-n ...