关于LVS负载均衡
成都创新互联坚持“要么做到,要么别承诺”的工作理念,服务领域包括:成都网站建设、网站设计、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的大东网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!
一、什么是负载均衡:
负载均衡集群提供了一种廉价、有效、透明的方法,来扩展网络设备和
服务器的负载、带宽、增加吞吐量、加强网络数据处理能力,提高网络的灵活性
和可用性。
二、搭建负载均衡服务的需求:
1)把单台计算机无法承受的大规模的并发访问或者数据流量分担到多台节点设备上
分别处理,减少用户等待响应的时间,提升用户体验。
2)单个重负载的运算分担到多台节点设备上做并行处理,每个节点设备结束后,
将结果汇总,返回给用户,系统处理能力得到大幅度提升。
3)7*24的服务保证,任意一个或多个有限节点设备宕机,要求不能影响业务。
三、LVS的介绍:
LVS是Linux Virtual Server的简写,即Linux虚拟服务器,是一个虚拟的服务器
集群系统,可以在UNIX/LINUX平台下实现负载均衡集群功能。
该项目是在1998年5月由章文嵩博士组织成立的,是中国国内最早出现的自由
软件项目之一。
四、关于LVS的配置使用:
LVS负载均衡调度技术是在Linux内核中实现的,因此,被称为Linux
虚拟服务器。我们使用该软件配置LVS时候,不能直接配置内核中的ipvs,
而需要使用ipvs的管理工具ipvsadm进行管理,ipvs的管理工具ipvsadm管理ipvs。
五、LVS技术点小结:
1)真正实现负载均衡的工具是ipvs,工作在linux内核层面。
2)LVS自带的ipvs管理工具是ipvsadm。
3)keepalived实现管理ipvs及对负载均衡器的高可用。
4)Red hat工具Piranha WEB管理实现调度的工具ipvs。
六、LVS体系结构与工作原理:
1)LVS集群负载均衡接收服务的所有入站客户端计算机请求,并根据调度算法决定哪个集群节点应该处理回复请求。
负载均衡(LB)有时也被称为LVS Director(简称 Director).
2)LVS虚拟服务器的体系结构如下图,一组服务器通过高速的局域网或者地理分布
的广域网相互连接,在他们的前端有一个负载调度器(Load Balancer)。负载调度器能
无缝地将网络请求调度到真正的服务器上,从而使得服务器集群的结构对客户是透明的,
客户访问集群系统提供的网络服务就像访问一台高性能、高可用的服务器一样。客户程序
不受服务器集群的影响不需做任何修改。系统的伸缩性通过在服务集群中透明地加入和删除
一个节点来达到,通过检测节点或服务进程故障和正确的重置系统达到高可用性。由于我们的负载调度技术在
linux内核中实现的,我们称之为linux虚拟服务器(Linux Virtual Server)。
七、LVS社区提供了一个命名的约定:
名称: 缩写
虚拟IP地址(Virtual IP Address) VIP
说明:VIP为Director用于向客户端计算机提供服务的ip地址,
比如: 域名就解析到vip上提供服务。
-------------------------------------------------------------------------------
真实ip地址(Real Server ip Address) 缩写:VIP
说明:在集群下面节点上使用的ip地址,物理ip地址。
-----------------------------------------------------------------------------------
Director的ip地址(Director ip Adress) 缩写:DIP
说明:Director用于连接内外网络的ip地址,物理网卡上的IP地址,
是负载均衡上的ip。
-------------------------------------------------------------------------------------
客户端主机IP地址(Client IP Address) 缩写:CIP
说明:客户端用户计算机请求集群服务器的IP地址,该地址用作发送
给集群的请求的源ip地址。
----------------------------------------------------------------
LVS集群内部的节点称为真实服务器(Real server),也叫做集群节点。请求集群服务的
计算机称为客户端计算机。
与计算机通常在网上交换数据包的方式相同,客户端计算机、Director
和真实服务器使用IP地址彼此进行通信。
------------------------------------------------------------------------------------------
八、LVS集群的3种工作模式介绍与原理讲解
1)IP虚拟服务软件ipvs,在调度器的实现技术中,IP负载均衡技术是
效率最高的。在已用的ip负载均衡技术中有通过网络地址转换
(Network Address Translation)将一组服务器构成一个高性能的、高可用的虚拟服务器,
我们称之为VS、NAT技术(Virtual Server Network Adress Translation)。
2)在分析VS/NAT的缺点和网络服务的非对称性的基础上,我们提出通过IP隧道实现虚拟服务器的
方法VS/TUN(Virtual Server via IP Tunneling)和通过直接路由实现虚拟服务
器的方法VS/DR(Virtual Server via Director Routing),它们可以极大地提高系统的伸缩性。
3)淘宝开源的模式FULLNAT。
LVS的四种工作模式:
缩写及全拼:
NAT(Network Adress Translation)、TUN(Tunneling)、
DR(Director Routing)、FULLNAT(FULL Network address Translation)
-------------------------------------------------------------------------------------------
九、什么是ARP协议:
1) ARP协议:全称"Address Resolution Protocol",中文名地址解析协议,使用ARP协议可
实现通过IP地址获得得对应主机的物理地址(MAC地址)。
在TCP/IP的网络环境下,每个联网的主机都会被分配一个32位的ip地址,
这种互联网地址是在网际范围标识主机的一种逻辑地址。为了让报文在
物理网路上传输,还必须要知道对方目的主机的物理地址(MAC)才行。这样就存在把IP地址变成
物理地址的地址转换的问题。
在以太网环境,为了正确地目的主机传送报文,必须把目的主机的32位IP
地址转换成为目的主机48位以太网的地址(MAC地址)。这就需要在互联层有一个服务或功能将
IP地址转换为相应的物理地址(MAC地址),这个服务或者功能就是ARP协议。
所谓的“地址解析”,就是主机在发送帧之前将目标IP地址转换成目标MAC地址的过程,
ARP协议的基本功能就是通过目标设备的ip地址,查询目标设备的MAC地址,以保证主机
间互相通信的顺利进行。
ARP协议和DNS有点相像之处,不同点是:DNS是在域名和IP之间的解析,另外,ARP协议不需要
配置服务,而DNS要配置服务才行。
ARP协议要求通信的主机双方必须在同一个物理网段(即局域网)!
2)关于ARP的小结:
1.ARP全称“Address Resolution Protocol”;
2.实现局域网内通过IP地址获取主机的MAC地址;
3.MAC地址48位主机的物理地址,局域网内唯一;
4.ARP协议类似DNS服务,但不需要配置服务。
5.ARP协议是三层协议。
--------------------------------------------------------------------------------------------------------
十、ARP缓存表:
1)每台安装有TCP/IP协议的电脑都会有一个ARP缓存表(windows 命令提示符里输入arp -a即可)。
表里的ip地址与MAC地址是一一对应的。
arp常用命令:
arp -a :查所有记录
arp -d :清除
arp -s :绑定IP和MAC
2)ARP缓存表是把双刃剑:
1.主机有了arp缓存表,可以加快ARP的解析速度,减少局域网内广播风暴。
2.正是有了arp缓存表,给恶意黑客带来了攻击服务器主机的风险,这个就是arp欺骗攻击。
3.切换路由器,负载均衡器等设备时,可能会导致短时网络中断。
3)为啥用ARP协议?
OSI模型把网络工作分为七层,彼此不直接通信打交道,只通过接口。IP地址工作在第三层,
MAC地址工作在第二层。当协议在发送数据包时,需要先封装第三层IP地址,第二层MAC地址的报头,
但是协议只知道目的节点的ip地址,不知道目的节点的MAC地址,又不能跨第二、三层,所以得用ARP协议服务,
来帮助获取目的节点的MAC地址。
4)ARP在生产环境产生的问题及解决办法:
1.ARP病毒,ARP欺骗
2.高可用服务器对之间切换时要考虑ARP缓存的问题。
3.路由器等设备无缝迁移时需要考虑ARP缓存的问题,例如:更换办公室的路由器。
5)ARP欺骗原理:
ARP攻击就是通过伪造IP地址和MAC地址对实现ARP欺骗的,如果一台主机中了ARP病毒,
那么它就能在网络中产生大量的ARP通信量,很快的进行广播以至于使网络阻塞,攻击者
只要持续不断的发出伪造的ARP响应就能更改局域网中目标主机ARP缓存中的IP-MAC条目,
造成网络中断或者中间人攻击。
命令红色字体标记
系统初始arp环境
[root@esx ~]# arp -n
Address HWtype HWaddress Flags Mask Iface
192.168.1.175 ether 00:24:1D:97:B6:7F C vswif0
192.168.1.120 ether 00:1F:C6:3A:DC:81 C vswif0
192.168.1.51 (incomplete) vswif0
执行清除所有arp 缓存命令
[root@esx ~]# arp -n|awk '/^[1-9]/{print "arp -d " $1}'|sh -x
+ arp -d 192.168.1.175
+ arp -d 192.168.1.120
+ arp -d 192.168.1.51
Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。
组合命令清楚所有arp缓存:
[html] view plaincopy
arp -n|awk '/^[1-9]/{system("arp -d "$1)}'
以上命令必须 root 才可以执行。
使用ip命令清除某一网络接口的arp(下面命令是 eth0 接口)
[html] view plaincopy
ip neigh flush dev eth0
Linux 清除arp缓存是把列表标记为(incomplete),在下一次系统清理垃圾是会清除。
1.首先,右键点击桌面,选择“打开终端”,或者按CTRL+Alt+T打开终端。
2.在终端中输入ifconfig命令并按Enter键运行。
3.在ifconfig命令的输出信息中,enp3s0表示以太网卡。
4.hwaddr之后的信息是MAC地址,MAC地址是48位的二进制数,总共6控制的话,一般用十六进制表示,使用每个字节:
分开,每4位二进制数的使用十六进制数表示,每个字节有两个十六进制数来表达,所以MAC地址有六个字段,由五个冒号分开通道。
从ip_finish_output2到dev_queue_xmit路径:
arp协议:
(1).硬件类型:
硬件地址类型,该字段值一般为ARPHRD_ETHER,表示以太网。
(2).协议类型:
表示三层地址使用的协议,该字段值一般为ETH_P_IP,表示IP协议
(3)硬件地址长度,以太网MAC地址就是6;
(4)协议地址长度,IP地址就是4;
(5)操作码
常见的有四种,arp请求,arp相应,rarp请求,rarp相应。
(6)发送方硬件地址与IP地址,(7)目标硬件地址与目标IP地址。
arp头数据结构:
arp模块的初始化函数为arp_init(),这个函数在ipv4协议栈的初始化函数inet_init()中被调用。
1.初始化arp表arp_tbl;
2.注册arp协议类型;
3.建立arp相关proc文件,/proc/net/arp;
4.注册通知事件
一个neigh_table对应一种邻居协议,IPv4就是arp协议。用来存储于邻居协议相关的参数、功能函数、邻居项散列表等。
一个neighbour对应一个邻居项,就是一个arp条目
邻居项函数指针表,实现三层和二层的dev_queue_xmit()之间的跳转。
用来存储统计信息,一个结构实例对应一个网络设备上的一种邻居协议。
注册arp报文类型 :dev_add_pack(arp_packet_type);
就是把arp_packet_type添加到ptype_base哈希表中。
注册新通知事件的时候,在已经注册和UP的设备上,会调用一次这个通知事件。
设备事件类型:
创建一个邻居项,并将其添加到散列表上,返回指向该邻居项的指针。
tbl:待创建的邻居项所属的邻居表,即arp_tbl;
pkey:三层协议地址(IP地址)
dev:输出设备
want_ref:??
创建邻居项
1.设置邻居项的类型
2.设置邻居项的ops指针
3.设置邻居项的output函数指针
调用dst_link_failure()函数向三层报告错误,当邻居项缓存中还有未发送的报文,而该邻居却无法访问时被调用。不懂。
用来发送arp请求,在邻居项状态定时器处理函数中被调用。
neigh:arp请求的目的邻居项
skb:缓存在该邻居项中的待发送报文,用来获取该skb的源ip地址。
将得到的硬件源、目的地址,IP源、目的地址等作为参数,调用arp_send()函数创建一个arp报文并将其输出。
创建及发送arp报文
创建arp报文,填充字段。
发送arp报文
用来从二层接收并处理一个arp报文。这个函数中就是做了一些参数检查,然后调用arp_process()函数。
neigh_event_ns
neigh_update
这个函数的作用就是更新邻居项硬件地址和状态。分支比较多。
neigh_update_notify
代理arp(proxy arp),通常像路由器这样的设备才使用,用来代替处于另一个网段的主机回答本网段主机的arp请求。
感觉代码ARP好像没啥用呀。
网络主机发包的一般过程:
1.当目的IP和自己在同一网段时,直接arp请求该目的IP的MAC。
2.当目的IP和自己不再同一网段时,arp请求默认网关的MAC。
当主机没有默认网关的时候,arp请求别的网段的报文,到达路由器后,本来路由器是要隔离广播的,把这个arp请求报文给丢弃,这样就没法通信了。当路由器开启arp proxy后,路由器发现请求的目的IP在其他网段,就自己给主机回复一个arp响应报文,这样源主机就把路由器的MAC当成目的IP主机对应的MAC,可以通信了。这样可能会造成主机arp表中,多个IP地址都对应于路由器的同一个MAC地址。
可以使用arping命令发送指定IP的arp请求报文。
写完了发现这个老妹写的arp代理文章蛮好的,不过她好像是转载的。
ARP协议的规范只是阐述了地址解析的细节,然而并没有规定协议栈的实现如何去维护ARP缓存。ARP缓存需要有一个到期时间,这是必要的,因为ARP缓存并不维护映射的状态,也不进行认证,因此协议本身不能保证这种映射永远都是正确的,它只能保证该映射在得到arp应答之后的一定时间内是有效的。这也给了ARP欺骗以可乘之机,不过本文不讨论这种欺骗。
像Cisco或者基于VRP的华为设备都有明确的配置来配置arp缓存的到期时间,然而Linux系统中却没有这样的配置,起码可以说没有这样的直接配置。Linux用户都知道如果需要配置什么系统行为,那么使用sysctl工具配置procfs下的sys接口是一个方法,然而当我们google了好久,终于发现关于ARP的配置处在/proc/sys/net/ipv4/neigh/ethX的时候,我们最终又迷茫于该目录下的N多文件,即使去查询Linux内核的Documents也不能清晰的明了这些文件的具体含义。对于Linux这样的成熟系统,一定有办法来配置ARP缓存的到期时间,但是具体到操作上,到底怎么配置呢?这还得从Linux实现的ARP状态机说起。
如果你看过《Understading Linux Networking Internals》并且真的做到深入理解的话,那么本文讲的基本就是废话,但是很多人是没有看过那本书的,因此本文的内容还是有一定价值的。
在linux中查看arp地址解析协议需要使用终端命令。
以Deepin linux为例,使用终端命令查看arp步骤如下所示:
1、在程序列表中点击打开终端命令程序。
2、在终端命令中输入查看arp命令:arp -g 。
3、如图所示,即是本地arp地址解析协议。