Linux运维-day56/57-负载均衡之lvs

一、负载均衡与反向代理的区别

1.1 功能(原理)

  • 负载均衡lvs---请求做转发
  • 反向代理Nginx Haproxy代替(代理)用户去请求,得到相应再返回给用户
    16955089-e4cffa1228f3a85d.png

1.2 4层 vs 7层

OSI 7层模型相关内容
应用层协议:http、https
表示层
会话层
传输层tcp/udp 端口
网络层ip地址
数据链路层MAC地址
物理层0010101、网线设备
  • 4层 LVS nginx(1.9)、haproxy
  • 7层 nginx(1.9)、haproxy

二、ARP协议

2.1 ARP基础知识

DNS 域名-----解析---->ip地址(域名解析服务/系统 Domain Name Service/System)
ARP ip--------解析---->MAC地址

2.2 ARP解析过程

1>发出广播消息,查询ip对应的MAC地址
2>对应的机器会用单播的方式把自己的MAC地址告诉对方
3>用户自己留1个ARP缓存

2.3 arp解析过程-抓包

[root@m01 ~]# arp -d 10.0.0.51
[root@m01 ~]# arp -n
Address                  HWtype  HWaddress           Flags Mask            Iface
10.0.0.51                ether   00:0c:29:37:ad:94   C                     eth0
10.0.0.254               ether   00:50:56:e2:d2:d2   C                     eth0
172.16.1.51              ether   00:0c:29:01:43:c3   C                     eth1
10.0.0.1                 ether   00:50:56:c0:00:08   C                     eth0

[root@m01 ~]# ping 10.0.0.51 -c 1
PING 10.0.0.51 (10.0.0.51) 56(84) bytes of data.
64 bytes from 10.0.0.51: icmp_seq=1 ttl=64 time=1.22 ms
--- 10.0.0.51 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 1.225/1.225/1.225/0.000 ms

16955089-7e20db7d6cb0880f.png

Linux中抓包显示:arp解析过程

在m01上安装wireshark:yum install -y wireshark

[root@m01 ~]# tshark -i eth1 -f arp
Running as user "root" and group "root". This could be dangerous.
Capturing on 'eth1'
1 0.000000000 Vmware_46:1a:d7 -> Broadcast ARP 42 Who has 172.16.1.51?
Tell 172.16.1.61
2 0.000242395 Vmware_37:ad:9e -> Vmware_46:1a:d7 ARP 60 172.16.1.51 is at
00:0c:29:37:ad:9e
3 5.016325835 Vmware_37:ad:9e -> Vmware_46:1a:d7 ARP 60 Who has
172.16.1.61? Tell 172.16.1.51
4 5.016345052 Vmware_46:1a:d7 -> Vmware_37:ad:9e ARP 42 172.16.1.61 is at
00:0c:29:46:1a:d7

tshark(Wireshark)参数:

-i 指定网卡 默认第1个网卡(非lo)
-f 指定过滤规则
-w 保存抓包的内容到文件中
抓包过滤语法 man wireshark-filter
问题: arp协议 3层?2层?
ip --- > mac
arp三层协议 工作在2层 3层ip----->2层mac地址

2.4 ARP病毒,欺骗故障

2.4.1 原理
16955089-04c48eeb2cea0d90.png
2.4.2 预防

1>mac地址与ip地址绑定
2>使用企业安全软件

三、LVS相关名词

16955089-14ad35eac0cf9dcb.png
相关名词含义
CIPClient IP
VIPVirtual IP
DIPDirector 负载均衡IP
RS服务器Real Server 真实服务器
RIPReal Server IP地址

四、LVS 4个模式

LVS(Linux Virtual Sercer)是由章文嵩发明的;
lvs太强大,被写入到Linux内核中,叫ip_vs;
通过:keepalived(配置文件)或ipvsadm (命令)来控制
中文官网:http://zh.linuxvirtualserver.org/

4.1 DR模式(直接路由模式)<u>性能最好</u>

4.1.1 原理
16955089-bb76b6479ab31627.png
4.1.2 特点
  • lvs dr模式中 负责修改目标IP(VIP)mac地址 改为后端RS服务器的mac
  • dr模式中 lvs主要处理用户的请求,响应通过后端rs服务器直接给用户
  • LVS 与 后端RS服务器要在同一个局域网(网段)
  • DR模式中 RS服务器公网ip地址
  • 需要注意RS节点的VIP的绑定(lo:vip/32)和ARP抑制问题。
  • 由于DR模式的调度器仅进行了目的MAC地址的改写,因此,调度器LB无法改变请求报文的目的端
    口。LVS DR模式的办公室在二层数据链路层(MAC),NAT模式则工作在三层网络层(IP)和四
    层传输层(端口)。

4.2 NAT模式(网络地址映射)

4.2.1 原理
16955089-d8377cd577dc819e.png
4.2.2 特点
  • NAT (Network Address Translation):网络地址转换
  • 开启内核转发功能net.ipv4.ip_forward=1 #/etc/sysctl.conf
  • NAT模式中,可以实现端口转发。如请求80,后端转发为8080
  • lvs与后算RS服务器,可以不在一个局域网中

4.3 TUN隧道模式

4.4 FULL NAT模式

五、DR模式

5.1 环境准备
主机名外网eth0内网eth1
lb0110.0.0.5172.16.1.5
lb0210.0.0.6172.16.1.6
web0110.0.0.7172.16.1.7
web0210.0.0.8172.16.1.8
16955089-1fb4cb1e34fd0ee4.png
5.2 在lb01和lb02上安装ipvsadm

注:如果有nginx和keepalived,请关闭nginx和keepalived,否则会冲突

 yum install -y ipvsadm
5.3 在web01和web02上安装nginx,并配置oldboy.html
[root@web01 ~]# cat /usr/share/nginx/html/oldboy.html 
web01 10.0.0.7
[root@web02 ~]# cat /usr/share/nginx/html/oldboy.html 
web02 10.0.0.8

[root@web01 ~]# curl  10.0.0.[7-8]/oldboy.html
[1/2]: 10.0.0.7/oldboy.html --> <stdout>
--_curl_--10.0.0.7/oldboy.html
web01 10.0.0.7

[2/2]: 10.0.0.8/oldboy.html --> <stdout>
--_curl_--10.0.0.8/oldboy.html
web02 10.0.0.8
[root@web01 ~]# 
5.4 DR模式部署
5.4.1 LVS配置

加载内核模块
modprobe ip_vs #直接运行ipvsadm -ln

1>在lb01上添加临时ip

[root@lb01 ~]# ip a add 10.0.0.3/24 dev eth0 label eth0:0
[root@lb01 ~]# ip a s eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:3f:03:e3 brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.5/24 brd 10.0.0.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet 10.0.0.3/24 scope global secondary eth0:0
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe3f:3e3/64 scope link 
       valid_lft forever preferred_lft forever

2>设置tcp超时时间

[root@lb01 ~]# ipvsadm --set 30 5 60

3>添加10.0.0.3的池塘

[root@lb01 ~]# ipvsadm -A -t 10.0.0.3:80 -s wrr -p 20
[root@lb01 ~]# 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

4>给10.0.0.3的池塘添加规则

[root@lb01 ~]# ipvsadm -a -t 10.0.0.3:80 -r 10.0.0.7:80 -g -w 1
[root@lb01 ~]# ipvsadm -a -t 10.0.0.3:80 -r 10.0.0.8:80 -g -w 1
[root@lb01 ~]# 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     
ipvsadm参数含义举例
-C清除所有规则ipvsadm -C
-A相当于nginx中创建池塘
-t使用tcp协议
-s轮询算法rr(普通轮询)、wrr(加权轮询)
-p会话保持的时间20秒,默认300秒
-a添加RS服务器,相当于nginx中的server
-r指定RS服务器的ip
-g相当于--gatewaing,使用DR(Directing Routing)模式
-wweight权重
-ln显示规则ipvsadm -ln

lvs规则的配置备份(注意)
上面设置的内容ipvsadm -C之后,就会被清除掉,估将这些配置要保存下来用ipvsadm-save -n,然后导出到一个文件中,这样不小心清除了,可以用ipvsadm-restore进行恢复

[root@lb01 ~]# ipvsadm-save -n    \\将进行的配合进行保存
-A -t 10.0.0.3:80 -s wrr -p 20
-a -t 10.0.0.3:80 -r 10.0.0.7:80 -g -w 1
-a -t 10.0.0.3:80 -r 10.0.0.8:80 -g -w 1

\\将配置的内容导出到ipvsadm.rules文件中
[root@lb01 ~]# ipvsadm-save -n >/root/ipvsadm.rules
[root@lb01 ~]# ll
total 8
-rw-r--r--  1 root root  113 Jul  4 17:01 ipvsadm.rules
[root@lb01 ~]# ipvsadm -C   \\不小心清空规则
[root@lb01 ~]# ipvsadm -ln   \\查看规则
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

[root@lb01 ~]# ipvsadm-restore</root/ipvsadm.rules \\恢复规则
[root@lb01 ~]# 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         
[root@lb01 ~]# 
5.4.2 RS服务器配置(web01和web02)

1>在web01和web02上都添加一个ip,绑定到lo

ip a add 10.0.0.3/32 dev lo  label lo:1

2>在web01和web02上都配置抑制ip解析

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

这样lvs的dr模式就搭建完成了

5.4.3 测试lvs

1>注意事项:

  • 不要在lvs本地进行测试
  • lvs使用在高并发,访问量巨大的时候,估访问量和用户量比较高,请求比例才会接近1:1,不像nginx(应用场景)
    2>抓包测试
    16955089-8a9ba0268c7d5730.png

    16955089-a68ff8da8d2332af.png

    通过抓包可以看出请求和响应的时候,修改的是mac地址,端口并没有发生变化
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值