A-A+

Ubuntu构建LVS+Keepalived高可用负载均衡集群【生产环境部署】

2015年12月28日 站长资讯 暂无评论

1、环境说明:

系统版本:Ubuntu 14.04

LVS1物理IP:14.17.64.2 初始接管VIP:14.17.64.13

LVS2物理IP:14.17.64.3 初始接管VIP:14.17.64.14

真实web服务器IP:14.17.64.4-12

实现效果:去往14.17.64.13或14的报文,转发给14.17.64.4-12中的一台服务器处理,实现负载均衡。

要求1:当一台真实web服务器故障后,自动把该IP从负载均衡中踢除,恢复后自动加入集群。

要求2:当一台LVS服务器故障后,正常的LVS服务器会接管故障LVS服务器上的VIP,故障恢复后自动抢占回VIP,继续负载分担。

2、安装LVS与Keepalived

#aptitude install ipvsadm #安装lvs

#ipvsadm #加载lvs,ipvsadm的规则由keepalived来配置,所以安装即可,如果要对lvs手动配置详细
了解,可参考我的另一篇文章:http://yangrong.blog.51cto.com/6945369/1574991

#aptitude install keepalived #安装keepalived

#配置文件目录/etc/keepalived/keepalived.conf,默认并没有配置文件,需要手动创建。

#Keepalived配置文件详解参考地址:http://www.360doc.com/content/11/1228/16/834950_175607432.shtml

3、keepalived配置

此处是单台LVS上keepalived.conf的配置,另一台LVS上的keepalived.conf的配置文件,只需把下列红色与蓝色字体参数对换一下即可。

配置文件如下:

  1. ! Configuration File for keepalived  
  2. vrrp_instance VI_1 {            #定义一个实例,keepalived间的高可用只能接管相同实例名称  
  3.     stateMASTER                 #指定Keepalived的角色,MASTER表示此主机是主服务器 BACKUP表示此主机是备用服务器,所以设置priority时要注意MASTER比BACKUP高。  
  4.     interface p1p1              #指定监测网络的接口,当LVS接管时,将会把IP地址添加到该网卡上。  
  5.     virtual_router_id 51        #虚拟路由标识,同一个vrrp实例使用唯一的标识,同一个vrrp_instance下,MASTER和BACKUP必须一致。  
  6.     priority120                 #指定这个实例优先级  
  7. advert_int 1                 #心跳报文发送间隔  
  8. #notify_master/path/xx.sh    #这个实例切换为master时执行的脚本  
  9. #notify_backup /path/xx.sh   #这个实例切换为backup时执行的脚本  
  10. #track_interface{            #设置额外的监控,里面某个网卡故障也会进行切换,这个一般用来监控上行链路  
  11. #eth1  
  12. #}  
  13.     authentication {  
  14.         auth_type PASS          #设置验证类型,主要有PASS和AH两种  
  15.         auth_pass 1111          #设置验证密码,同一个vrrp_instance下,MASTER和BACKUP的密码必须一致才能正常通信  
  16.     }  
  17.     virtual_ipaddress {         #设置虚拟IP地址,可以设置多个虚拟IP地址,每行一个  
  18.      14.17.64.13  
  19.     }  
  20. }  
  21.    
  22. vrrp_instance VI_2 {            #定义另一个实例  
  23.     state BACKUP  
  24.     interface p1p1  
  25.     virtual_router_id 52  
  26.     priority 80  
  27.     advert_int 1  
  28.     authentication {  
  29.         auth_type PASS  
  30.         auth_pass 1111  
  31.     }  
  32.     virtual_ipaddress {  
  33.           14.17.64.14  
  34.     }  
  35. }  
  36.    
  37. virtual_server 14.17.64.13 0 {     #设置虚拟服务器,需要指定虚拟IP地址和服务端口,IP与端口之间用空格隔开   
  38.     delay_loop 6                   #设置运行情况检查时间,单位是秒  
  39.     lb_algo wrr                    #设置负载调试算法,这里设置为wrr即加权论询算法  
  40.     lb_kind DR                     #设置LVS实现负载均衡的机制,有NAT,TUN和DR三个模式可选  
  41.     persistence_timeout 50         #设置会话保持时间,单位是秒  
  42.     protocol TCP                   #指定转发协议类型,有TCP和UDP两种  
  43.    
  44.     real_server 14.17.64.4 0 {     #配置服务节点1,需要指定real server的真实IP地址和端口  
  45.         weight 1                   #配置服务节点的权值,  
  46.         TCP_CHECK {  
  47.         connect_timeout 8          #表示8秒无响应超时  
  48.         nb_get_retry 3             #表示重试次数  
  49.         delay_before_retry 3       #表示重试间隔  
  50.         connect_port 80            #使用80端口进行保活  
  51.         }  
  52.          }  
  53.    
  54.     real_server 14.17.64.5 0 {  
  55.         weight 1               
  56.         TCP_CHECK {  
  57.         connect_timeout 8      
  58.         nb_get_retry 3         
  59.         delay_before_retry 3   
  60.         #connect_port 80          
  61.         }  
  62.          }         
  63. #更多real_server略掉。  
  64. }  
  65.    
  66.    
  67. virtual_server 14.17.64.14 0 {    #设置虚拟服务器,需要指定虚拟IP地址和服务端口,IP与端口之间用空格隔开  
  68.     delay_loop 6                  #设置运行情况检查时间,单位是秒  
  69.     lb_algo wrr                   #设置负载调试算法,这里设置为wrr即加权论询算法  
  70.     lb_kind DR                    #设置LVS实现负载均衡的机制,有NAT,TUN和DR三个模式可选  
  71.     persistence_timeout 50        #设置会话保持时间,单位是秒  
  72.     protocol TCP                  #指定转发协议类型,有TCP和UDP两种  
  73.    
  74.     real_server 14.17.64.4 0 {    #配置服务节点1,需要指定real server的真实IP地址和端口  
  75.         weight 1                  #配置服务节点的权值,  
  76.         TCP_CHECK {  
  77.         connect_timeout 8         #表示8秒无响应超时  
  78.         nb_get_retry 3            #表示重试次数  
  79.         delay_before_retry 3      #表示重试间隔  
  80.         connect_port 80          
  81.         } http://www.xiaoxiongboke.com/tenda  
  82.          }  
  83.    
  84.     real_server 14.17.64.5 0 {  
  85.         weight 1               
  86.         TCP_CHECK {  
  87.         connect_timeout 8       
  88.         nb_get_retry 3         
  89.         delay_before_retry 3   
  90.         connect_port 80          
  91.         }  
  92.          }         
  93. #更多real_server略掉  
  94. }  

4、真实服务器健康检查测试

由于是线上环境,我不能通过关闭机器或网卡进行测试,但是他保活是通过tcp 80端口来保活的,所以只需关闭真实服务器上的http服务就OK。

如下所示,关掉nginx服务后,果真从lvs负载里踢出了。

  1. root@ubuntu:/etc/keepalived# ipvsadm-L -n  
  2. IP Virtual Server version 1.2.1 (size=4096)  
  3. Prot LocalAddress:Port Scheduler Flags  
  4.   -> RemoteAddress:Port           Forward Weight ActiveConn InActConn  
  5. TCP  14.17.64.13:0 wrr persistent50  
  6.   -> 14.17.64.4:0                 Route   1     0          0          
  7.   -> 14.17.64.5:0                 Route   1     0          0          
  8.   -> 14.17.64.6:0                 Route   1     0          0          
  9.   -> 14.17.64.7:0                 Route   1     3          0           
  10.   -> 14.17.64.8:0                 Route   1     0          0          
  11.   -> 14.17.64.9:0                 Route   1     0          0          
  12.   -> 14.17.64.10:0                Route   1     2          1          
  13.   -> 14.17.64.11:0                Route   1     1          1          
  14.   -> 14.17.64.12:0                Route   1     0          0          
  15. TCP  14.17.64.14:0 wrr persistent50  
  16.   -> 14.17.64.4:0                 Route   1     0          0          
  17.   -> 14.17.64.5:0                 Route   1      0         0          
  18.   -> 14.17.64.6:0                 Route   1     0          0          
  19.   -> 14.17.64.7:0                 Route   1     0          0          
  20.   -> 14.17.64.8:0                 Route   1     0          0          
  21.   -> 14.17.64.9:0                 Route   1     0          0          
  22.   -> 14.17.64.10:0                Route   1     0          0          
  23.   -> 14.17.64.11:0                Route   1     0          0          
  24.   -> 14.17.64.12:0                Route   1      0         0          
  25. root@ubuntu:/etc/keepalived# /etc/init.d/nginxstop  
  26. root@ubuntu:/etc/keepalived# ipvsadm-L -n  
  27. IP Virtual Server version 1.2.1 (size=4096)  
  28. Prot LocalAddress:Port Scheduler Flags  
  29.   -> RemoteAddress:Port           Forward Weight ActiveConn InActConn  
  30. TCP  14.17.64.13:0 wrr persistent50  
  31.   -> 14.17.64.4:0                 Route   1     0          0          
  32.   -> 14.17.64.5:0                 Route   1     0          0          
  33.   -> 14.17.64.6:0                 Route   1     0          0          
  34.   -> 14.17.64.7:0                 Route   1     3          0          
  35.   -> 14.17.64.8:0                 Route   1     0          0          
  36.   -> 14.17.64.9:0                 Route   1     0          0          
  37.   -> 14.17.64.11:0                Route   1     1          1          
  38.   -> 14.17.64.12:0                Route   1     0          0          
  39. TCP  14.17.64.14:0 wrr persistent50  
  40.   -> 14.17.64.4:0                 Route   1     0          0          
  41.   -> 14.17.64.5:0                 Route   1     0          0          
  42.   -> 14.17.64.6:0                 Route   1     0          0          
  43.   -> 14.17.64.7:0                 Route   1     0          0          
  44.   -> 14.17.64.8:0                 Route   1     0          0          
  45.   -> 14.17.64.9:0                 Route   1     0          0           
  46.   -> 14.17.64.11:0                Route   1     0          0          
  47.   -> 14.17.64.12:0                Route   1     0          0  

启动真实服务器上nginx后,该真实服务器又加入ipvsadm转发规则中。

  1. root@ubuntu:/etc/keepalived# /etc/init.d/nginxstart  
  2. root@ubuntu:/etc/keepalived# ipvsadm-L -n  
  3. IP Virtual Server version 1.2.1 (size=4096)  
  4. Prot LocalAddress:Port Scheduler Flags  
  5.   -> RemoteAddress:Port           Forward Weight ActiveConn InActConn  
  6. TCP  14.17.64.13:0 wrr persistent50  
  7.   -> 14.17.64.4:0                 Route   1     0          0          
  8.   -> 14.17.64.5:0                 Route   1     0          0          
  9.   -> 14.17.64.6:0                 Route   1     0          0          
  10.   -> 14.17.64.7:0                 Route   1     3          0          
  11.   -> 14.17.64.8:0                 Route   1     0          0          
  12.   -> 14.17.64.9:0                 Route   1     0          0          
  13.   -> 14.17.64.10:0                Route   1     1          1          
  14.   -> 14.17.64.11:0                Route   1      0         0          
  15.   -> 14.17.64.12:0                Route   1     0          0          
  16. TCP  14.17.64.14:0 wrr persistent50  
  17.   -> 14.17.64.4:0                 Route   1     0          0          
  18.   -> 14.17.64.5:0                 Route   1     0          0          
  19.   -> 14.17.64.6:0                 Route   1     0          0          
  20.   -> 14.17.64.7:0                 Route   1     0          0          
  21.   -> 14.17.64.8:0                 Route   1     0          0          
  22.   -> 14.17.64.9:0                 Route  1      0          0          
  23.   -> 14.17.64.10:0                Route   1     0          0          
  24.   -> 14.17.64.11:0                Route   1     0          0          
  25.   -> 14.17.64.12:0                Route   1     0          0    

从测试结果得知,keepalived真实服务器保活测试成功。

5、LVS高可用自动切换测试

由于都是在IDC机房服务器上操作,不可能断掉网卡,所以重启一台LVS服务器。

VIP接管查看:

其中一台LVS接管了14.17.64.14:

  1. root@ubuntu:~# ip add |grep14.17.64  
  2.     inet 14.17.64.2/24 brd14.17.64.255 scope global p1p1  
  3.     inet 14.17.64.14/32 scopeglobal p1p1  

另一台LVS接管了14.17.64.13:

  1. root@ubuntu:/etc/keepalived# ipadd |grep 14.17.64  
  2.     inet 14.17.64.3/24 brd14.17.64.255 scope global p1p1  
  3.     inet 14.17.64.13/32 scopeglobal p1p1  

把ipvsadm和keepalived加入开机自启动:

  1. #cat  /etc/rc.local  
  2. ipvsadm  
  3. /etc/init.d/keepalived start  

重启14.17.64.3服务器查看VIP切换情况:

经过测试,重启几秒钟后,14.17.64.2服务器就把VIP 14.17.64.13接管了过来。同时使用ssh登录14.17.64.13测试,能够正常的转发。

  1. root@ubuntu:~# ip add|grep 14.17.64  
  2.     inet 14.17.64.2/24 brd14.17.64.255 scope global p1p1  
  3.     inet 14.17.64.14/32 scopeglobal p1p1  
  4.     inet 14.17.64.13/32 scopeglobal p1p1  
  5.    
  6. root@ubuntu:~# ipvsadm -L -c      #从这儿可以看出,14.17.64.13转发到10真实服务器上。  
  7. IPVS connection entries  
  8. pro expire state      source             virtual            destination  
  9. TCP 14:58  ESTABLISHED242.103.143.219.broad.bj.bj.dynamic.163data.com.cn:54106 14.17.64.13:62222  14.17.64.10:62222  

在lvs服务器重新启动之后,还会把VIP抢占回来

  1. root@ubuntu:~# ip add|grep 14.17.64  
  2.     inet 14.17.64.2/24 brd14.17.64.255 scope global p1p1  
  3.     inet 14.17.64.14/32 scopeglobal p1p1  

到此,LVS+Keepalived高可用搭建完成,并能实现多端口的转发(即转发所有TCP端口)。

思考:此处只部署了两台LVS,如果要部署更多LVS,也是同样的配置,因为keepalived的心跳报文是广播的,所以只要在同一个局域网内,无论多少个keepalived程序都能够进行选举与VIP接管。

标签:

给我留言