1.1 Ip地址解析mac地址的过程
主机10.1.1.1想发送数据给主机10.1.1.2,检查缓存,发现没有10.1.1.2的mac地址
1.先检查自己的缓存看有没有,没有的话发送广播,所有主机都可以接收到
2..2收到后将mac地址私聊给10.1.1.1,恢复单播给10.1.1.1 .1收到后并将mac地址存入缓存
1.1.1 命令行测试
Arp -a 显示所有缓存
Arp -d清除所有缓存
Arp相应过程
1.1.2 Linux下arp查看方法
查看
[[email protected] ~]# arp
Address HWtype HWaddress Flags Mask Iface
10.0.0.7 ether 00:0c:29:ed:ba:ca C eth0
10.0.0.1 ether 00:50:56:c0:00:08 C eth0
m01 ether 00:0c:29:82:55:90 C eth1
10.0.0.254 ether 00:50:56:ea:0c:63 C eth0
10.0.0.8 ether 00:0c:29:80:38:5a C eth0
10.0.0.253 (incomplete) eth0
删除
Arp -d +ip地址
Arping查看ip地址
[[email protected] ~]# arping -c 1 10.0.0.7
ARPING 10.0.0.7 from 10.0.0.6 eth0
Unicast reply from 10.0.0.7 [00:0C:29:ED:BA:CA] 1.339ms
Sent 1 probes (1 broadcast(s))
Received 1 response(s)
[[email protected] ~]#
1.2 Arp缓存表是把双刃剑
主机有了arp缓存表,可以加快ARP解析速度,减少局域网内广播风暴
正是有了arp缓存表,给恶意黑客带来了攻击服务器主机的风险,这个就是arp欺骗攻击
案例:切换路由器,负载均衡等设备时,可能会导致短时网络中断。
1.3 ARP在生产环境产生的问题及解决办法
一.ARP病毒,ARP欺骗
排查
1.MAC地址登记部门人员对应,IP绑定,所有设备登记mac地址
2.局域网出现arp中毒,特别是无法上网
3.员工上网物理拓扑规范清晰,从交换机上
4.划VLAN防止ARP广播风暴,及ARP欺骗
二.高可用服务器对之间切换时要考虑ARP缓存的问题
三.路由器等设备无缝迁移时要考虑ARP缓存的问题:例如:更换办公室的路由器。
1.4 ARP欺骗原理
ARP攻击就是通过伪造ip地址和mac地址对实现ARP欺骗的,如果一台主机中了ARP病毒,那么它就能够在网络中产生大量的ARP通信量,以至于使网络阻塞,攻击者只要持续不断的发出伪造的ARP响应包就能更改局域网中目标ARP缓存中的IP-MAC,造成网络中断或中间人攻击。
ARP攻击主要是存在于局域网网络中,局域网中若有一个人感染ARP木马,则感染ARP木马的系统将会试图通过“ARP欺骗”手段截获所在网络内其它计算机的通信信息,并因此造成网内其它计算机的通信故障。
1.5 服务器切换ARP问题
当网络中一台提供服务的机器宕机后,当在其他运行正常的机器的IP时,会因为客户端的ARP table cache 的地址解析还是宕机的机器的MAC地址。从而导致,即使在其他运行正常的机器添加宕机的机器ip,也会发生客户依然无法访问的情况。
解决办法是:当机器宕机,IP地址迁移到其他机器上时,需要通过arping命令来通知所有网络内机器清除其本地的ARP table cache从而使得客户机访问重新广播获取MAC地址。
1.6 回顾ARP技术点
1.6.1 什么是ARP协议
1.6.2 ARP协议工作原理
1.6.3 工作中ARP带来的实际问题和解决方案
A.局域网ARP欺骗原理及解决办法。
B.切换网关路由器,arp表带来的问题
C.集群架构中高可用服务器对之间的切换,arp表带来的问题及解决办法。
1.6.4 局域网客户端ARP问题的防御
1.7 ARP执行小结:
ARP全程“address resolution protocol”
实现局域网内通过IP地址获取主机的MAC地址
MAC地址:48位主机的物理地址,局域网内唯一的。
ARP协议类似DNS服务,但不需要配置ARP服务。
ARP协议是OSI7层模型第三层网络协议。
ARP协议要求通信的主机双方必须在同一个物理网段
Arp欺骗的原理,arp欺骗的解决方法。
Arp表缓存的案例:路由器,负载均衡切换
第2章 Lvs负载均衡
2.1 搭建负载均衡服务的需求
负载均衡集群提供了一种廉价,有效,透明的方法,来拓展网络设备和服务器的负载,带宽,增加吞吐量,加强网络数据处理能力,提高网络的灵活性和可用性。
那么在什么情况下,企业网站需要搭建负载均衡服务呢?
1.单台计算机无法承受大规模并发访问或数据量了,此时需要搭建负载均衡集群把流量分摊到多台节点设备上分别处理,即减少用户等待响应的时间又提升了用户体验。
2.单个重负载的运算服务分担到多台节点设备上做并行处理,每个节点设备处理结束后,将结果汇总,返回,系统处理能力和效率得到大幅度提升。
3.7*24小时服务保证,任意一个或多个有限后端节点设备宕机,不能影响整个业务的运行在负载均衡集群中,常规情况下所有计算机节点都应该提供相同的服务,不够也有例外,例如做cache缓存集群时,集群中的负载均衡器负责接收所有对该服务的入站请求,然后将这些请求按事先指定好的调度方法分配在不同的集群节点上。
2.2 Lvs技术点小结:
1.真正实现调度的工具是IPVS内核模块,工作在linux内核层面
2.LVS自带的IPVS命令行管理工具是ipvsadm.
3.Keepalived实现管理IPVS(配置文件)及负载均衡器的高可用
4.Red hat工具piranba WEB管理实现调度的工具IPVS
2.3 LVS体系结构与工作原理简单描述
2.4 相关术语命名约定
负载均衡访问规则-通用版本
名称 |
缩写 |
说明 |
虚拟IP地址(virtual IP ADDRESS) |
VIP |
VIP为Director用于向客户端计算机提供服务的IP地址,比如:www.etiantian.org域名要解析到vip上提供服务 |
真实IP地址 |
RIP |
在集群下面节点上使用的ip地址,物理IP地址 |
Director的ip地址 |
DIP |
Director用于连接内外网的ip地址,物理网卡上的IP地址,是负载均衡器上的ip |
客户端主机IP地址 |
CIP |
客户端用户计算机请求集群服务器ip地址,该地址用作发送给集群的请求的源ip地址。 |
2.5 LVS集群的4种工作模式介绍与原理讲解
2.5.1 LVS的四种工作模式
缩写及全拼:
NAT(NETWORK address translation)
TUN(Tunneling)
DR(Direct Routing)
FULLNAT(FULL Network Address Translation)
2.6 DR模式-直接路由模式
Virtual server via direct routing(vs/dr)
2.6.1 图解DR模式
2.6.2 过程简述
VS/DR模式是通过改写请求报文的目标MAC地址,将请求发给真实服务器的,而真实服务器将响应后的处理结果直接返回给客户端用户,同VS/TUN技术可极大地提高集群系统的伸缩性,而且,这种DR模式没有ip隧道的开销,对集群中的真实服务器也没有必须支持IP隧道协议的要求,但是要求。但是要求调度LB与真实服务器RS都有一块网卡连在同一物理网段上,即必须在同一个局域网环境。
2.6.3 Lvs DR模式应用特
1.所有集群节点RS必须和Director在相同的物理网段(即同一个局域网中)上。
2.所有客户端入站(而不是出站)请求由Director首先接收,并转发给集群节点RS。
3.集群节点RS,通常来说最好带外部IP,而不使用Director及某固定机器作为默认网关,以便将数据包直接回复给客户端计算机,且不会产生回包的瓶颈。
4.所有集群节点RS上必须在Io网卡上绑定VIP地址,以便验证通过目的IP非RS节点的数据包。
5.由于所有集群节点RS上必须在Io网卡上绑定VIP地址,因此带来额外的arp响应问题,即集群节点RS默认会响应原本由客户端发往Director VIP的数据包,因此,我们要对所有集群节点RS做ARP抑制处理,把响应VIP的请求交给LVS Director.
6.很多操作系统都可以用在集群内部的RS真实服务器上,只要该操作系统支持TCP/Ip协议,并且能够实现ARP隐藏,就可以作为RS节点,如Windows linux unix
7.LVS/DR模式不需要开启调度器内核转发功能,这点和LVS/NAT模式不同的
8.LVS/DR director(服务器数量100台)可以比LVS-NAT Director(服务器数量10-20台)承受更多的并发请求和转发更多的服务器数量。
2.6.4 LVS DR模式ARP抑制问题
2.7 NAT模式网络地址转换
Virtual Server via Network Address Translation (VS/NAT)
2.7.1 图解nat模式
NAT
2.8 Lvs Tun模式图解
2.8.1 Lvs tun模式文字说明
采用NAT技术时,由于请求和响应的报文都必须经过调度器地址重写,当客户请求越来越多时,调度器的处理能力将成为瓶颈,为了解决这个问题,调度器把请求报文通过ip隧道(相当于ipip或ipsec)转发至真实服务器,而真实服务器将响应处理后直接返回给客户端用户,这样调度就只处理请求的入站报文,由于一般网络应答数据比请求报文大很多,采用VS/TUN技术后,集群系统最大吞吐量可以提高十倍。
VS/TUN的工作流程如下图所示,它的连接调度和管理与VS/NAT中的一样,只是它的报文转发方法不同,调度器根据各个服务器的负载情况,连接数多少,动态地选择一台服务器,将原请求的报文封装在另一个IP报文中,再将封装后的IP报文转发选出的真实服务器,真实服务器收到报文后,先将收到的报文解封获得原来目标地址为VIP地址的报文,服务器发现VIP地址配置在本地的IP隧道设备上(此处要人为配置),所以就处理这个请求,然后根据路由表将响应报文直接返回给客户。
官方:三种IP负载均衡技术优缺点对比
VS/NAT |
VS/TUN |
VS/DR |
|
Real server(节点服务器) |
Config dr gw |
Tuneling |
Non-arp device/tie vip |
Server network(网络) |
private |
LAN/WAN |
LAN |
Server number(节点数量) |
Low(10~20) |
High(100) |
High(100) |
Real server gateway |
Load balancer |
Own router(能出网) |
Own router(能出网) |
优点 |
地址和端口转换 |
WAN环境 |
性能最高 |
缺点 |
瓶颈大效率低 |
系统需要支持隧道协议 |
不能跨出LAN |
2.9 NAT模式:
1.NAT技术奖请求的报文(通过DNAT方式改写)和响应的报文(通过SNAT方式改写),通过调度器地址重写然后在转发给内部的服务器,报文返回时在改写成原来的用户请求的网址。
2.只需要在调度器LB上配置WAN公网IP即可,调度器也要有私有LAN ip和内部RS节点通信。
3.每台内部RS节点的网关地址,必须要配成调度器LB上私有LAN内物理网卡地址(LDIP),这样才能确保数据报文返回时仍经过调度器LB.
4.由于请求与相应的数据报文都经过调度器LB,因此,网站访问大量调度器LB有较大瓶颈,一般要求最多10-20台节点。
5.NAT模式支持对IP及端口的转换,即用户请求10.0.0.1:80 可以通过调度器转换到RS节点的10.0.0.2:8080(DR和TUN模式不具备的)。
6.所有NAT内部RS节点只需配置私有LAN IP即可
7.由于数据包来回都需要经过调度器,因此,要开始内核转发net.ipv4.ip_forward=1,当然也包括iptables防火墙的forward功能(DR和tun模式不需要)
2.10 DR模式
1.通过在调度器LB上修改数据包的目的MAC地址实现转发,注意,源IP地址仍然是CIP,目的IP地址仍然是VIP。
2.请求报文经过调度器,而RS相应处理后的报文无需经过调度器LB,因此,并发访问量大时使用效率很高。(和NAT模式比)
3.因DR模式是通过MAC地址的改写机制实现转发的,因此,所有RS节点和调度器LB只能在一个局域网LAN中。
4.需要注意RS节点的VIP的绑定和ARP抑制等问题
5.强调下:RS节点的默认网关不需要是调度器LB的DIP,而直接是IDC机房分配的上级路由的IP(这是RS带有外网IP地址的情况)理论讲:只要RS可以出网即可,不是必须配置外网IP
6.由于DR模式的调度器仅进行了目的MAC地址的改写,因此,调度器LB无法改变请求的报文的目的端口(和NAT要区别)
7.当前,调度器LB支持所有的UNIX linux系统但目前不支持WINDOWS系统,真实服务器RS节点可以是WINDOWS系统。
8.总的来说DR模式效率很高,但是配置也较为麻烦,因此,访问量不是特别高的大公司可以用haproxy/nginx取而代之
9.直接对外的访问业务,例如:web服务做RS节点,RS最好用公网IP地址,如果不直接对外的业务,例如:MYSQL存储系统RS节点,最好只用内部IP地址。
2.11 TUN模式
1.负载均衡器把请求的报文通过IP隧道(ipip隧道)的方式(请求的报文不经过原目的地址的改写(包括MAC),而是直接封装成另外的IP报文)。
转发至真实服务器,而真实服务器将响应处理后直接返回给客户端用户。
2.由于真实服务器,而真实服务器将响应处理后直接返回给客户端用户,RS有一个外网IP地址,这样效率才会更高。理论上,只要能出网即可,无需配置外网IP
3.由于调度器LB只处理入站请求的报文,因此,此集群系统的吞吐量可以提高十倍以上,但隧道模式也会带来一定的系统开销,TUN模式适合LAN/WAN模式
4.Tun模式的lan环境转发不如DR模式效率高,而且还要考虑系统对IP隧道的支持问题,所有的RS服务器都要绑定服务器,抑制ARP,配置复杂
5.LAN环境一般多采用DR模式,WAN环境可以用TUN模式,但是当前在WAN环境下,请求转发更多的呗haproxy/nginx/dns调度等代理取代,因此。TUN模式在国内公司实际应用已经很少
6.直接对外的访问业务,例如:web服务器做RS节点,最好用公网的IP地址,不直接对外的业务,例如,MySQL存储系统RS节点最好用内部IP地址。
2.12 LVS的调度算法的生产环境选型
1.一般的网络服务,如Http,Mail MySQL等,常用的LVS调度算法为:
A.基本轮叫调度rr算法
B.加权最小连接调度wlc
C.加权轮叫调度wrr算法。
2.基于局部性的最小连接LBLC和带复制的基于局部性最少连接LBLCR主要适用于webcache和Dbcache集群,但是我们很少这样用
3.源地址散列调度SH和目标地址散列调度DH可以结合使用在防火墙集群中,它们可以保证整个系统的唯一出入口
4.最短预期延时调度SED和不排队调度NQ主要是对处理时间相对比较长时间忘了服务,实际使用中,这些算法的适用范围不限于这些,我们最好参考内核中的链接调度算法的实现原理,根据具体的业务需求合理的选型。
第3章 LVS部署与安装
3.1 安装LVS准备
主机名 |
管理IP地址 |
角色 |
备注 |
Lb01 |
10.0.0.5 |
LVS调度器 |
对外提供服务的VIP为10.0.0.29 |
Lb02 |
10.0.0.6 |
||
Web02 |
10.0.0.7 |
RS1(真实服务器) |
|
Web01 |
10.0.0.8 |
RS2(真实服务器) |
3.2 Web服务器准备
Nginx
bbs.etiantian.org/oldboy.html
Blog.etiantian.org/html
3.3 开始安装ipvsadm 在lb01与lb02上
[[email protected] ~]#yum install ipvsadm -y
[[email protected] ~]# rpm -qa |grep ipvsadm
ipvsadm-1.26-4.el6.x86_64
[[email protected] ~]# rpm -ql ipvsadm
/etc/rc.d/init.d/ipvsadm
/etc/sysconfig/ipvsadm-config
/sbin/ipvsadm
/sbin/ipvsadm-restore
/sbin/ipvsadm-save
/usr/share/doc/ipvsadm-1.26
/usr/share/doc/ipvsadm-1.26/README
/usr/share/man/man8/ipvsadm-restore.8.gz
/usr/share/man/man8/ipvsadm-save.8.gz
/usr/share/man/man8/ipvsadm.8.gz
3.4 安装准备命令
[[email protected] ~]# lsmod |grep ip_vs
[[email protected] ~]# /sbin/ipvsadm
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
[[email protected] ~]# lsmod |grep ip_vs 加载模块
ip_vs 126897 0
libcrc32c 1246 1 ip_vs
ipv6 336282 265 ip_vs
[[email protected] ~]#
防止出错创建软连接
Ln -s /usr/src/kernels/$(uname -r) /usr/src/linux
[[email protected] ~]# ll /usr/src/linux
lrwxrwxrwx 1 root root 38 Apr 20 17:53 /usr/src/linux -> /usr/src/kernels/2.6.32-642.el6.x86_64
[[email protected] ~]#
3.5 LVS安装小结
1.Centos5.x 安装lvs 使用1.24版本,不要用1.26版本
2.Centos6.x 安装lvs 使用1.26版本 并且需要先安装yum install libnl*popt* -y
3.安装LVS后,要执行ipvsadm把ip_vs模块加载入内核
3.6 手动配置lvs负载均衡
3.6.1 关闭keepalived
3.6.2 配置lvs 手动添加VIP
ip addr add 10.0.0.3/24 dev eth0 label eth0:0
3.6.3 配置
[[email protected] ~]# ipvsadm-save 保存规则
Ipvsadm-c 情况所有列表
Ipvsadm -A -t 10.0.0.3:80 -s wrr -p 20设置值
-t tcp 服务
-s 轮询算法 rr wrr wlc
-p 会话保持
#####2)配置lvs规则
ipvsadm-save -n
ipvsadm -C
ipvsadm --set 30 5 60
ipvsadm -A -t 10.0.0.3:80 -s wrr -p 20
ipvsadm -a -t 10.0.0.3:80 -r 10.0.0.7:80 -g -w 1
ipvsadm -a -t 10.0.0.3:80 -r 10.0.0.8:80 -g -w 1
ipvsadm -ln --stats
3.6.4 添加RS服务器
ipvsadm -a -t 10.0.0.3:80 -r 10.0.0.7:80 -g -w 1
ipvsadm -a -t 10.0.0.3:80 -r 10.0.0.8:80 -g -w 1
[[email protected] ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 10.0.0.3:80 wrr persistent 20
-> 10.0.0.7:80 Route 1 0 0
-> 10.0.0.8:80 Route 1 0 0
-a 添加rs服务器
-r real server RS ip
-g dr模式
-w l weight 权重
-t 10.0.0.3:80 使用tcp协议,负载均衡的ip地址是10.0.0.3:80
3.6.5 手工在RS端绑定 在web01和web02下
ip addr add 10.0.0.3/32 dev lo label lo:0
3.6.6 手工在RS端抑制ARP响应
cat >>/etc/sysctl.conf<<EOF
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
EOF
sysctl -p
3.6.7 测试
测试 web01 web02 是否可用
[[email protected] ~]# curl 10.0.0.7/xiaoyu.html
web02 www
[[email protected] ~]# curl -H Host:blog.etiantian.org 10.0.0.7/xiaoyu.html
web02 blog
[[email protected] ~]# curl 10.0.0.8/xiaoyu.html
web01 www
[[email protected] ~]# curl -H Host:blog.etiantian.org 10.0.0.8/xiaoyu.html
web01 blog
3.6.8 检查手工添加LVS转发成果
不要在lb本地测试
提示:由于有浏览器缓存及LVS默认会话保持等的影响,个人简单的测试切换RS的几率要很多次并且间隔一定时间访问才行。
第4章 常见的LVS负载均衡高可用解决方案
4.1 推荐方案
Keepalived+LVS方案,极力推荐最优的一个方案。
4.2 Keepalived+LVS方案
高可用---keepalived
keepalived.conf
1.global_defs 全局定义
2.vrrp 实例配置 VIP
3.lvs的配置
4.3 配置keepalived管理 lvs
4.3.1 删除之前配置的VIP
4.3.2 配置lb01 lb02 上面的keepalived
[[email protected] ~]# cat /etc/keepalived/keepalived.conf
global_defs {
router_id LVS_01
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.3/24 dev eth0 label eth0:1
}
}
virtual_server 10.0.0.3 80 {
delay_loop 6
lb_algo wrr
lb_kind DR
nat_mask 255.255.255.0
persistence_timeout 50
protocol TCP
real_server 10.0.0.7 80 {
weight 1
TCP_CHECK {
connect_timeout 8
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 10.0.0.8 80 {
weight 1
TCP_CHECK {
connect_timeout 8
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
[[email protected]2 ~]# cat /etc/keepalived/keepalived.conf
global_defs {
router_id LVS_02
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.3/24 dev eth0 label eth0:1
}
}
virtual_server 10.0.0.3 80 {
delay_loop 6
lb_algo wrr
lb_kind DR
nat_mask 255.255.255.0
persistence_timeout 50
protocol TCP
real_server 10.0.0.7 80 {
weight 1
TCP_CHECK {
connect_timeout 8
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 10.0.0.8 80 {
weight 1
TCP_CHECK {
connect_timeout 8
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
4.3.3 测试是否能管理lvs
清空原来规则重定向 追加然后再重新进行导入
ipvsadm-save -n >/tmp/ipvsadm.save
ipvsadm -C
ipvsadm -ln
/etc/init.d/keepalived restart
ipvsadm -ln
4.4 导致负载不均
1.LVS自身的会话保持参数设置(-p300 persistent 300)
优化:大公司尽量用cookie代替session
Session 存放在服务器上
Cookies 存放在客户端
2.LVS调度算法设置:例如rr wrr wlc lc 算法
3.后端RS节点的会话保持参数,例如apache/nginx的keepalived 参数
4.访问量较小的情况,不均衡的现象更加明显
5.用户发送的请求时间长短和请求资源多少大小