LVS
sersync介绍
sersync类似于inotify,同样用于监控,但它克服了inotify的缺点
inotify最大的不足是会产生重复事件,或者同一个目录下多个文件的操作会产生多个事件,例如,当监控目录中5个文件时,删除目录时会产生6个监控事件,从而导致重复调用rsync命令。
sersync优点
sersnc是使用c++编写,而且对Linux系统产生的临时文件和重复文件进行过滤,所以结合rsync同步的时候,节省了运行时耗和网络资源。因此更快。
sersync配置很简单,提供静态编译好的二进制文件和xml配置文件,直接使用即可
sersync使用多线程进行同步,尤其在同步较大文件时,能够保证多个服务器实时保持同步状态
sersync有出错处理机制,通过失败队列对出错的文件重新同步,如果仍然失败,则按设定时长对同步失败的文件重新同步
sersync自带crontab功能,只需在xml配置文件中开启,即也可以按要求隔一段时间整体同步一次,不需要额外配置crontab功能
sersync可以二次开发
下载安装部署
基于rsync同步
# 解压 # 规范目录结构 mkdir /apps/ mv GNU_Linux-x86/ /apps/sersync # 软链接 ln -s /aoos/sersync/sersync2 /usr/bin/ # 确认安装rsync客户端工具 rpm -q sync &> /dev/null || dnf -y install rsync # 备份sersync配置文件 cp /apps/sersync/confxml.xml{,.bak} # 配置文件 vim /apps/sersync/confxml.xml <attrib start="true"> # 修改此行为为 true ,文件属性发生变化同步 <localpath watch="/data/www"> # 修改此行,需要同步的源目录或文件,建议同步目录 <remote ip="备份服务器IP" name="backup/"> # backup要与rsync配置文件中[backup]要匹配 <auth start="true" users="rsyncuser" passwordfile="/etc/rsync.pas"/> # 修改此行为true,指定备份服务器的rsync配置的用户和密码文件 <userDefinedPort start="false" port="874"> # 指定rsync的非标准端口号 <ssh start="false"/> # 默认使用rsync daemon运行rsync命令,true为使用远程shell模式 # 创建密码文件 echo xier > /etc/rsync.pas # 密码由于rsync匹配 chmod 600 /etc/rsync.pas # 查看帮助 sersync2 -h # 以后台方式执行同步 sersync2 -dro /apps/sersync/confxml.xml ========================================备份服务器的配置================================== # 安装配置 dnf install -y rsync vim /etc/rsyncd.conf uid = root gid = root ignore errors exclude = lost+found/ log file = /var/log/rsyncd.log pid file = /var/run/rsyncd.pid lock file = /var/run/rsyncd.lock reverse lookup = no # hosts allow = 10.0.0.0/24 [backup] path = /data/backup/ comment = backup dir read only = no auth users = rsyncuser secrets file = /etc/rsync.pas cat /etc/rsync.pas rsyncuser:xier # 到备份服务器上实时监控 watch -n0.2 ls -l /data/backup/
基于ssh同步
配置服务
# 停止服务 systemctl stop rsyncd # 配置密钥的免密 # 配置文件 vim /apps/sersync/confxml.xml <sersync> <localpath watch="/data/www"> # 修改此行,指定源数据目录 <remote ip="备份服务器IP" name="/data/backup"/> # 修改此行指定备份服务器地址和备份目标目录 <rsync> <auth start="false" users="root" passwordfile="/etc/rsync.pas"/> # 必须修改此行,不启用认证 ''' <ssh start="true"/> # 修改此行为true,使用远程shell方式的rsync连接方式,无需在目标主机上配置启动rsync daemon服务
lvs(重中之中)
内容大纲
集群概念
LVS模型
LVS调度算法
LVS实现
ldirectord
1 集群和分布式
系统性能扩展方式:
Scale UP:垂直扩展,向上扩展,增强,性能更强的计算机运行同样的服务
Scale Out:水平扩展,向外扩展,增加设备,并行地运行多个服务器调度分配问题,Cluster
垂直扩展不再提及:
随着计算机性能的增长,其价格会成倍增长
单台计算机的性能是有上限的,不可能无限制地垂直扩展
多核CPU意味着即使是单台计算机也可以并行的。
1.1 集群 Cluster
Cluster: 集群,为解决某个特定问题将多台计算机组合起来形成的单个系统
Cluster分为三种类型:
LB:load Balancing,负载均衡,多个主机组成,每个主机只承担一部分访问请求
HA:High Availiablity,高可用,避免SPOF(single Point Of failure)
MTBF:Mean Time Between Failure 平均无故障时间,正常时间
MTTR:Mean Time To Restoration (repair) 平均恢复时间,故障时间
A = MTBF / (MTBF+MTTR) (0,1):99%,99.5%,99.9%,99.99%,99.999%
SLA:服务等级协议(简称:SLA,全称:service level agreement),是在一定开销下为保障服务的性能和可用性,服务提供商与用户间定义的一种双方认可的协议。
HPC:High-performance computing,高性能 www.top500.org
1.2 分布式系统
分布式存储:ceph,GlusterFS,FastDFS,MogileFS
分布式计算:Hadoop,Spark
分布式常见应用
分布式应用-服务按照功能拆分,使用微服务
分布式静态资源--静态资源放在不同的存储集群上
分布式数据和存储--使用key-value缓存系统
分布式计算--对特殊业务使用分布式计算,比如Hadoop集群
1.2.1 业务层面
分层:安全层、负载层、静态层、多台层、(缓存层、存储层)持久化与非持久化
分隔:基于功能分割大业务为小服务
分布式:对于特殊场景的业务,使用分布式计算
1.3 负载均衡集群
硬件
F5 Big-IP
软件
lvs:Linux Virtual Server,阿里四层 SLB(Server Load Balance)使用
nginx:支持七层调度
haproxy:支持七层调度
ats:Apache Traffic Server,yahoo捐助给apache
perlbal:Perl编写
2 Linux Virtual Server简介
LVS介绍
LVS: Linux Virtual Server,负载调度器,内核集成,章文嵩,阿里的四层SLB(Server Load Balance)是基于lvs+keepalived实现
查看内核支持LVS
grep -i -C 10 ipvs /boot/config-4.18.0-147.el8.x86_64
功能
负载均衡的应用场景为高访问量的业务,提高应用程序的可用性和可靠性
2.1 LVS集群类型中的术语
VS: Virtual Server, Director Server(DS), Dispatcher(调度器),Load Balancer 负载调度
RS: Real Server(lvs),upstream server(nginx), backend server(haproxy) 提供服务的服务器
CIP: Client IP
VIP: Virtual server IP VS外网的IP
DIP: Director IP VS内网的IP
RIP: Real server IP 后端IP
访问流程: CIP <--> VIP == DIP <--> RIP
2.2 LVS 工作模式和相关命令
LVS集群工作模式
lvs-nat: 修改请求报文的目标IP,多目标IP的DNAT # 客户端访问要经过lvs服务器,lvs再调度服务器上,服务器访问完再原路返回给lvs服务器再到客户端。这样会增加lvs服务器负载压力,但是lvs是集成在内核中的,号称百万级并发 lvs-dr: 操纵封装新的MAC地址(直接路由) # 客户端访问要经过lvs服务器,lvs再调度服务器上,服务器访问完不按原路返回,直接到客户端。减轻了lvs服务器负载压力。但是有个问题,回去的时候会返回服务器真实地址,怎么解决呢,方法就是直接将vip也绑定到各个服务器上,但是会出现ip地址冲突,区分会出现问题,服务器响应又回应我有这个地址,全程冲突,这时候就要把响应和回应全关闭了(lvs需要利用vip调度,不能关),不告诉交换机我有这个地址,解决了地址冲突,需要修改内核参数。PS:lvs与服务器之间不能加路由器,不然arp广播过不去,只能是交换机 lvs-tun: 在原请求IP报文之外新加一个IP首部 # 转发方式:不修改请求报文的IP首部(源IP为CIP,目标IP为VIP),而在原IP报文之外再封装一个IP首部(源IP是DIP,目标IP是RIP),将报文发往挑选出的目标RS;RS直接响应给客户端(源IP是VIP,目标IP是CIP) lvs-fullnat: 修改请求报文的源和目标IP # 同时修改请求报文的源IP地址和目标IP地址进行转发 #CIP --> DIP #VIP --> RIP
2NAT模式特点
本质是多目标IP和DNAT,通过请求报文中的目标地址和目标端口修改为某挑出的RS的RIP和PORT实现转发
RIP和DIP应在同一个IP网络,且应使用私网地址;RS的网关要指向DIP
请求报文和响应报文都必须经由Director转发,Director易于成为系统瓶颈
支持端口映射,可修改请求报文的目标PORT
VS必须是Linux系统,RS可以是任意OS系统
3 DR模式特点
Director和各RS都配置有VIP
确保前端路由器将目标IP为VIP的请求报文发往Director
在前端网关做静态绑定VIP和Director的MAC地址
在RS上使用arptables工具
arptables -A IN -d $VIP -J DROP arptables -A OUT -s $VIP -j name --mangle-ip-s $RIP
在RS上修改内核参数以限制arp通告及应答级别
/proc/sys/net/ipv4/conf/all/arp_ignore # 通告 /proc/sys/net/ipv4/conf/all/arp_announce # 应答
将vip绑定到 lo(回环)网卡上
# 配置 /32 lo:VIP:10.0.0.100/32 /32 表示我自己一个网段,和其它都不在一个网段里,表示自己是孤立的网段 # 只能绑定在回环网卡上,如果绑定在eth0使用的网卡,通告、响应都没了,自己提供服务的ip也不做通告响应,服务都访问不了了
RS的RIP(服务器网段)可以使用私网地址,也可以是公网地址;RIP与DIP(lvs网段)在同一IP网络;RIP的网关不能指向DIP,以确保响应报文不会经由Director
RS和Director要在同一个物理网络
请求报文要经由Director,但响应报文不经由Director,而由RS直接发往Client
不支持端口映射(端口不能修改)
无需开启ip_forward
RS可使用大多数OS系统
4 TUN模式特点
RIP和DIP可以不处于同一物理网络中,RS的网关一般不能指向DIP,且RIP可以和公网通信。也就是说集群节点可以跨互联网实现。DIP,VIP,RIP可以是公网地址
RealServer的tun接口上需要配置VIP地址,以便接收director转发过来的数据包,以及作为响应的报文源IP
请求报文要经由Director,但响应不仅由Director,响应由RealServer自己完成
不支持端口映射
RS的OS需支持隧道功能
5 fullnat模式特点
VIP是公网地址,RIP和DIP是私网地址,且通常不在同一IP网络;因此,RIP的网关一般不会指向DIP
RS收到的请求报文源地址是DIP,因此,只需响应给DIP;但Director还要将其发往Client
请求和响应报文都经由Director
相对NAT模式,可以更好实现LVS-RealServer间跨VLAN通讯
支持端口映射
注意:此类型kernel默认不支持
LVS调度算法
ipvs scheduler:根据其调度时是否考虑各RS当前的负载状态
分为两种:静态方法和动态方法
静态方法
仅根据算法本身进行调度
RR
roundrobin,轮询,较常用
WRR
Weighted RR,加权轮询,较常用
SH
Source Hashing,实现session sticky,源IP地址hash;将来自于同一个IP地址的请求始终发往第一次挑中的RS,从而实现会话绑定
DH
Destination Hashing; 目标地址哈希,第一次轮询调度至RS,后续将发往同一个目标地址的请求始终转发至第一次挑中的RS,典型使用场景是正向代理缓存场景中的负载均衡,如:web缓存
动态方法
主要根据根据RS当前的负载状态及调度算法进行调度Overhead(负载)=value 较小的RS将被调度
LC: least connections 适用于长连接应用
Overhead=activeconns*256+inactiveconns 负载 = 活动连接*256+非活动连接,算出来的值谁最小调度在谁身上
WLC: Weighted LC,默认调度方法,较常用
Overhead=(activeconns*256+inactiveconns)/weight
SED: Shortest Expection Delay,初始连接权重优先,只检查活动连接,而不考虑非活动连接
Overhead=(activeconns+1)*256/weight
NQ: Never Queue,第一轮均匀分配,后续SED
LBLC: Locality-Based LC,动态的HD算法,使用场景:根据负载状态实现正向代理,实现Web Cache等
LBLCR: LBLC with Replication,带功能的LBLC,解决LBLC负载不均衡问题,从负载重的复制到负载轻的RS,实现Web Cache等
内核版本4.15版本后新增的调度算法 FO 和 OVF
FO(Weighted Fail Over)
会查看所有服务器中的负载,找到未过载(IP_VS_DEST_F_OVERLAD标记)的,且权重最高的服务器,进行调度。
静态算法
OVF
基于真实服务器的活动连接数量和权重值实现。不仅考虑权重,还考虑连接数
未过载(IP_VS_DEST_F_OVERLAD标记)
真实服务器当前活动连接小于其权重值
权重不能为零
面试考点:四种工作模式和12种调度算法
四种工作模式
1.nat
2.dr
3.tun
4.fullnat
# 常用的有 dr
12种调度算法
1.RR
2.WRR
3.SH
4.DH
# 以上是静态方法
5.LC
6.WLC (默认,常用)
7.SED
8.NQ
9.LBLC
10.LBLCR
# 以上是动态方法
11.FO
12.OVF
# 内核版本4.15版本后新增的调度算法
LVS相关软件
程序包:ipvsadm
主程序:/usr/sbin/ipvsadm
规则保存工具:/usr/sbin/ipvsadm-save
规则加载(内存中)工具:/usr/sbin/ipvsadm-restore
配置文件: /etc/sysconfig/ipvsadm-config
ipvs调度规则文件:/etc/sysconfig/ipvsadm
ipvsadm命令
ipvsadm核心功能
集群服务管理:增、删、改
集群服务的RS管理:增、删、改
查看
安装服务
dnf install -y ipvsadm # 查看ipvsadm的相关文件 rpm -qa ipvsadm
ipvsadm工具用法
# 管理集群服务 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-restore ipvsadm -S [-n] # 保存,相当于ipvsadm-save
管理集群服务:增、改、删
增、修改:
ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]] A 增 E 修改
说明
service-address: -t|u|f: -t: TCP协议的端口,VIP:TCP_PORT 如:-t 10.0.0.100:80 -u:UDP协议的端口,VIP:UDP_PORT -f:firewalld MARK,标记,一个数字 [-s scheduler]: 指定集群的调度算法,默认为wlc # 范例 ipvsadm -A -t 10.0.0.100:80 -s wrr # 删除 ipvsadm -D -t|u|f service-address
管理集群上的RS(提供服务的服务器):增、改、删
增、改:
ipvsadm -a|e -t|u|f service-address -r server-address [-g|i|m] [-w weight]
server-address: rip[:port] 如省略port,不作端口映射 选项: lvs类型: -g: gateway,dr类型,默认 -i: ipip,tun类型 -m: masquerade,nat类型 -w weight: 权重
删
ipvsadm -d -t|u|f service-address -r server-address
示例
ipvsadm -a -t 10.0.0.100:80 -r 10.0.0.8:8080 -m -w 3
清空定义的所有内容
ipvsadm -C
清空计数器
lvs会统计加一些数据计数
ipvsadm -Z [-t|u|f service-address]
查看
ipvsadm -L|l [options]
--numeric, -n: 以数字形式输出地址和端口号。不进行反向解析 --exact: 扩展信息,精确值 --connection, -c: 当前IPVS连接输出 --stats: 统计信息 --rate: 输出速率
查看集群地址
ipvsadm -Ln
示例
# 添加管理集群lvs并设置调度算法 ipvsadm -A -t 10.0.0.10:80 -s wrr # 添加管理集群lvs工作模式 ipvsadm -a -t 10.0.0.10:80 -r 10.0.0.11:8080 -m ipvsadm -a -t 10.0.0.10:80 -r 10.0.0.12:80 -m -w 3 # 然后访问 10.0.0.10:80 即可,会根据设置的调度算法去调度到服务器上,而服务器上会根据lvs设置的工作模式进行工作
LVS实战案例
LVS-NAT模式案例
环境
# 共四台主机 一台:internet client:192.168.10.6/24 GW:无 仅主机 一台:lvs eth1 仅主机 192.168.10.100/16 eth0 NAT 10.0.0.8/24 # 这里的网关必须指向lvs的ip地址,不然无法客户端通讯 两台RS: RS1: 10.0.0.7/24 GW: 10.0.0.8 NAT RS2: 10.0.0.17/24 GW: 10.0.0.8 NAT
配置过程(lvs节点)
# lvs节点(因为启动的工作模式是 NAT,有端口转发,需要配置) vim /etc/sysctl.conf net.ipv4.ip_forward = 1 sysctl -p dnf install -y ipvsadm # 利用第二张网卡配置lvs调度算法 ipvsadm -A -t 192.168.10.100:80 -s wrr # 添加服务器到设置好的调度算法中,并设置工作模式 ipvsadm -a -t 192.168.10.100:80 -r 10.0.0.7 -m ipvsadm -a -t 192.168.10.100:80 -r 10.0.0.8 -m # 查看被调度的目前情况 ipvsadm -Lnc # 查看被调度在内存里的信息 cat /proc/net/ip_vs_conn # 注意,当机器重启我们设置的规则就全丢了,需要保存当前的规则 /sbin/ipvsadm-save -n > /etc/sysconfig/ipvsadm systemctl enable ipvsadm # 如何查看保存命令 cat /lib/systemd/system/ipvsadm.service
LVS-DR模式案例(重点)
五台主机
一台:客户端 eth0:仅主机 192.168.10.6/24 GW:192.168.10.200 一台:ROUTER eth0:NAT 10.0.0.200/24 eth1:仅主机 192.168.10.200/24 启动 IP_FORWARD 一台:LVS eth0:NAT:DIP:10.0.0.8/24 GW:10.0.0.200 两台RS: RS1: eth0:NAT:10.0.0.7/24 GW: 10.0.0.200 RS2: eth0:NAT:10.0.0.17/24 GW: 10.0.0.200
router节点
vim /etc/sysctl.conf net.ipv4.ip_forward = 1 sysctl -p
rs1上的回环网卡添加vip
# 添加vip方式1 ip a a 10.0.0.100/32 dev lo label lo:1 # 添加vip方式2 ifconfig lo:1 10.0.0.100/32 # 设置内核参数防止地址冲突 echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
rs2上的回环网卡添加vip
# 添加vip方式1 ip a a 10.0.0.100/32 dev lo label lo:1 # 添加vip方式2 ifconfig lo:1 10.0.0.100/32 # 设置内核参数防止地址冲突 echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
lvs节点
ip a a 10.0.0.100/32 dev lo label lo:1 # 安装 yum install -y lvsadm # 配置lvs调度算法 lvsadm -A -t 10.0.0.100:80 -s wlc # 查看 ipvsadm -Ln # 添加RIP(服务器地址)并设置工作模式 ipvsadm -a -t 10.0.0.100:80 -r 10.0.0.7 -g ipvsadm -a -t 10.0.0.100:80 -r 10.0.0.17 -g PS: dr模型不支持端口映射,只支持80,加了其它端口也会变成80 # 修改lvs调度算法 ipvsadm -E -t 10.0.0.100:80 -s sh sh算法特点,一台机器只能调度在一台服务器上,不会再调度到其它服务器 # 修改lvs调度算法 ipvsadm -E -t 10.0.0.100:80 -s rr rr轮询算法,每台服务器,一台一次 # lvs网关可以随意配置,但不能没有,因为网关是与外网交互的,需要转发到服务上,如果没有网关,客户端的数据报文到lvs服务器,lvs不认为是通外网的,也就不转了,服务器也就收不到报文,就转发不出去,导致服务不能访问
多网段的DR模型
router
# 在一张网卡上添加多个网段 nmcli connection modify eth0 +ipv4.addresses 172.16.0.200/24 ifname eth0:1
rs1/rs2
vim /root/lvs-dr-rs.sh #!/bin/bash # LVS DR默认初始化脚本 LVS_VIP=10.0.0.100/32 DEV=lo:1 # source /etc/rc.d/init.d/functions case "$1" in start) /sbin/ifconfig lo:0 $LVS_VIP netmask 255.255.255.255 # broadcast $LVS_VIP # /sbin/route add -host $LVS_VIP dev lo:0 echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce sysctl -p > /dev/null 2>&1 echo "RealServer RS Start OK" ;; stop) /sbin/ifconfig lo:0 down # /sbin/route del $LVS_VIP > /dev/null 2>&1 echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce sysctl -p > /dev/null 2>&1 echo "RealServer RS Stoped" ;; *) echo "Usage: $0 {start|stop}" exit 1 esac exit 0 # 启动脚本 bash lvs-dr-rs.sh start
lvs设置脚本
vim lvs-dr-vs.sh #!/bin/bash vip="172.16.0.100" iface="lo:1" mask="255.255.255.255" port="80" rs1="10.0.0.7" rs2="10.0.0.17" scheduler="wrr" type="-g" rpm -q ipvsadm &> /dev/null || yum install -y ipvsadm &> /dev/null case $1 in start) ifconfig $iface $vip netmask $mask iptables -F ipvsadm -C ipvsadm -A -t ${vip}:${port} -s ${scheduler} ipvsadm -a -t ${vip}:${port} -r ${rs1} ${type} -w 1 ipvsadm -a -t ${vip}:${port} -r ${rs2} ${type} -w 1 echo "The VS Server is Ready!" ;; stop) ipvsadm -C ifconfig $iface down echo "The VS Server is Canceled!" ;; *) echo "Usage; ${basename $0} start|stop" exit 1 ;; esac # 启动脚本 bash lvs_dr_vs.sh start # 查看规则 ipvsadm -Ln # 测试可用性 curl 172.16.0.100
LVS-TUNNEL隧道模式案例
lvs服务器配置
一张网卡,网段为:10.0.0.8/24 # 开启tunnel网卡并配置VIP ifconfig tunl0 10.0.0.100 netmask 255.255.255.255 up # 或下面方法,注意设备名必须为tunl0 ip addr add 10.0.0.100/32 dev tunl0 ip link set up tunl0 # 自动加载ipip模块 lsmod | grep ipip
rs1/rs2
sh lvs-dr-rs.sh stop
lvs
ip addr add 10.0.0.100/32 dev tunl0 # 查看模块是否已加载进来,有则已成功 lsmod | grep ipip # 启动 tunl0 网卡 ip link set tunl0 up # 安装服务 dnf install -y ipvsadm # 设置调度算法 ipvsadm -A -t 10.0.0.100:80 -s rr ipvsadm -a -t 10.0.0.100:80 -r 10.0.0.7 -i ipvsadm -a -t 10.0.0.100:80 -r 10.0.0.17 -i # 查看 ipvsadm -Ln
rs1/rs2添加隧道网络
ifconfig tunl0 10.0.0.100 netmask 255.255.255.255 up # 查看隧道模块是否已加载 lsmod | grep ipip # 禁止地址广播响应回应,解决地址冲突 echo "1" > /proc/sys/net/ipv4/conf/tunl0/arp_ignore echo "2" > /proc/sys/net/ipv4/conf/tunl0/arp_announce echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce # 因为 tun 模式下,客户端发送过来的报文需要检查完整性,再回去校验是否可用,但是lvs是直接走服务器端的,不回去,不要原路检查,反而导致出现问题,而且服务器端也不走lvs通向客户端,直接走路由器,所以得关闭 echo "0" > /proc/sys/net/ipv4/conf/tunl0/rp_filter echo "0" > /proc/sys/net/ipv4/conf/all/rp_filter
到客户端测试
curl 10.0.0.100
解决https的lvs调度问题
防火墙标签
恢复到DR模型
rs1/rs2
dnf install -y mod_ssl systemctl restart httpd
lvs
ipvsadmm -A -t 10.0.0.100:443 -s rr ipvsadm -a -t 10.0.0.100:443 -r 10.0.0.7 ipvsadm -a -t 10.0.0.100:443 -r 10.0.0.17 # 查看可看到有两个lvs集群 ipvsadm -Ln
客户端访问测试
curl 10.0.0.100; curl -k https://10.0.0.100/ # 会发现两个lvs明明是同一个服务,确实各走各的,导致都调度到了一台RS上。需要利用lvs的标签将两个集群绑定解决问题,将两个集群作为整体调度
lvs贴防火墙标签
# 根据标签来进行调度,不用端口协议来进行调度 # 清空lvs以前的规则,以下配置标签定义 ipvsadm -C # 查看mangle表 iptables -t mangle -L # 在mangle表中的PREROUTING链中打上标签 iptables -t mangle -A PREROUTING -d 10.0.0.100 -p tcp -m multiport --dports 80,443 -j MARK --set-mark 10 --set-mark 是打标签 # lvs根据标签进行调度 ipvsadm -A -f 10 -s rr ipvsadm -a -f 10 -r 10.0.0.7 # 默认是dr模型 ipvsadm -a -f 10 -r 10.0.0.17 # 查看 ipvsadm -Ln
LVS持久连接
现在就有个问题,当服务器调度到不同集群上时,session信息不会被保存,导致用户刚登录上可能就跳到另外台机器上了,导致又要重新登录
持久连接实现方式
端口持久(PPC)
防火墙标记持久(PFWMC)
客户端持久(PCC)
解决方法:将调度到的服务器设置一个时间,在这个时间段内只能被调度到这台机器
ipvsadm -E -f 10 -s rr -p # p 设置持久连接时间,默认是 360 秒,也就是五分钟
LVS高可用待续
lvs自身没有健康检查,也就没有高可用性。
利用 keepalived解决
- 点赞
- 收藏
- 关注作者
评论(0)