淘宝客网站需要多大空间,网站备案 信息,如何建设社区网站,凡科小程序怎么制作目录
1、LVS 相关原理
1.1、LVS集群的体系结构以及特点
1.1.1 LVS简介
1.1.2 LVS体系结构
1.1.3 LVS相关术语
1.1.4 LVS工作模式
1.1.5 LVS调度算法
1.2 LVS-DR集群介绍
1.2.1 LVS-DR模式工作原理
1.2.2 LVS-DR模式应用特点
1.2.3 LVS-DR模式ARP抑制
1.3 LVS – NA…目录
1、LVS 相关原理
1.1、LVS集群的体系结构以及特点
1.1.1 LVS简介
1.1.2 LVS体系结构
1.1.3 LVS相关术语
1.1.4 LVS工作模式
1.1.5 LVS调度算法
1.2 LVS-DR集群介绍
1.2.1 LVS-DR模式工作原理
1.2.2 LVS-DR模式应用特点
1.2.3 LVS-DR模式ARP抑制
1.3 LVS – NAT 模式
1.4 LVS – TUN 模式
2、LVS 集群构建
2.1 LVS – NAT 模式集群构建
2.2 LVS – DR 模式集群构建
2.3 LVS 持久连接
2.4 LVS 高可用性实现
ldirectord软件
ldirectord配置文件示例 1、LVS 相关原理
1.1、LVS集群的体系结构以及特点
1.1.1 LVS简介 LVS是Linux Virtual Server的简称也就是Linux虚拟服务器, 是一个由章文嵩博士发起的自由软件项目它的官方站点是http://www.linuxvirtualserver.org。现在LVS已经是 Linux标准内核的一部分在Linux2.4内核以前使用LVS时必须要重新编译内核以支持LVS功能模块但是从Linux2.4内核以后已经完全内置了LVS的各个功能模块无需给内核打任何补丁可以直接使用LVS提供的各种功能。 使用LVS技术要达到的目标是通过LVS提供的负载均衡技术和Linux操作系统实现一个高性能、高可用的服务器群集它具有良好可靠性、可扩展性和可操作性。从而以低廉的成本实现最优的服务性能。 LVS自从1998年开始发展到现在已经是一个比较成熟的技术项目了。可以利用LVS技术实现高可伸缩的、高可用的网络服务例如WWW服务、Cache服务、DNS服务、FTP服务、MAIL服务、视频/音频点播服务等等有许多比较著名网站和组织都在使用LVS架设的集群系统例如Linux的门户网站http://www.linux.com、向RealPlayer提供音频视频服务而闻名的Real公司http://www.real.com、全球最大的开源网站http://sourceforge.net等。 1.1.2 LVS体系结构 使用LVS架设的服务器集群系统有三个部分组成最前端的负载均衡层用Load Balancer表示中间的服务器群组层用Server Array表示最底端的数据共享存储层用Shared Storage表示。 Load Balancer层位于整个集群系统的最前端有一台或者多台负载调度器Director Server组成LVS模块就安装在Director Server上而Director的主要作用类似于一个路由器它含有完成LVS功能所设定的路由表通过这些路由表把用户的请求分发给Server Array层的应用服务器Real Server上。同时在Director Server上还要安装对Real Server服务的监控模块Ldirectord此模块用于监测各个Real Server服务的健康状况。在Real Server不可用时把它从LVS路由表中剔除恢复时重新加入。 Server Array层由一组实际运行应用服务的机器组成Real Server可以是WEB服务器、MAIL服务器、FTP服务器、DNS服务器、视频服务器中的一个或者多个每个Real Server之间通过高速的LAN或分布在各地的WAN相连接。在实际的应用中Director Server也可以同时兼任Real Server的角色。 Shared Storage层是为所有Real Server提供共享存储空间和内容一致性的存储区域在物理上一般有磁盘阵列设备组成为了提供内容的一致性一般可以通过NFS网络文件系统共享数据但是NFS在繁忙的业务系统中性能并不是很好此时可以采用集群文件系统例如Red hat的GFS文件系统oracle提供的OCFS2文件系统等。 1.1.3 LVS相关术语 为了方便大家探讨LVS技术LVS社区提供了一个命名的约定内容如下表 名称缩写说明虚拟IP地址Virtual IP AddressVIPDirector用于向客户端计算机提供服务的IP地址真实IP地址Real Server IP AddressRIP在集群下面节点上使用的IP地址Director的IP地址Director IP AddressDIPDirector用于连接内外网网络的IP地址客户端主机IP地址Client IP AddressCIP客户端用户计算机请求集群服务器的IP地址该地址用作发送给集群的请求的源IP地址 LVS集群内部的节点称为真实服务器Real Serve也叫做集群节点。请求集群服务的计算机称为客户计算机。与计算机通常在网上交换数据包的方式相同客户计算机、Director和真实服务器使用IP地址彼此进行通信。不同架构角色命名情况如下图 1.1.4 LVS工作模式 LVS的IP负载均衡技术是通过IPVS模块来实现的IPVS是LVS集群系统的核心软件它的主要作用是安装在Director Server上同时在Director Server上虚拟出一个IP地址用户必须通过这个虚拟的IP地址访问服务。这个虚拟IP一般称为LVS的VIP即Virtual IP。访问的请求首先经过VIP到达负载调度器然后由负载调度器从Real Server列表中选取一个服务节点响应用户的请求。当用户的请求到达负载调度器后调度器如何将请求发送到提供服务的Real Server节点而Real Server节点如何返回数据给用户是IPVS实现的重点技术IPVS实现负载均衡机制有三种分别是NAT、TUN和DR。 VS/NAT 即Virtual Server via Network Address Translation 也就是网络地址翻译技术实现虚拟服务器当用户请求到达调度器时调度器将请求报文的目标地址即虚拟IP地址改写成选定的Real Server地址同时报文的目标端口也改成选定的Real Server的相应端口最后将报文请求发送到选定的Real Server。在服务器端得到数据后Real Server返回数据给用户时需要再次经过负载调度器将报文的源地址和源端口改成虚拟IP地址和相应端口然后把数据发送给用户完成整个负载调度过程。 VS/TUN 即Virtual Server via IP Tunneling 也就是IP隧道技术实现虚拟服务器。它的连接调度和管理与VS/NAT方式一样只是它的报文转发方法不同VS/TUN方式中调度器采用IP隧道技术将用户请求转发到某个Real Server而这个Real Server将直接响应用户的请求不再经过前端调度器此外对Real Server的地域位置没有要求可以和Director Server位于同一个网段也可以是独立的一个网络。因此在TUN方式中调度器将只处理用户的报文请求集群系统的吞吐量大大提高。 VS/DR 即Virtual Server via Direct Routing 也就是用直接路由技术实现虚拟服务器。它的连接调度和管理与VS/NAT和VS/TUN中的一样但它的报文转发方法又有不同VS/DR通过改写请求报文的MAC地址将请求发送到Real Server而Real Server将响应直接返回给客户免去了VS/TUN中的IP隧道开销。这种方式是三种负载调度机制中性能最高最好的但是必须要求Director Server与Real Server都有一块网卡连在同一物理网段上。 特别提示VS/DR模式是互联网使用的最多多的一种模式在LVS-DR配置中Director将所有入站请求转发给集群内部节点但集群内部的节点直接将他们的回复发送给客户端计算机没有通过Director回来。如下图所示 1.1.5 LVS调度算法
调度方法决定了如何在这些集群节点之间分布工作负荷。 当Director收到来自客户端计算机访问她的VIP上的集群服务的入站请求时Director必须决定那个集群节点应该获得请求。Director可用于做出该决定的调度方法分成两个基本类别 固定调度算法rrwrrdhsh动态调度算法wlclblclblcrSEDNQ后两种官方站点没提到 10种调度算法见如下表格
算法说明rr轮循调度Round-Robin,它将请求依次分配不同的RS也就是在RS中均摊请求。这种算法简单但是只适合于处理性能相差不大的情况wrr加权轮循调度Weighted Round-Robin它将依据不同RS的权值分配任务。权值较高的RS将优先获得任务并且分配到的连接数将比权值较低的RS更多。相同权值的RS得到相同数目的连接数。dh目的哈希调度Destination Hashing以目的地址为关键字查找一个静态hash表来获得需要的RS。sh源地址哈希调度source hashing以源地址为关键字查找一个静态hash表来获得需要的RS。wlc加权最小连接数调度weighted leastconnection假设各台RS的权值依次为wii1..n当前的TCP连接数依次为Tii1..n依次选取Ti/Wi为最小的RS作为下一个分配的RS。lc最小连接数调度Least-ConnectionIPVS表存储了所有的活动的连接。把心的连接请求发送到当前连接数最小的RS。lblc基于地址的最小连接数调度locality-Based Least-Connection将来自同一目的地址的请求分配给同一台RS如果这台服务器尚未满负荷否则分配给连接数最小的RS并以它 为下一次分配的首先考虑。lblcr基于地址带重复最小连接数调度Locality-Based Least-Connection with Replication对于某一目的地址对应有一个RS子集。对此地址请求为它分配子集中连接数最小RS如果服务器中所有子集均已满负荷则从集群中选择一个连接数较小服务器将它加入到此子集并分配连接若一定时间内未被做任何修改则将子集中负载最大的节点从子集删除。SED最短期望的延迟shortest expected delay scheduling SEDSED 基于wlc算法。这个必须举例来说了 ABC三台机器分别权重123连接数也分别是123.那么如果使用wlc算法的话一个新请求进入时它可能会分给ABC中的任意一个。使用sed算法后会进这样一个运算 A(11)/1 B(12)/2 C(13)/3 根据运算结果把连接交给C。NQ最少队列调度Never Queue Scheduling NQNQ 无需队列。如果有台realserver的连接数0就直接分配过去不需要在进行sed运算 详细讲述最常用的四种调度算法 轮询调度Round Robin “轮询”调度也叫1:1调度调度器通过“轮询”调度算法将外部用户请求按顺序1:1的分配到集群中的每个Real Server上这种算法平等地对待每一台Real Server而不管服务器上实际的负载状况和连接状态。 加权轮询调度Weighted Round Robin “加权轮询”调度算法是根据Real Server的不同处理能力来调度访问请求。可以对每台Real Server设置不同的调度权值对于性能相对较好的Real Server可以设置较高的权值而对于处理能力较弱的RealServer可以设置较低的权值这样保证了处理能力强的服务器处理更多的访问流量。充分合理的利用了服务器资源。同时调度器还可以自动查询Real Server的负载情况并动态地调整其权值。 最少链接调度Least Connections “最少连接”调度算法动态地将网络请求调度到已建立的链接数最少的服务器上。如果集群系统的真实服务器具有相近的系统性能采用“最小连接”调度算法可以较好地均衡负载。 加权最少链接调度Weighted Least Connections “加权最少链接调度”是“最少连接调度”的超集每个服务节点可以用相应的权值表示其处理能力而系统管理员可以动态的设置相应的权值缺省权值为1加权最小连接调度在分配新连接请求时尽可能使服务节点的已建立连接数和其权值成正比。 1.2 LVS-DR集群介绍
LVS的基本工作原理 当用户向负载均衡调度器Director Server发起请求调度器将请求发往至内核空间PREROUTING链首先会接收到用户请求判断目标IP确定是本机IP将数据包发往INPUT链IPVS是工作在INPUT链上的当用户请求到达INPUT时IPVS会将用户请求和自己已定义好的集群服务进行比对如果用户请求的就是定义的集群服务那么此时IPVS会强行修改数据包里的目标IP地址及端口并将新的数据包发往POSTROUTING链POSTROUTING链接收数据包后发现目标IP地址刚好是自己的后端服务器那么此时通过选路将数据包最终发送给后端的服务器 1.2.1 LVS-DR模式工作原理 首先来自客户端计算机CIP的请求被发送到Director的VIP。然后Director使用相同的VIP目的IP地址将请求发送到集群节点或真实服务器。然后集群某个节点将回复该数据包并将该数据包直接发送到客户端计算机不经过director并且以此回复数据包使用的目的VIP 地址作为源IP地址。因此实际上是客户计算机被“欺骗”了客户计算机始终认为它正与同一台计算机对话而实际上它正在发送请求数据包给一台计算机LB并从另一台计算机RS接收回复的数据包。 LVS DR模式集群结构图分解展示 图1LVS DR模式集群结构图 图2客户端准备发出请求报文 图3报文到达调度器后的改变 图4RS处理报文后的报文情况 1.2.2 LVS-DR模式应用特点
1所有集群节点RS必须和Director在相同的物理网段即同一个局域网中
2所有客户端入站而不是出站请求由Director首先接收并转发给集群节点RS
3集群节点RS通常来说最好带外部IP而不使用Director及某固定机器作为默认网关以便将数据包直接回复给客户端计算机且不会产生回包的瓶颈
4所有集群节点RS上必须在lo网卡上绑定VIP地址以便验证通过目的IP非RS的数据包
5由于所有集群节点RS上必须在lo网卡上绑定VIP地址因此带来arp问题即集群节点RS默认会相应发往Director VIP的数据包。因此要对所有集群节点RS做ARP抑制处理把响应VIP的请求交给LVSDirector
6很多操作系统都可以用在集群内部的RS真实服务器上只要该操作系统能够实现ARP隐藏如 Windowslinuxunix
7LVS/DR模式不需要开启调度器转发功能这点和LVS/NAT模式是不同的。
8LVS/DR Director服务器数量100台可以比LVS-NAT Director服务器数量10-20台承受更多的并发请求和转发更多的服务器数量。 1.2.3 LVS-DR模式ARP抑制
如果不抑制RS端arp影响 图1抑制RS端arp前的广播情况 图2抑制RS端arp前响应情况 提示广播消息会通过物理网卡到达真实服务器而真实服务器上有VIP所以会响应此请求 抑制RS端arp响应后 图1抑制RS端arp后广播情况 图2抑制RS后arp响应情况图 LVS DR类型 1、让前端路由将请求发往VIP时只能是Dirctor上的VIP 解决方案 (1) 静态地址绑定 未必有路由器的配置权限 Director调用时静态地址绑定将难以适用
(2) arptables Disable ARP for VIP Basically, we have the following commands to disable ARP for VIP at real servers. arptables -F arptables -A INPUT -d $VIP -j DROP arptables -A OUT -s $VIP -j mangle --mangle-ip-s $RIP
(3) 修改Linux内核参数将RS上的VIP配置为lo接口的别名限制Linux仅对对应接口的ARP请 求做响应 1.3 LVS – NAT 模式 LVS/NAT原理 (a). 当用户请求到达Director Server此时请求的数据报文会先到内核空间的PREROUTING链。 此时报文的源IP为CIP目标IP为VIP
(b). PREROUTING检查发现数据包的目标IP是本机将数据包送至INPUT链
(c). IPVS比对数据包请求的服务是否为集群服务若是修改数据包的目标IP地址为后端服务器IP然后将数据包发至POSTROUTING链。 此时报文的源IP为CIP目标IP为RIP
(d). POSTROUTING链通过选路将数据包发送给Real Server
(e). Real Server比对发现目标为自己的IP开始构建响应报文发回给Director Server。 此时报文的源IP为RIP目标IP为CIP
(f). Director Server在响应客户端前此时会将源IP地址修改为自己的VIP地址然后响应给客户端。 此时报文的源IP为VIP目标IP为CIP
工作逻辑图 模式特点
集群节点必须在一个网络中真实服务器必须将网关指向负载调度器RIP 通常都是私有 IP仅用于各个集群节点通信负载调度器必须位于客户端和真实服务器之间充当网关支持端口映射负载调度器操作系统必须是 Linux 真实服务器可以使用任意系统 1.4 LVS – TUN 模式
LVS/TUN原理 (a) 当用户请求到达Director Server此时请求的数据报文会先到内核空间的PREROUTING链。 此时报文的源IP为CIP目标IP为VIP 。
(b) PREROUTING检查发现数据包的目标IP是本机将数据包送至INPUT链
(c) IPVS比对数据包请求的服务是否为集群服务若是在请求报文的首部再次封装一层IP报文封装源IP为为DIP目标IP为RIP。然后发至POSTROUTING链。 此时源IP为DIP目标IP为RIP
(d) POSTROUTING链根据最新封装的IP报文将数据包发至RS因为在外层封装多了一层IP首部所以可以理解为此时通过隧道传输。 此时源IP为DIP目标IP为RIP
(e) RS接收到报文后发现是自己的IP地址就将报文接收下来拆除掉最外层的IP后会发现里面还有一层IP首部而且目标是自己的lo接口VIP那么此时RS开始处理此请求处理完成之后通过lo接口送给eth0网卡然后向外传递。 此时的源IP地址为VIP目标IP为CIP
(f) 响应报文最终送达至客户端
工作逻辑图 模式特点
集群节点不必位于同一个物理网络但必须都拥有公网 IP或都可以被路由真实服务器不能将网关指向负载调度器RIP 必须是公网地址负载调度器只负责入站请求不支持端口映射功能发送方和接收方必须支持隧道功能 2、LVS 集群构建
2.1 LVS – NAT 模式集群构建
架构图 ipvsadm工具使用
ipvsadm工具常用的参数选项有
-A --add-service添加一条新的虚拟服务-E --edit-service编辑虚拟服务-D --delete-service删除虚拟服务-C --clear清除所有的虚拟服务规则-R --restore恢复虚拟服务规则-a --add-server在一个虚拟服务中添加一个新的真实服务器-e --edit-server编辑某个真实服务器-d --delete-server删除某个真实服务器-L | -l --list显示内核中的虚拟服务规则-n --numeric以数字形式显示IP端口-c --connection显示ipvs中目前存在的连接也可以用于分析调度情况-Z --zero将转发消息的统计清零-p --persistent配置持久化时间--set tcp tcpfin udp配置三个超时时间tcp/tcpfin/udp-t | -uTCP/UDP协议的虚拟服务-g | -m | -iLVS模式为DR | NAT | TUN-w配置真实服务器的权重-s配置负载均衡算法如:rr, wrr, lc等--timeout显示配置的tcp/tcpfin/udp超时时间--stats显示历史转发消息统计累加值--rate显示转发速率信息瞬时值
示例 1. 管理虚拟服务
添加一个虚拟服务192.168.1.100:80使用轮询算法
ipvsadm -A -t 192.168.1.100:80 -s rr
修改虚拟服务的算法为加权轮询
ipvsadm -E -t 192.168.1.100:80 -s wrr
删除虚拟服务
ipvsadm -D -t 192.168.1.100:80 2. 管理真实服务
添加一个真实服务器192.168.1.123使用DR模式权重2
ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.123 -g -w 2
修改真实服务器的权重
ipvsadm -e -t 192.168.1.100:80 -r 192.168.1.123 -g -w 5
删除真实服务器
ipvsadm -d -t 192.168.1.100:80 -r 192.168.1.123 3. 查看统计
查看当前配置的虚拟服务和各个RS的权重
ipvsadm -Ln
查看当前ipvs模块中记录的连接可用于观察转发情况
ipvsadm -lnc
查看ipvs模块的转发情况统计
ipvsadm -Ln --stats | --rate 另外--stats和--rate统计在分析问题时经常用到输出各项的含义 --stat选项是统计自该条转发规则生效以来的包
1. Conns (connections scheduled) 已经转发过的连接数
2. InPkts (incoming packets) 入包个数
3. OutPkts (outgoing packets) 出包个数
4. InBytes (incoming bytes) 入流量字节
5. OutBytes (outgoing bytes) 出流量字节 --rate选项是显示速率信息
1. CPS (current connection rate) 每秒连接数
2. InPPS (current in packet rate) 每秒的入包个数
3. OutPPS (current out packet rate) 每秒的出包个数
4. InBPS (current in byte rate) 每秒入流量字节
5. OutBPS (current out byte rate) 每秒入流量字节 构建代码
负载调度器
vim /etc/sysctl.conf # 开启路由转发功能
net.ipv4.ip_forward1
sysctl -piptables -t nat -A POSTROUTING -s 10.10.10.0/24 -o eth0 -j SNAT --to-source
20.20.20.11
# 添加防火墙记录当源地址是 内网网段 并且出口网卡为 eth0 的时候进行 SNAT 转换
转换源地址为外网卡地址iptables -t nat -L # 查看记录是否保存成功
ipvsadm -A -t 20.20.20.11:80 -s rr # 添加 ipvsadm TCP 集群
ipvsadm -a -t 20.20.20.11:80 -r 10.10.10.12:80 -m # 添加 ipvsadm 节点
ipvsadm -Ln
ipvsadm-save /etc/sysconfig/ipvsdm # 保存 ipvs 集群设置到文件进行持久化
systemctl enable ipvsadm真实服务器
route add default gw IP 地址 # 指定网关至负载调度器
service httpd start # 开启 Apache 服务器
chkconfig httpd on 2.2 LVS – DR 模式集群构建
架构图 构建代码
yum install ipvsadm配置LVS负载均衡服务
1手动添加LVS转发1用户访问www.uolookking.com--vip 192.168.79.110 ##这个是在DNS配置hzitedu域的DNS记录设置www IN A 192.168.79.110没有配置DNS可以使用hosts文件配置方式来实现域名解析。192.168.79.110 www.hzitedu.com2配置LVS虚拟IPVIP[rootDirectory ~]# ifconfig eth1:110 192.168.79.110 netmask 255.255.255.0 up#这里采用子接口配置3手工执行配置添加LVS服务并增加两台RS[rootDirectory ~]# ipvsadm -C[rootDirectory ~]# ipvsadm --set 30 5 60[rootDirectory ~]# ipvsadm -A -t 192.168.79.110:80 -s wrr -p 20[rootDirectory ~]# ipvsadm -a -t 192.168.79.110:80 -r 192.168.79.118:80 -g -w 1[rootDirectory ~]# ipvsadm -a -t 192.168.79.110:80 -r 192.168.79.119:80 -g -w 1[删除方法]# ipvsadm -D -t 192.168.79.110:80 -s wrr# ipvsadm -d -t 192.168.79.110:80 -r 192.168.79.118:80[相关参数说明][rootDirectory ~]# ipvsadm –help-A 添加虚拟服务器-t 设置群集地址VIPVirtual IP-s 指定负载调度算法-a 添加真实服务器-d 删除真实服务器-r 指定真实服务器Real Server的地址-m 使用NAT模式-g、-i分别对应DR、TUN模式-w 为节点服务器设置权重默认为14查看之前配置[rootDirectory ~]# ipvsadm -L -nIP Virtual Server version 1.2.1 (size4096)Prot LocalAddress:Port Scheduler Flags- RemoteAddress:Port Forward Weight ActiveConn InActConnTCP 192.168.79.110:80 wrr persistent 20- 192.168.79.119:80 Route 1 0 0 - 192.168.79.118:80 Route 1 0 0 2手工在RS端绑定VIP
每台real server端执行
[rootRS1 ~]# ifconfig lo:110 192.168.79.110 netmask 255.255.255.255 up
添加本机访问VIP的路由
[rootRS1 ~]# route add -host 192.168.79.110 dev lo每个集群节点上的环回接口lo设备上绑定VIP地址其广播地址是其本身子网掩码是255.255.255.255
采取可变长掩码方式把网段划分成只含一个主机地址的目的是避免IP地址冲突允许LVS-DR集群中的集群节
点接受发向该VIP地址的数据包这会有一个非常严重的问题发生集群内部的真实服务器将尝试回复来自正
在请求VIP客户端的ARP广播这样所有的真实服务器都将声称自己拥有该VIP地址这时客户端将直接发送请
求数据包到真实服务器上从而破坏了DR集群的方法。因此必须要抑制真实服务器的ARP广播。3手工在RS端抑制ARP响应
每台real server端执行
调整内核参数关闭arp响应
[rootRS1 ~]# echo 1 /proc/sys/net/ipv4/conf/lo/arp_ignore
[rootRS1 ~]# echo 2 /proc/sys/net/ipv4/conf/lo/arp_announce
[rootRS1 ~]# echo 1 /proc/sys/net/ipv4/conf/all/arp_ignore
[rootRS1 ~]# echo 2 /proc/sys/net/ipv4/conf/all/arp_announce中文说明
arp_ignore- INTEGER
定义对目标地址为本地IP的ARP询问不同的应答模式
0 -默认值回应任何网络接口上对任何本地IP地址的arp查询请求。
1 – 只回答目标IP地址是来访网络接口本地地址的ARP查询请求。
2 – 只回答目标IP地址是来访网络接口本地地址的ARP查询请求且来访IP必须在该网络接口的子网段内。
3 – 不回应该网络界面的arp请求而只对设置的唯一和连接地址做出回应。
4-7 –保留未使用。
8 – 不回应所有本地地址的arp查询。arp_announce - INTEGER
对网络接口上本地IP地址发出的ARP回应做出相应级别的限制
确定不同程度的限制宣布对来自本地源IP地址发出ARP请求的接口
0 -默认在任意网络接口eth0eth1lo上的任何本地地址
1 – 尽量避免不在该网络接口子网段的本地地址做出arp回应当发起ARP请求的源IP地址是被设置应该经由
路由到达此网络接口的时候很有用此时会检查来访IP是否为所有接口上的子网段内ip之一。如果该来访IP不
属于各个网络接口上的子网段内那么将采用级别2的方式来进行处理。
2 – 对查询目标是要最适当的本地地址在此模式下将忽略这个IP数据包的源地址并尝试选择与能与该地址通
信的本地地址。首要是选择所有的网络接口的子网中外出访问子网中包含该目标IP地址的本地地址。如果没有
合适的地址被发现将选择当前的网络发送接口或其他的有可能接受到该ARP回应的网络接口来进行发送。限
制了使用本地的vip地址作为优先的网络接口。提示也可以使用arptables实现抑制arp
?arptables -A INPUT -d $VIP -j DROP
?arptables -A OUTPUT -s $VIP -j mangle --mangle-ip-s $RIP
# arptables-save /etc/sysconfig/arptables
# systemctl enable --now arptables LVS-DR模式配置脚本
lvs director 上的脚本
#!/bin/sh
#
# Startup script handle the initialisation of LVS
# chkconfig: - 28 72
# description: Initialise the Linux Virtual Server for DR
#
### BEGIN INIT INFO
# Provides: ipvsadm
# Required-Start: $local_fs $network $named
# Required-Stop: $local_fs $remote_fs $network
# Short-Description: Initialise the Linux Virtual Server
# Description: The Linux Virtual Server is a highly scalable and highly
# available server built on a cluster of real servers, with the load
# balancer running on Linux.
# description: start LVS of DR
LOCK/var/lock/ipvsadm.lock
VIP192.168.95.10
RIP1192.168.95.11
RIP2192.168.95.12
DipNameens33. /etc/rc.d/init.d/functions
start() {PIDipvsadm -Ln | grep ${VIP} | wc -lif [ $PID -gt 0 ];thenecho The LVS-DR Server is already running !else#Set the Virtual IP Address/sbin/ifconfig ${DipName}:10 $VIP broadcast $VIP netmask 255.255.255.255 up/sbin/route add -host $VIP dev ${DipName}:10#Clear IPVS Table/sbin/ipvsadm -C#Set Lvs/sbin/ipvsadm -At $VIP:80 -s rr/sbin/ipvsadm -at $VIP:80 -r $RIP1:80 -g/sbin/ipvsadm -at $VIP:80 -r $RIP2:80 -g/bin/touch $LOCK#Run Lvsecho starting LVS-DR Server is ok ! fi
}stop() {#clear Lvs and vip/sbin/ipvsadm -C/sbin/route del -host $VIP dev ${DipName}:10/sbin/ifconfig ${DipName}:10 down /dev/nullrm -rf $LOCKecho stopping LVS-DR server is ok !
}status() {if [ -e $LOCK ];thenecho The LVS-DR Server is already running !elseecho The LVS-DR Server is not running !fi
}case $1 instart)start;;stop)stop;;restart)stopstart;;
status)status;;
*)echo Usage: $1 {start|stop|restart|status}exit 1
esac
exit 0RS上的脚本#!/bin/sh
#
# Startup script handle the initialisation of LVS
# chkconfig: - 28 72
# description: Initialise the Linux Virtual Server for DR
#
### BEGIN INIT INFO
# Provides: ipvsadm
# Required-Start: $local_fs $network $named
# Required-Stop: $local_fs $remote_fs $network
# Short-Description: Initialise the Linux Virtual Server
# Description: The Linux Virtual Server is a highly scalable and highly
# available server built on a cluster of real servers, with the load
# balancer running on Linux.
# description: start LVS of DR-RIP
LOCK/var/lock/ipvsadm.lock
VIP192.168.95.10
. /etc/rc.d/init.d/functions
start() {PIDifconfig | grep lo:10 | wc -lif [ $PID -ne 0 ];thenecho The LVS-DR-RIP Server is already running !else/sbin/ifconfig lo:10 $VIP netmask 255.255.255.255 broadcast $VIP up/sbin/route add -host $VIP dev lo:10echo 1 /proc/sys/net/ipv4/conf/lo/arp_ignoreecho 2 /proc/sys/net/ipv4/conf/lo/arp_announceecho 1 /proc/sys/net/ipv4/conf/eth0/arp_ignoreecho 2 /proc/sys/net/ipv4/conf/eth0/arp_announceecho 1 /proc/sys/net/ipv4/conf/all/arp_ignoreecho 2 /proc/sys/net/ipv4/conf/all/arp_announce/bin/touch $LOCKecho starting LVS-DR-RIP server is ok !fi
}stop() {/sbin/route del -host $VIP dev lo:10/sbin/ifconfig lo:10 down /dev/nullecho 0 /proc/sys/net/ipv4/conf/lo/arp_ignoreecho 0 /proc/sys/net/ipv4/conf/lo/arp_announceecho 0 /proc/sys/net/ipv4/conf/eth0/arp_ignoreecho 0 /proc/sys/net/ipv4/conf/eth0/arp_announceecho 0 /proc/sys/net/ipv4/conf/all/arp_ignoreecho 0 /proc/sys/net/ipv4/conf/all/arp_announcerm -rf $LOCKecho stopping LVS-DR-RIP server is ok !
}status() {if [ -e $LOCK ];thenecho The LVS-DR-RIP Server is already running !elseecho The LVS-DR-RIP Server is not running !fi
}case $1 instart)start;;stop)stop;;restart)stopstart;;
status)status;;
*)echo Usage: $1 {start|stop|restart|status}exit 1
esac
exit 0 2.3 LVS 持久连接
1. 持久客户端连接 定义每客户端持久将来自于同一个客户端的所有请求统统定向至此前选定的 RS也就是只要 IP 相同分配的服务器始终相同 演示代码
ipvsadm -A -t 172.16.0.8:0 -s wlc -p 120
# 添加一个 tcp 负载集群集群地址为 172.16.0.8 算法为 wlc持久化时间为 120s 2. 持久端口连接 定义每端口持久将来自于同一个客户端对同一个服务(端口)的请求始终定向至此前选定的 RS 演示代码
ipvsadm -A -t 172.16.0.8:80 -s rr -p 120
# 添加一个 tcp 负载集群集群地址为 172.16.0.8:80 算法为 wlc持久化时间为 120s 3. 持久防火墙标记连接 定义将来自于同一客户端对指定服务(端口)的请求始终定向至此选定的 RS不过它可以将两个毫不相干的端口定义为一个集群服务 演示代码 iptables -t mangle -A PREROUTING -d 172.16.0.8 -p tcp --dport 80 -j MARK --set-mark 10
# 添加一个防火墙规则当目标地址为 172.16.0.8 并且 目标端口为 80 时给数据包打一
个标记设置mark 值为 10 iptables -t mangle -A PREROUTING -d 172.16.0.8 -p tcp --dport 443 -j MARK --
set-mark 10# 添加一个防火墙规则当目标地址为 172.16.0.8 并且 目标端口为 443 时给数据包打一个标记
设置mark 值为 10service iptables save # 保存防火墙规则持久化生效ipvsadm -A -f 10 -s wlc -p 120 # 添加一个负载调度器当 mark 值为 10 时进行负载均衡使
用wlc 算法持久化生效时间为 120s 2.4 LVS 高可用性实现
LVS 不可用时
Director不可用整个系统将不可用SPoF Single Point of Failure
解决方案高可用keepalived、heartbeat/corosync
RS 不可用时
某RS不可用时Director依然会调度请求至此RS
解决方案 由Director对各RS健康状态进行检查失败时禁用成功时启用
常用解决方案
keepalivedheartbeat/corosyncldirectord
检测方式
(a)网络层检测icmp(b) 传输层检测端口探测(c) 应用层检测请求某关键资源
RS全不用时backup server, sorry server
ldirectord软件
ldirectord是专门为LVS监控而编写的用来监控lvs架构中服务器池server pool 的服务器状态。 ldirectord 运行在 IPVS 节点上 ldirectord作为一个守护进程启动后会对服务器池中的每个真实服务器发送请求进行监控,如果 服务器没有响应 lldirectord 的请求那么ldirectord 认为该服务器不可用ldirectord 会运行 ipvsadm 对 IPVS表中该服务器进行删除如果等下次再次检测有相应则通过ipvsadm进行添加
ldirectord监控和控制LVS守护进程可管理LVS规则
包名ldirectord-3.9.6-0rc1.1.1.x86_64.rpm
/repositories/network/ha-clustering/稳定版 - openSUSE 下载
相关文件
/etc/ha.d/ldirectord.cf #主配置文件/usr/share/doc/ldirectord-3.9.6/ldirectord.cf # 配置模版/usr/lib/systemd/system/ldirectord.service # 服务/usr/sbin/ldirectord #主程序,Perl实现/var/log/ldirectord.log #日志/var/run/ldirectord.ldirectord.pid #pid文件 ldirectord配置文件示例
范例DR模型的HTTP
[rootcentos7 ~]#vim /etc/ha.d/ldirectord.cf
checktimeout3
checkinterval1
autoreloadyes
logfile/var/log/ldirectord.log
quiescentno #当RS down时 yes将修改权重为0,此配置有bug no为从调度列表中删除RSvirtual192.168.150.100:80real192.168.150.14 gate 1 #gate 表示DR模式1 表示weightreal192.168.150.15 gate 2fallback127.0.0.1:80 gateservicehttpschedulerwrr#persistent600#netmask255.255.255.255protocoltcpchecktypenegotiatecheckport80[rootnode1 ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size4096)
Prot LocalAddress:Port Scheduler Flags- RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.150.100:80 rr- 192.168.150.14:80 Route 1 0 0 - 192.168.150.15:80 Route 2 0 0 范例DR模型的FWM
[rootcentos7 ~]# /etc/ha.d/ldirectord.cf
checktimeout3
checkinterval1
autoreloadyes
logfile“/var/log/ldirectord.log“ #日志文件
quiescentno #当RS down时 yes将修改权重为0,此配置有bug no为从调度列表中删除
RS
virtual66 #指定VS的FWM 或 IP:PORTreal172.16.0.7:80 gate 2 #DR模型权重为 2real172.16.0.8:80 gate 1fallback127.0.0.1:80 gate #sorry serverservicehttpschedulerwrr#protocoltcp #如果FWM模式此行必须注释掉checktypenegotiatecheckport80requestindex.htmlreceive“Test Ldirectord