LVS的DR模型试验搭建
一、准备机器节点
node01作为LVS服务器,node02、node03作为底层real servers
二、布置网络层
node01的DIP,以及node02~03的RIP已经默认配置好;需要配置的是相同的VIP
配置VIP
写在子接口上
node01
# 以下两个是相同的,选取其一即可。eth0:2表示的是子接口
ifconfig eth0:2 172.16.6.100/24
ifconfig eth0:2 172.16.6.100 netmask 255.255.255.0
# 如果想撤掉上面的配置
ifconfig eth0:2 down
Real Server: node02、node03配隐藏VIP
- 先调整内核arp协议(否则一旦配置VIP后就会直接暴露出去),修改arp_ignore和arp_announce(一切即文件)
cd /proc/sys/net/ipv4/conf/eth0/ # 为了修改以后所有的接口,需要再在/proc/sys/net/ipv4/conf/all/路径下做同样修改
echo 1 > arp_ignore # 内核操作必须是重定向方式,不能用vi(会产生临时文件)
echo 2 > arp_announce
再配VIP
ifconfig lo:2 172.16.6.100 netmask 255.255.255.255 # 此处掩码必须是4个255,否则当发包时,优先选择内核中的虚拟网卡lo:2(相对于物理网卡)
三、准备Real Server的服务
node02、node03安装并启动服务
httpd:apache静态web server(重启之后失效?)。相对来说tomcat是动态web server
yum install httpd -y # 安装httpd
service httpd start # 启动,默认占用80端口
vi /var/www/html/index.html # 创建主页
在浏览器中访问相应虚拟机的ip:80即可
可能需要开放80端口
systemctl status firewalld # 查看防火墙是否开启
systemctl start firewalld # 如果没有开启则开启
firewall-cmd --list-ports # 查看所有开启的端口
firewall-cmd --zone=public --add-port=80/tcp --permanent # 开启80端口
firewall-cmd --reload # 重启防火墙
四、LVS服务配置
CentOS本身集成ipvs模块,只需要安装工具并进行操作即可
安装ipvsadm (node01)
yum install ipvsadm -y
使用ipvs工具
# 1. 添加进来数据包的规则,表示哪类数据包应该被负载出去
ipvsadm -A -t 172.16.6.100:80 -s rr # A表示进来,t表示tcp协议, -s表示scheduler调度,rr表示轮询
# 以下命令可以查看当前配置的配置调度规则
ipvsadm -ln
# 2. 设置负载real server,并可以通过ipvsadm -ln查看规则生成
# 即时生效:访问172.16.6.100:80即可访问
ipvsadm -a -t 172.16.6.100:80 -r 172.16.6.3 -g -w 1 # -r表示real server,-g轮询,-w权重
ipvsadm -a -t 172.16.6.100:80 -r 172.16.6.4 -g -w 1
即时生效
访问172.16.6.100
验证
查看连接
我们发现node01(LVS服务器并没有80端口与外部(.1 ip)的连接),node02、node03有相应地连接,证明了LVS仅仅是偷窥,而real server是实际进行了握手
netstat -antp
查看偷窥内容
LVS服务器上查看
[root@localhost ~]# ipvsadm -lnc
IPVS connection entries
pro expire state source virtual destination
TCP 14:57 ESTABLISHED 172.16.6.1:60318 172.16.6.100:80 172.16.6.3:80
TCP 14:49 ESTABLISHED 172.16.6.1:60301 172.16.6.100:80 172.16.6.4:80
- 排错
- FIN_WAIT:连接过,偷窥了所有的包
- SYN_RECV:基本上lvs都记录了,证明lvs工作正常,一定是网络层出问题(网线、交换机、网卡)
问题:刷很多遍才会访问另一台服务器,看demo是每次刷新必然轮询?
五、总结
- 浏览器访问.100:80时,会根据原地址封一个数据包.1:12121(随便给的端口号)
- 此包先会进入虚拟网络(交换机),然后到达node01(虚拟机仅看到其暴露了.100)
- 进入到node01后,匹配上了ipvs的负载均衡规则,此时不会修改其ip,而是在外层套了一个node02或者node03的mac地址(即在链路层封了mac地址,就不管网络层ip关系),发回给交换机
- 交换机根据mac地址,将数据包发到node02
- node02撕毁mac地址,暴露出VIP(.100),由于其内部存在仅内部可见的VIP,所以接收了数据包,相应地看到了80端口以及进程
- node02处理完数据包后,向.1返回数据