客户端将请求发往前端的负载均衡器,请求报文源地址是CIP,目标地址为VIP
负载均衡器接收到报文后,发现请求的是在ipvs规则中存在的地址和端口,那么它将客户端请求报文的源MAC地址改为自己的MAC地址,目标MAC改为了Real Server的MAC地址,并将此包发送给Real Server
Real Server发现请求报文中的目标MAC地址是自己,就会把此报文接受下来,处理完请求报文后,将响应报文通过lo接口送给eth0网卡,直接发送给客户端。
VIP地址为调度器和服务器组共享,调度器配置的VIP地址是对外可见的,用于接收虚拟服务的请求报文;所有的服务器把VIP地址配置在各自的Non-ARP网络设备上,它对外面是不可见的,只是用于处理目标地址为VIP 的网络请求 VIP地址为调度器和服务器组共享,调度器配置的VIP地址是对外可见的,用于接收虚拟服务的请求报文;所有的服务器把VIP地址配置在各自的Non-ARP网络设备上,它对外面是不可见的,只是用于处理目标地址为VIP 的网络请求。
1.selinux和iptables状态为disabled
2.Virtual IP:172.25.4.100
3.各主机信息如下:
主机名 | IP |
server1(调度器) | 172.25.8.1 |
server2(真实服务器) | 172.25.8.2 |
server3(真实服务器) | 172.25.8.3 |
1. 扩展yum源——针对调度器(server1)
在原来的yum源的基础上添加如下内容
测试yum 源是否扩展成功
2. 安装ipvsadm 软件——针对调度器(server1)
LVS 管理工具——ipvsadm:https://www.cnblogs.com/lipengxiang2009/p/7353373.html
ipvsadm -l | -L 显示内核中的虚拟服务规则
lsmod 命令:https://www.cnblogs.com/vincently/p/4757206.html
3. 将调度器和真实服务器设置在同一个vlan
server1 (给调度器添加虚拟IP(即客户端访问的IP)):
server2 :
安装httpd ,编辑默认发布页面,然后启动httpd
server3 :
安装httpd ,编辑默认发布页面,然后启动httpd
4. 添加ipvsadm 策略——针对调度器(server1)
添加虚拟服务,并在虚拟服务中添加真实服务器
ipvsadm -ln #不解析,以数字形式显示IP端口
保存ipvsadm 策略
ipvsadm的策略将会保存在/etc/sysconfig/ipvsadm文件中
5. 在物理机(172.25.8.250)中进行测试
在测试之前,先查看下server1,server2,server3虚拟机的MAC地址,以便后续的实验。
在物理机进行测试
ARP是地址解析协议;将IP地址映射为物理硬件(MAC)地址
arptables 详解:https://blog.csdn.net/flfblog/article/details/8787885
先curl命令访问虚拟ip,看到server2 的内容,然后用arp -d 清除地址解析缓存,再用curl命令访问虚拟ip,
看到server3 的内容,因为访问100这个IP时,并不能唯一指定调度器,且具有随即性;所以说,此时我们要解决的问题是如何让100这个IP地址唯一地指向调度器(即server1)
抑制server2和server3的ARP:
server2 :
禁止172.25.8.100 作为目的ip发送进来
允许server2 的数据包通过ip 隧道以172.25.8.100 作为源ip 发送出去
列出规则
保存arptables 策略
server3(同server2):
物理机测试:
ip 地址唯一解析为server1 的物理地址