Linux企业实战 --LVS/DR

1.原理

在lvs(综述)里讲过。

2.实验环境

在真机中开启三台虚拟机
1台做lvs调度器,两台做后端轮询的web服务器,用真机分别连接三台虚拟机,真机本身是客户端

当前server1是director server,server2和server3是real server

步骤一

[root@server1 ~] yum install ipvsadm -y
[root@server1 ~] ipvsadm -ln  # 查看ipvsadm的编写策略

在这里插入图片描述步骤二

[root@server1 ~]ipvsadm -A -t 172.25.42.100:80 -s rr #设置客户端进入lvs调度器的入口地址,调度算法是轮询
[root@server1 ~]ipvsadm -a -t 172.25.42.100:80 -r 172.25.42.2:80 -g #设置lvs的策略:入口的第一台后端服务器的信息
[root@server1 ~]ipvsadm -a -t 172.25.42.100:80 -r 172.25.42.3:80 -g

ipvsadm -A -t 172.25.42.100:80 -s rr ##调度策略,

  • rr 轮询
  • -A --add-service 添加一条新的虚拟服务
  • -t TCP|UDP协议的虚拟服务
  • -s 调度算法

ipvsadm -a -t 172.25.42.100:80 -r 172.25.42.2:80 -g

  • -a 在一个虚拟服务中添加一个新的真实服务器
  • -g | -m | -i lvs模式为:dr | nat | tun
  • -t 说明虚拟服务器提供的是tcp的服务
    在这里插入图片描述

步骤三:添加ip地址(vip):

[root@server1 ~]ip addr add 172.25.254.100/32 dev eth0 ##lvs
[root@server2 ~]ip addr add 172.25.254.100/32 dev eth0 #后端服务器
[root@server3 ~]ip addr add 172.25.254.100/32 dev eth0 #后端服务器

步骤四

[root@server1 ~]ipvsadm -ln

在这里插入图片描述
步骤五:测试
在server2和server3中开启80端口(httpd)

[root@server2 ~]# systemctl start httpd
[root@server3 ~]# systemctl restart httpd
[root@server2 html]# vim /var/www/html/index.html 
server2
[root@server3 ~]# vim /var/www/html/index.html 
server3

真机中测试

扫描二维码关注公众号,回复: 9724886 查看本文章
[root@foundation42 ~]# curl 172.25.42.100
server2
[root@foundation42 ~]# curl 172.25.42.100
server2
[root@foundation42 ~]# curl 172.25.42.100
server2

在这里插入图片描述

此时不轮询???

为了解决此问题。如下:

3.ARP协议详解

arp协议是“address resolution protocol”(地址解析协议)的编写。其作用是在以太网(局域网)环境中数据传输所依赖的是mac地址而非ip地址,而将已知ip地址转换为mac地址的工作是由apr协议来完成的。
在局域网中,网络实现传输的是‘帧’,帧理念是有目标主机的mac地址的。在以太网中,一个主机和另一个主机进行直接通信,必须要知道目标主机的mac地址。但这个目标mac地址是如何获得的?它就是通过地址解析协议获得的。所谓“地址解析”就是主机在发送帧前将目标ip地址转换成目标mac地址的过程。arp协议的基本功能就是通过目标设备的ip地址,查询目标设备的mac地址,以保证通信的顺利进行。

4.ARP请求

任何时候,当主机需要找出这个网络中另一个主机的物理地址时,它就可以发送一个apr请求报文,这个报文包好了发送方的mac地址和ip地址以及接受方的ip地址。因为发送方不知道接收方的物理地址,所以查询分组会在网络层中进行广播。

正是server2的mac地址,说明广播后被server2接受,并保存了,不会在更改了。
在这里插入图片描述

5.ARP响应(抢答)

局域网中的每一台主机都会接受并处理arp请求报文,然后进行验证,查看接收方的ip地址是不是自己的地址,只有验证成功的主机才会返回一个arp响应报文,这个响应报文包含接收方的ip地址和物理地址。这个报文利用收到的arp请求报文中的请求房屋里地址以单播的方式直接发送给arp请求报文的请求方。

再次测试

arp -d 172.25.42.100 ##删除(MAC地址)并再次测试。
curl 172.25.42.100

客户端第一次访问172.25.254.100的时候server1,server2,server3会去抢答,谁抢到就是谁的解决抢答方案。

解决DR模式不轮循的问题

在server2和server3上进行设置(操作一样)

步骤一

[root@server3 ~]# yum whatprovides arptables
[root@server3 ~]# yum install arptables-0.0.4-8.el7.x86_64 -y
[root@server2 html]# yum install arptables-0.0.4-8.el7.x86_64 -y

步骤二

方法一:arptables推荐

[root@server2 html]# arptables -A INPUT -d 172.25.42.100 -j DROP # 收到的arp,如果目的ip时vip的,丢弃
[root@server2 html]# arptables -A OUTPUT -s 172.25.42.100 -j mangle --mangle-ip-s 172.25.42.2 # 发出去的arp包,如果源ip时vip的,改成realserver的ip
[root@server2 html]# arptables -nL


[root@server3 ~]# arptables -A INPUT -d 172.25.42.100 -j DROP
[root@server3 ~]# arptables -A OUTPUT -s 172.25.42.100 -j mangle --mangle-ip-s 172.25.42.3
[root@server3 ~]# arptables -nL

在这里插入图片描述测试:
在这里插入图片描述
方法二:该参数

arp_ignore和arp_announce参数都和arp协议相关,主要用于控制系统返回arp响应和发送arp请求时的动作。特别是在lvs的dr场景下,他们的配置直接影响到dr转发是否正常:

arp_ignore参数的作用是控制系统在收到外部arp请求时,是否要返回arp响应:

  • 只响应目的ip地址为接收网卡上的本地地址arp请求arp_announce的作用是控制系统在对外发送arp请求时,如何选择arp请求数据包的源ip地址
  • 忽略ip数据包的源ip地址,选择该发送网卡上最合适的本地地址作为arp请求的源ip地址。
sysctl -w net.ipv4.conf.lo.arp_ignore=1
sysctl -w net.ipv4.conf.lo.arp_announce=2
sysctl -w net.ipv4.conf.all.arp_ignore=1
sysctl -w net.ipv4.conf.all.arp_announce=2
sysctl -p # 立即生效

6.问题测试

问题一:将 server2 的httpd停止后

在这里插入图片描述怎么检测是否被关掉,DR模式下的后端健康服务检查(Idirectord)

步骤一:找到高可用yum源
我们真机用的都是基础yum源,而该软件需要高可用yum源。
在这里插入图片描述

步骤二:配置高可用yum源

在这里插入图片描述
步骤三:安装ldirectord-3.9.5-3.1.x86_64.rpm高可用的软件
在这里插入图片描述
步骤四:查看安装生成的文件路径

[root@server1 lvs]# rpm -qpl ldirectord-3.9.5-3.1.x86_64.rpm 

在这里插入图片描述
步骤五:

[root@server1 lvs]# cp /usr/share/doc/ldirectord-3.9.5/ldirectord.cf /etc/ha.d/
[root@server1 lvs]# cd /etc/ha.d/
[root@server1 ha.d]# ls
ldirectord.cf  resource.d  shellfuncs
[root@server1 ha.d]# vim ldirectord.cf 

在这里插入图片描述在这里插入图片描述在这里插入图片描述
官方解释
在这里插入图片描述在这里插入图片描述
此时,将ipvs规则给健康状况检查的服务去服务。

[root@server1 ha.d]# ipvsadm -ln            
[root@server1 ha.d]# ipvsadm -C #清除规则
[root@server1 ha.d]# systemctl start ldirectord
发布了136 篇原创文章 · 获赞 1 · 访问量 1652

猜你喜欢

转载自blog.csdn.net/qq_45652989/article/details/104432748