第一天 集群的介绍和lvs-nat集群与lvs-dr集群

集群为什么出现:为了解决大并发
纵向拓展:改变硬件环境(局限性大,可行不实际)
横向拓展:构建集群(利用负载均衡器,如LVS)
osi(应表会传网数物)7层

集群的分类
1:负载均衡集群(LB F5(如lvs))
2:高可用集群(HA)
3:高性能集群(HPC)
集群宗旨:可伸缩性,可靠性:可管理性

集群分类:
硬件集群:F5
软件集群:LVS(工作在osi第四层,传输层与应用层之间) Nginx(工作在osi第七层)
LVS三层结构
1层:director或balabcer负责调度器/分发器(作用:接受用户请求,转发给后台真时服务器改变ip地址=vip 并发量大,有可能成为集群瓶颈)
2层:服务器池 (Server Pool)
3层:共享存储(Shared Storage)

 

LVS-NAT 集群
什么是集群:集群是一组相互独立的、通过高速网络互联的计算机,它们构成了一
个组,并以单一系统的模式加以管理。(Cluster 就是一组计算机,它们作为一个整体向用户提供一组网络资源。这些单个的计算机系统就是集群的节点 node)。

LVS:Linux Virtual Server 的简写,意即 Linux 虚拟服务器,是一个虚拟的服务器集群系统此项目在 1998 年 5 月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一。

集群宗旨: 可伸缩性(Scalability);可靠性(Reliability);可管理性(Manageability)

 

集群分类

负载均衡集群: Load Balance 集群,简称 LB,当一台服务器无法满足需求的时候,两台或多台服务器同时为客户端提供服务,以分担需求,提供轮询工作查询 LB F5

高可用集群:High Availability 集群,简称 HA,比如一台服务器出现故障的时候,但是不影响客户端体验,另外一台服务器担当这台服务器的工作! CorosyncHeartbeat keepalived nginx apache haproxy

高性能集群:High Perfermance Computing 集群,简称 HPC,一台计算机是 4路,那么 100 台计算机同时来辅助计算处理,就是 400 颗 CPU! Hadoop

硬件集群和软件集群

硬件:F5 负载均衡器 https://f5.com/

软件:LVS (工作在 OSI 第四层,传输层) Nginx(工作在 OSI 第七层,应用层)LVS: 英文官方网站:http://www.linuxvirtualserver.org/中文官方网站:http://zh.linuxvirtualserver.org/ http://www.linuxvs.org/zh/

 

LVS 集群的三层结构

1:负载调度器/分发器 (load balancer)

他是整个集群对外的前端机,负责将客户的请求发送到一组服务器上执行,而客户认为服务是来自一个 IP 地址上的,我们称这个 IP 为虚拟 IP,Virtual IP=VIP。接收用户请求,转发给后端真实服务器,修改目标地址,balancer有可能成整个集群的瓶颈

2:服务器池 (Server Pool)

也就是下图中的 RealServer Group,是一组真正执行客户请求的服务器,执行程序可以是一组 WEB,FTP,MAIL 和 DNS 等等。

3:共享存储(Shared Storage)

它是为服务器池提供的一个共享存储区,这样很容易使得服务器拥有相同的内容,提供相同的服务!

瓶颈:Direcotor有可能成为我们系统瓶颈

DNS View

冗余:整个系统2份 GSLB,SLB Service Load Balancing

CDN

客户端

分发器

Server Pool
共享存储
RR方式查询

 

LVS 包转发方式

LVS 有三种转发方式:NAT(网络地址映射)、 IP Tunneling(IP 隧道)、 DirectRouting(直路由)。不同的转发模式决定了不同的 Cluster 的网络结构,FULLNAT

 

NAT:NAT 方式支持任何造作系统,以及私有网络,并且只需要一个公网 IP 即可!缺点是整个系统的性能受到限制,因为执行 NAT 的过程每一次都需要重写包,有一定的延迟。另外,大部分应用有 80%的数据是从服务器流向客户端,也就是用户的请求非常

短,而服务器的回应非常大,对负载均衡器形成非常大的压力,成为新的瓶颈!大致数据上:真实服务器的数目在 10 台和 20 台之间时,负载调度器将成为整个集群系统的瓶颈!

LVS-NAT 工作原理

原理:就是把客户端发来的数据包的 IP 头的目的地址,在负载均衡器上换成其中一台 RS 的 IP 地址,并发至此 RS 来处理,RS 处理完成后把数据交给经过负载均衡器,负载均衡器再把数据包的原 IP 地址改为自己的 IP,将目的地址改为客户端 IP 地址即可。

期间,无论是进来的流量,还是出去的流量,都必须经过负载均衡器。优点:集群中的物理服务器可以使用任何支持 TCP/IP 操作系统,只有负载均衡器需要一个合法的 IP 地址。缺点:扩展性有限。当服务器节点增长过多时,负载均衡器将成为整个系统的瓶颈,

因为所有的请求包和应答包的流向都经过负载均衡器。当服务器节点过多时,大量的数据包都交汇在负载均衡器那,速度就会变慢!

图解 LVS-NAT 工作原理-数据包流动过程文字描述:客户端访问服务器,访问请求
到达调度器,调度器通过网络地址转换,调度器重写请求报文的目标地址,根据预设的
调度算法,将请求分派给后端的 Real Server;Real Server 的相应包通过调度器时,报
文的源地址被重写,再返回给客户,完成整个负载调度过程。
步骤一,客户端访问 VIP1 的网站
发送的请求包是源地址是自己的 IP 地址 CIP,目标地址直接访问的是 Director 的 VIP,
请求显示某一个页面,是不去直接访问 RealServer 里面的 IP 地址(RealServer 的 IP
地址是私有的 IP 地址,需要经过 NAT 的方式将内部 IP 地址转化之后的 VIP 才能在公
网上运作)
步骤二:客户端访问调度器时,调度器通过网络地址转换,调度器重写请求报文的目标
地址,根据预设的调度算法,将请求分派给后端的真实服务器;
步骤三:真实服务器的响应报文通过调度器时,报文的源地址被重写,再返回给客户,
完成整个负载调度过程。
1: srcIP: CIP dstIP: VIP
2: srcIP:CIP dstIP: RIP
3: srcIP: RIP dstIP: CIP
4: srcIP:VIP dstIP:CIP
用 VMware 搭建 LVS NAT 模式
实验前期准备:
1、准备 3 台虚拟机,物理机充当客户端
2、 iptables -F , 清除规则 /etc/init.d/iptables save 保存
3、编辑/etc/selinux/config,关 SELinux(需要重启生效)
真实环境的实验拓扑
目前实验环境拓扑
配置分发器
配置网路环境,xuegod63 配置成分发器,根据拓扑,需要 2 张网卡(关机状态增加一
张),需要打开路由转发功能
eth0 192.168.1.63 模式:br0 模拟公网
eth1 192.168.2.63 模式:vmnet4 模拟内网
[root@XueGod63 ~]# vim /etc/sysctl.conf //打开路由转发
功能
#将
……
net.ipv4.ip_forward = 0
……
#改为
net.ipv4.ip_forward = 1
[root@XueGod63 ~]# sysctl -p // 加 载 配 置 , 是 指
sysctl.conf 里面的配置生效
[root@XueGod63 ~]# rpm -ivh /media/Packages/ipvsadm-1.26-
2.el6.x86_64.rpm //安装 LVS 管理工具
配置 Director 规则
[root@XueGod63 ~]# ipvsadm -A -t 192.168.1.63:80 -s rr //rr 表示轮询,
round-robin
-A,表示添加; -t,表示 TCP 的服务,后面书写格式为 VIP:Port; -s
设置调度算法
[root@XueGod63 ~]# ipvsadm -a -t 192.168.1.63:80 -r 192.168.2.62 -m
//添加一条 RealServer
[root@XueGod63 ~]# ipvsadm -a -t 192.168.1.63:80 -r 192.168.2.64 -m
//添加第二条 RealServer
-a,表示添加 real server 的地址;
-r 表示 realserver 地址;
-m 表示 masquerade,也就是 NAT 方式 LVS
查看规则与保存
[root@XueGod63 ~]# ipvsadm -L -n //配置及查看内核 IPVS 表和算法
的工具类似于 iptables
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.1.63:80 rr
-> 192.168.2.62:80 Masq 1 0 0
-> 192.168.2.64:80 Masq 1 0 0
InActConn 指非活跃连接数, TCP ESTABLISH 状态以外的连接都称为不活跃连接。
例如处于 SYN_RECV 状态的连接,处于 TIME_WAIT 状态的连接等
[root@XueGod63 ~]# /etc/init.d/ipvsadm save //保存规则
ipvsadm: Saving IPVS table to /etc/sysconfig/ipvsadm: [ OK ]
#可以看到保存路径
配置 Real Server
Real Server 配置 IP 过程略
XueGod62:
IP 地址:192.168.2.62,网关 192.168.2.63,DNS 192.168.2.63
[root@XueGod62 ~]# echo WEB62 > /var/www/html/index.html
[root@XueGod62 ~]# service httpd restart
XueGod64
IP 地址:192.168.2.64,网关 192.168.2.63,DNS 192.168.2.63
[root@XueGod64 ~]# echo WEB64 > /var/www/html/index.html
[root@XueGod64 ~]# service httpd restart
正是环境应该使用由对应测存储池,然后和我们的 REALSERVER 共享,来使得我们所
访问的资源是同步的
测试集群
物理机模拟客户端,浏览器访问 http://192.168.1.63,使用 F5 键刷新
测试结果是会在两个页面之间切换
ipvsadm 其他参数
--add-service -A add virtual service with option
#在内核的虚拟服务器表中添加一条新的虚拟服务器记录。也就是增加一台新
的虚拟服务器
--edit-service -E edit virtual service with options
#编辑内核虚拟服务器表中的一条虚拟服务器记录
--delete-service -D delete virtual service
#删除内核虚拟服务器表中的一条虚拟服务器记录
--clear -C clear the whole table
#清除内核虚拟服务器表中的所有记录
--restore -R restore rules from stdin
#恢复虚拟服务器规则
--save -S save rules to stdout
#保存虚拟服务器规则,输出为-R 选项可读的格式
--add-server -a add real server with options
#在内核虚拟服务器表的一条记录里添加一条新的真实服务器
--edit-server -e edit real server with options
#编辑一条虚拟服务器记录中的某条真实服务器记录
--delete-server -d delete real server
#删除一条虚拟服务器记录中的某条真实服务器记录
--list -L|-l list the table
#显示内核虚拟服务器表
--zero -Z zero counters in a service or all services
#虚拟服务表计数器清零
--set tcp tcpfin udp set connection timeout values
#设置连接超时值
--start-daemon start connection sync daemon
#启动同步守护进程。他后面可以是 master 或 backup,用来说明 LVS
Router 是 master 或是 backup。在这个功能上也可以采 keepalived 的 VRRP 功
能。
--stop-daemon stop connection sync daemon
#停止同步守护进程
--help -h display this help message
#显示帮助信息
ipvsadm 其他选项
--tcp-service -t service-address service-address is host[:port]
#说明虚拟服务器提供的是 tcp 的服务[vip:port] or [real-server-ip:port]
--udp-service -u service-address service-address is host[:port]
#说明虚拟服务器提供的是 udp 的服务[vip:port] or [real-server-ip:port]
--fwmark-service -f fwmark fwmark is an integer greater than zero
#说明是经过 iptables 标记过的服务类型。
--scheduler -s scheduler one of
rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq,the default scheduler is wlc.
#使用的调度算法,有这样几个选项,默认的调度算法是: wlc.
--persistent -p [timeout] persistent service
#持久稳固的服务。这个选项的意思是来自同一个客户的多次请求,将被同一
台真实的服务器处理。 timeout 的默认值为 300 秒
--netmask -M netmask persistent granularity mask
--real-server -r server-address server-address is host (and port)
#真实的服务器[Real-Server:port]
--gatewaying -g gatewaying (direct routing) (default)
#指定 LVS 的工作模式为直接路由模式(也是 LVS 默认的模式
--ipip -i ipip encapsulation (tunneling)
#指定 LVS 的工作模式为隧道模式
--masquerading -m masquerading (NAT)
#指定 LVS 的工作模式为 NAT 模式
- -weight -w weight capacity of real server
#真实服务器的权值
--u-threshold -x uthreshold upper threshold of connections
--l-threshold -y lthreshold lower threshold of connections
--mcast-interface interface multicast interface for connection sync
#指定组播的同步接口
--syncid sid syncid for connection sync
(default=255)
--connection -c output of current IPVS connections
#显示 LVS 目前的连接 如:ipvsadm -L -c
--timeout output of timeout (tcp tcpfin udp)
#显示 tcp tcpfin udp 的 timeout 值 如:ipvsadm -L --timeout
--daemon output of daemon information
#显示同步守护进程状态
--stats output of statistics information
#显示统计信息
--rate output of rate information
#显示速率信息
--thresholds output of thresholds information
--persistent-conn output of persistent connection info
--sort sorting output of service/server entries
#对虚拟服务器和真实服务器排序输出
--ops -O one-packet scheduling
--numeric -n numeric output of addresses and
ports
#输出 IP 地址和端口的数字形式
Ipvsadm 命令实例
[root@XueGod63 ~]# ipvsadm -L -n –c //查看客户端连接分发器和
Real Server 的情况
IPVS connection entries
pro expire state source virtual destination
TCP 01:57 TIME_WAIT 192.168.1.27:52955 192.168.1.63:80
192.168.2.64:80
TCP 01:57 TIME_WAIT 192.168.1.27:52953 192.168.1.63:80
192.168.2.64:80
TCP 01:58 TIME_WAIT 192.168.1.27:52959 192.168.1.63:80
192.168.2.64:80
TCP 01:57 TIME_WAIT 192.168.1.27:52952 192.168.1.63:80
192.168.2.62:80
TCP 01:57 TIME_WAIT 192.168.1.27:52956 192.168.1.63:80
192.168.2.62:80
TCP 01:57 TIME_WAIT 192.168.1.27:52954 192.168.1.63:80
192.168.2.62:80
TCP 01:55 TIME_WAIT 192.168.1.27:52951 192.168.1.63:80192
.168.2.64:80
TCP 01:58 TIME_WAIT 192.168.1.27:52958 192.168.1.63:80192
.168.2.62:80
TCP 01:57 TIME_WAIT 192.168.1.27:52957 192.168.1.63:80192
.168.2.64:80
[root@XueGod63 ~]# ipvsadm -Z //清空当前虚拟服务表的计数器[root@XueGod63 ~]# ipvsadm -L –n --stats //查看分发情况IP Virtual Server version


1.2.1 (size=4096)
Prot LocalAddress:Port Conns InPkts OutPkts InBytesOutBytes

-> RemoteAddress:Port
TCP 192.168.1.63:80 13 73 58 77295222

-> 192.168.2.62:80 7 36 28 40232564

-> 192.168.2.64:80 6 37 30 37062658

Conns (connections scheduled) 已经转发过的连接数InPkts
(incoming packets) 入包个数OutPkts
(outgoing packets) 出包个数InBytes
(incoming bytes) 入流量(字节)OutBytes
(outgoing bytes) 出流量(字节)[root@XueGod63 ~]# ipvsadm -L -n --rate //查看速率IP Virtual Server version

1.2.1 (size=4096)
Prot LocalAddress:Port CPS InPPS OutPPS InBPSOutBPS

-> RemoteAddress:PortTCP
192.168.1.63:80 1 9 7 897712

-> 192.168.2.62:80 1 4 3 419333

-> 192.168.2.64:80 1 5 4 478379

CPS (current connection rate) 每秒连接数InPPS
(current in packet rate) 每秒的入包个数OutPPS
(current out packet rate) 每秒的出包个数InBPS
(current in byte rate) 每秒入流量(字节)OutBPS
(current out byte rate) 每秒入流量(字节)[root@XueGod63 ~]# ipvsadm -d -t 192.168.1.63:80 -r 192.168.2.62//删除一台 RS[root@XueGod63 ~]# ipvsadm -C//清空规则





LVS:lvs-nat

         lvs-dr

         lvs-tun

         lvs-fullnat

 

LVS-DR集群

DR=Direct Routing(直接路由)

director 分配请求到不同的 real server。real server 处理请求后直接回应给用户,这样 director 负载均衡器仅处理客户机与服务器的一半连接。负载均衡器仅处理一半的连接,避免了新的性能瓶颈,同样增加了系统的可伸缩性。Direct Routing 由于采用物理层(修改 MAC 地址)技术,因此所有服务器都必须在一个物理网段中。

最能解决的问题:director瓶颈问题,性能是不是提升了一倍?

NAT:10-20

DR:100个

IP= IP Tunneling(IP 隧道)

director 分配请求到不同的 real server。real server 处理请求后直接回应给用户,这样 director 负载均衡器仅处理客户机于服务器的一半连接。IP Tunneling 技术极大地提高了 director 的调度处理能力,同时也极大地提高了系统能容纳的最大节点数,可以超过 100 个节点。real server 可以在任何 LAN 和WAN 上运行,这意味着允许地理上的分布,这在灾难恢复中有重要意义。服务器必须拥有正式的公网 IP地址用于与客户机直接通信,并且所有服务器必须支持 IP 隧道协议。

Direct Routing 和 IP Tunneling 区别

Direct Routing与IP Tunneling 相比,没有 IP 封装的开销,但由于采用物理层(修改 MAC 地址)技术,所有服务器都必须在一个物理网段。

LVS-DR工作原理拓扑

Lvs-dr的工作原理:Director收到请求,将请求转发给了我们的realserver,但是接下来的工作就是我们的realserver和我们的客户端进行通讯了,所以原理图如下

 

lvs-dr工作流程

工作原理也就是:MAC 转换过程 (过程,和实验IP没有关系)

实例场景设备清单: director 分发器,IP: 192.168.54.120, VIP : 192.168.57.126

 

1: client 基本信息: IP:192.168.57.135

       向目标 vip 发出链接请求,Director 接收。此时 IP 包头及数据帧头信息如下:

 

2: Director 分发器根据负载均衡算法选择一台 active 的 realserver(假设是 192.168.57.122),将此RIP 所在网卡的 mac 地址作为目标 mac 地址,发送到局域网里。此时 IP 包头及数据帧头信息如下:

 

整个过程不会修改IP报文的内容! [访问客户端无论多么复杂,我们可以认为客户端与LVS链接的时候属于同一网段的公网地址]

3: realserver(192.168.57.122)在局域网中收到这个帧,拆开后发现目标 IP(VIP)与本地匹配,于是处理这个报文。随后重新封装报文,发送到局域网。此时 IP 包头及数据帧头信息如下:

 

4: 如果 client 与 VS 同一网段,那么client(192.168.57.135)将收到这个回复报文。如果跨了网段,那么报文通过 gateway路由器经由 Internet 返回给用户。

归纳一下:1)接收client的请求,根据你设定的负载均衡算法选取一台realserver的ip;

2)以选取的这个ip对应的mac地址作为目标mac,然后重新将IP包封装成帧转发给这台RS;

3)在hash table中记录连接信息。

数据包、数据帧的大致流向是这样的:client --> VS --> RS --> client

 

总结:需要保证我们前段路由将我们所有目标地址为VIp的报文发往director

         RS可以使用私有地址,可以使用公网地址,但是diector和前段路由统一网段,且RS和director必须在统一物理网段!

        如果RS为私有地址,就必须保证RS可以通达外网,RS的网关必须指向出口路由

       请求的报文经过director,响应报文不经过director

 

LVS-DR集群

 

分发器IP配置

从拓扑图看出我们的eth0有连个IP地址,所以我们需要配置eht0和eth0:1两个IP

DIP===eth0===192.168.1.11                VIP===eth0:1===192.168.1.111

[root@pualinux11 ~]# cd /etc/sysconfig/network-scripts/

[root@pualinux11 network-scripts]# cp ifcfg-eth0 ifcfg-eth0:1

[root@pualinux11 network-scripts]# vim ifcfg-eth0

DEVICE=eth0

TYPE=Ethernet

UUID=4a887011-0d0d-4d90-9a48-6314af3eca79

ONBOOT=yes

NM_CONTROLLED=yes

BOOTPROTO=none

IPADDR=192.168.1.11

PREFIX=24

GATEWAY=192.168.1.254

DNS1=192.168.1.254

HWADDR=00:0C:29:2D:60:43        #若配置文件有MAC,必须和eth0:1的MAC一样

[root@pualinux11 network-scripts]# vim ifcfg-eth0:1

DEVICE=eth0:1                   #修改名称

UUID=4a887011-0d0d-4d90-9a48-6314af3eca79            

TYPE=Ethernet

ONBOOT=yes                      #开机启动

NM_CONTROLLED=yes

BOOTPROTO=none

IPADDR=192.168.1.111            #修改IP地址

PREFIX=24

GATEWAY=192.168.1.254

DNS1=192.168.1.254

DEFROUTE=yes

IPV4_FAILURE_FATAL=yes

IPV6INIT=no

HWADDR=00:0C:29:2D:60:43        #若配置文件有MAC,必须和eth0的MAC一样

[root@pualinux11 network-scripts]# ifdown eth0 ; ifup eth0

[root@pualinux11 network-scripts]# ifconfig                 //查看能否有两个IP地址

eth0      Link encap:Ethernet  HWaddr 00:0C:29:2D:60:43                        

          inet addr:192.168.1.11  Bcast:192.168.1.255  Mask:255.255.255.0

……

 

eth0:1    Link encap:Ethernet  HWaddr 00:0C:29:2D:60:43 

          inet addr:192.168.1.111  Bcast:192.168.1.255  Mask:255.255.255.0

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

两台RealServer的IP配置

[root@pualinux13 ~]# cd /etc/sysconfig/network-scripts/

[root@pualinux13 network-scripts]# cp ifcfg-lo ifcfg-lo:1

[root@pualinux13 network-scripts]# vim ifcfg-lo:1

DEVICE=lo:1                     #修改名称

IPADDR=192.168.1.111            #修改IP

NETMASK=255.255.255.255         #代表这台设备

ONBOOT=yes

NAME=loopback

[root@pualinux13 network-scripts]# ifdown lo ; ifup lo

[root@pualinux13 network-scripts]# ifconfig lo:1

lo:1      Link encap:Local Loopback 

          inet addr:192.168.1.111  Mask:255.255.255.255

          UP LOOPBACK RUNNING  MTU:16436  Metric:1

 

[root@pualinux15 ~]# cd /etc/sysconfig/network-scripts/

[root@pualinux15 network-scripts]# cp ifcfg-lo ifcfg-lo:1

[root@pualinux15 network-scripts]# vim ifcfg-lo:1

DEVICE=lo:1

IPADDR=192.168.1.111

NETMASK=255.255.255.255

ONBOOT=yes

NAME=loopback

[root@pualinux15 network-scripts]# ifdown lo ; ifup lo

[root@pualinux15 network-scripts]# ifconfig lo:1

lo:1      Link encap:Local Loopback 

          inet addr:192.168.1.111  Mask:255.255.255.255

          UP LOOPBACK RUNNING  MTU:16436  Metric:1

分发器配置LVS-DR规则

[root@pualinux11 network-scripts]# cd

[root@pualinux11 ~]# rpm -ivh /media/Packages/ipvsadm-1.26-2.el6.x86_64.rpm

[root@pualinux11 ~]# ipvsadm -A -t 192.168.1.111:80 -s rr

-t: TCP协议的集群

-u: UDP协议的集群

           -f: FWM: 防火墙标记

 [root@pualinux11 ~]# ipvsadm -a -t 192.168.1.111:80 -r 192.168.1.13:80 -g        //-g 表示--gatewaying,DR模式

[root@pualinux11 ~]# ipvsadm -a -t 192.168.1.111:80 -r 192.168.1.15:80 -g

[root@pualinux11 ~]# ipvsadm -L -n

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

TCP  192.168.1.111:80 rr

  -> 192.168.1.13:80              Route   1      0          0

  -> 192.168.1.15:80              Route   1      0          0

三个LVS 模式中,只有NAT模式需要开启 路由转发功能。 DR和TUN模式不需要开启。

测试数据站

[root@pualinux13 network-scripts]# cd

[root@pualinux13 ~]# vim /etc/sysctl.conf

net.ipv4.conf.eth0.arp_ignore = 1           #追加这两行

net.ipv4.conf.eth0.arp_announce = 2

net.ipv4.conf.all.arp_ignore = 1

net.ipv4.conf.all.arp_announce = 2

-----------------------------------------------------------------------------------

参数说明:

arp_ignore 为:1  只回答目标 IP 地址是访问本网络接口(eth0)的 ARP 查询请求。 

自己的理解:

在设置参数的时候将 arp_ignore 设置为 1,意味着当别人的 arp 请求过来的时候,如果接收的网卡设备上面没有这个 ip,就不做出响应,默认是 0,只要这台机器上面任何一个网卡设备上面有这个 ip,就响应arp 请求,并发送 mac 地址。

arp_announce  (宣告) 为 2 

对查询目标使用最适当的本地地址。例如,如果在 eth0 接口上接受到了一个 VIP 的 arp 请求包。内核判断这个 VIP 地址是不是 eth0 接口上的 IP 一样。如果一样,则回复这个包。如果不一样,就丢弃不回应。 或者使用命令:不过是临时生效

 echo 2 >  /proc/sys/net/ipv4/conf/eth0/arp_announce

 echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore

 

arp_announce:如何通告本地址,默认0,表示通过网络直连的接口地址

arp_ignore:如何接受arp请求,默认为0,如果你改为1,表示仅在请求的地址配置在请求的报文的接口进行响应

[root@pualinux13 ~]# sysctl -p

[root@pualinux13 ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0 | grep GATEWAY

GATEWAY=192.168.1.254                           #网关要正确

[root@pualinux13 ~]# yum install -y httpd

[root@pualinux13 ~]# echo Pualinux13 > /var/www/html/index.html

[root@pualinux13 ~]# service httpd restart

 

[root@pualinux15 network-scripts]# cd

[root@pualinux15 ~]# vim /etc/sysctl.conf

net.ipv4.conf.eth0.arp_ignore = 1                       #追加这四行

net.ipv4.conf.eth0.arp_announce = 2

net.ipv4.conf.all.arp_ignore = 1

net.ipv4.conf.all.arp_announce = 2

[root@pualinux15 ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0 | grep GATEWAY

GATEWAY=192.168.1.254                           #网关要正确

[root@pualinux15 ~]# yum install -y httpd

[root@pualinux15 ~]# echo Pualinxu15 > /var/www/html/index.html

[root@pualinux15 ~]# service httpd restart

 

注意,在前面我们重启网卡的时候,我们没有做ARP处理方案的时候,可能网卡是无法重启成功的,你也可以配置好VIP和Arp相关的处理方式之后,在重新启动,效果一样,只是一个启动顺序的问题而已!

测试集群运作

如果VMware模拟环境,这里你可能出现刷新一直都在一个页面,但你的配置确实很正常的话,那就没有问题,可以用Linux做轮询演示:

 

 

Linux下使用elinks做轮询演示:

[root@pualinux113 ~]# yum install -y elinks

[root@pualinux113 ~]# elinks http://192.168.1.111 –dump

Pualinux13

[root@pualinux113 ~]# elinks http://192.168.1.111 –dump

    Pualinux15

LVS集中调度模式

-s rr                轮询法                                         -s wrr  带权重的轮询

      -s lc                最少链接法                                   -s wlc  带权重的最少链接法

       -s lblc          基于本地的最少链接法                          -s dh            目标散列法

       -s sh             散列法                                                    -s sed          最短周期延迟法

       -s nq            永不排队法                                            -s=scheduler=调度的意思

调度散发配置后立即生效,就像iptables规则一样

rr轮询   round robin

       在服务器中无穷的循环中遍历

wrr带权重轮询 Weighted Round Robin 

       基于集群节点可以处理多少来分配给每个节点一个权重值。权重值为 2 的服务器将收到权重值为 1 的服务器的两倍的连接数量。如果服务器的权重为 0 ,则不会收到新的连接请求(但当前活动的已经建立的连接将不会丢失)。

lc最少链接法             Least-Connection

     当新的请求到达 director 时,director 查看活动和非活动的连接数量,以确定把请求分发给哪个服务器。director 将集群节点目前的活动连接数量 x256 再加上不活动的连接数量,得到节点的开销值。最低开销值的节点胜出,被分发给新的入站请求。(如果开销一样,则第一个节点被选中)

wlc带权重的最少链接法  Weighted Least-Connection

       先如上算出集群节点的开销值,然后除以分配给其的权重值,最小值节点胜出,将入站请求分发给它。

lblc基于本地的最少链接法           Locality-Based  Least-Connection

       基于局部的最小连接,当 real server 是缓存服务器时用得比较多

dh目标散列法    Destination Hashing

sh散列法     Source  Hashing

       同一个 ip 的客户端总是分发给同一个 real server。 让客户端总是能访问到自己的会话信息,这种机制叫会话保持。 基于 ip 地址标识客户端的缺点:很多内网用户会伪装成公网 ip,来访问服务器,不能人为的控制负载均衡。

       比较高级的方法是基于客户端提供我们的 session id 来实现会话保持。haproxy(做负载均衡的软件)可以实现基于会话信息来判断保持会话。

如何保持会话一致:如果总是保持和一个 RS 会话,这台 RS 如果故障了,要确定另一个 RS 也有会话信息,所有的 RS保持数据同步。

       会话同步的方法:所有的 RS 把自己的会话信息保存到数据库当中(memcached 软件)。

sed最短周期延迟法  Shortest Expected Delay 最短延时预测  (Ci+1)/Ui  Ci 连接数  Ui 权重值

       在 wlc 方法上做了轻微改进,这些服务使用 tcp,而且当群节点在处理每个请求时保持在活动状态。

计算方法: 每个休群节点的开销值是通过将活动的连接数加 1 计算的。然后开销值除以分配给每个节点的权重,以取得 SED 值,具有最低 SED 值的集群节点胜出。

nq永不排队法    Never  Queue

没有队列,分配请求给空闲的服务器,没有空闲的就找响应最快的,如果集群节点中没有活动的连接 ,不管每个集群节点 SED 计算值的结果,它始终被 分配置服务的新入站请求。

HTTP 的会话(session)信息:

cookies 客户端(client)自己保存缓存

会话(session)服务器(server)端保存

 

LVS DR wrr调度算法

实现我们访问,轮询的时候在15上轮询两次之后,13上一次,2:1的比例承担我们的访问负载!

算法配置

[root@pualinux11 ~]# ipvsadm -C

[root@pualinux11 ~]# ipvsadm -A -t 192.168.1.111:80 -s wrr

[root@pualinux11 ~]# ipvsadm -a -t 192.168.1.111:80 -r 192.168.1.13:80 -g -w 10

[root@pualinux11 ~]# ipvsadm -a -t 192.168.1.111:80 -r 192.168.1.15:80 -g -w 20

[root@pualinux11 ~]# ipvsadm -L -n –stats

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port               Conns   InPkts  OutPkts  InBytes OutBytes

  -> RemoteAddress:Port

TCP  192.168.1.111:80                    0        0        0        0        0

  -> 192.168.1.13:80                     0        0        0        0        0

  -> 192.168.1.15:80                     0        0        0        0        0

测试

物理机上刷新http://192.168.1.111,或者linux elinks测试

[root@pualinux113 ~]# elinks http://192.168.1.111 -dump

   Pualinux15

 [root@pualinux113 ~]# elinks http://192.168.1.111 -dump

   Pualinux15

 [root@pualinux113 ~]# elinks http://192.168.1.111 -dump

   Pualinux13

刷新的过程中我们发现,15的页面我们看到两次之后才会变为Pualinxu13,也就是访问了15两次之后才访问一次13

[root@pualinux11 ~]# ipvsadm -L -n –stats                    //状态说明问题

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port               Conns   InPkts  OutPkts  InBytes OutBytes

  -> RemoteAddress:Port

TCP  192.168.1.111:80                    36      216        0    22086        0

  -> 192.168.1.13:80                    12       72        0     7392        0

  -> 192.168.1.15:80                    24      144        0    14694        0

可以看到,一共36次连接,64承担了24次,62承担了12次,是2:1的关系,说明权重越大,获得的连接越多

LVS DR wrr 权重为0

[root@pualinux11 ~]# ipvsadm -C

[root@pualinux11 ~]# ipvsadm -A -t 192.168.1.111:80 -s wrr

[root@pualinux11 ~]# ipvsadm -a -t 192.168.1.111:80 -r 192.168.1.13 -g -w 0

[root@pualinux11 ~]# ipvsadm -a -t 192.168.1.111:80 -r 192.168.1.15 -g -w 20

客户单物理机刷新页面,多次之后查看

[root@pualinux11 ~]# ipvsadm -L -n --stats

P Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port               Conns   InPkts  OutPkts  InBytes OutBytes

  -> RemoteAddress:Port

TCP  192.168.1.111:80                    21      126        0    12936        0

  -> 192.168.1.13:80                      0        0        0        0        0

  -> 192.168.1.15:80                     21      126        0    12936        0

可以看到所有的链接都给了15,为0的权重不接收链接

此外:发现InPkts是有的,OutPkts为0,  因为数据包出去时,直接交给了 real server,而没有交给 Director!

网站压力测试命令

语法: ab -n 数字  -c 数字  http://链接

-n requests Number of requests to perform                                       #在测试会话中所执行的请求总个数。默认时,仅执行一个请求

-c concurrency Number of multiple requests to make                           #一次产生的请求个数,并发数。默认是一次一个。

[root@pualinux113 ~]# yum install -y httpd-tools

[root@pualinux113 ~]# ab -n 1000 -c 1000 http://192.168.1.111/ #共1000 个请求。 一次要执行 1000 个并发请求。

his is ApacheBench, Version 2.3 <$Revision: 655654 $>

Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/

Licensed to The Apache Software Foundation, http://www.apache.org/

 

Benchmarking 192.168.1.111(be patient)          #patient 耐心

Completed 100 requests

Completed 200 requests

Completed 300 requests

Completed 400 requests

Completed 500 requests

Completed 600 requests

Completed 700 requests

Completed 800 requests

Completed 900 requests

Completed 1000 requests

Finished 1000 requests                              # 完成1000个请求

 

Server Software:        Apache/2.2.15               # 被测试的 httpd 服务器版本:平台 apache 版本

Server Hostname:        192.168.1.111               # 192.168.1.11 服务器主机名

Server Port:            80                          # 服务器端口      

 

Document Path:          /                           # 测试的页面文档

Document Length:        13 bytes                    # 文档大小

 

Concurrency Level:      1000                            # 并发数

Time taken for tests:   2.919 seconds           # 整个测试花费的时间

Complete requests:      1000                        # 完成的请求数量

Failed requests:        0                           # 失败的请求数量

Write errors:           0

Total transferred:      280280 bytes                # 整个测试过程中总传输字节数

HTML transferred:       13013 bytes                 # 整个场景中的 HTML 内容传输量

Requests per second:    342.56[#/sec](mean)# 每秒处理请求数。

#大家最关心的指标之一,相当于服务器中的每秒事务数,后面括号中的 mean 表示这是一个平均值

Time per request:       2919.174[ms](mean)

#大家最关心的指标之二,平均请求响应时间,后面括号中的 mean 表示这是一个平均值

Time per request:       2.919 [ms] (mean, across all concurrent requests)   # 每个请求的时间

#2.919[毫秒](意思是说,在所有的并发请求)  每个请求实际运行时间的平均值。

#由于对于并发请求,cpu 实际上并不是同时处理的,而是按照每个请求获得的时间片逐个轮转处理的,所以基本上第一个 Time per request 时间约等于第二个 Time per request 时间乘以并发请求数

Transfer rate:          93.76 [Kbytes/sec] received     #传输速率,平均每秒网络上的流量,可以帮劣排除是否存在网络流量过大导致响应时间延长的问题

Connection Times (ms)       # 连接时间(毫秒)

              min  mean[+/-sd] median   max

Connect:        0  204 398.6      1    1077

Processing:    18  384 846.8     71    2816

Waiting:       17  382 847.0     70    2812

Total:         56  588 943.3     77    2907

 

Percentage of the requests served within a certain time (ms)    #在一定的时间内提供服务的请求的百分比(毫秒)

  50%     77

  66%    120

  75%   1119

  80%   1134

  90%   2850

  95%   2868

  98%   2880

  99%   2890

 100%   2907 (longest request)

 #整个场景中所有请求的响应情况。在场景中每个请求都有一个响应时间,其中 50%的用户响应时间小于77 毫秒,60% 的用户响应时间小于120 毫秒,最大的响应时间小于2907 毫秒

 三阶段第一天上课,内容有点多,老师麦不是很清晰,总体来说,对集群有了一个总体上的认识,知道了怎么搭建简单的集群实验

 

posted @ 2016-11-15 18:28  滕小白  阅读(228)  评论(0编辑  收藏  举报