热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

LinuxLVS

[toc]一、Cluster概念业务系统扩展方式:ScaleUP:向上扩展,增强设备的性能ScaleOut:向外扩展,增加设备,调度分配问题,即Cluster1.1集群(clust


目录



  • 一、LVS介绍

    • 1.1 工作原理:VS根据请求报文的目标IP和目标协议及端口将其调度转发至某RS,根据调度算法来挑选RS


  • 二、lvs集群的类型

    • 2.1 LVS-NAT

    • 2.2 LVS-DR模式

    • 2.3 LVS-TUN

    • 2.4 LVS-FULLNAT

    • 2.5 LVS工作模式总结


  • 三、 ipvs scheduler负载均衡调度算法

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

    • 3.2 动态方法:主要根据每RS当前的负载状态及调度算法进行调度 Overhead=value 较小的RS将被调度


  • 四、ipvsadm常用管理命令

    • 4.1 ipvsadm包组成

    • 4.2 ipvsadm命令


  • 五、负载均衡集群设计时要注意的问题

  • 六、FireWall Mark

  • 七、持久连接

  • 八、LVS高可用性

    • 8.1 lvs高可用性

    • 8.2 ldirectord





一、LVS介绍

官网:http://www.linuxvirtualserver.org/

lvs集群类型中的术语:

LVS:Linux ,Virtual Server负载调度器,集成内核

VS: Virtual Server,Director Server(DS),Dispatcher(调度器),Load Balancer,负责调度

RS: Real Server,, upstream server(nginx),backend server(haproxy),负责真正提供服务

L4:四层路由器或交换机

CIP:Client IP

VIP: Virtual serve IP VS外网的IP

DIP: Director IP VS内网的IP

RIP: Real server IP

访问流程:CIP <--> VIP == DIP <--> RIP

1.1 工作原理:VS根据请求报文的目标IP和目标协议及端口将其调度转发至某RS,根据调度算法来挑选RS

iptables/netfilter:

iptables:用户空间的管理工具

netfilter:内核空间上的框架

流入:PREROUTING --> INPUT

流出:OUTPUT --> POSTROUTING

转发: PREROUTING --> FORWARD --> POSTROUTING

DNAT:目标地址转换; PREROUTING

技术分享图片

二、lvs集群的类型

lvs: ipvsadm/ipvs

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

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

lvs集群的类型:

lvs-nat:修改请求报文的目标IP,多目标IP的DNAT

lvs-dr:操纵封装新的MAC地址

lvs-tun:在原请求IP报文之外新加一个IP首部

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

2.1 LVS-NAT

lvs-nat:

本质是多目标IP的DNAT,通过将请求报文中的目标地址和目标端口修改为某挑出的RS的RIP和PORT实现转发

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

(2)请求报文和响应报文都必须经由Director转发,Director易于成为系统瓶颈

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

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

技术分享图片

技术分享图片

技术分享图片

2.2 LVS-DR模式

LVS-DR:Direct Routing,直接路由,LVS默认模式,应用最广泛,通过为请求报文重新封装一个MAC首部进行转发,源MAC是DIP所在的接口的MAC,目标MAC是某挑选出的RS的RIP所在接口的MAC地址;源IP/PORT,以及目标IP/PORT均保持不变

(1) Director和各RS都配置有VIP

(2) 确保前端路由器将目标IP为VIP的请求报文发往Director

在前端网关做静态绑定VIP和Director的MAC地址

在RS上使用arptables工具

arptables -A IN -d $VIP -j DROP

arptables -A OUT -s $VIP -j mangle --mangle-ip-s $RIP

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

/proc/sys/net/ipv4/conf/all/arp_ignore

(3)RS的RIP可以使用私网地址,也可以是公网地址;RIP与

DIP在同一IP网络;RIP的网关不能指向DIP,以确保响应报文

不会经由Director

(4)RS和Director要在同一个物理网络

(5)请求报文要经由Director,但响应报文不经由Director,

而由RS直接发往Client

(6)不支持端口映射(端口不能修败)

(7)RS可使用大多数OS系统

技术分享图片

技术分享图片

技术分享图片

2.3 LVS-TUN

lvs-tun:

转发方式:不修改请求报文的IP首部(源IP为CIP,目标IP为VIP),而在原IP报文之外再封装一个IP首部(源IP是DIP,目标IP是RIP),将报文发往挑选出的目标RS;RS直接响应给客户端(源IP是VIP,目标IP是CIP)

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

(2) RS的网关一般不能指向DIP

(3) 请求报文要经由Director,但响应不能经由Director

(4) 不支持端口映射

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

技术分享图片

技术分享图片

2.4 LVS-FULLNAT

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

CIP --> DIP

VIP --> RIP

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

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

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

(4) 支持端口映射

注意:此类型kernel默认不支持

2.5 LVS工作模式总结

技术分享图片

三、 ipvs scheduler负载均衡调度算法

ipvs scheduler:根据其调度时是否考虑各RS当前的负载状态

两种:静态方法和动态方法

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

1、RR:roundrobin,轮询

2、WRR:Weighted RR,加权轮询

3、SH:Source Hashing,实现session sticky,源IP地址hash;将来自于同一个IP地址的请求始终发往第一次挑中的RS,从而实现会话绑定

4、DH:Destination Hashing;目标地址哈希,将发往同一个目标地址的请求始终转发至第一次挑中的RS,典型使用场景是正向代理缓存场景中的负载均衡,如:宽带运营商

3.2 动态方法:主要根据每RS当前的负载状态及调度算法进行调度 Overhead=value 较小的RS将被调度

1、LC:least connections 适用于长连接应用

Overhead=activeconns256+inactiveconns

2、WLC:Weighted LC,默认调度方法

Overhead=(activeconns
256+inactiveconns)/weight

3、SED:Shortest Expection Delay,初始连接高权重优先

Overhead=(activeconns+1)*256/weight

4、NQ:Never Queue,第一轮均匀分配,后续SED

5、LBLC:Locality-Based LC,动态的DH算法,使用场景:根据负载状态实现正向代理

6、LBLCR:LBLC with Replication,带复制功能的LBLC解决LBLC负载不均衡问题,从负载重的复制到负载轻的RS

四、ipvsadm常用管理命令

LVS全称为Linux Virtual Server,工作在ISO模型中的第四层,由于其工作在第四层,因此与iptables类似,必须工作在内核空间上。因此lvs与iptables一样,是直接工作在内核中的,叫ipvs,ipvs支持的协议:TCP, UDP, AH, ESP, AH_ESP, SCTP,主流的linux发行版默认都已经集成了ipvs,因此用户只需安装一个管理工具ipvsadm即可。

查看内核是否已经集成ipvs:

grep -i "ipvs" /boot/config-VERSION-RELEASE.x86_64

4.1 ipvsadm包组成

程序包:ipvsadm

Unit File: ipvsadm.service

主程序:/usr/sbin/ipvsadm

规则保存工具:/usr/sbin/ipvsadm-save

规则重载工具:/usr/sbin/ipvsadm-restore

配置文件:/etc/sysconfig/ipvsadm-config

4.2 ipvsadm命令

ipvsadm命令:

核心功能:

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

集群服务的RS管理:增、删、改

查看

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

[-M netmask] [--pe persistence_engine] [-b sched-flags]

ipvsadm -D -t|u|f service-address 删除

ipvsadm –C 清空

ipvsadm –R 重载

ipvsadm -S [-n] 保存

ipvsadm -a|e -t|u|f service-address -r server-address [options]

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

ipvsadm -L|l [options]

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


  • 集群服务管理:增、删、改

    增、改:

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

    删除:

    ipvsadm -D -t|u|f service-address

    service-address:

    -t|u|f:

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

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

    -f:firewall 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:rip[:port] 如省略port,不作端口映射

    选项:

    lvs类型:

    -g: gateway, dr类型,默认

    -i: ipip, tun类型

    -m: masquerade, nat类型

    -w weight:权重


清空定义的所有内容:ipvsadm –C

清空计数器:ipvsadm -Z [-t|u|f service-address]

查看:ipvsadm -L|l [options]

--numeric, -n:以数字形式输出地址和端口号

--exact:扩展信息,精确值

--connection,-c:当前IPVS连接输出

--stats:统计信息

--rate :输出速率信息

ipvs规则: /proc/net/ip_vs

ipvs连接:/proc/net/ip_vs_conn

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

ipvsadm-save > /PATH/TO/IPVSADM_FILE

ipvsadm -S > /PATH/TO/IPVSADM_FILE

systemctl stop ipvsadm.service

重载:

ipvsadm-restore
ipvsadm -R
systemctl restart ipvsadm.service

五、负载均衡集群设计时要注意的问题

负载均衡集群设计时要注意的问题

(1) 是否需要会话保持

(2) 是否需要共享存储

共享存储:NAS, SAN, DS(分布式存储)

数据同步:


  • lvs-nat:

    设计要点:

(1) RIP与DIP在同一IP网络, RIP的网关要指向DIP

(2) 支持端口映射

(3) Director要打开核心转发功能


  • lvs-dr :

    DR模型中各主机上均需要配置VIP,解决地址冲突的方式有三种:

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

(2) 在各RS使用arptables

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


  • 限制响应级别:arp_ignore

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

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

  • 限制通告级别:arp_announce

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

    1:尽量避免将接口信息向非直接连接网络进行通告

    2:必须避免将接口信息向非本网络进行通告

    技术分享图片

    技术分享图片


六、FireWall Mark

FWM:FireWall Mark

MARK target 可用于给特定的报文打标记

--set-mark value

其中:value 为十六进制数字

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

实现方法:

在Director主机打标记:

iptables -t mangle -A PREROUTING -d $vip -p

$proto –m multiport --dports $port1,$port2,… -j MARK --set-mark NUMBER

在Director主机基于标记定义集群服务:

ipvsadm -A -f NUMBER [options]

七、持久连接

session 绑定:对共享同一组RS的多个集群服务,需要统一进行绑定,lvs sh算法无法实现

持久连接( lvs persistence )模板:实现无论使用任何调度算法,在一段时间内(默认360s ),能够实现将来自同一个地址的请求始终发往同一个RS

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


  • 持久连接实现方式:

    每端口持久(PPC):每个端口对应定义为一个集群服务,每集群服务单独调度

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

    每客户端持久(PCC):基于0端口(表示所有服务)定义集群服务,即将客户端对所有应用的请求都调度至后端主机,必须定义为持久模式


八、LVS高可用性

8.1 lvs高可用性

1 Director不可用,整个系统将不可用;SPoF Single Point of Failure

解决方案:高可用

keepalived heartbeat/corosync

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

解决方案: 由Director对各RS健康状态进行检查,失败时禁用,成功时启用

keepalived heartbeat/corosync ldirectord

检测方式:

(a) 网络层检测,icmp

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

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

RS全不用时:backup server, sorry server

8.2 ldirectord

ldirectord:监控和控制LVS守护进程,可管理LVS规则

包名:ldirectord-3.9.6-0rc1.1.1.x86_64.rpm

文件:

/etc/ha.d/ldirectord.cf 主配置文件

/usr/share/doc/ldirectord-3.9.6/ldirectord.cf 配置模版

/usr/lib/systemd/system/ldirectord.service 服务

/usr/sbin/ldirectord 主程序

/var/log/ldirectord.log 日志

/var/run/ldirectord.ldirectord.pid pid文件

技术分享图片


推荐阅读
  • 架构设计:负载均衡层设计方案之负载场景和解决方式篇
    来自:JAVA入门中https:blog.csdn.netyinwenjiearticledetails46605451在上一篇《标准Web系统的架构分层》文章中&# ... [详细]
  • LVS-DR直接路由实现负载均衡示例
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • LVS实现负载均衡的原理LVS负载均衡负载均衡集群是LoadBalance集群。是一种将网络上的访问流量分布于各个节点,以降低服务器压力,更好的向客户端 ... [详细]
  • nginx+多个tomcat
    学习nginx的时候遇到的问题:nginx怎么部署两台tomcat?upstream在网上找的资源,我在nginx配置文件(nginx.conf)中添加了两个server。结果只显 ... [详细]
  • Nginxgaodaima.comnginx属于七层架构,支持的是http协议,本身对tcp协议没有支持。所以不能代理mysql等实现负载均衡。但是lvs这个东西不熟悉,主要是公司 ... [详细]
  • 一、生产服务器netstattcp连接状态 ... [详细]
  • LVS服务器集群系统
    LVS介绍LVS:LinuxVirtualServer,负载调度器,内核集成,章文嵩(花名正明),阿里的四层SLB(ServerLoadBalance)是基于LVS+keepali ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • 本文介绍了在mac环境下使用nginx配置nodejs代理服务器的步骤,包括安装nginx、创建目录和文件、配置代理的域名和日志记录等。 ... [详细]
  • 目录浏览漏洞与目录遍历漏洞的危害及修复方法
    本文讨论了目录浏览漏洞与目录遍历漏洞的危害,包括网站结构暴露、隐秘文件访问等。同时介绍了检测方法,如使用漏洞扫描器和搜索关键词。最后提供了针对常见中间件的修复方式,包括关闭目录浏览功能。对于保护网站安全具有一定的参考价值。 ... [详细]
  • 本文介绍了在无法联网的情况下,通过下载rpm包离线安装zip和unzip的方法。详细介绍了如何搜索并下载合适的rpm包,以及如何使用rpm命令进行安装。 ... [详细]
  • php网站设计实验报告,php网站开发实训报告
    本文目录一览:1、php动态网站设计的关键技术有哪些软件,及搭建步骤需要哪些页面,分别完成 ... [详细]
  • PartI:取经处: http:www.ramkitech.com201210tomcat-clustering ... [详细]
  • springcloud:微服务涉及哪些技术、有哪些核心组件(二)
    0.引言上一期我们介绍了什么是微服务,微服务的基础概念,那么本期我们来介绍一下微服务涉及的技术点以及所需要的组件1.微服务涉及哪些技术1.1、基础 ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了架构文摘:消息队列设计精要相关的知识,希望对你有一定的参考价值。消息队列已经逐渐成为企业IT系统内部通信的核心手段。它具 ... [详细]
author-avatar
爷们风生水起妞子_929
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有