Linux Cluster之LVS

   2016-11-03 0
核心提示:一、Linux Cluster 基础: Cluster:计算机集合为解决某个特定问题组合起来形成的单个系统Linux Cluster类型:LB(Load Banlancing):负载均衡HA(High Availability):高可用。提高服务可用性,避免出现单点故障HP(High Performance):高性能可用性衡量

一、Linux Cluster 基础:

Cluster:计算机集合为解决某个特定问题组合起来形成的单个系统

Linux Cluster类型:

LB(Load Banlancing):负载均衡

HA(High Availability):高可用。提高服务可用性,避免出现单点故障

HP(High Performance):高性能

可用性衡量公式:

A=MTBF/(MTBF+MTTR)

MTBF:平均无故障时间

MTTR:平均故障修复时间

A的取值范围(0,1)

系统扩展方式:

Scale UP:向上扩展。提升设备性能

Scale Out:向外扩展。

二、LB CLuster:

1、LB Cluster的实现:

硬件:

F5 Big-IP

Citrix Netscaler

A10 A10

软件:

lvs:Linux Virtual Server

nginx

haproxy

ats:apache traffic server

perlbal

pound

基于工作的协议层次划分:

传输层(通用):基于DIP Dport分发,类似于四层交换机。主要根据目标端口

lvs

nginx:基于stream机制模拟

haproxy:基于mode tcp机制模拟

应用层(专用):根据请求的内容进行分发

proxy server:

http:nginx(upstream), httpd(balancer), haproxy(mode http), …

fastcgi:nginx, httpd, …

mysql:mysql-proxy, …

ats、perball、pound

用户的会话保持:

(1) session sticky

在服务器端维护session会话表

Source IP

Cookie

(2) session replication;

session cluster

(3) session server

三、LVS:Linux Virtual Server

VS:Virtual Server,Director,Dispatcher,Balancer

RS:Real Server,Upstream Server,backend server

Linux Cluster之LVS

VS:工作在TCP/IP第四层。其作用为根据请求报文的目标IP和目标协议及端口将其调度转发至某Real Server,遵循调度算法来挑选RS

LVS:ipvsadm/ipvs

ipvsadm:用户空间的命令行工具,规则管理器,用于管理集群服务及Real Server;

ipvs:工作于内核空间的netfilter的INPUT钩子之上的框架;

Linux Cluster之LVS

CIP<–>VIP==DIP<–>RIP

在VS上需要开启ipv4的端口转发功能

四、LVS集群的类型:

1)、lvs-nat:类似于多目标的DNAT,修改请求报文的目标IP

2)、lvs-dr:在原请求之外,通过封装新的mac首部进行转发

3)、lvs-tun:ipip隧道。在原请求ip报文之外新加一个IP首部

4)、lvs-fullnat:修改请求报文的源和目标IP。

1、lvs-nat:多目标IP的DNAT,通过将请求报文中的目标地址和目标端口修改为某挑出的RS的Rip和Port实现转发。

(1)RIP和DIP必须在同一个IP网络,且应该使用私网地址;RS的网关要指向DIP。

(2)请求报文和响应报文都必须经由Director抓发;Director易于称为系统瓶颈。

(3)支持端口映射,可修改请求报文的目标Port。

(4)VS必须是Linux系统,RS可以是任意系统。

Linux Cluster之LVS

2、lvs-dr:Direct Routing

通过为请求报文重新封装一个MAC首部进行转发,源MAC是DIP所在的接口的MAC,目标MAC是挑选出来的RS的RIP所在的接口的MAC地址;源IP/PORT以及目标IP/PORT均保持不变。

Linux Cluster之LVS

DR的最初目的:

客户的请求到达VR之后,由VS挑选出一个RS进行直接响应,此响应不再经由VR。由此,可以增加VR的并发请求。要实现此目的:需要在每个RS上配置一个VIP,但需确保RS上的VIP不发送广播报文,因此RS上的VIP需配置在lo接口上。

1)确保前段路由器将目标IP为VIP的请求报文发往VS。如何实现VIP地址不冲突。

a)在前端网关做静态绑定

b)在RS上使用arptables

c)在RS上修改内核参数以限制arp通告及应答级别

arp_announce

arp_ignore

2)RS的RIP可以使用私网地址,也可以是公网地址;RIP与DIP在同一网络

3)RS跟VS需要在同一物理网络

4)请求报文经由VS,但响应报文不能经由VS,即RIP的网关不能为DIP,而是由RS直接法网Client

5)不支持端口映射

3、lvs-tun:实现跨互联网通信。VS与RS不在同一网络。

转发方式:不修改请求报文的IP首部(CIP:VIP),而是在原IP报文之外在封装一个IP首部(DIP:RIP),再将报文发送给挑选出的RS。

1)DIP、VIP、RIP都应该是公网地址

2)RS的网关不能执行DIP

3)请求报文经由VS,但响应不经由VS,而是RS直接发送给客户端

4)不支持端口映射

5)RS需支持隧道功能

4、lvs-fullnat:

通过同时修改请求报文的源IP地址和目标IP地址进行转发;

CIP –> DIP

VIP –> RIP

(1) VIP是公网地址,RIP和DIP是私网地址,且通常不在同一IP网络;因此,RIP的网关一般不会指向DIP;

(2) RS收到的请求报文源地址是DIP,因此,只需响应给DIP;但Director还要将其发往Client;

(3) 请求和响应报文都经由Director;

(4) 支持端口映射;

注意:此类型默认不支

五、LVS调度方法

ipvs scheduler:根据其调度时是否考虑各RS当前的负载状态,可分为静态方法及动态方法

1、静态方法:

RR:RoundRorbin,轮询

WRR:Weighted RR。加权轮询。权重越大,意味着其负载能力越强。

SH:Source Hashing,实现session sticky,源地址hash;将来自同一个ip地址的请求始终发往第一次挑中的RS,从而实现会话绑定。应用场景:实现会话绑定

DH:Destination Hash,目标地址hash,将发往同一目标地址的请求始终发至第一次挑中的RS。应用场景:缓存服务器

2、动态方法:主要根据每RS当前的负载状态及调度算法进行调度

LC(Least Connections):最少连接。

Overhead=activeconns*256+inactiveconns

overhead值小的获胜

WLC:Weighted LC

Overhead=(activeconns*256+inactiveconns)/weight

overhead值小的获胜

SED:Shortest Expection Delay

Overhead=((activeconns+1)*256)/weight

NQ:Never Queue

每台RS先接受一个请求,之后再按SED算法进行挑选。

LBLC:Locally-Based LC,动态的DH算法

LBLCR:LBLC with Replication,带复制功能的LBLC

六、使用ipvsadm管理lvs

1、管理集群服务:增、改、删;

增、改:ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]] 删:ipvsadm -D -t|u|f service-address

service-address: VR服务器地址

-t|u|f:

-t: TCP协议的端口,VIP:TCP_PORT

-u: TCP协议的端口,VIP:UDP_PORT

-f:firewall MARK,是一个数字;

[-s scheduler]:指定集群的调度算法,默认为wlc;

2、管理集群上的RS:增、改、删;

增、改:ipvsadm -a|e -t|u|f service-address -r server-address [-g|i|m] [-w weight]

删:ipvsadm -d -t|u|f service-address -r server-address

server-address:rip[:port]

选项:

设定lvs类型:

-g: gateway, dr类型

-i: ipip, tun类型

-m: masquerade, nat类型

-w weight:设定权重;

3、清空定义的所有内容:ipvsadm -C

4、查看:

ipvsadm -L|l [options]

–numeric, -n:numeric output of addresses and ports

–exact:expand numbers (display exact values)

–connection, -c:output of current IPVS connections

–stats:output of statistics information

–rate :output of rate information

5、保存和重载:

ipvsadm -S = ipvsadm-save

ipvsadm -R = ipvsadm-restore

七、配置lvs-nat示例

实验环境:

VS CentOS6.8 interface:vmnet1,桥接网络 DIP:192.168.40.90 VIP:10.1.154.166

RS1 CentOS6.8 interface:vmnet1 RIP:192.168.40.100

RS2 CentOS6.8 interface:vmnet1 RIP:192.168.40.101

配置步骤:

1、确保RS1、RS2、VS三台服务器的时间是同步的。

2、在RS1配置IP地址,配置httpd服务,指定默认路由为DIP;RS2上同样的配置。

3、在VS上开启端口转发功能,安装ipvsadm,配置ipvsadm。

ipvsadm -A -t 10.1.154.166:80 -s rr

ipvsadm -a -t 10.1.154.166 -r 192.168.40.100:80 -m

ipvsadm -a -t 10.1.154.166 -r 192.168.40.101:80 -m

Linux Cluster之LVS

4、其他查看示例

Linux Cluster之LVS

Linux Cluster之LVS

Linux Cluster之LVS

八、负载均衡集群设计要点

1、是否需要会话保持

2、是否需要共享存储

共享存储解决方案:NAS、SAN、DS(分布式存储)

数据同步:rsync(不适用于数据量较大场景)+inotify实现数据同步

九、LVS-DR的实现

1、DR模型中,VR和SR上均需要配置VIP,解决地址冲突的方式有三种:

(1) 在前端网关做静态绑定;

(2) 在各RS使用arptables;

(3) 在各RS修改内核参数,来限制arp响应和通告的级别;

限制响应级别:arp_ignore

0:默认值,表示可使用本地任意接口上配置的任意地址进行响应;

1: 仅在请求的目标IP配置在本地主机的接收到请求报文接口上时,才给予响应;

限制通告级别:arp_announce

0:默认值,把本机上的所有接口的所有信息向每个接口上的网络进行通告;

1:尽量避免向非直接连接网络进行通告;

2:必须避免向非本网络通告;

Linux Cluster之LVS

2、LVS-DR实验1:DIP、VIP、RIP属于同一网络

a、网络结构

Linux Cluster之LVS

b、在RS1上的配置:

1)配置内核参数,限制arp响应及通告。

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

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

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

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

2)在lo网卡上配置VIP

ifconfig lo:0 192.168.154.200 netmask 255.255.255.255

3)配置主机路由

route add -host 192.168.154.200 lo

4)开启httpd服务

c、RS2上的配置同RS1

d、在VS上配置:

1)配置VIP

ifconfig eth1:0 192.168.154.200 netmask 255.255.255.255

2)配置ipvsadm

ipvsadm -A -t 192.168.154.200:80 -s wrr

ipvsadm -a -t 192.168.154.200:80 -r 192.168.154.127:80 -g -w 1

ipvsadm -a -t 192.168.154.200:80 -r 192.168.154.128:80 -g -w 2

e、在客户端上做测试

Linux Cluster之LVS

十、基于FWM配置集群服务

在RS1、RS2上新增mysql服务,将其定义为一个集群。

Linux Cluster之LVS

Linux Cluster之LVS

此时http与mysql集群并不会被当作一个集群服务进行调度,如何实现将多个服务使用同一个集群服务来调度。需要用到FWM

FWM:FireWall Mark

借助于防火墙标记来分类报文,而后基于标记定义集群服务;可将多个不同的应用使用同一个集群服务进行调度;

配置步骤

1、在防火墙上打标记

iptables -t mangle -A PREROUTING -d 192.168.154.200 -p tcp -m multiport –dports 80,3306 -j MARK –set-mark 11

2、基于标记配置ipvs

ipvsadm -A -f 11 -s wrr

ipvsadm -a -f 11 -r 192.168.154.127 -g -w 1

ipvsadm -a -f 11 -r 192.168.154.128 -g -w 1

Linux Cluster之LVS

十一:LVS持久链接(Persistence)

持久连接模板:实现无论使用任何算法,在一定时间之内,实现将来自同一个ip地址的请求始终发往同一个RS。

ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]]

Linux Cluster之LVS

测试

Linux Cluster之LVS

mysql服务连接的也是RS2

Linux Cluster之LVS

port Affinity:

每端口持久:每集群服务单独定义,并定义其持久性;

每防火墙标记持久:基于防火墙标记定义持久的集群服务;可实现将多个端口上的应用统一调度,即所谓的port Affinity;

每客户端持久:基于0端口定义集群服务,即将客户端对所有应用的请求统统调度至后端主机,而且可使用持久连接进行绑定;

十二:ipvsadm规则的保存与重载

1、保存:建议保存至/etc/sysconfig/ipvsadm

ipvsadm-save > /PATH/TO/IPVSADM_FILE

ipvsadm -S > /PATH/TO/IPVSADM_FILE

systemctl stop ipvsadm.service

2、重载:

ipvsadm-restore < /PATH/FROM/IPVSADM_FILE

ipvsadm -R < /PATH/FROM/IPVSADM_FILE

systemctl restart ipvsadm.service

考虑:

(1) Director不可用,整个系统将不可用;SPoF单点故障

解决方案:高可用

keepalived

heartbeat/corosync

(2) 某RS不可用时,Director依然会调度请求至此RS;

解决方案:对各RS的健康状态做检查,失败时禁用,成功时启用;

keepalived

heartbeat/corosync, ldirectord

检测方式:

(a) 网络层检测;ping

(b) 传输层检测,端口探测;

(c) 应用层检测,请求某关键资源;

测试多次,间隔测试,多次失败,判断失败

请求超时时间,请求时间间隔,请求次数。

ok –> failure

failure –> ok

但,director无法完成健康状态检测,需要keepalived来配合完成。

 
标签: LVS Linux
反对 0举报 0 评论 0
 

免责声明:本文仅代表作者个人观点,与乐学笔记(本网)无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
    本网站有部分内容均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,若因作品内容、知识产权、版权和其他问题,请及时提供相关证明等材料并与我们留言联系,本网站将在规定时间内给予删除等相关处理.

点击排行