一.初步了解LVS
1、什么是LVS
LVS(Linux Virtual Server)即Linux虚拟服务器,是一个开源负载均衡项目,目前已经被集成到Linux内核模块中。LVS是一个做负载均衡的调度器,用的是四层协议。
2、LVS的大致工作原理
现有一个客户端A,一个LVS调度器,三个后端服务器1、2、3.
当客户端A访问LVS时,LVS在后端服务器中选其中一个来回答客户端A的问题,而自身不回答A的问题,LVS可以选择由哪个后端服务器来回答,所以可以选择压力较小的后端服务器,所以起到了负载均衡的作用。
3、LVS和Varnish的区别
在客户端访问LVS时,LVS选择一个后端服务器,让该后端服务器回答客户端的问题,而自身不去回答问题,只起调度后端服务器的作用。
当客户端访Varnish时,Varnish帮客户端询问后端服务器,得到答案,然后自身去回答客户端的问题,好处是这样Varnish可以有答案的缓存,再次回答时回答的会很快。
二.模拟配置LVS
将会用到1台客户端机:172.25.2.250,hostname为foundation2.ilt.example.com
将会用到1台配置LVS调度器的服务器:172.25.2.1,hostname为madao1
2台后端服务器:172.25.2.2,hostname为madao2;172.25.2.3,hostname为madao3
1、配置LVS调度器
命令 | 功能 |
---|
yum clean all | |
yum repolist | |
yum install ipvsadm -y | 安装ipvsadm |
ipvsadm -ln | 查看当前的配置,此时无 |
ipvsadm --help | 查看ipvsadm怎么用 |
ipvsadm -A -t 172.25.2.100:80 -s rr | 添加虚拟IP,VIP:172.25.2.100,通过访问的端口是80端口,方式为轮循的方式,意为通过VIP访问本机时,转为轮循的方式访问后端服务器的80端口(httpd服务) |
ipvsadm -a -t 172.25.2.100:80 -r 172.25.2.2:80 -g | 添加后端服务器1,意为通过VIP访问时转为访问172.25.2.2(后端服务器1的ip)的80端口(httpd服务) |
ipvsadm -a -t 172.25.2.100:80 -r 172.25.2.3:80 -g | 添加后端服务器2,同义 |
ipvsadm -ln | 查看当前的配置,此时有3条 |
ip addr show | 查看当前机的网卡信息 |
ip addr add 172.25.2.100/24 dev ens3 | 给网卡添加一个IP作为VIP |
ip addr show | 查看是否添加成功 |
2、配置后端服务器
两台后端服务器的配置相同
命令 | 功能 |
---|
cd /var/www/html | 到该目录下 |
vim index.html | 创建该文件,两台后端服务器分别打不一样的内容,提示真实访问的服务器地址,便于测试 |
ip addr show | 查看本机网卡信息 |
ip addr add 172.25.2.100/32 dev ens3 | 添加VIP |
ip addr show | 查看是否添加成功 |
yum install arptables-0.0.4-8.el7.x86_64 | 下载arptables,arptables是防止后端服务器直接响应客户端的访问(因为后端服务器也有VIP)而存在的,若直接响应,就不会走LVS服务器,不安全也达不到效果 |
arptables -nL | 查看当前策略 |
arptables -A INPUT -d 172.25.2.100 -j DROP | 在INPUT链中添加策略,意为当外界用VIP访问时,丢弃访问请求,不作回应 |
arptables -A OUTPUT -s 172.25.2.100 -j mangle --mangle-ip-s 172.25.2.2(或172.25.2.3) | 在OUTPUT链中添加策略,意为万一回应时,将自己的IP转为172.25.2.2(真实IP)回应,这样回应结果就会转回LVS中进行处理,然后正常反馈结果,而不直接向客户端回应 |
3、在客户端测试
命令 | 功能 |
---|
arp -an | grep 172.25.2.100 |
arp -d 172.25.2.100 | 删除IP172.25.2.100此时记录的对应MAC地址 |
arp -an | grep 172.25.2.100 |
curl 172.25.2.100 | 通过VIP访问LVS服务器 |
this is madao2 | 提示为后端服务器1的反馈 |
curl 172.25.2.100 | 通过VIP访问LVS服务器 |
this is madao3 | 提示为后端服务器2的反馈 |
curl 172.25.2.100 | 通过VIP访问LVS服务器 |
this is madao2 | 提示为后端服务器1的反馈(开始轮循) |
curl 172.25.2.100 | 通过VIP访问LVS服务器 |
this is madao3 | 提示为后端服务器2的反馈(显示轮循的成功) |
4、在客户端进行压力测试
命令 | 功能 |
---|
ab -c 10 -n 50000 http://www.abc.org/index.html | 查看所需时间要多久(与varnish中的原理相同) |
5、在LVS服务器做查看
命令 | 功能 |
---|
ipvsadm -ln | 可查看后端服务器分别被访问的次数 |
三.配置LVS的健康监测
1、配置一个高可用yum源
(1)挂载高可用yum源
命令 | 功能 |
---|
vim /etc/yum.repos.d/rhel7.5.repo | 修改该文件 |
[HighAvailability]
name=HighAvailability
baseurl=http://172.25.2.250/rhel7.5/addons/HighAvailability |挂载路径在原yum源的路径下addons下的HighAvailability
gpgcheck=0 |做一个高可用yum源
(2)
2、在LVS调度器中配置
命令 | 功能 |
---|
get ldirectord的安装包 | 下载安装包 |
mv ldirectord的安装包 /opt | 放到opt目录下 |
cd /opt | 进入该目录 |
yum clean all | 清除yum缓存 |
yum repolist | 重新加载yum源(此时为高可用yum源) |
yum install * | 安装ldirectord |
rpm -qpl ldirectord-3.9.5-3.1.x86_64.rpm | 查看ldirectord的配置文件,找到/etc/ha.d |
cp /usr/share/doc/ldirectord-3.9.5/ldirectord.cf /etc/ha.d | 将文件复制到此目录 |
cd /etc/ha.d | 到该目录下 |
vim ldirectord.cf | 修改该文件 |
virtual=172.25.2.100:80 |修改VIP
real=172.25.2.2:80 gate |修改后端服务器1
real=172.25.2.3:80 gate |修改后端服务器2
fallback=127.0.0.1:80 gate |当后端服务器1和2都出现故障时,本机充当后端服务器
#receive=“Test Page” |将该行注释
#virtualhost=www.x.y.z |将该行注释
命令 | 功能 |
---|
ip addr show | 查看本机网卡信息 |
ip addr add 172.25.2.100/24 dev ens3 | 添加VIP |
ip addr show | 查看是否添加成功 |
yum install httpd -y | 下载httpd服务,为本机充当后端服务器做准备 |
systemctl start httpd | 开启httpd服务 |
vim /var/www/html/index.html | 编辑该文件 |
this is madao1 | 编辑提示语 |
3、在客户端中测试
命令 | 功能 |
---|
curl 172.25.2.100 | 通过VIP访问LVS服务器 |
this is madao2 | 提示为后端服务器1的反馈 |
curl 172.25.2.100 | 通过VIP访问LVS服务器 |
this is madao3 | 提示为后端服务器2的反馈 |
在后端服务器2关闭httpd服务 | 模拟后端服务器2故障 |
curl 172.25.2.100 | 通过VIP访问LVS服务器 |
this is madao2 | 提示为后端服务器1的反馈 |
curl 172.25.2.100 | 通过VIP访问LVS服务器 |
this is madao2 | 提示为后端服务器1的反馈(不再轮循,因为后端服务器2故障,只有后端服务器1能用) |
在后端服务器1关闭httpd服务 | 模拟后端服务器1和2都故障 |
curl 172.25.2.100 | 通过VIP访问LVS服务器 |
this is madao1 | 提示为LVS调度器充当后端服务器的反馈 |
curl 172.25.2.100 | 通过VIP访问LVS服务器 |
this is madao1 | 提示为LVS调度器充当后端服务器的反馈(因为后端服务器1、2均故障) |