客户端去访问vip(虚拟ip),整个集群所有的机器上都有这个vip,但是客户端只能访问到调度机上的vip(RS上做了arp策略)通过调度机上的ipvsadm策略将client发来的数据包的目标mac地址一改(由调度器改为RS),扔给后台的RSRS处理完数据后,再将数据包发送给client(ip是vip,mac是自己的mac)
调度机上的ipvsadm策略是osi模型第二层数据链路层的策略,更改了mac地址,不会对第三层网络层的ip做更改,当数据包被扔给RS之后, 在OSI模型从下往上解包,到第三层ip层时,发现目地ip是vip,如果RS上不添加VIP的话,RS就会将这个包扔掉,因为与自己的ip不匹配
RS上做的arptables策略是为了实现 none VIP , 其实并不冲突,这都是在第二层与第三层之间的策略,RS上做两条策略:
第一条:当网络里有人发送arp请求询问VIP对应的mac地址时,RS不予回应
第二条:从本机上出去的所有arp回应,或者是arp包,注意,只是arp包,因为是arptables策略,如果是VIP发出的(RS上两个ip,一个VIP,一个RIP),都将它转换为RIP
这块要注意的是在网络里,数据包都是先以mac地址(第二层)为目标进行传输的,到达目的地后,一层一层往上解包,进行匹配,第三层匹配ip,第四层匹配端口,等等….只要有一层不匹配,这个包都会被扔掉,或者拒绝
先在6.5镜像挂载文件中查看参数
修改yum源文件,将参数写入yum源文件
vim /etc/yum.repos.d/rhel-dvd.repo
查看yum源修改是否生效
yum repolist
在server1(虚拟服务器)上安装ipvsadm(调度器)
ipvsadm是管理集群服务的命令行工具,用于管理LVS的策略规则
显示调度次数ipvsadm -L (-n不解析)
server1中:
添加ipvsadm策略
yum install ipvsadm -y
ipvsadm -A -t 172.25.10.100:80 -s rr # -A 增加一台虚拟设备
添加后端实际服务器
ipvsadm -a -t 172.25.10.100:80 -r 172.25.10.2:80 -g
ipvsadm -a -t 172.25.10.100:80 -r 172.25.10.3:80 -g
ipvsadm -ln
server1:
添加网卡IP
ip addr add 172.25.10.100/24 dev eth0
查看IP
ip addr
server2、server3:
添加网卡IP
ip addr add 172.25.10.100/24 dev eth0
server2、server3:
yum install arptables_jf.x86_64 -y
arptables -A IN -d 172.25.10.100 -j DROP
arptables -A OUT -s 172.25.10.100 -j mangle --mangle-ip-s 172.25.10.2
保存策略
/etc/init.d/arptables_jf save
查看策略
arptables -L
arptables的策略保存文件
物理机测试使用的arp命令
arp -an |grep 100 查看绑定的MAC地址
arp -d 172.25.10.100 删除现有绑定MAC地址
ping 172.25.10.100 重新获得ip和MAC地址
arp -an |grep 100
物理机检测:
curl 172.25.61.100
lvs DR模式的配置及工作原理,最后发现它没有健康检测,就是当一台RS挂掉后,它不会将挂掉的那台机器踢除,而是继续向那台机器发送请求.
真机:
get ldirectord-3.9.5-3.1.x86_64.rpm
虚拟机1:
rpm -ivh ldirectord-3.9.5-3.1.x86_64.rpm
yum install ldirectord-3.9.5-3.1.x86_64.rpm -y
rpm -ql ldirectord ##查找ldirectord的配置文件
将配置文件复制到指定目录
cp /usr/share/doc/ldirectord-3.9.5/ldirectord.cf /etc/ha.d/
cd /etc/ha.d/
ls
vim ldirectord.cf
# Sample for an http virtual service
virtual=172.25.1.100:80 #网内向外暴露的vip(虚拟ip)
real=172.25.1.2:80 gate # 后端真实服务器server1
real=172.25.1.3:80 gate # 后端真实服务器server2
fallback=127.0.0.1:80 gate # 如果后端真实服务器全部挂掉,只剩本机提醒用户在维护
service=http
scheduler=rr # 采用round-robin轮叫算法
#persistent=600
#netmask=255.255.255.255
protocol=tcp
checktype=negotiate
checkport=80
request="index.html"
#receive="Test Page"
#virtualhost=www.x.y.z
清除之前的后端服务器策略 ipvsadm -C
重新显示策略 ipvsadm -ln
/etc/init.d/ldirectord start
ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 172.25.61.100:http rr
-> server2:http Route 1 0 0
-> server3:http Route 1 0 0
server2、server3:
打开httpd服务
写入默认发布文件
当server2的httpd的服务关闭时,
server2:
/etc/init.d/httpd stop
server1:
[root@server1 ha.d]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 172.25.61.100:80 rr
-> 172.25.61.3:80 Route 1 0 0
物理机:
只显示server3的默认发布文件内容
[root@foundation61 rhel6.5]# curl 172.25.61.100
www.linux.org -server3
[root@foundation61 rhel6.5]# curl 172.25.61.100
www.linux.org -server3
当server2和server3的httpd的服务都关闭时,
物理机:
[root@foundation61 rhel6.5]# curl 172.25.61.100
curl: (7) Failed connect to 172.25.61.100:80; Connection refused
server1:
编写虚拟主机的默认发布文件
yum install httpd -y
cat /var/www/html/index.html
server1 - 此站点正在维护
物理机:
[root@foundation61 rhel6.5]# curl 172.25.61.100
server1 - 此站点正在维护