以前笔者总结过一篇文章-数据中心负载均衡的一点总结 ,里面说明了四层与七层负载均衡,四层就是基于IP+端口(四层协议)的负载均衡(比如NAT),七层就是基于URL等应用层信息的负载均衡(比如nginx) 。笔者配置过七层转发,Nginx反向代理,Docker Nginx反向代理配置web负载均衡实践 。今天就来测试实践四层转发。
ipvs称之为IP虚拟服务器(IP Virtual Server,简写为IPVS),是运行在LVS下的提供负载平衡功能的一种技术,通过IPVS模块来实现的,具体实现是由ipvsadm这个程序来完成。今天在VirtualBox中的配置为NAT网络的centos8虚拟机、安装LAMP的两个树莓派上来测试。客户端就使用centos8虚拟机的cmd上运行curl来测试。

1、调度器上安装并启动ipvsadm
yum install ipvsadm -y 。安装完成后可以通过rpm -qa | grep ipvsadm 来检查是否安装成功 。确定安装完成后 笔者使用root用户来启动ipvsadm服务:systemctl start ipvsadm,但是会报错:Job for ipvsadm.service failed because the control process exited with error code。根据提示使用journalctl -xe来查看具体的失败信息,其中有一条信息是: /etc/sysconfig/ipvsadm: 没有那个文件或目录。

systemctl status ipvsadm查看服务状态信息,也会提示这个信息:/etc/sysconfig/ipvsadm: 没有那个文件或目录。在搜索引擎搜索故障,于是使用命令来建立这样的文件:ipvsadm --save > /etc/sysconfig/ipvsadm 。再次开启后正常,具体原因未知。

2、在调度器上打开ip转发
编辑配置文件/etc/sysctl.conf ,写入net.ipv4.ip_forward =1 ,最后运行sysctl -p 使之生效 。
3、在树莓派上安装LAMP作为后端服务器
具体就不阐述了,以前的文章有很多方面的知识。在/var/www/html目录下新建ip.php文件,里面标识ip地址来区分不同的服务器。
4、调度器上配置lvs进程调度
ipvsadm -A -t 10.0.2.15:80 -s rr : -A参数增加服务,-t 绑定的ip地址,-s指定调度算法,表示轮询(round robin)。
ipvsadm -a -t 10.0.2.15:80 -r 192.168.31.234:80 -m :-a 指定增加真实服务器,-r 指定realserver,-m 表示使用 NAT 模式 。
ipvsadm -a -t 10.0.2.15:80 -r 192.168.31.82:80 -m 。

5、在调度器上访问
使用curl 10.0.2.15 发现访问不成功。应该是防火墙的问题, systemctl stop firewalld.service关闭防火墙后成功。轮询访问两个后端树莓派。笔者尝试在防火墙添加ipvsadm服务:firewall-cmd --permanent --zone=public --add-service=ipvsadm ,但是会报错:Error: INVALID_SERVICE: 'ipvsadm' not among existing services 。暂时无法解决!只能关闭防火墙来测试。

将其中一个树莓派关机后,轮询到关机的那个树莓派时,curl 10.0.2.15会一直卡在那里,无法运行。将其中一个树莓派的apache2服务关闭后,会显示错误:Failed to connect to 10.0.2.15 port 80: 拒绝连接 。这个和nginx转发是不一样的。
网友评论