虚拟服务器集群的ip负载均衡技术理解

ip负载均衡技术是在负载调度器的实现技术中时最高效的,在已有的ip负载均衡技术中主要有通过网络地址转换,将一组服务器构建成一个高性能的,高可用的虚拟服务器我们称之为VS/NAT技术。
在分析VS/NAT的缺点和网络服务的非对称性的基础上,我们提出了VS/TUN和直接通过路由实现虚拟服务器的方法VS/DR,他们可以极大的提高系统的伸缩性

LVS三种模式的特点:

` VS/NAT VS/TUN VS/DR
服务器操作系统 任意 支持隧道 多数(支持Non-arp )
服务器网络 私有网络 局域网/广域网 局域网
服务器数目(100M网络) 10-20 100 多(100)
服务器网关 负载均衡器 自己的路由 自己的路由
效率 一般 最高

管理 LVS 的虚拟服务
-A 增加 ipvsadm 在内核列表中增加一个新的调度服务,也可以理解为添加一主机。
-s 指定该调度服务使用到算法。
-t|-u指定IP地址和端口,t表示TCP协议,u表示UDP协议。
-E 编辑已经存在的调度列表。
-D 删除某条调度列表。

管理 LVS 的真实服务器
-a 增加一个IP地址来参与响应请求服务。
-t|-u指定调度列表中主机的IP地址和端口,t表示TCP协议,u表示UDP协议。
-r 指定参与响应请求的IP地址和端口。
-g 表示DR模式
-i 表示TUN模式
-m 表示NAT模式
-w 指定权重,供那些加权算法参考,如1、2、3。
-e 编辑指定的真实服务器。
-d 删除指定的真实服务器。

查看和管理当前 LVS 配置
-C 清空所有配置列表。
-Z 清零当前连接计算器。
-l 显示当前内核LVS状态。
-c 显示当前LVS的连接情况,配合l使用。
–stats显示统计数据。
–rat显示速率数据。
–sort对输出进行排序。
-n不进行主机名解析,直接输出IP,加快显示速度。

LVS 调度算法
rr 轮叫(Round Robin) 调度器通过”轮 叫”调度算法将外部请求按顺序轮流分配到集群中的真实服务器上,它均等地对待每一台服务 器,而不管服务器上实际的连接数和系统负载。
wrr 加权轮叫(Weighted Round Robin) 调度器通过”加权轮叫”调度算法根据真实服务器的不同处理能力来调 度访问请求。这样可以保证处理能力强的服务器处理更多的访问流量。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。
lc 最少链接(Least Connections) 调度器通过”最少连接”调度算法动态地将网络请求调度到已建立的链 接数最少的服务器上。如果集群系统的真实服务器具有相近的系统性能,采用”最小连接”调度算法可以较好地均衡负载。
wlc 加权最少链接(Weighted Least Connections) 在集群系统中的服务器性能差异较大 的情况下,调度器采用”加权最少链接”调度
算法优化负载均衡性能,具有较高权值的服务器将承受较大比例的活动连接负载。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。
lblc 基于局部性的最少链接(Locality-Based Least Connections) “基于局部性的最少链接” 调度算法是针对目标IP地址的负载均衡,目前主要 用于Cache集群系统。该算法根据请求的目标IP地
址找出该目标IP地址最近使用的服务器,若该服务器是可用的且没有超载,将请求发送到该服务器;若
服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则用”最少链接”的原则选出一个可用的服务器,将请求发送到该服务器。
lblcr 带复制的基于局部性最少链接(Locality-Based Least Connections with Replication) “带复制的基于局部性最少链接”调度算法也是 针对目标IP地址的负载均衡,目前主要用于Cache集
群系统。它与LBLC算法的不同之处是它要维护从一个目标IP地 址到一组服务器的映射,而LBLC算法维护从一个目标IP地
址到一台服务器的映射。该算法根据请求的目标IP地址找出该目标IP地址对应的服务器组,按”最小连接”原则从服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器,若服务器超载;则按”最小连接”原则从这个集群中选出一台服务器,将该服务
器加入到服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的程度。
dh 目标地址散列(Destination Hashing) “目标地址散列”调 度算法根据请求的目标IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。
sh 源地址散列(Source Hashing) “源地址散列”调 度算法根据请求的源IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。

VS/DR 通过直接路由实现虚拟服务器
输入层:负载均衡高可用
首先 配置服务器的yum源
将有关负载均衡以及高可用的套件加进去
这里写图片描述
然后下载安装ipvsadm
添加
这里写图片描述
由于目前没有100ip 所以先加入vip
同时服务端也需要添加vip 原因是因为tcp的三次握手
Ip addr add 172.25.19.100/24 dev eth0
但是从这里看 这几台设备都有100地址 呢么访问100 的时候谁先相应就用谁的
呢么运气不好的条件下 我们所作的负载均衡就失去了效果
呢么就需要在两台真实服务器中 (可以参考红帽官网的文档)
下载arptables_jf
这里写图片描述
当然这个ip与你的vip保持相同
这里写图片描述
将他保存下来
这个是效果
这里写图片描述
Ldirectord
下载

yum install ldirectord-3.9.5-3.1.x86_64.rpm 
[root@server1 ~]# rpm -ql ldirectord
/etc/ha.d
/etc/ha.d/resource.d
/etc/ha.d/resource.d/ldirectord
/etc/init.d/ldirectord
/etc/logrotate.d/ldirectord
/usr/lib/ocf/resource.d/heartbeat/ldirectord
/usr/sbin/ldirectord
/usr/share/doc/ldirectord-3.9.5
/usr/share/doc/ldirectord-3.9.5/COPYING
/usr/share/doc/ldirectord-3.9.5/ldirectord.cf
/usr/share/man/man8/ldirectord.8.gz
[root@server1 ~]# cp /usr/share/doc/ldirectord-3.9.5/ldirectord.cf
cp: missing destination file operand after `/usr/share/doc/ldirectord-3.9.5/ldirectord.cf'
Try `cp --help' for more information.
[root@server1 ~]# cp /usr/share/doc/ldirectord-3.9.5/ldirectord.cf /etc/ha.d/
[root@server1 ~]# cd /etc/ha.d/
[root@server1 ha.d]# ls
ldirectord.cf  resource.d  shellfuncs
[root@server1 ha.d]# vim ldirectord.cf 
『
virtual=172.25.19.100:80  vip
        real=172.25.19.2:80 gate  真实服务器主机的ip
        real=172.25.19.3:80 gate   真实服务器主机的ip
        fallback=127.0.0.1:80 gate 
        service=http
        scheduler=rr
        #persistent=600
        #netmask=255.255.255.255
        protocol=tcp
        checktype=negotiate
        checkport=80
        request="index.html"
#       receive="Test Page"
#       virtualhost=www.x.y.z

』
[root@server1 ha.d]# ipvsadm -C #将原来自己编写的一些规则刷掉
[root@server1 ha.d]# ipvsadm -l
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

启动 ld
然后 策略会自动编写在ipvsadm 里面
当一台服务器挂掉后 不再会调用挂掉的服务器
以下为结果
这里写图片描述
当一台服务器挂掉后 就不会伦叫错误的
两台都挂掉了后 会调用主机的

Ld实现了对服务健康的检测
关掉ld
负载均衡高可用

 211  tar zxf keepalived-2.0.6.tar.gz  #解压这个包
  212  cd keepalived-2.0.6   #进入该目录
  213  ls
  214  ./configure --prefix=/usr/local/keepalived --with-init=SYSV
  218  yum install libnfnetlink-devel-1.0.0-1.el6.x86_64.rpm 
  220  ./configure --prefix=/usr/local/keepalived --with-init=SYSV
  224  yum install openssl-devel  
  225  ./configure --prefix=/usr/local/keepalived --with-init=SYSV
         make  #解决完它的error 然后make
  240  make install  
  244  cd /usr/local/
  245  ls
  246  cd keepalived/
  261  cd etc/rc.d/
  262  ls
  263  cd init.d/
  264  ls
  265  chmod +x keepalived  #为该脚本增添可执行权限
  292  ln -s /usr/local/keepalived/etc/rc.d/init.d/keepalived  /etc/init.d #建立软连接
  293  ln -s /usr/local/keepalived/etc/keepalived /etc/
  294  ln -s /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
  295  ln -s /usr/local/keepalived/sbin/keepalived /sbin/
  296  which keepalived 
  297  /etc/init.d/keepalived start
  298  cd /usr/local/
  299  ls
  300  scp -r keepalived/ server4:/usr/local/ #同样的需要在另外一台服务机器作相同的配置
  302  yum install -y mailx
  303  vim /etc/keepalived/keepalived.conf 
  304  ip addr del 172.25.19.100/24 dev eth0
  305  ip addr
  306  ip addr del 172.25.19.200/24 dev eth0
  307  ipvsadm -l
  308  ipvsadm -C
  309  ipvsadm -l
  310  /etc/init.d/ldirectord stop
  311  ipvsadm -l
  312  ls
  313  cd /etc/keepalived/
  314  ls
  315  scp keepalived.conf server4:/etc/keepalived/
  316  /etc/init.d/keepalived restart
  317  ipvsadm -l
  318  iptables -l
  319  iptables -L
  320  vim /etc/keepalived/keepalived.conf 
  321  iptables -F
  322  iptables -L
  323  /etc/init.d/keepalived restart
  324  ipvsadm -l
  325  iptables -L
  326  ipvsadm -l
  327  ip addr
  328  cat /var/log/messages 
  329  ipvsadm -L
  330  ipvsadm -l
  331  ip addr
  332  ip addr -d 172.25.19.100/32
  333  ip addr -d 172.25.19.100/32 dev eth0
  334  ip addr -del 172.25.19.100/32 dev eth0
  335  ipvsadm
  336  vim /etc/keepalived/keepalived.conf 
  337  iptables 0L
  338  iptables -L
  339  /etc/init.d/keepalived restart
  340  ipvsadm
  341  ipvsadm -L
  342  vim /etc/keepalived/keepalived.conf 
  343  /etc/init.d/keepalived restart
  344  vim /etc/keepalived/keepalived.conf 
  345  /etc/init.d/keepalived restart


   20  yum install -y mailx
   21  vim /etc/keepalived/keepalived.conf 
   22  /etc/init.d/keepalived restart
   23  cd 
   24  vim /var/spool/mail/root 
   25  vim /etc/keepalived/keepalived.conf 
   26  /etc/init.d/keepalived restart
   27  cat /var/log/messages 
   28  vim /etc/keepalived/keepalived.conf 
   29  /etc/init.d/keepalived restart
   30  > /var/log/messages 
   31  /etc/init.d/keepalived restart
   32  cat /var/log/messages 
   33  vim /etc/keepalived/keepalived.conf 
   34  /etc/init.d/keepalived restart
   35  vim /etc/keepalived/keepalived.conf 
   36  /etc/init.d/keepalived restart
   37  history 

下面VS/TUN ip隧道实现虚拟服务器 以及NAT实现虚拟服务器 为自己的理解 不足之处还往指出

             示意图哦

这里写图片描述
172.25.19.1 ipvsadm主机
172.25.19.119 VIP
172.25.19.2
。。。
这里写图片描述
会出现tun这个接口
当然rs上也需要出现该端口

vs

 (如果有两个网卡,可以将VIP地址配置到另一个网卡上)
ip addr add 172.25.19.119/24 dev tunl0

ipvsadm -A -t 172.25.19.119:80 -s rr
ipvsadm -a -t 172.25.19.119:80 -r 172.25.19.2:80 -i
ipvsadm -a -t 172.25.19.119:80 -r 172.25.19.3:80 -i

ipvsadm -a -t 172.25.19.119:80 -r 172.25.19.1:80 -i  #别的挂了的话vs也可以自己上


rs1 rs2
ip addr add 172.25.19.119/24 dev tunl0
作一下arp抑制 与dr 相同参考上面
将 tunl打开 ip link set up tuml0 
需要将 sysctl -w net.ipv4.conf.tunl0.rp_filter 关闭 
系统的话默认不接受不由直接连接的网络所传递来的数据包
rs1: ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.25.19.119:80 rr
  -> 172.25.19.1:80             Local   1      1          0        
  -> 172.25.19.2:80             Tunnel  1      1          0        
  -> 172.25.19.3:80             Tunnel  1      1          0

这里写图片描述
说明

访问172.25.19.119能出现轮训不同的页面即表示搭建LVS成功。
Forward为Tunnel即为IP隧道模式tun。
Weight表示权重。
ActiveConn是表示处于TCP的ESTABLISHED(确定建立)状态的连接数目,ActiveConn的各项总和即为当前已建立连接的总和。
InActConn表示处于TCP的非ESTABLISHED状态的连接数目,包括SYN_RECEIVED, TIME_WAIT, CLOSE_WAIT状态等等。
结果:
这里写图片描述

NAT:
这里写图片描述
首先配置以下环境
sever1作为vs (双网卡)
sever2、sever3作为rs
同样的yum源需要全部设置出来
2.下载ipvsadm
[root@server1: ~]# yum install ipvsadm -y
下载完成后启动
[root@server1: ~]# /etc/init.d/ipvsadm start
3.打开内部路由设置

[root@server1: ~]# vim /etc/sysctl.conf
7 net.ipv4.ip_forward = 1 ##0=关闭 1=开启
[root@server1: ~]# sysctl -p
net.ipv4.ip_forward = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
error: “net.bridge.bridge-nf-call-ip6tables” is an unknown key
error: “net.bridge.bridge-nf-call-iptables” is an unknown key
error: “net.bridge.bridge-nf-call-arptables” is an unknown key
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmall = 4294967296

4.添加ipvsadm规则

[root@server1: ~]# ipvsadm -A -t 172.25.254.119:80 -s rr
[root@server1: ~]# ipvsadm -a -t 172.25.254.119:80 -r 172.25.19.2:80 -m
[root@server1: ~]# ipvsadm -a -t 172.25.254.119:80 -r 172.25.19.3:80 -m
[root@server1: ~]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.25.254.191:80 rr
  -> 172.25.19.2:80               Masq    1      0          0         
  -> 172.25.19.3:80               Masq    1      0          0        

2.server(2)

1.下载http服务

[root@server2: network-scripts]# yum install httpd -y
[root@server2: network-scripts]# cat /var/www/html/index.html 
server2
[root@server2: network-scripts]# /etc/init.d/httpd    restart

2.配置RS的网关指向vs

[root@server2: network-scripts]# cat /etc/sysconfig/network-scripts/ifcfg-eth0 
DEVICE="eth0"
BOOTPROTO="static"
ONBOOT="yes"
IPADDR=172.25.19.2
PREFIX=24
GATEWAY=172.25.19.1
DNS1=114.114.114.114

3.server(3)

1.下载http服务

[root@server3: network-scripts]# yum install httpd -y
[root@server3: network-scripts]# cat /var/www/html/index.html 
server3
[root@server3: network-scripts]# /etc/init.d/httpd    restart

配置真实服务器的网管 使其指向VS
这里写图片描述
这里写图片描述

猜你喜欢

转载自blog.csdn.net/Ff12123/article/details/81291801
今日推荐