LVS(二)LVS的实现

说明:这章节我们不打算讲解LVS的原理,如果您对部分原来不是太了解,可以参考我的这篇博客

一、铺垫

思考1:TCP/IP 的七层模型与OSI 在四层模型区别?

核心:OSI 参考模型注重"通信协议必要的功能是什么",而 TCP/IP则更强调"在计算机上实现协议应该开发哪种程序"!

思考2:负载均衡的表现形式?

基于七层DNS解析(虚拟主机)、反向代理(squid、varnish)、HTTP协议的URL请求头(varnish)的重定向和Apach http重定向

负载均衡常见的方式

#####################################

二、LVS的专业术语

LVS(二)LVS的实现_第1张图片

三、LVS的实现

LVS由用户空间的ipvsadm内核空间的IPVS组成,ipvsadm用来定义规则,IPVS利用ipvsadm定义的规则工作

(1)DR(Direct Routing)模式

      1)DR模式图

          1)客户端主机A向目标IP(VIP)发送,通过ARP的请求和响应确定了前端控制器的VIP的MAC地址!

说明第一次会将其记录在ARP缓存表中,所以 arp -n vip的时候发现前端服务器MAC地址而不是后端服务器的MAC地址

LVS(二)LVS的实现_第2张图片

LVS(二)LVS的实现_第3张图片

LVS的结构主要分为两部分:

工作在内核空间IPVS模块,LVS的能力实际上都是由IVPS模块实现;

工作在用户空间的ipvsadm管理工具,其作用是向用户提供一个命令接口,用于将配置的虚拟服务、真实服务等传给IPVS模块。

IPVS的命令行参数

scheduler:调度算法

arptables 是一个用户空间工具(操作内核ARP表的接口),用于管理内核中的ARP规则表,规则检查处理的是ARP数据帧

说明:arptables 类似 iptable,但比iptables简单,它需要载入内核模块arptable_filter

正常情况下,arptable_filter 只有一个表filter ,不指定-t 表名 时默认就是filter 表, filter 表有两个链

        一个是IN,表示外面发进来的ARP包;另外一个是OUT ,表示本机发出的ARP包

说明:arptables 可以当作是linux下的ARP防火墙

arp详细解释

核心:MAC地址的修改和IP的欺骗以及ARP的抑制!

DR和RS必须在同一个局域网原因:就是为了保证可以通过修改MAC地址而进行数据报文的转发!

作用域:工作在OSI模型的第二层,即工作在数据链路层

特点:通过改写请求报文目标MAC地址,将请求发给真实服务器的,而真实服务器响应后的处理结果直接返回给客户端用户

注意:客户端测试的时候MAC地址后端服务器的MAC地址,而不是前端服务器的MAC地址!

核心:在转发的过程中,仅仅是修改了数据报文中的目标MAC地址,然后转发!

但是要求调度器LB与真实服务器RS都有一块网卡连接到同一物理网段上,必须在同一个局域网环境

arptables -A OUT -s 172.25.14.100 -j mangle --mangle-ip-s 172.25.14.2 

##将真实的ip转换为vip,由于tcp三次握手,出去时仍要以vip地址形式才会握手-->

而真正将数据传输给客户端的就是realserver,mangle参数就是这个功能

说明:服务器的功能呢重叠,选择最好的和最合适的!

DR的实现

(1)说明:前端飘逸的现象

LVS(二)LVS的实现_第4张图片

LVS(二)LVS的实现_第5张图片

LVS(二)LVS的实现_第6张图片

LVS(二)LVS的实现_第7张图片

LVS(二)LVS的实现_第8张图片

LVS(二)LVS的实现_第9张图片

DR的解决策略 ---->后端服务器对ARP请求处理

两个后端服务器的配置

LVS(二)LVS的实现_第10张图片

LVS(二)LVS的实现_第11张图片

后端服务器两条命令的讲解

arptables -A IN -d -j DROP

# 进来的ARP请求包,如果目的(destination)IP是VIP的,丢弃 

原因:防止客户端主机跃过集群的"前端主机"直接与后端服务器通信(失去了负载均衡的意义),防止直接穿透

补充:如果是通过前端服务器的调度则目的IP是真实的后端服务器ip,而不是VIP!

arptables -A OUT -s -j mangle --mangle-ip-s 

举例“arptables -A OUT -s 172.25.14.100 -j mangle --mangle-ip-s 172.25.14.2 

##将真实ip转换成vip,由于tcp三次握手,出去时仍要以vip地址形式才会握手,而真正将数据传输给客户端的就是realserver,mangle参数就是这个功能!

# 将源是VIP的"ARP请求包"发给rs(真实的后端服务器),理论上rs发送数据包并且响应源IP是非VIP!

与内核ARP参数arp_ignore=1,arp_announce=2的作用是一样的

测试正确的实验现象

LVS(二)LVS的实现_第12张图片

细节问题

   (1)lvs前端控制器的ipvsadm的命令(lvs规则)和后端服务器的(arptables)

   (2)lvs两条命令--->添加虚拟服务(A->Service)并设置调度(s)算法-->在虚拟的服务中添加真实的服务器(Server) 并设置模式(-g | -m | -i -->LVS模式为:DR | NAT | TUN)

    配置一个VIP!

   (3)后端服务器的配置
   
      1)VIP

      2)arptables 

       IN规则:不接受目的IP是VIP的ARP包(防止客户端直接穿越来访问,不经过前端控制器,通过前面的MAC地址就可以知道)!

       OUT规则:扩展动作:mangle: mangle ARP包

       含义:IP欺骗-->在发送数据包ARP的真实RIP改成VIP!

       明白:欺骗的目的,由于是直接给客户端的,如果是RIP,就不会接受

       注意:由于客户端中的目标MAC是前端服务器的,所以后续数据的交互还要经过前端控制器!

仅仅是修改了数据报文中的MAC地址,所以这也是为什么我们要求DR和RS必须在同一个物理网络内(网段-->广播,arp请求和响应),就是为了保证可以通过修改MAC!

说明:有点类似于于三层交换机(路由的功能)

对比:LVS的MAC地址

(2)VS/TUN模式

tunel:隧道

LVS(二)LVS的实现_第13张图片

回头附加上老师的图!

核心:调度器通过对IP报文再封装一层IP报文,发后发送给后端服务器

说明:由于通信通过 TUNNEL 模式,不管是内网和外网都能通信(跨区域),所以不需要 lvs vip 跟 realserver 在同一个网段内!

实现方式:导入支持隧道模块,在隧道上建立虚拟的IP

LVS(二)LVS的实现_第14张图片

注意:在隧道上添加VIP

LVS(二)LVS的实现_第15张图片

添加规则

LVS(二)LVS的实现_第16张图片

修改内核参数

LVS(二)LVS的实现_第17张图片

客户端测试

LVS(二)LVS的实现_第18张图片

说明:这里的IP欺骗方式(客户端)和DR模式中配置的一样,这里不再赘述

IP欺骗的等价方式:源地址校验的问题

sysctl -w net.ipv4.conf.tunl0.rp_filter=0

ipip的隧道技术

说明:由于DR和TUN模式响应数据包不经过前端调度器,所以必须设置后端服务器必须设置VIP

(3)NAT

感觉:有点像路由的功能

LVS(二)LVS的实现_第19张图片

特点:原路返回

前端控制器配置

LVS(二)LVS的实现_第20张图片

LVS(二)LVS的实现_第21张图片

注意:添加了网卡,默认网卡不开启;说明:如果是临时配置IP,又没有以配置文件的形式开启,默认网卡是不开启的!

报错:curl: (7) Failed connect to server1:80; Connection timed out

开启方式:ip link set up eth1

其次:保证原生的环境,删除之前的配置,因为环境越复杂,排错的难度更大,而且错误不可控!

其次一定要注意:RS的网关要和VS的一致!

后端服务器的配置

LVS(二)LVS的实现_第22张图片

LVS(二)LVS的实现_第23张图片

测试结果

LVS(二)LVS的实现_第24张图片

弊端:请求和响应都经过前端服务器,并发能力特别差,一般支持10~15左右!

三种模式对应的参数

--gatewaying   -g                   gatewaying (direct routing) (default)
--ipip         -i                   ipip encapsulation (tunneling)
--masquerading -m                   masquerading (NAT)

LVS三种模式的区别及负载均衡算法

说明:上述提及几条链

四、其它方式

full-nat!

tunel和full-nat不太常用!

需要编译内核!

细节问题:接收和发送消息(同一个局域网的数据链路层),(同一个局域网ip的问题)!

(2) 解决LVS中的ARP问题

方式1

arptables -A IN -d -j DROP

# 进来的ARP请求包,如果目的(destination)IP是VIP的,丢弃 

原因:防止客户端主机跃过集群的"前端主机"直接与后端服务器通信(失去了负载均衡的意义),防止直接穿透

补充:如果是通过前端服务器的调度则目的IP是真实的后端服务器ip,而不是VIP!

arptables -A OUT -s -j mangle --mangle-ip-s 

举例“arptables -A OUT -s 172.25.14.100 -j mangle --mangle-ip-s 172.25.14.2 

##将真实ip转换成vip,由于tcp三次握手,出去时仍要以vip地址形式才会握手,而真正将数据传输给客户端的就是realserver,mangle参数就是这个功能!

# 将源是VIP的"ARP请求包"发给rs(真实的后端服务器),理论上rs发送数据包并且响应源IP是非VIP!

与内核ARP参数arp_ignore=1,arp_announce=2的作用是一样的。

注意

LVS 的VIP 和 realserver 必须在同一个网段,不然广播后所有的包都会丢掉;所有的realserver 都必须绑定VIP的IP地址;

说明:客户端测试的时候最终arp -n的ip 和 MAC地址是后端服务器的!

arp欺骗

四、硬件的负载均衡

链接1

连接2

核心:独立于操作系统!

连接3

连接4

吞吐率

五、

LVS负载均衡NAT和fullnat模式区别

连接2

LVS 原理(调度算法、四种模式的实现、四层负载均衡和七层 的区别)

四层、七层负载均衡的区别

你可能感兴趣的:(运维)