Linux Cluster之LVS

一、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

clip_image001

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

LVS:ipvsadm/ipvs

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

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

clip_image002

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可以是任意系统。

clip_image003

2、lvs-dr:Direct Routing

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

clip_image004

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

clip_image006

4、其他查看示例

clip_image008

clip_image010

clip_image012

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

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:必须避免向非本网络通告;

clip_image013

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

a、网络结构

clip_image014

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、在客户端上做测试

clip_image016

十、基于FWM配置集群服务

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

clip_image018

clip_image020

此时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

clip_image022

十一:LVS持久链接(Persistence)

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

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

clip_image024

测试

clip_image025

mysql服务连接的也是RS2

clip_image027

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来配合完成。

原创文章,作者:M20-1钟明波,如若转载,请注明出处:http://www.178linux.com/57004

(0)
M20-1钟明波M20-1钟明波
上一篇 2016-11-02
下一篇 2016-11-02

相关推荐

  • 日志分析工具Awstats实战之Nginx篇-分析结果静态化

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://nolinux.blog.51cto.com/4824967/1316979 前言: Awstats 是在 SourceForge 上发展很快的一个基原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处…

    Linux干货 2016-08-15
  • Linux程序包管理(一)RPM使用

    Linux程序包管理 在早期我们使用源代码的方式安装软件时,都需要先把源程序代码编译成可执行的二进制应用程序,然后进行安装。意味着每次安装软件都需要经过 预处理 –> 编译 –> 汇编–> 链接, 这个复杂的过程。为简化安装步骤,程序提供商就在特定的系统上面编译好相关程序的安装文件并进行打包,提…

    Linux干货 2016-06-01
  • 文本及文件查找练习

    1、显示当前系统上root、fedora或user1用户的默认shell;     ~]# cat /etc/passwd | grep "^\(root\|fedora\|user1\)\>" | cut -d: -f1,7    root:/bin/…

    Linux干货 2016-10-24
  • 作业用户和组管理

    1、创建用户gentoo,附加组为bin和root,默认shell为 /bin/csh,注释信息为"Gentoo Distribution" 首先来分析下题目,创建一个gentoo用户,那我们这时候就想到了useradd命令,不错,就是这个命令,创建用户gentoo时会默认创建主组gentoo,那么想同时将用户gentoo加到root,b…

    Linux干货 2016-08-03
  • linux 文件管理命令

    cp 复制文件或者路径 单源复制: cp [OPTION]…[-T] SOUTCE DEST 如果DEST不存在:则事先创建此文件,并复制源文件的数据流到DEST中 如果DEST存在:   如果DEST是非目录文件:则覆盖目标文件; 如果DEST是目录,就在这个目录中创建一个同名的文件,把源数据复制到这个文件中。 多源复制: cp [O…

    Linux干货 2017-08-28
  • nginx的模块应用

    1.location的定义 (1)当location中午定义时,默认使用server中的相关定义。 (2)当locating中有了相关定义,此时则启用location中的定义的内容。 nginx -t检查配置文件是否有语法错误 nginx -s reload重载nginx (3)即使server中的root中的目录下有了/admin的目录,但是同时又在loc…

    Linux干货 2016-10-30