LVS负载均衡架构原理

Linux Virtual Server
Ipvs : 嵌入到Linux的内核
IPVsadm:管理应用程序

负载均衡器

1、硬件:

 F5BIG-IP
 CitrixNetScaler
 A10

2、软件

 四层:tcp 之上的第四层协议
           LVS:只能操作IP,端口 ,在操作系统内核中。
 七层:http,ajp,https,(应用层)
           nginx
           haproxy
           httpd

调度方法(静态方法和动态方法)

四种静态:

     rr:轮循
     wrr:
     dh:
     sh:

动态调度方法:

     lc:最少连接
               active*256+inactive
               谁的小,挑谁
     wlc:加权最少连接
               (active*256+inactive)/weight
     sed:最短期望延迟
               (active+1)*256/weight
     nq:never queue
     LBLC:基于本地的最少连接
               DH:
     LBLCR:基于本地的带复制功能的最少连接
     默认方法:wlc

类型:

     NAT:地址转换
     DR:直接路由
     TUN:隧道

  NAT:
               集群节点跟director必须在同一个IP网络中;
               RIP通常是私有地址,仅用于各集群节点间的通信;
               director位于client和real server之间,并负责处理进出的所有通信;
               realserver必须将网关指向DIP;
               支持端口映射;
               realserver可以使用任意OS;
               较大规模应该场景中,director易成为系统瓶颈;
               VIP:虚拟服务器地址
               DIP:   转发的网络地址
                RIP:  后端真实主机(后端服务器)
               CIP:客户端IP地址
 DR:  
              集群节点跟director必须在同一个物理网络中;
              后端服务器(真实服务器)可以使用公网地址,实现便捷的远程管理和监控;
              director仅负责处理入站请求,响应报文则由realserver直接发往客户端;
              不支持端口映射;

VIP(隐藏)的意思:

不对外广播

被叫不响应

Node1
VIP:192.168.1.251
DIP:192.168.239.3
集群服务器

Node2
RIP:192.168.1.248
VIP:192.168.239.10
RS,apache

Node3
RIP:192.168.1.249
VIP:192.168.239.10
RS,apache

TUN:

               集群节点可以跨越Internet;
               RIP必须是公网地址;
               director仅负责处理入站请求,响应报文则由realserver直接发往客户端;
               realserver网关不能指向director;
               只有支持隧道功能的OS才能用于realserver;
               不支持端口映射;

Ipvsadm命令:

  管理集群服务
               添加:-A -t|u|fservice-address [-s scheduler]
                        -t:TCP协议的集群
                        -u:UDP协议的集群
                                 service-address:     IP:PORT
                        -f:FWM: 防火墙标记
                                 service-address:Mark Number
               修改:-E
               删除:-D -t|u|fservice-address

               #ipvsadm -A -t 172.16.100.1:80 -s rr

  管理集群服务中的RS
               添加:-a -t|u|fservice-address -r server-address [-g|i|m] [-w weight]
                          -t|u|f service-address:事先定义好的某集群服务
                          -r server-address: 某RS的地址,在NAT模型中,可使用IP:PORT实现端口映射;
                          [-g|i|m]: LVS类型      
                                 -g:DR
                                 -i:TUN
                                 -m:NAT
                        [-wweight]: 定义服务器权重
               修改:-e
               删除:-d -t|u|fservice-address -r server-address

               #ipvsadm -a -t 172.16.100.1:80 -r 192.168.10.8 –g
               #ipvsadm -a -t 172.16.100.1:80 -r 192.168.10.9 -g
     查看
               -L|l
                        -n:数字格式显示主机地址和端口
                        --stats:统计数据
                        --rate:速率
                        --timeout:显示tcp、tcpfin和udp的会话超时时长
                        -c:显示当前的ipvs连接状况

     删除所有集群服务
               -C:清空ipvs规则
     保存规则
               -S
               #ipvsadm -S > /path/to/somefile
     载入此前的规则:
               -R
               # ipvsadm -R </path/form/somefile

DR模式

VIP: 虚拟主机IP
DIP:
kernelparameter:
arp_ignore:定义接收到ARP请求时的响应级别;
0:只要本地配置的有相应地址,就给予响应;
1:仅在请求的目标(MAC)地址配置请求到达的接口上的时候,才给予响应;

               arp_announce:定义将自己地址向外通告时的通告级别;
                        0:将本地任何接口上的任何地址向外通告;
                        1:试图仅向目标网络通告与其网络匹配的地址;
                        2:仅向与本地接口上(MAC)地址匹配的网络进行通告;

—————————————————————–DR模式示例————————————————————

Lvs DR模式集群步骤

1、 找一台主机作为DR(虚拟服务器),安装ipvsadm

   a) Yum install ipvsadm

2、 在DR设置两个IP地址:

       a) DIP: 192.168.1.134 ,设置静态ID
       b) VIP:192.168.1.200 , ifconfig eth0:1 192.168.1.200/24 (取消绑定ifconfig eth1 down)

3、 找多台机器作为RS(apeche或者tomcat )

   a) 两台:静态设置192.168.1.137
                               192.168.1.138
   b) 修改报文源IP的设置,需要设置内核参数
                    i.  echo 1 >/proc/sys/net/ipv4/conf/eth0/arp_ignore
                    ii. echo 1 >/proc/sys/net/ipv4/conf/all/arp_ignore
                    iii.echo 2 >/proc/sys/net/ipv4/conf/eth0/arp_announce
                    iv.echo 2 >/proc/sys/net/ipv4/conf/all/arp_announce
       c)  在两台机器(RS)上,设置网卡的别名IP:192.168.1.200
                     i. ifconfig lo:0 192.168.1.200 netmask 255.255.255.255 broadcast 192.168.1.200
       d)  在两台机器(RS)上,添加一个路由
                      i. route add -host 192.168.1.200 dev lo:0

4、 DR上需要加一个路由设置:route add -host 192.168.1.200 dev eth0:1

5、 在RS 检查web服务是否正常

6、 在DR上使用ipvsadm添加集群服务

       a)  Ipvsadm –C
       b)  ipvsadm -A -t 192.168.1.200:80-s wlc
       c)  ipvsadm -a -t 192.168.1.200:80-r 192.168.1.137 -g -w 1
       d)  ipvsadm -a -t 192.168.1.200:80-r 192.168.1.138 -g -w 1

脚本

#!/bin/bash
#description : start realserver
VIP=125.38.38.64
/etc/rc.d/init.d/functions
case "$1" in
start)
echo " start LVS of REALServer"
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
/sbin/ifconfig lo:0 $VIP broadcast $VIPnetmask 255.255.255.255 up

;;
stop)
/sbin/ifconfig lo:0 down
echo "close LVS Directorserver"
echo "0">/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "0">/proc/sys/net/ipv4/conf/lo/arp_announce
echo "0">/proc/sys/net/ipv4/conf/all/arp_ignore
echo "0">/proc/sys/net/ipv4/conf/all/arp_announce
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
发布于:2019-11-18 03:52:01