Linux运维之LVS(DR模式)
- 什么是LVS与vip
LVS(Linux Virtual Server),意即Linux虚拟服务器,是一个虚拟的服务器集群系统
宗旨是使用集群技术和Linux操作系统实现一个高性能、高可用的服务器,
用来解决负载均衡的问题
一般来说,LVS集群采用三层结构,其主要组成部分为:
A、负载调度器(load balancer),它是整个集群对外面的前端机,负责将客户的请求发送到一组服务器上执行,而客户认为服务是来自一个IP地址(可称之为虚拟IP地址)上的。
B、服务器池(server pool),是一组真正执行客户请求的服务器,执行的服务有WEB、MAIL、FTP和DNS等。
C、共享存储(shared storage),它为服务器池提供一个共享的存储区,这样很容易使得服务器池拥有相同的内容,提供相同的服务。
VIP为调度器和服务器组共享,调度器配置的VIP是对外可见的,用于接收虚拟服务的请求报文
- LVS的DR模式
1.客户端将访问vip报文发送给LVS服务器;
2.LVS服务器将请求报文的mac地址改为后端真实服务器的mac地址;
3.后端真实服务器得到访问报文后进行ip查看,再确认自己有vip之后进行请求处理;
4.后端真实服务器在处理完数据请求后,直接响应客户端。
要求:
1.LVS服务器和后端真实的服务器要处在同一vlan中。
2.LVS和后端服务器上都要有vip,并且后端真实服务器上的vip不能对外进行广播。
优点:
1.LVS服务器只是修改了mac地址,所以非常快速,并且LVS不会成为瓶颈。
缺点:
1.要求较高,LVS服务器必须和后端真实服务器处于同一vlan中;
2.后端真实服务器直接响应客户端,对于后端真实服务器来说,并不安全。
原理图:
- LVS之DR模式的搭建
搭建环境准备:
三台rhel7.3版本的虚拟机
server1:ip为172.25.11.1 作为lvs调度服务器DS
server2:ip为172.25.11.2 作为后端服务器RS
server3:ip为172.25.11.3 作为后端服务器RS
并给3台虚拟机添加vip:172.25.11.100
在调度其server1上安装ipvsadm,编写调度策略
yum install -y ipvsadm ##安装
ipvsadm -l ##查看策略,size=4096()
lsmod ##查看内核模块
ipvsadm -A -t 172.25.11.100:80 -s rr ##调度策略,rr轮询,ipvsadm --help看到,共10种调度算法
ipvsadm -a -t 172.25.11.100:80 -r 172.25.11.2:80 -g ##后端两个rs
ipvsadm -a -t 172.25.11.100:80 -r 172.25.11.3:80 -g
在server2与server3(后端RS服务器)配置:
安装httpd服务并解决可能宕机的情况(设置轮询)
yum install httpd -y
##解决方法1:
##添加arptable策略解决##
在两台rs(server2和server3)上安装arptables:
yum install arptables -y # 安装管理工具
arptables -A INPUT -d 172.25.11.100 -j DROP # 设置不回应对自己VIP的请求
arptables -A OUTPUT -s 172.25.11.100 -j mangle --mangle-ip-s 172.25.11.2 #设置将发送出去的数据包的源ip修改成VIP
arptables -L ##查看
##解决方法2:
##配置内核参数##
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
sysctl -p
在物理机测试:
crul 172.25.11.100
arp -an | grep 100 ##可以看到默认缓存的是server1的mac地址
arp -d 172.25.0.100 ##清除缓存,再次访问时,可能就不轮询,因为可能缓存了某台rs的mac地址
没有设置解决策略的效果:
设置过解决策略的效果:
在server1查看轮询次数
ipvsadm
- 配置ldirectord健康检查
现象:当前lvs配置,没有对后端的健康检查,停掉一台rs后端服务器的httpd,会出现connection refused,解决办法:ldirectord
配置步骤:
先在调度器上清除之前配置的规则以及VIP
ip addr del 172.25.11.100/24 dev eth0
ipvsadm -C
ipvsadm -l
首先给调度器(server1)添加高可用yum源:
vim /etc/yum.repos.d/rhel7.3.repo
[HighAvailability]
name=HighAvailability
baseurl=http://172.25.11.250/rhel7.3/addons/HighAvailability
gpgcheck=0
yum repolist
自行准备好ldirectord的RPM包,可在官网下载
yum install ldirectord-3.9.5-3.1.x86_64.rpm -y
rpm -qpl ldirectord-3.9.5-3.1.x86_64.rpm ##查看相关文件
复制配置文件并配置
cp /usr/share/doc/ldirectord-3.9.5/ldirectord.cf /etc/ha.d/
vim /etc/ha.d/ldirectord.cf
编写如下:
virtual=172.25.11.100:80
real=172.25.11.2:80 gate ##两个后端rs
real=172.25.11.3:80 gate
fallback=127.0.0.1:80 gate ##两个rs都挂了,就访问调度器自己的80端口
service=http
scheduler=rr ##轮询算法
#persistent=600
#netmask=255.255.255.255
protocol=tcp
checktype=negotiate
checkport=80
request="index.html"
#receive="Test Page"
#virtualhost=www.x.y.z
ip addr add 172.25.11.100/24 dev eth0
systemctl start ldirectord
systemctl start ldirector
systemctl enable ldirectord
查看规则并为server1安装http服务,写入网页
ipvsadm
yum install httpd -y
cd /var/www/html
vim index.html
在物理机上测试:
Ldirectord通过定期请求已知的URL并检查响应是否包含预期的响应来监视实际服务器的运行状况。如果一个真正的服务器出现故障,那么该服务器将被删除,并在重新联机后重新激活。如果所有真正的服务器都关闭了,那么会在池中插入一个回退服务器,这将使一个静态的真正的Web服务器重新联机。通常,回退服务器是本地主机。如果正在提供HTTP虚拟服务,那么运行一个ApacheHTTP服务器是很有用的,该服务器返回一个页面,指示该服务暂时不可访问。
关闭一台后端服务器server2的httpd测试:
发现后端服务器server3接替工作,并且不会出现server2连接不上的报错
在server1查看策略:
发现server2被暂时删除
再次开启后端服务器server2:
发现和server3轮询工作
在server1查看策略:
发现server2被添加:
同时关闭两台服务器server2和server3的httpd:
发现会启用本地调度器server1的httpd服务
查看server1的策略:
END