负载均衡与lvs

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

1.1 功能(原理)

  • 负载均衡lvs---请求做转发

  • 反向代理Nginx Haproxy代替(代理)用户去请求,得到相应再返回给用户

    image

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

image

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 原理
image
2.4.2 预防

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

三、LVS相关名词

image
相关名词 含义
CIP Client IP
VIP Virtual IP
DIP Director 负载均衡IP
RS服务器 Real Server 真实服务器
RIP Real Server IP地址

四、LVS 4个模式

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

4.1 DR模式(直接路由模式)性能最好

4.1.1 原理
image
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 原理
image
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
lb01 10.0.0.5 172.16.1.5
lb02 10.0.0.6 172.16.1.6
web01 10.0.0.7 172.16.1.7
web02 10.0.0.8 172.16.1.8
image

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 --> 
--_curl_--10.0.0.7/oldboy.html
web01 10.0.0.7

[2/2]: 10.0.0.8/oldboy.html --> 
--_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:  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)模式
-w weight权重
-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 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<

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

5.4.3 测试lvs

1>注意事项:

  • 不要在lvs本地进行测试

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

    image
    image

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

你可能感兴趣的:(负载均衡与lvs)