集群就是一群机器,按照一定的组合,来实现负载均衡、高可用、高性能
的一群机器,所以集群就分为三种:
1.LB:Load balancing 负载均衡集群
2.HA:High availability 高可用性集群
3.HP:High performance 高性能集群
目前,提高服务器性能按照大的分类,可以有两种
1、scale on向上扩展,就是使用更好的服务器的组件来替代现有的服务器的组件,
如使用多颗cpu,更大的内存,但是这样会提高
成本。
2、scale out 向外发展,这也是集群的方式。
各种集群的解决方案
LB:
 lvs *
 haproxy
 F5 (硬件)
HA:
 heartbeat *
 corosync+openais:RHCS
 ultramokey
 keepalive *
HP:
 bowerfull
一、LB负载均衡集群
 lvs(linux virtual server)Linux的虚拟服务
 Internet的快速增长使多媒体网络服务器面对的访问数量快速增加,服务器需要具备提供大量并发访问服务的能力,因此对于大负载的服务器来讲, CPU、I/O处理能力很快会成为瓶颈。由于单台服务器的性能总是有限的,简单的提高硬件性能并不能真正解决这个问题。为此,必须采用多服务器和负载均衡技术才能满足大量并发访问的需要。Linux 虚拟服务器(Linux Virtual Servers,LVS) 使用负载均衡技术将多台服务器组成一个虚拟服务器。它为适应快速增长的网络访问需求提供了一个负载能力易于扩展,而价格低廉的解决方案。
 LVS的结构和工作原理:
 LVS由前端的负载均衡器(Load Balancer,LB)和后端的真实服务器(Real Server,RS)群组成。RS间可通过局域网或广域网连接。LVS的这种结构对用户是透明的,用户只能看见一台作为LB的虚拟服务器(Virtual Server),而看不到提供服务的RS群。
 当用户的请求发往虚拟服务器,LB根据设定的包转发策略和负载均衡调度算法将用户请求转发给RS。RS再将用户请求结果返回给用户。同请求包一样,应答包的返回方式也与包转发策略有关。
 lvs的工作模式有三种:
  1.net(LVS-NET)
   a.集群接点必须和LB在同一个子网中(即DIP和),不能跨域网段
   b.RIP 是私有地址
   c.所有的RIP的网关必须指向DIP
   d.调度器处理所有的请求
   e.端口地址转换
   f.因为是NAT
   h.单点瓶颈  
 2.直接路由(LVS-DR)
   a.集群接点必须和LB必须在一个物理网段,之间不能有路由器
   b.RIP可以使用公网地址,建议使用公网地址
   c.LB仅处理请求,不处理响应
   d.real server的网关不能指向DIP
   e.不能做端口转换
   f.并非所有的系统都可以做接点
   h.LVS-DR 可以带动比LVS-NAT更多的接点
 3.隧道(LVS-TUN)
   a.集群接点和LB接点不必在同一个物理网络
   b.RIP使用公网地址
   c.LB只处理进来的请求,不处理出去的请求
   d.响应的请求一定不经过LB
   e.不支持端口地址转换
   f.只能使用支持IP隧道协议的操作系统做集群接点
lvs提供的功能:
 1.higher throughput
 2.redundancy
 3.adaptability
lvs常见的命名机制:
 VIP(virtual ip)虚拟ip地址
 RIP(real ip)后端真正提供接点的ip
 DIP(Director‘s ip)及负载均衡器(Loader balance,LB)上连接D/RIP的地址
 CIP(custom ip)用户请求的ip
lvs LB是一个L4转发,因为他是根据用户请求的服务不同,提供转发的,所以他是使用四层的端口进行转发的,对用户来说是透明的。

lvs的LB的调度方法及各个调度方法对应的算法:
 1.静态调度方法:(fixed scheduling)不考虑后端连接状态
   a.RR(round-robin)轮循着,它将请求依次分配不同的RS,也就是在RS中均摊请求。这种算法简单,但是只适合于RS处理性能相差不大的情况;
   b.WRR(weight round-robin)加权轮调,它将依据不同RS的权值分配任务。权值较高的RS将优先获得任务,并且分配到的连接数将比权值较低的RS更多。相同权值的RS得到相同数目的连接数;
   c.destination hashing 根据服务的请求转发到特定的服务器,跟用户建立粘性,提高缓存命中率
   d.source hashing 将来自同一个用户的请求,始终转发到特定的路由器或防火墙(平均内网负载)
 2.动态调度方法:(dynamic scheduling)考虑后端连接状态
   1.LC (least-connect)最少连接,检查active和inactive,连接数(overhead)最少的接受请求
   2.WLC(weight least-connect)加权最小连接数(集群最好的算法)
   3.shortest expected delay (SED)最短期望延迟 ,不考虑非活动状态,在计算overhead之前,把非活动状态的总数加上1
   4.NQ(never query)只要有空闲的,不考虑算法的接受请求;
   5.LBLC(locality-based-least-connect:DH)支持权重(后面的是缓存服务器的)基于地址的最小连接数调度(Locality-Based Least-Connection) 将来自同一目的地址的请求分配给同一台RS如果这台服务器尚未满负荷,否则分配给连接数最小的RS,并以它为下一次分配的首先考虑;
   6.LBLCR (locality-based-least-connect with replication scheduling)是对LBLC的改进,对于某一目的地址,对应有一个RS子集。对此地址的请求,为它分配子集中连接数最小的RS;如果子集中所有的服务器均已满负荷,则从集群中选择一个连接数较小的服务器,将它加入到此子集并分配连接;若一定时间内,这个子集未被做任何修改,则将子集中负载最大的节点从子集删除;
lvs:
 ipvsadm用户空间的命令
 ipvs是内核空间模块
 用户在LB负载均衡器上使用ipvsadm命令进行操作,基于不同模式的不同调度算法进行设置,然后实现不同的不同的负载措施:
ipvsadm 功能及使用:
1.定义集群服务
 ipvsadm -A|-E -t|-u|-f VIP:PORT {tcp|udp|firewall mark} -s 调度算法,默认是wlc
      -A 添加
      -E 修改
 ipvsadm -D -t|-u VIP:PORT 删除定义的集群
2.要为集群服务定义realserver
ipvsadm -a|-e -t|-u VIP:port -r REALSERVER:port -g|-i|-m(模型) [-w weitht]
      -a 添加
      -e 修改
      -w 权重
      -d 删除
        ipvsadm -d -t|-u VIP:port -r REALSERVER:PORT
      -C 情况规则
      -R 恢复
      -S 保存
      其中模式中的-g|-i|-m分别用于dr|tun|nat
3.查看
ipvsadm
       -l
       -L
       -n 数字的方式来显示地址
       --stats显示统计的数据信息
       --rate 显示统计的速率
 
接下来就要使用实验来实现LVS的三种工作模式和10种算法:
1.LVS-NAT
拓扑如下图:
集群理论和部分LVS_集群理论知识
 LB负载均衡器上的配置
 #yum install ipvsadm
 #ifconfig eth0 192.168.1.108/24
 #ifconfig eth1 10.1.1.1/8
 #echo 1 >/proc/sys/net/ipv4/ip_forward
 #ipvsadm -A -t 192.168.1.108:80 -s rr
 #ipvsadm -a -t 192.168.1.108:80 -r 10.1.1.2:80 -m
 #ipvsadm -a -t 192.168.1.108:80 -r 10.1.1.3:80 -m
 
 RealServer1上的配置
 #yum install httpd mysql-server php php-mysql php-mbstring
 #service mysqld start
 #echo "<h1>RealServer1<h1>" >/var/www/html/index.html
 #server httpd start
 #ifconfig eth0 10.1.1.2/8
 #route add default gw 10.1.1.1
 
 RealServer2上的配置
 #yum install httpd mysql-server php php-mysql php-mbstring
 #service mysqld start
 #echo "<h1>RealServer2<h1>" >/var/www/html/index.html
 #server httpd start
 #ifconfig eth0 10.1.1.3/8
 #route add default gw 10.1.1.1
 
 测试:
 然后使用自己的主机进行测试:
 在浏览器中输入http://192.168.1.108然后不断的刷新页面,可以看到这时候会出现不同的页面的,而且是轮循这出现
 (算法是自己选择的,不同的算法,会导致服务器的响应不同)
 ok,这个实验就完成了。
 
LVS-DR
拓扑如下所示:
集群理论和部分LVS_lvs-nat_02
 1.在LB负载均衡器上做的配置如下:
  LB负载均衡器上的配置:
  DIP配置在接口上,VIP配置在接口别名
  #ifconfig eth0 172.16.100.10/16
  #ifconfig eth0:0 172.16.100.1 broadcast 172.16.100.1 netmask 255.255.255.255 up
  #route -host 172.16.100.1 dev eth0:0
  #echo 1 > /proc/sys/net/ipv4/ip_forward
  定义集群的服务:
  #ipvsadm -A -t 172.16.100.1:80 -s rr
  #ipvsadm -a -t 172.16.100.1:80 -r 172.16.100.11:80 -g
  #ipvsadm -a -t 172.16.100.1:80 -r 172.16.100.12:80 -g
 
 2.RealServer1上的配置:
  RIP 要配置在接口上,VIP配置在lo的别名上
  定义内核参数,禁止响应对应VIP的ARP的广播请求
  #echo 1 > /proc/sys/net/ipv4/conf/lo/arp_igonre
  #echo 1 > /proc/sys/net/ipv4/conf/all/arp_igonre
  #echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
  #echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
  配置RIP&&VIP
  #ifconfig eth0 172.16.100.11/16
  #ifconfig lo:0 172.16.100.1 broadcast 172.16.100.1 netmask 255.255.255.255 up
  #route add -host 172.16.100.1 dev lo:0
  #yum install php httpd mysql-server php-mysql php-mbstring
  #service httpd start
  #service mysqld start
 
 3.RealServer1上的配置:
  RIP 要配置在接口上,VIP配置在lo的别名上
  定义内核参数,禁止响应对应VIP的ARP的广播请求
  #echo 1 > /proc/sys/net/ipv4/conf/lo/arp_igonre
  #echo 1 > /proc/sys/net/ipv4/conf/all/arp_igonre
  #echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
  #echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
  配置RIP&&VIP
  #ifconfig eth0 172.16.100.12/16
  #ifconfig lo:0 172.16.100.1 broadcast 172.16.100.1 netmask 255.255.255.255 up
  #route add -host 172.16.100.1 dev lo:0
  #yum install php httpd mysql-server php-mysql php-mbstring
  #service httpd start
  #service mysqld start
 
  4.测试OK了!