(二)LVS(NAT,DR模型的实现(持久连接),ldirectord高可用,健康性检查),RS,VS配置脚本

1. 实现基于NAT模型的LVS(多个不同的算法)

设计要点
(1) RIP与DIP在同一IP网络, RIP的网关要指向DIP(内部网络)
(2) 支持端口映射
(3) Director(LVS)要打开核心转发功能ip_forward
在这里插入图片描述

在这里插入图片描述
client 不需要配置网关,与VIP在一个网段
工作中有路由器所以需要网关
两台RS为httpd,更改主机名,设置网关为DIP

客户端不配路由,

启用LVS路由功能net.ipv4.ip.forward

vim /etc/sysctl.cong
net.ipv4.ip.forward = 1

装包ipvsadm
添加规则:

ipvsadm  -A  -t VIP:80 -s rr  

加集群服务(-m 是nat模型)

 ipvsadm -a -t VIP:80 -r RS1 -m
 ipvsadm -a -t VIP:80  -r RS2 -m 

查看用ipvsadm -Ln

测试:while true ;do curl VIP ;sleep 0.5 ;done

查看两个RS的http访问日志/var/log/httpd/access_log

改为权重
ipvsadm -E -t VIP:80 -s wrr
加权重:
ipvsadm -e -t VIP:80 -r RS1 -m -w 6
ipvsadm -e -t VIP:80 -r RS2 -m -w 2
最终访问是1:3的结果

做端口映射
将http的端口改为8080(可以修改一个试试)
在这里插入图片描述
LVS有一个巨大的缺点:对后端服务器没有健康行检察
如果RS1的端口为80,RS2的端口为8080
那么在CIP访问的时候就会出现错误,RS1
修改LVS设置
发现改不了
只能删掉
ipvsadm -d -t VIP:80 -r RS1
ipvsadm -d -t VIP:80 -r RS1
重新添加
ipvsadm -a -t VIP:80 -r RS1:8080 -m -w 6
ipvsadm -a -t VIP:80 -r RS2:8080 -m -w 6

sh算法:根据原地址hash:原地址不变,就会一直访问同一个RS
ipvsadm -E -t VIP:80 -s sh

dh:根据目标地址hash:只有访问目标地址是固定的,就会忘同一个RS上调度
在RS1和RS2上生成10个网页
在这里插入图片描述
ipvsadm -E -t VIP:80 -dh
在这里插入图片描述

也可以搞一个数据库
然后在两个RS中装php,mysql,wordpress
在这里插入图片描述

启用代理
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2. 实现基于DR模型的LVS(多个不同的算法)

2.1 VIP与LVS,RS的在同一网段

VIP与局域网在同一网段

DR模型中各主机上均需要配置VIP,解决地址冲突的方式有三种:
(1) 在前端网关做静态绑定
(2) 在各RS使用arptables
(3) 在各RS修改内核参数,来限制arp响应和通告的级别
限制响应级别:arp_ignore
0:默认值,表示可使用本地任意接口上配置的任意地址进行响应
1: 别人发请求 不搭理
限制通告级别:arp_announce
0:默认值,把本机所有接口的所有信息向每个接口的网络进行通告
1:尽量避免将接口信息向非直接连接网络进行通告
2:不向向非本网络发通告

在这里插入图片描述

在这里插入图片描述

CIP必须配网关(在CIP和VIP中间有路由器)

RS上
lo:VIP
eth0:RIP
GW;routeGW2
如果将VIP配置到eth0需要配置别名防止源ip被覆盖(建议配置到lo上“稳定”,避免物理网卡被破怀,)

LVS:只接受请求,但不往外相应:也需要GW
(如果不配置网,不起作用,但是必须配“随便配置也可以”)

路由器:启用转发功能

VIP可以绑定到LVS的eth0也可以绑定到lo上(ip/32)
在这里插入图片描述

RS的配置脚本:给lo网卡绑定VIP用的

#!/bin/bash
vip=10.0.0.100
mask='255.255.255.255‘
dev=lo:1
case $1 in
start)
		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
		#绑定VIP
		ifconfig $dev $vip netmask $mask #broadcast $vip up
		#route add -host $vip dev $dev
		;;
stop)
		ifconfig $dev down
		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
		;;
*)
		echo "Usage: $(basename $0) start|stop"
		exit 1
		;;
esac

永久搭建:配置文件

VS的配置脚本:LVS定制规则临时的

#!/bin/bash
vip='192.168.37.100'
iface=‘lo:1'
mask='255.255.255.255'
port='80'
rs1='192.168.0.101'
rs2='192.168.0.102'
scheduler='wrr'
type='-g'
case $1 in
start)
		ifconfig $iface $vip netmask $mask #broadcast $vip up
		iptables -F
		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
		;;
stop)
		ipvsadm -C
		ifconfig $iface down
		;;
*)
		echo "Usage $(basename $0) start|stop“
exit 1
esac

LVS规则:先安装ipvsadm包

ipvsadm -A -t VIP:80 -s rr
ipvsadm -a -t VIP:80 -r RIP1    (DR不支持端口映射)
ipvsadm -a -t VIP:80 -r RIP2  

最后测一测
在这里插入图片描述

配置一个安全性检查(如果两个RS都挂掉,提供一个道歉声明该)配置sorryserver服务机

如果VIP是公网,RS配置的VIP与LVS一样,就会存在安全风险,CIP就可以直接访问RS

也可以给RS配置私网地址,和LVS就不在一个网段

2.2 VIP与LVS,RS不在同一网段

VIP与局域网不在同一网段
VIP:10.0.0.0网段
局域网在192.168.245.0网段

注意route2必须配置一个和LVS的VIP的网络地址
在eth0上加
永久加:nmcli connection modify eth0 +ipv4.address 10.0.0.200

在这里插入图片描述
RS的网关指向10.0.0.200可以,指向192.168.37.7也可以(只要能出去就行)

LVS的网关随便配(建议按正确的配192.168.37.)
VIP都可以配置到lo上32位,有别名就行

路由器不需要加网关,但有路由,而且启用路由功能
在这里插入图片描述
配置LVS和RS:在lo往卡上 VIP/32 有别名
在这里插入图片描述

在这里插入图片描述

但是不能ping VIP:看LVS个调度规则,只有80端口的规则没有icmp的

注意这样CIP可以直接访问RIP 不安全
工作中中间会有防火墙,不会出现这种情况
在这里插入图片描述
如果实现https,有证书,安装mod_ssl包即可
然后实现443端口的调度

在这里插入图片描述
在这里插入图片描述
优化:将443和80合起来,认为都是一个服务
可以定义防火墙标签(实现逻辑给80和443都贴同样的标签,就会认为是一个集群服务)
在这里插入图片描述
清除ipvsadm中的规则
这样就可以用-f且标签
在这里插入图片描述
最后加入rs
在这里插入图片描述

FireWall Mark(标签:用于合并端口)

FWM:FireWall Mark
MARK target 可用于给特定的报文打标记

--set-mark value

标签可为0xffff格式,表示十六进制数字

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

在Director主机打标记:贴标签
在mangle表上

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

 [-p [timeout]] 默认6分钟


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

在这里插入图片描述

持久连接实现方式
1.每端口持久(PPC):每个端口定义为一个集群服务,每集群服务单独调度

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

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

2.3 如果在路由器上只配置两个网关

在这里插入图片描述
注意这里的RS中的VIP和GW要在同一VIP才能走GW出去否则不行
例如24位VIP

只有VIP的公网的网关(没有局域网的网关)
在route上删掉个局域网ip
修改RS路由
只能先加主机路由,让他可达,然后才能加网关(或者直接在配置文件中加GW)
route -add -host 10.0.0.200 dev eth0
route -add default gw 10.0.0.200

这里要注意arp
要清理/proc/sys/net/ipv4/conf/eth0/arp_ignore
重启网卡服务就可以

六. LVS高可用性

Director不可用,整个系统将不可用;SPoF Single Point of Failure
解决方案高可用
keepalived heartbeat/corosync

某RS不可用时,Director依然会调度请求至此RS
解决方案: 由Director对各RS健康状态进行检查,失败时禁用,成功时启用
(也可以写脚本)
keepalived heartbeat/corosync ldirectord
检测方式
(a) 网络层检测,icmp
(b) 传输层检测,端口探测
© 应用层检测,请求某关键资源
RS全不用时:backup server, sorry server

ldirectord(LVS的健康行检查)

ldirectord:监控和控制LVS守护进程,可管理LVS规则(健康性检查)
当后端的RS宕机后,就会自动的从LVS中去掉后端服务器的规则
宕机的RS恢复后,会自动将规则添加到LVS中

包名:ldirectord-3.9.6-0rc1.1.1.x86_64.rpm
下载http://download.opensuse.org/repositories/network:/haclustering:/Stable/CentOS_CentOS-7/x86_64/

文件:
/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配置文件示例

checktimeout=3  	 3秒不回应就执行
checkinterval=1   	 1秒查一次
autoreload=yes   	自动检查
logfile=/var/log/ldirectord.log“ #日志文件
quiescent=no 		#down时yes**权重为0**,no为**删除**
#logfile="lical0"  会将日志写到/var/log/messages中
virtual=5 			#指定VS的FWM 或 IP:PORT
real=172.16.0.7:80 gate 2 #DR模型,权重为 2
real=172.16.0.8:80 gate 1
fallback=127.0.0.1:80 gate #sorry server(道歉页面)
service=http
scheduler=wrr
checktype=negotiate  
checkport=80
request="index.html"    对于这个页面检查
receive=“Test Ldirectord"

在这里插入图片描述
不需要ipvsadm规则
ipvsadm -C
需要自己手工添加VIP等

最后只需要启用ldirectord服务

systemctl start ldirectord

ipvsadm -Ln 就会看到由了directord自动生成的规则

然后宕机一个RS,看效果(多给一点时间看看)

看ipvsadm是否自动删掉规则

当quiescent=no
LVS上自己有一个道歉页面httpd服务(当所有的RS都宕机,自己提供一个道歉页面)
在这里插入图片描述

当quiescent=yes
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值