LVS常用模式(DR、NAT、TUN)以及ldirector和keepalived

1.LVS简单介绍

1.lvs定义LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。LVS集群采用IP负载均衡技术和基于内容请求分发技术。调度器具有很好的吞吐率,将请求均衡地转移到不同的服务器上执行,且调度器自动屏蔽掉服务器的故障,从而将一组服务器构成一个高性能的、高可用的虚拟服务器。整个服务器集群的结构对客户是透明的,而且无需修改客户端和服务器端的程序。为此,在设计时需要考虑系统的透明性、可伸缩性、高可用性和易管理性。

2.LVS的特点:具有可伸缩网络服务的几种结构,它们都需要一个前端的负载调度器(或者多个进行主从备份)。我们先分析实现虚拟网络服务的主要技术,指出IP负载均衡技术是在负载调度器的实现技术中效率最高的。在已有的IP负载均衡技术中,主要有通过网络地址转换(Network Address Translation)将一组服务器构成一个高性能的、高可用的虚拟服务器,我们称之为VS/NAT技术(Virtual Server via Network Address Translation)。在分析VS/NAT的缺点和网络服务的非对称性的基础上,我们提出了通过IP隧道实现虚拟服务器的方法VS/TUN (Virtual Server via IP Tunneling),和通过直接路由实现虚拟服务器的方法VS/DR(Virtual Server via Direct Routing),它们可以极大地提高系统的伸缩性。VS/NAT、VS/TUN和VS/DR技术是LVS集群中实现的三种IP负载均衡技术。

十种调度算法
rr:Round Bobin,轮询,将客户端的请求交替分配给RS
wrr:Weighted Round Bobin,加权轮询,根据RS的性能不同,让他们来承担不同比例的用户请求
dh:Destination Hashing,目标地址哈希调度,基于用户所请求的地址做哈希表
作用:实现将对于相同的地址的请求调度到同一个RS之上
sh:Source Hashing,源地址的哈希调度,基于用户的ip地址做哈希表
作用:实现将同一个客户端调度到相同的RS之上
lc:Least Connection,最小连接数调度,本质是调度到当前负载最低的主机上
wlc:Weighted Least Connection,加权最小连接数调度,本质是调度到当前负载最低的主机上
SED:是wlc补充
NQ:Never queue,算法基本和sed相同,为了避免性能差的RS长时间处于空闲状态
lblc:基于目标地址的最小连接数调度,这种算法那是lc和dh的组合,适应于cache场景
lblcr:带有复制功能的lblc

2.DR模式

实验准备:

主机服务
server1:172.25.16.1提供ipvsadm服务
server2:172.25.16.2提供apache服务、realeserver
server3:172.25.16.3提供apache服务、realeserver
物理机:172.25.16.250客户端、测试端

DR模式(直接路由)
DR模式性能最佳,但必须要求在一个vlan中。
数据包流向:client–>vs–>rs–> client
DR模式下收到客户端请求,lvs会将vs的mac地址修改为某一台rs的mac地址(注:ip地址是逻辑地址,mac地址才是真正的通信地址,所以我们才可以通过修改mac地址发送到指定的rs),然后这个数据包会被转发到相应的rs处理(此时源ip和目标ip未变)。如数据帧流向所示,客户端请求由lvs接收,但返回的时候不经过lvs,而是直接向源ip返回,由真实服务器直接返回给用户。

优点:效率最高,负载均衡器只用分发请求,应答包通过单独的路由返回给客户端,提高了服务器并发能力。
缺点:负载均衡器的网卡必须和物理网卡在同一网段上

安装lvs的管理工具:ipvsadm
yum install ipvsadm -y						##企业7版本之后的ipvsadm安装包直接在内核中就可以找到,但之前版本需要手动创建高级yum源(从镜像里查找)
ip addr add 172.25.16.100/24 dev eth0		##给调度器一个vip
systemctl start ipvsadm						
vim /etc/sysconfig/ipvsadm-config			##修改配置文件,让服务重启时加载策略文件

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

写入策略:
ipvsadm -A -t 172.25.16.100:80 -s rr
ipvsadm -a -t 172.25.16.100:80 -r 172.25.16.2:80 -g
ipvsadm -a -t 172.25.16.100:80 -r 172.25.16.3:80 -g
ipvsadm -ln								##加n不做解析查看ipvsadm策略
systemctl restart ipvsadm				##此时重启ipvsadm会出现错误,需先创建文件/etc/sysconfig/ipvsadm(用来写入策略)
touch /etc/sysconfig/ipvsadm

在这里插入图片描述

在server2、server3进行设置:

需要给两个真实的web服务器加上vip,因为数据时从真实服务器直接返还给客户端的。

[root@server2 ~]# ip addr add 172.25.16.100/24 dev eth0
[root@server3 ~]# ip addr add 172.25.16.100/24 dev eth0

此时在物理机进行测试,会出现无法轮询的情况。
在这里插入图片描述
原因:
因为次是两台真实主机与lvs调度器都有vip,客户端并没有确定到底会访问哪台主机,所以这样可能会出现直接访问到主机的问题,因为本地缓存到real主机的mac地址后会跳过lvs调度器直接对真实主机进行访问,如果遭到DDOS恶意攻击,主机就很可能会无法正常使用。
解决方法:
在real主机都上安装基于mac地址的arptables来拒绝所有对172.25.16.100的访问。

yum install arptables.x86_64 -y
arptables -A INPUT -d 172.25.16.100 -j DROP			##将所有对121的访问都丢弃掉
arptables -A OUTPUT -s 172.25.16.100 -j mangle --mangle-ip-s 172.25.16.2		##以100的ip输出的数据的源ip是2
arptables-save > /etc/sysconfig/arptables			##手动导入策略到文件,不然就是临时生效
systemctl start arptables.service

在这里插入图片描述
在这里插入图片描述
测试:

arp-d 172.25.16.100			##清除原来100的缓存mac地址
curl172.25.16.100			##看是否轮询访问

在这里插入图片描述

3.NAT模式

NAT模式下收到客户端请求,lvs会做目的地址转换(DNAT),将目标ip改为rs的ip。rs接收到该数据包直接进行处理,返回响应时,目标ip即为cip,源ip即为rs的ip。然后,rs的数据包通过lvs中转,lvs进行源地址转换(SNAT),将数据包的源地址(rip)改为vip发送至客户端(rip不会直接响应cip),整个过程对于客户端来说是不可见的。

缺点:扩展性有限。高负载模式下,director可能成为瓶颈
优点:支持任意操作系统,节点服务器使用私有IP地址,与负载调度器位于同一个物理网络,安全性比DR模式和TUN模式要高。

实验环境同上:

1.server1:
yum install ipvsadm-1.27-7.el7.x86_64 -y
vim /etc/sysconfig/ipvsadm-config修改参数为IPVS_SAVE_ON_RESTART="yes"重启后加载策略
touch /etc/sysconfig/ipvsadm创建文件,没有的话无法重启(策略写的地方)
systemctl start ipvsadm.service
systemctl status ipvsadm.service

给server1添加一个网卡eth1

在这里插入图片描述

在这里插入图片描述

Ip addr add 172.25.254.100/24 dev eth1
Ip link set up eth1

在这里插入图片描述

打开内核路由:

Vim /etc/sysctl.conf             ##写入net.ipv4.ip_forward=1

在这里插入图片描述

添加策略:
ipvsadm -A -t 172.25.254.100:80 -s rr
ipvsadm -a -t 172.25.254.100:80 -r 172.25.16.2:80 -m
ipvsadm -a -t 172.25.254.100:80 -r 172.25.16.3:80 -m

在这里插入图片描述
server2、server3同样操作:

Systemctl start httpd
Route add default gw 172.25.16.1           #添加ipvsadm内网网段ip

在这里插入图片描述

在这里插入图片描述

测试:
在物理机:curl 172.25.254.100

在这里插入图片描述

4.TUN隧道模式

TUN:隧道模式下,vs 收到客户端请求,封装数据包,使源 ip 成为 vip,目标 ip 成为
rip,当 rs 收到数据包时,进行解封装,还原数据包,处理后,利用 vip 发出响应
从 rip 所在的接口发出,直接达到客户端。

优点:实现了异地容载,避免了一个机房故障导致网站无法访问。
缺点:RS配置复杂

实验环境:同上DR

lvs调度器的配置:(需要手动安装隧道模块)
ipvsadm -C									##在开始另一个模式的配置前,把原来的策略清除掉
lsmod										##查看本机安装的模块
modprobe ipip								##安装隧道模块
ip a										##查看是否多了一个隧道接口,此时处与关闭状态
ip addr del 172.25.16.100/24 dev eth0		##把vip从eth0网卡上删掉,并把vip添加到隧道接口
ip addr add 172.25.16.100/24 dev tunl0
ip link set up tunl0						##启用隧道接口,可以看到它的状态不再是关闭并且有vip

在这里插入图片描述
在这里插入图片描述

##添加调度策略:
ipvsadm -A -t 172.25.16.100:80 -s rr					##选择轮询算法
ipvsadm -a -t 172.25.16.100:80 -r 172.25.16.2:80 -i		##-i表示隧道模式
ipvsadm -a -t 172.25.21.121:80 -r 172.25.16.3:80 -i
systemctl restart ipvsadm.service						##使策略生效
ipvsadm -ln

在这里插入图片描述

(2)
real服务器的设定(没有特殊说明则两台服务器的设定都是相同的):
modprobe ipip							##同样也要安装隧道模块
ip addr del 172.25.16.100/24 dev eth0	##将vip从eth0上删除并添加到隧道上
ip addr add 172.25.16.100/24 dev tunl0
ip link set up tunl0					##启用隧道接口
ip a									##查看隧道是否启用

sysctl -a | grep rp_filter				##查看隧道反向过滤的策略,应该把这些策略全部关闭,否则在数据传输时可能会出现问题
sysctl -w net.ipv4.conf.all.rp_filter=0
sysctl -w net.ipv4.conf.eth0.rp_filter=0
sysctl -w net.ipv4.conf.tunl0.rp_filter=0
sysctl -w net.ipv4.conf.default.rp_filter=0
sysctl -a | grep rp_filter				##确认策略全部关闭

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
server3同server2操作

测试:

在这里插入图片描述

4.通过ldirectord程序从集群中自动移除节点

ldirectord作用:当一台real服务器出现问题不能访问时,将它从集群中自动去除,使客户端的访问不受影响。

将各项配置改回DR模式

在server1上安装ldirectord软件
注意:在红帽的企业7版本中没有这个软件,但是企业6中的软件在这里也可以用,但是需要配置高可用的依赖环境,首先进入7.5的镜像目录,找到高可用的具体位置,在7.5中把高可用和负载均衡放在同一个目录下,并且没有了企业6中的其他资源

在这里插入图片描述

配置yum源,在原来的yum源文件中配置即可
vim /etc/yum.repos.d/westos		##配置yum源
[HighAvailability]
name=HighAvailability
baseurl=http://172.25.21.250/rhel7.5/addons/HighAvailability/
gpgcheck=0
yum repolist							##查看是否成功

在这里插入图片描述
在这里插入图片描述

首先安装ldirectord,本机使用的软件包为ldirectord-3.9.5-3.1.x86_64.rpm,可以在企业6的镜像中获取这个软件包,在yum源搭建好以后,注意在ldirectord软件包的所在的目录下才可以直接通过yum安装
yum install ldirectord-3.9.5-3.1.x86_64.rpm -y			##安装软件
rpm -qpl ldirectord-3.9.5-3.1.x86_64.rpm				##查看软件安装后产生的目录与文件

在这里插入图片描述

开启服务,因为这是企业6上的软件包,所以要用脚本的方式来启动服务
cp /usr/share/doc/ldirectord-3.9.5/ldirectord.cf /etc/ha.d/			##把模板复制到配置文件目录下
vim /etc/ha.d/ldirectord.cf											##修改配置文件

在这里插入图片描述

yum install httpd -y	##在调度器上安装apache,当真实主机web1和web2都出问题时,让客户端访问调度器并给客户端一个提示信息
vim /var/www/html/index.html	
systemctl start httpd	##开启服务

modprobe -r ipip						##卸载ipip模块
ip addr add 172.25.21.121/24 dev eth0

ipvsadm -C								##清空策略并重新写入
ipvsadm -A -t 172.25.16.100:80 -s rr
ipvsadm -a -t 172.25.16.100:80 -r 172.25.16.2:80 -g
ipvsadm -a -t 172.25.16.100:80 -r 172.25.16.3:80 -g
cat /etc/sysconfig/ipvsadm
systemctl restart ipvsadm.service

/etc/init.d/ldirectord start			##在启动服务之前记得关掉上一个实验的隧道接口并删掉它的ip,不然可能会发生冲突
chkconfig --list						##查看所有以脚本方式运行的服务,一般不全为off就是开机自启动的

在这里插入图片描述在这里插入图片描述在这里插入图片描述

server2、sever3

modprobe -r ipip
ip addr add 172.25.16.100 dev eth0

在这里插入图片描述在这里插入图片描述

在这里插入图片描述
测试:
在这里插入图片描述
关闭server2的apache服务
在这里插入图片描述
关闭server3的apache服务
在这里插入图片描述

5.通过keepalived管理调度器和节点

keepalived作用:当调度器出问题时,使用keepalived服务管理,实现两台或者多台调度器的主备,当主调度器(MASTER)出问题时,可以将访问和服务都转到备用调度器(BACKUP)上,并且还可以设置邮件提醒在出现问题时进行提示,并且MASTER在运行过程中会一直给BACKUP发送心电信号,来告知BACKUP自己的运行状态良好。

环境准备:还原到DR模式时的配置
重新打开一台虚拟机server4:172.25.16.4做备用调度器

注意:在ipvsadm服务端即server1不需要设置vip

然后需要下载安装包,这个安装包可以直接在官网www.keepalived.org上下载
本机下载的是最新版keepalived-2.0.17.tar.gz
yum install gcc openssl-devel -y			##因为需要编译源码,所以安装编译软件
tar zxf keepalived-2.0.17.tar.gz			##解压安装包
./configure --prefix=/usr/local/keepalived --with-init=systemd			##进行编译
make && make install		
ln -s /usr/local/keepalived/etc/keepalived/ /etc/						##创建一个软链接

/etc/init.d/ldirectord stop					##关闭ldirectord服务并关闭开机自启动,否则可能会发生冲突
chkconfig ldirectord off

在这里插入图片描述

)在这里插入图片描述

修改server1配置文件
vim /etc/keepalived/keepalived.conf
systemctl restart keepalived

在这里插入图片描述
在这里插入图片描述
server4同样操作:

vim /etc/keepalived/keepalived.conf
systemctl restart keepalived

在这里插入图片描述
测试:
在这里插入图片描述

仍能实现轮询
在这里插入图片描述
server1日志:
在这里插入图片描述
server4日志:
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值