LVS网络负载均衡

LVS网络负载均衡

网络数据转发原理
1.网络OSI七层模型
http://blog.csdn.net/sprintfwater/article/details/8751453
 OSI七个层次的功能

物理层 为数据链路层提供物理连接,在其上串行传送比特流,即所传送数据的单位是比特。此外,该层中还具有确定连接设备的电气特性和物理特性等功能。
    电气,物理接口,比特流传输
数据链路层 负责在网络节点间的线路上通过检测、流量控制和重发等手段,无差错地传送以帧为单位的数据。为做到这一点,在每一帧中必须同时带有同步、地址、差错控制及流量控制等控制信息。
    成帧,添加MAC地址信息头
网络层 为了将数据分组从源(源端系统)送到目的地(目标端系统),网络层的任务就是选择合适的路由和交换节点,使源的传输层传下来的分组信息能够正确无误地按照地址找到目的地,并交付给相应的传输层,即完成网络的寻址功能。
    添加IP信息头
传输层 传输层是高低层之间衔接的接口层。数据传输的单位是报文,当报文较长时将它分割成若干分组,然后交给网络层进行传输。传输层是计算机网络协议分层中的最关键一层,该层以上各层将不再管理信息传输问题。
    添加TCP,UDP协议头
会话层 该层对传输的报文提供同步管理服务。在两个不同系统的互相通信的应用进程之间建立、组织和协调交互。例如,确定是双工还是半双工工作。
    会话和同步
表示层 该层的主要任务是把所传送的数据的抽象语法变换为传送语法,即把不同计算机内部的不同表示形式转换成网络通信中的标准表示形式。此外,对传送的数据加密(或解密)、正文压缩(或还原)也是表示层的任务。
    编码
应用层 该层直接面向用户,是OSI中的最高层。它的主要任务是为用户提供应用的接口,即提供不同计算机间的文件传送、访问与管理,电子邮件的内容处理,不同计算机通过网络交互访问的虚拟终端功能等
    应用程序

2.交换机转发原理
    一个局域网内连接PC机
    20多个接口
    内有mac地址表
    记录了电缆接入的端口号和Mac地址的对应关系
    数据链路层,发送数据帧广播给所有端口,查找mac地址, 匹配到的主机回应

3.路由器转发原理
    用于连接不同网段
    路由表里面是路由地图,是网段和接口的对应表
    路由器两个端口必须是不同网段
    



ARP协议
每个计算机内都有ARP表
ARP是个大广播, 沿着线路无限传播
主机10.1想发送数据给主机10.2, 检查缓存,没有10.2的mac地址
主机发送ARP广播,通过ip询问其mac地址,
所有主机都接收到广播,只有10.2给它一个单播的响应,并缓存10.1的mac地址
10.1将10.2的mac地址保存到缓存,发送数据

windows中使用命令
arp -a
就可以得到ip和mac的对应arp表
C:\Users\lenovo>arp -a
接口: 192.168.1.9 --- 0xf
  Internet 地址         物理地址              类型
  192.168.1.1           d8-49-0b-a6-8e-1a     动态
  192.168.1.3           10-66-82-8f-db-85     动态
  192.168.1.4           88-10-36-23-6f-11     动态
  192.168.1.255         ff-ff-ff-ff-ff-ff     静态
  224.0.0.2             01-00-5e-00-00-02     静态
  224.0.0.22            01-00-5e-00-00-16     静态
  224.0.0.251           01-00-5e-00-00-fb     静态
  224.0.0.252           01-00-5e-00-00-fc     静态
  239.1.1.1             01-00-5e-01-01-01     静态
  239.1.1.26            01-00-5e-01-01-1a     静态
  239.11.17.1           01-00-5e-0b-11-01     静态
  239.255.255.250       01-00-5e-7f-ff-fa     静态
  255.255.255.255       ff-ff-ff-ff-ff-ff     静态

代理arp
主机10.1需要给不同网段的主机20.1发送数据
不知道其mac地址,发送arp广播
网关(路由器)给10.1一个单播回复,将自己接口的mac地址告诉它



4.交换机和路由器的区别
路由工作在网络层
    根据路由表发送数据
    路由表中有网段和接口
交换机工作在数据链路层
    根据mac地址表发数据
    mac地址中有mac地址和接口



****************************************************
Lvs Nat和Ip-tun模式
1.硬件网络负载均衡技术
cisco以太网通道
通过在交换机之间多接电缆,达到负载的分流

F5负载均衡
需要把目的地址转发
再通过轮循方式,把数据包依次平均发给集群中的服务器


Linux的三种负载均衡
lvs nat
lvs ip-tun
lvs dr


2.Lvs Nat网络地址转换原理
网络地址转化,调度器重写请求保报文的目标地址
根据预设的调度算法,将请求分派给后端的真实服务器
真实服务器的响应报文通过调度器时,报文的源地址被重写,再返回给客户

公网客户端2.2.2.2要访问私网某个主机
通过lvs服务器,进行请求地址转化
lvs服务器有一个对公网的网卡8.8.8.8
还有一个对接私网的网卡192.168.10.1
lvs服务器需要打通路由管道
然后第一次请求,发给私网的真实服务器192.168.10.2
第二次请求,发给192.168.10.3
轮循平均分发请求
回来的数据也需要经过lvs服务器,造成瓶颈
因为返回的数据通常比较多
真实服务器上需要配置网关,才能把响应返还给客户端
优点是只需要一个公网ip


3.Lvs Ip-tun ip隧道原理
为了解决nat的瓶颈,调度器把请求报文通过ip隧道转发到真实服务器
真实服务器将响应直接返回给客户
所以调度器只处理请求报文
集群最大吞吐量可以提高10倍
需要lvs服务器,以及每台真实服务器都具备tunl网卡
该网卡上都需要公网ip,且配置相同的ip

公网客户端192.168.10.1向VIP发送请求
请求经过交换机,到达lvs服务器的,
lvs的网卡eth0上配置2个ip,一个是vip,192.168.10.10,使用子网掩码,其和
另一个是192.168.10.2,(192.168.10.10,使用子网掩码,和192.168.10.2其实不在一个网段)
先访问10.10, 调度器把数据分发给真实服务器的隧道网卡
隧道网卡再转发数据到对应的普通网卡
数据返回时,直接穿透交换机到达公网而不经过调度器
所以没有瓶颈
缺点是不适所有服务器都支持隧道网卡,只有linux服务器自带


**********************************
使用子网掩码计算是否处于同网段
与运算
2.2.2.1                00000010    00000010    00000010    00000001
255.255.255.0            11111111    11111111    11111111    00000000
        与运算        2.2.2.0

2.2.2.2                00000010    00000010    00000010    00000010
255.255.255.0            11111111    11111111    11111111    00000000
                2.2.2.0

2.2.2.3                00000010    00000010    00000010    00000011
255.255.255.255        11111111    11111111    11111111    11111111
                2.2.2.3    

所以2.2.2.1和2.2.2.2在同一网段
和2.2.2.3是不同网段

**********************************




4.Lvs Dr直接路由技术原理
通过改写请求报文的mac地址,将请求发送到真实服务器
真实服务器直接返回数据给客户
没有ip隧道的网卡,却又极大提高集群系统的性能
要求调度器与真实服务器都有一块网卡连载同一物理网段上

公网客户端200.168.10.1向VIP发送请求
请求经过交换机,到达lvs服务器的,
lvs的回环接口lo上配置vip,200.168.10.10,使用子网掩码,和私网不在一个网段
另一个是200.168.10.2,和真实服务器在一个网段
调度器通过mac地址转换向真实服务器平均分发请求
真实服务器的lo接口也配置200.168.10.10
最后通过交换机直接返回客户端


4种常用调度算法
轮叫
加权轮叫, 给性能好的服务器加权重,多分派任务
最少连接, 请求分布给最少建立连接的服务器
加权最少连接


*********************************************************
Lvs实验测试
1.Lvs Nat技术实验测试
虚拟机内存不要太高,
lvs用200M,其他两台机器用128M,做apache服务器
lvs添加两块网卡
    vm1 hostonly
    vm2
两台真实服务器
    vm2

windows客户端
    8.8.8.1
    255.255.255.0

lvs
    ifconfig eth0 8.8.8.8 netmask 255.255.255.0     (真实情况下需要配置永久ip)
    ifconfig eth1 192.168.10.1 netmask 255.255.255.0
    echo 1 > /proc/sys/net/ipv4/ip_forward    把该文件的值该成1,表示开启路由
    yum -y install ipcsadm*    需要安装ipcsadm软件
    vi ipvs.sh
    #!/bin/bash        指定使用哪个程序来执行脚本
    #ipvs.sh
    ipvsadm -C        清理
    ipvsadm -At 8.8.8.8:80 -s rr    rr表示轮叫
    ipvsadm -at 8.8.8.8:80 -r 192.168.10.2:80 -m    平均分发,-m表示nat模式
    ipvsadm -at 8.8.8.8:80 -r 192.168.10.3:80 -m
    ipvsadm -L-n    打印

    chmod a+x ipvs.sh
    ./ipvs.sh

apache1
    ifconfig eth0 192.168.10.2
    route add default gw 192.168.10.1    配置临时网关
    route -n     查看路由表,所有出去的数据都经过该网关
    在apache目录下写点html
    cd /var/www/html/
    echo "192.168.10.2" > index.html

apache2
    ifconfig eth0 192.168.10.3
    route add default gw 192.168.10.1    配置临时网关
    cd /var/www/html/
    echo "192.168.10.3" > index.html

检查所有服务器都关闭iptables,selinux
iptables -L -n
sestatus

然后访问
8.8.8.8
依次显示192.168.10.2,192.168.10.3







2.Lvs Ip-tun技术实验测试
都使用vm1 hostonly网卡

windows客户端
    200.168.10.4
    255.255.255.0

lvs
    ifconfig eth0 200.168.10.1      (真实情况下需要配置永久ip)
    ifconfig eth1 down
    ifconfig tunl0 200.168.10.10 netmask 255.255.255.255 up    隧道网卡地址,在不同网段
    route add -host 200.168.10.10 dev tunl0    添加ip到路由表,否则可能不能识别

    vi ipvs.sh
    #!/bin/bash        指定使用哪个程序来执行脚本
    #ipvs.sh
    ipvsadm -C        清理
    ipvsadm -At 200.168.10.10:80 -s rr    rr表示轮叫
    ipvsadm -at 200.168.10.10:80 -r 200.168.10.2:80 -i    平均分发,-i表示隧道模式
    ipvsadm -at 200.168.10.10:80 -r 200.168.10.3:80 -i
    ipvsadm -L-n    打印

    chmod a+x ipvs.sh
    ./ipvs.sh

apache1
    ifconfig eth0 200.168.10.2
    route del default 去掉网关
    ifconfig tunl0 200.168.10.10 netmask 255.255.255.255 up    隧道网卡地址,在不同网段
    route add -host 200.168.10.10 dev tunl0
    vi arp.sh
    #!/bin/bash    
    #arp.sh
    echo 1 > /proc/sys/net/ipv4/conf/tunl0/arp_ignore
    echo 2 > /proc/sys/net/ipv4/conf/tunl0/arp_announce
    echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
    echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

    chmod a+x arp.sh
    ./arp.sh

    在apache目录下写点html
    cd /var/www/html/
    echo "200.168.10.2" > index.html

apache2
    ifconfig eth0 200.168.10.3
    route del default
    ifconfig tunl0 200.168.10.10 netmask 255.255.255.255 up    隧道网卡地址,在不同网段
    route add -host 200.168.10.10 dev tunl0
    vi arp.sh
    #!/bin/bash    
    #arp.sh
    echo 1 > /proc/sys/net/ipv4/conf/tunl0/arp_ignore
    echo 2 > /proc/sys/net/ipv4/conf/tunl0/arp_announce
    echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
    echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

    chmod a+x arp.sh
    ./arp.sh
    cd /var/www/html/
    echo "200.168.10.3" > index.html

检查所有服务器都关闭iptables,selinux
iptables -L -n
sestatus

然后访问
200.168.10.10
依次显示200.168.10.2,200.168.10.3








3.Lvs Dr技术实验测试
都使用vm1 hostonly网卡

windows客户端
    200.168.10.4
    255.255.255.0

lvs
    ifconfig eth0 200.168.10.1      (真实情况下需要配置永久ip)
    ifconfig eth1 down
    ifconfig tunl0 down
    ifconfig eth0:0 200.168.10.10 netmask 255.255.255.255 up    在不同网段
    route add -host 200.168.10.10 dev eth0:0    添加ip到路由表,否则可能不能识别

    vi ipvs.sh
    #!/bin/bash        指定使用哪个程序来执行脚本
    #ipvs.sh
    ipvsadm -C        清理
    ipvsadm -At 200.168.10.10:80 -s rr    rr表示轮叫
    ipvsadm -at 200.168.10.10:80 -r 200.168.10.2:80 -g    平均分发,-g表示直接路由模式
    ipvsadm -at 200.168.10.10:80 -r 200.168.10.3:80 -g
    ipvsadm -L-n    打印

    chmod a+x ipvs.sh
    ./ipvs.sh

apache1
    ifconfig eth0 200.168.10.2
    route del default 去掉网关
    ifconfig tunl0 down
    ifconfig lo:0 200.168.10.10 netmask 255.255.255.255 up    在不同网段
    route add -host 200.168.10.10 dev lo:0
    vi arp.sh
    #!/bin/bash    
    #arp.sh
    echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
    echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
    echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
    echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

    chmod a+x arp.sh
    ./arp.sh

    在apache目录下写点html
    cd /var/www/html/
    echo "200.168.10.2" > index.html

apache2
    ifconfig eth0 200.168.10.3
    route del default
    ifconfig tunl0 down
    ifconfig lo:0 200.168.10.10 netmask 255.255.255.255 up    在不同网段
    route add -host 200.168.10.10 dev lo:0
    vi arp.sh
    #!/bin/bash    
    #arp.sh
    echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
    echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
    echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
    echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

    chmod a+x arp.sh
    ./arp.sh
    cd /var/www/html/
    echo "200.168.10.3" > index.html

检查所有服务器都关闭iptables,selinux
iptables -L -n
sestatus

然后访问
200.168.10.10
依次显示200.168.10.2,200.168.10.3


实时抓包
tcpdump -i eth0 -nn
刷新网页后,会直接在控制台显示tcp数据包



你可能感兴趣的:(linux,LVS)