Linux入门攻坚——40、Linux集群系统入门-lvs(1)

Cluster,集群,为了解决某个特定问题将多台计算机组合起来形成的单个系统。

这个单个集群系统可以扩展,系统扩展的方式:scale up,向上扩展,更换更好的主机;scale out,向外扩展,增加更多的主机;

集群类型:

LB:负载均衡集群,Load Balancing,并发处理能力

HA:高可用集群(冗余),High Availablility,在线时间/(在线时间+故障处理时间)

HP(HPC):高性能集群(高性能计算集群),High Performance(High Performance Computing Cluster),向量机,并行处理集群

Availablility=90%,95%,99%,99.9%,99.99%,...

集群之前,是大规模分布式处理。

集群或是分布式都是一个系统。

度量一个系统: 可扩展性、 可用性、 容量、性能

系统运维:可用 ------> 标准化 ------> 自动化

构建高可扩展性系统的重要原则:在系统内部尽量避免串行化和交互;

GSLB:Global Service Load Balancing,全局负载均衡

SLB:Service Load Balancing

总结:

分层;

分割;

分布式:分布式应用、分布式静态资源、分布式数据和存储、分布式计算;

LB集群的实现

硬件:

F5 BIG-IP、Citrix NetScaler、A10 A10、Array 、Redware、...

软件:

lvs、haproxy、nginx、ats(apache traffic server)、perbal、...

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

传输层:lvs,haproxy(mode tcp)

应用层:haproxy、nginx、ats、perbal

lvs:内核中进行的转发,工作于netfilter,负载均衡。(程序作者:章文嵩)

------linux virtual server,linux虚拟服务器,基于哪个协议的哪个端口进行分发。相应的后台真正进行服务的主机叫real server。

L4:四层交换,四层路由;

根据请求报文的目标IP和PORT将其转发至后端主机集群中的某一台主机(根据挑选算法);

netfilter:

PREROUTING --> INPUT

PREROUTING --> FORWARD --> POSTROUTING

OUTPUT --> FORWARD --> POSTROUTING

lvs工作于INPUT链上,定义了集群规则,然后强行转发到POSTROUTING链上。

ipvsadm/ipvs:lvs在程序上叫做ipvs

ipvsadm:用户空间的命令行工具,用于管理集群服务;

ipvs:工作于内核中netfilter INPUT钩子上;

主机是否提供lvs功能:

grep -i -A 10 'IPVS' /boot/config-3.10.0-1160.el7.x86_64

说明内核已经编译了IPVS模块,可以使用。

支持TCP、UDP,AH,ESP,AH_ESP,SCTP等诸多协议;

lvs arch:lvs架构

专用名称:

调度器:director,dispatcher,balancer

RS:Real Server

Client IP:CIP

Director Virtual IP:VIP

Director IP:DIP

Real Server IP:RIP

lvs type:

lvs-nat:基于DNAT,MASQUERADE

lvs-dr(direct routing):GATEWAY

lvs-tun(ip tunneling):IPIP

lvs-fullnat:

lvs-nat :多目标的DNAT(iptables);通过修改请求报文的目标IP地址(同时可能修改目标端口)至挑选出的某RS的RIP地址实现转发;请求和响应报文都经由director。

1)RS和DIP应该使用私网地址,且RS的网关要指向DIP;

2)请求和响应报文都要经由director转发; 极高负载的场景中,director可能会成为系统瓶颈;

3)支持端口映射;

4)RS可以使用任意OS;

5)RS的RIP和Director的DIP必须在同一IP网络;

关键在第2步,Director调度时可以按算法选择后台的任一台RS实现负载均衡。

lvs-dr :direct routing

通过修改请求报文的目标MAC地址进行转发;仅请求报文经由director,响应报文是由RS直接响应给Client。

Director:VIP,DIP

RS:RIP,VIP(在lo上,即本地回环接口上)

1)保证前端路由器将目标IP为VIP的请求报文发送给director;

解决方案:静态绑定、arptables、修改RS主机内核的参数,主要是使RS不响应对VIP的ARP查询。

2)RS的RIP可以使用私有地址,也可以使用公网地址;

3)RS跟Director必须在同一物理网络中;

4)请求报文经由Director调度,但响应报文一定不能经由Director;

5)不支持端口映射;

6)RS可以是大多数OS;

7)RS的网关不能指向DIP;

通过上面的示意图,dr模型主要是通过MAC地址实现。

lvs-tun :不修改请求报文的IP首部,而是通过在原有的IP首部(cip <--> vip)之外,再封装一个IP首部(dip <--> rip);

1)RIP,DIP,VIP全部都是公网地址;

2)RS的网关不能指向DIP;

3)请求报文必须经由Director调度,但响应报文必须不能经由Director;

4)不支持端口映射;

5)RS的OS必须支持隧道功能;

lvs-fullnat :Director通过同时修改请求报文的源和目的IP地址进行转发;

1)VIP是公网地址,RIP和DIP是私网地址,二者无须在同一网络中;

2)RS接收到的请求报文的源地址是DIP,因此要响应给DIP;

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

4)支持端口映射机制;

5)RS的OS可以使用任意OS;

http :stateless,http协议是无状态的协议

session和cookie:实现状态追踪,无状态变为有状态。在集群中,涉及如何在不同集群服务器中对session的保持。

session保持机制:

session绑定:将来自同一个用户的请求,始终导向同一个RS;可以基于两种依据IP和cookie:

source ip hash,基于源ip做哈希。

cookie,基于cookie。

session集群:

session复制到其他所有RS中,可能网络中充斥session复制信息,浪费带宽;

session服务器:

使用一台服务器单独存放session信息,又引入了单点问题。

lvs scheduler :lvs调度器,多种不同的调度算法

静态方法:仅根据算法本身进行调度;

RR:round robin,轮询,论调;

WRR:weighted rr,加权轮询

SH:source hash,实现session保持的机制;将来自于同一个IP的请求始终调度至同一RS;

DH:destination hash,将对同一个目标的请求始终发往同一个RS;

动态方法:根据算法及各RS的当前负载状态进行调度;

负载 Overhead=

LC:Least Connection,最少连接数;Overhead=Active*256+Inactive

WLC:Weighted LC,Overhead=(Active*256 + Inactive)/ weight

SED:Shortest Expection Delay,Overhead=(Active+1)*256 / weight

NQ:Never Queue,在RS有空时,依次按权重选择,然后按SED;

LBLC:Locality-Based LC,即动态的DH算法;正向代理情形下的cache server调度;

LBLCR:Locality-Based Least-Connection with Replication,带复制功能的LBLC算法;

ipvs的集群服务:

tcp,udp,ah,esp,ah_esp,sctp

1)一个ipvs主机可以同时定义多个cluster service;tcp、udp

2)一个cluster service上至少应该有一个real server;

定义时,指明lvs-type,以及lvs scheduler;

ipvsadm的用法:

管理集群服务:

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

service-address:

tcp:-t ip:port

udp:-u ip:port

fwm:-f mark

-s scheduler:默认为wlc

管理集群服务中的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:ip:[port]

lvs-type:-g --> gateway,dr;-i --> ipip,tun;-m --> masquerade,nat

查看和清空:

ipvsadm -C
ipvsadm -L|l [options]
-n:基于数字格式显示地址和端口;
-c:connection,显示ipvs连接
--stats:统计数据
--rate:速率
--exact:显示精确值

保存和重载:

ipvsadm -R
ipvsadm -S [-n]

置零计数器:

ipvsadm -Z [ -t|u|f service-address]

实操测试

模拟环境:

在RS1和RS2上安装好httpd服务,在Director上确保iptables是空的:

iptables -F -t filter -t nat -t mangle

确保Director上的转发功能开启:

添加规则

添加集群Director:

ipvsadm -A -t 192.168.61.129:80 -s rr

ipvsadm -L -n

添加RS:

ipvsadm -a -t 192.168.61.129:80 -r 192.168.147.129 -m

ipvsadm -a -t 192.168.61.129:80 -r 192.168.147.130 -m

保存规则、清空规则、重载规则:

修改Director调度算法:

ipvsadm -E -t 192.168.61.129:80 -s sh

修改RS:

ipvsadm -e -t 192.168.61.129:80 -r 192.168.147.129:8080 -m

这个命令一直不成功,提示No such destination,不知是什么原因

删除一个RS:

ipvsadm -d -t 192.168.61.129:80 -r 192.168.147.129

查询:

相关推荐
Chloe.Zz21 分钟前
Windows系统上创建Flask服务器
服务器
soragui23 分钟前
【ChatGPT】OpenAI 如何使用流模式进行回答
linux·运维·游戏
白云coy1 小时前
Redis 安装部署[主从、哨兵、集群](linux版)
linux·redis
Logintern091 小时前
Linux如何设置redis可以外网访问—执行使用指定配置文件启动redis
linux·运维·redis
娶不到胡一菲的汪大东1 小时前
Linux之ARM(MX6U)裸机篇----1.开发环境搭建
linux·运维·服务器
fat house cat_2 小时前
Linux环境下使用tomcat+nginx部署若依项目
linux·nginx·tomcat
大霞上仙2 小时前
lxml 解析xml\html
java·服务器·网络
shada2 小时前
Ubuntu 24.04 APT源配置详解
linux·ubuntu
monstercl2 小时前
Ubuntu16.04手动升级内核到5.15
linux