华风 发表于 2019-1-4 12:49:47

LVS原理及配置

  集群方式
  负载均衡LB load balance
  高可用HA high avavilable
  高性能计算
  
负载均衡集群
一般用于请求负载分发,也就是按一定的算法把不同的请求调度给不同的节点,
这些节点提供的都是相同的服务。解决单台服务器压力过大的问题。
  
   调度器
  
node1 node2 node3
  常用的负载均衡方式
  
1。手动选择    如:下载网站很多镜像站点
  2。DNS轮询方式 对同一个域名加多条A记录
   dig www.sina.com
可靠性低
   
负载分配不均衡
  3。四层/七层负载均衡
  
负载均衡集群
LVS linux virtualserver (linux虚拟主机) 开源
  章文嵩 1998

  lvs在linux内核中实现的,linux内核要支持它
  
   cd /usr/src/kernel/`uname -r`/
  make menuconfig
  Networking --->
  Networking options --->

   IP virtual server configuation --->
  M> IP virtual server support(EXPERIMENTAL)                           │ │
       [ ]   IP virtual server debugging                                    │ │
│ │ (12)IPVS connection table size (the Nth power of 2)                  │ │
│ │ ---   IPVS transport protocol load balancing support                   │ │
│ │
[*]   TCP load balancing support                                       │ │
│ │
[*]   UDP load balancing support                                       │ │
│ │
[*]   ESP load balancing support                                       │ │
│ │
[*]   AH load balancing support                                        │ │
   ................................................
  一个有十种调度算法:(这里只实现8种)
1,rr round-robin轮循
均等地对待每台真实服务器
2,wrr weighted round-robin加权轮循
根据真实服务器的不同处理能力来调度访问请求,并可以动态地调整权值
3,lc   least-connection最少连接
根据连接数来分配,连接数少的服务器会多分配。
4,wlcweighted least-connection加权最少连接
同时考量服务器的处理能力和连接数来进行分配
5,lblc 基于局部性的最少连接
主要用于cache集群
6,lblcwr 带复制的基于局部性的最少连接
主要用于cache集群
7,dh    destionationhashing目标地址散列
  8,sh   sourcehashing源地址散列
  
关于加权和quiesce
例如:假设在真实服务器池中有三个服务器,服务器 A 和 B 为加权 1 和 3,服务器 C 为加权 2。如果服务器
C 由于某种原因当机,服务器 A 和 B 就会平级分配被丢弃的负载。但服务器 C 重新上线后,LVS 路
由器会视其为没有连接的服务器,并且将所有进入请求都一股脑发送到这台服务器中,直到和服务器 A
和 B 持平。
要防止此现象出现,管理员可将虚拟服务器设为 quiesce 服务器 — 无论何时当有新的服务器节点上线
时,都将最小连接表重新设为 0,且 LVS 路由器象所有真实服务器都是刚刚添加到群集中一样路由请求。
  
三种负载均衡技术:
  NAT
通过网络地址转换,调度器重定请求报文的目标地址。,将请求分发给下端的真实服务器,真实服务器响应,再通过调度器返回给客户端。
这种架构,调度器容易成为整个架构的瓶颈。
一般处理10台以下
  
TUNNEL
调度器直接把请求通过IP隧道转发给后端的真实服务器,而真实服务器返回时,直接返回给客户端,而不经过调度器。
所以效率比NAT高
一般处理50台以内

  
DIRECTING
类似tunnel技术
这种方式没有隧道的开锁,对于后台真实服务器也没有必须支持IP隧道协议的要求;
但是要求调度器必须有一块网卡和真实服务器在同一物理网段。
一般处理100台以内
  # ls /lib/modules/2.6.18-164.el5/kernel/net/ipv4/ipvs/
ip_vs_dh.ko   ip_vs_lblc.ko   ip_vs_nq.ko   ip_vs_sh.ko
ip_vs_ftp.koip_vs_lblcr.koip_vs_rr.ko   ip_vs_wlc.ko
ip_vs.ko      ip_vs_lc.ko   ip_vs_sed.koip_vs_wrr.ko
  浮动IP
  一般来说,LVS集群采用三层结构
  
负载调度器 整个集群架构对外的前端,负载请求的转发
服务器池 一组真正执行客户请求的服务器组,如web,ftp,mail等
共享存储 为服务器池提供一个共享的存储区域,使服务器池比较方便的拥有相同的内容,也方便维护

  还有加上数据库的话,存放动态网页的数据,其锁机制保证了访问时不冲突
  
==========================================================
  
-------------------------------------------------------------------------------
  LVS-NAT
  
    客户端172.16.43.1
   |
   |
   |
   |外网 172.16.43.128
      [directer]
   || 内网 172.16.232.135
   ||
   |   |
   ||
         WEB1WEB2gateway指向172.16.232.135
172.16.232.129172.16.232.133
  实验前准备:
主机名
时间同步
yum
关闭iptables,selinux
  
--第一大步:
DR上的操作:
  vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
  sysctl -p使之生效
  
安装ipvsadm
yum install ipvsadm
  ipvsadm - Linux Virtual Server administration
  
ipvsadm -A -t 172.16.43.128:80 -s rr --A参数增加服务,s参数后接调度算法,这里先使用rr
ipvsadm -a -t 172.16.43.128:80 -r172.16.232.129 -m --a参数增加真实服务器,-m代表NAT架构
ipvsadm -a -t 172.16.43.128:80 -r172.16.232.133 -m
  
# ipvsadm -ln    --查看ipvsadm调度规则,清空是用ipvsadm -C
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port         Forward Weight ActiveConn InActConn
TCP172.16.43.128:80 rr
-> 172.16.232.133:80            Masq    1      0          0         
-> 172.16.232.129:80            Masq    1      0          0
  
# /etc/init.d/ipvsadm save --保存规则
Saving IPVS table to /etc/sysconfig/ipvsadm:         
  
# vim /etc/sysconfig/ipvsadm--保存的规则
-A -t 172.16.43.128:80 -s rr
-a -t 172.16.43.128:80 -r 172.16.232.133:80 -m -w 1
-a -t 172.16.43.128:80 -r 172.16.232.129:80 -m -w 1 --默认-w 1表示权重为1
--如果要修改规则,可以直接修改这个文件,再/etc/init.d/ipvsadm restart就可以了
  第二大步:
真实服务器的配置(web1和web2都要配置)
1,把默认路由指向调度器的同一网段IP
route add default gw 172.16.232.135
  2,安装httpd ,yum install httpd,并在不同的web服务器上建立不同的主页文件,并启动httpd
# echo 'web1'> /var/www/html/index.html   --在web1服务器上做
# /etc/init.d/httpd restart
  
# echo 'web2'> /var/www/html/index.html   --在web2服务器上做
# /etc/init.d/httpd restart
  第三大步:
在clinet端进行访问验证
elinks 172.16.43.128--访问调度器上的外网IP
  
在调度器上使用watch ipvsadm -ln 查看调度的动态信息
  
elinks的结果:一次显示web1,一次显示web2,这样去轮循的方式
  -----------------------------------------------------------------
  做完上面架构后,可以换一种算法尝试
  wlc
  sh       第一次访问上去是被调到哪一个web,后面再访问还是会被调到这个web
  wrr再把weight权重一个改为2,会发现它被调两次,另一个才被调一次
  还可以使用ab或者webbench去压力测试一下,测试的同时,在DR使用watch ipvsadm -ln 查看调度的分配
  
===========================================================
  
路由架构
  下面的架构中
  
   客户端    172.16.232.1
   |
   |    172.16.232.137
       81.1.1.181.1.1.4:80                  Route   1      0          0         
-> 81.1.1.3:80                  Route   1      0          0
  
第三大步:
  配置真实服务器(web1和web2都要配)
  1,安装httpd监听80端口,并使用两个不同的主页方便后面的测试
  2,ifconfig lo:0 71.1.1.2 netmask 255.255.255.255--注意掩码为4个255
  
3.真实服务器把默认路由指向firewall同物理网段的IP
route add default gw 81.1.1.1
  4./etc/sysctl.conf   --ip_forward也要打开
  
--现在去客户端elinks 172.16.232.137,每次都是得到web1
  # arp -a --去firewall上查看得到的71.1.1.2上的MAC为web1的
? (172.16.232.1) at 00:50:56:C0:00:01 on eth0
? (71.1.1.2) at 00:0C:29:55:CC:D7 on eth1
  5, yum install arptables_jf   --安装arp防火墙对目录地址为71.1.1.2的包都drop掉
  arptables -A IN -d 71.1.1.2 -j DROP --添加这条规则
  6,因为ARP的问题会造成firewall的ARP表里过一段时间就没有缓存真实服务器(可以过一段时间在firewall上使用arp -a来查看),所以每台真实服务器都要一定时间ping一下firewall
可以写一个脚本10秒就ping -c 1 81.1.1.1
  
测试:OK
  
======================================
  
2.6内核的可以不一定要用arptables来解决arp的问题
  
把上面的第三大步的5,6小步换一种做法
  
把上面第6小步脚本关闭
去掉第5小步arptables -F清掉规则
  清掉后,在每个real server都要加上下面的内核参数
  # vim /etc/sysctl.conf
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
  # sysctl -p使它生效
  arp_ignore = 1--表示系统只回答目的IP是本地的IP的包,也就是对广播包不做响应
arp_announce = 2 --表示系统忽略IP包的源地址,而根据目标主机选择地址
  
测试:OK
并且在firewall上,使用arp -a,不一定要用real server的MAC地址条目
  
=================================
  




页: [1]
查看完整版本: LVS原理及配置