设为首页 收藏本站
查看: 4267|回复: 0

[经验分享] Ubuntu构建LVS+Keepalived高可用负载均衡集群【生产环境】

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2014-11-13 10:28:11 | 显示全部楼层 |阅读模式
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                             #加载lvsipvsadm的规则由keepalived来配置,所以安装即可,如果要对lvs手动配置详细了解,可参考我的另一篇文章:http://yangrong.blog./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的配置文件,只需把下列红色与蓝色字体参数对换一下即可。
配置文件如下:
! Configuration File for keepalived
vrrp_instance VI_1 {            #定义一个实例,keepalived间的高可用只能接管相同实例名称
    stateMASTER                 #指定Keepalived的角色,MASTER表示此主机是主服务器 BACKUP表示此主机是备用服务器,所以设置priority时要注意MASTERBACKUP高。
    interface p1p1              #指定监测网络的接口,当LVS接管时,将会把IP地址添加到该网卡上。
    virtual_router_id 51        #虚拟路由标识,同一个vrrp实例使用唯一的标识,同一个vrrp_instance下,MASTERBACKUP必须一致。
    priority120                 #指定这个实例优先级
advert_int 1                 #心跳报文发送间隔
#notify_master/path/xx.sh    #这个实例切换为master时执行的脚本
#notify_backup /path/xx.sh   #这个实例切换为backup时执行的脚本
#track_interface{            #设置额外的监控,里面某个网卡故障也会进行切换,这个一般用来监控上行链路
#eth1
#}
    authentication {
        auth_type PASS          #设置验证类型,主要有PASSAH两种
        auth_pass 1111          #设置验证密码,同一个vrrp_instance下,MASTERBACKUP的密码必须一致才能正常通信
    }
    virtual_ipaddress {         #设置虚拟IP地址,可以设置多个虚拟IP地址,每行一个
     14.17.64.13
    }
}

vrrp_instance VI_2 {            #定义另一个实例
    state BACKUP
    interface p1p1
    virtual_router_id 52
   priority 80
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
          14.17.64.14
    }
}

virtual_server 14.17.64.13 0 {     #设置虚拟服务器,需要指定虚拟IP地址和服务端口,IP与端口之间用空格隔开
    delay_loop 6                   #设置运行情况检查时间,单位是秒
    lb_algo wrr                    #设置负载调试算法,这里设置为wrr即加权论询算法
    lb_kind DR                     #设置LVS实现负载均衡的机制,有NATTUNDR三个模式可选
    persistence_timeout 50         #设置会话保持时间,单位是秒
    protocol TCP                   #指定转发协议类型,有TCPUDP两种

    real_server 14.17.64.4 0 {     #配置服务节点1,需要指定real server的真实IP地址和端口
        weight 1                   #配置服务节点的权值,
        TCP_CHECK {
        connect_timeout 8          #表示8秒无响应超时
        nb_get_retry 3             #表示重试次数
        delay_before_retry 3       #表示重试间隔
        connect_port 80            #使用80端口进行保活
        }
         }

    real_server 14.17.64.5 0 {
        weight 1            
        TCP_CHECK {
        connect_timeout 8   
        nb_get_retry 3      
        delay_before_retry 3
        #connect_port 80        
        }
         }      
#更多real_server略掉。
}


virtual_server 14.17.64.14 0 {    #设置虚拟服务器,需要指定虚拟IP地址和服务端口,IP与端口之间用空格隔开
    delay_loop 6                  #设置运行情况检查时间,单位是秒
    lb_algo wrr                   #设置负载调试算法,这里设置为wrr即加权论询算法
    lb_kind DR                    #设置LVS实现负载均衡的机制,有NATTUNDR三个模式可选
    persistence_timeout 50        #设置会话保持时间,单位是秒
    protocol TCP                  #指定转发协议类型,有TCPUDP两种

    real_server 14.17.64.4 0 {    #配置服务节点1,需要指定real server的真实IP地址和端口
        weight 1                  #配置服务节点的权值,
        TCP_CHECK {
        connect_timeout 8         #表示8秒无响应超时
        nb_get_retry 3            #表示重试次数
        delay_before_retry 3      #表示重试间隔
        connect_port 80        
        }
         }

    real_server 14.17.64.5 0 {
        weight 1            
        TCP_CHECK {
        connect_timeout 8     
        nb_get_retry 3      
        delay_before_retry 3
        connect_port 80        
        }
         }      
#更多real_server略掉
}

4、真实服务器健康检查测试    由于是线上环境,我不能通过关闭机器或网卡进行测试,但是他保活是通过tcp 80端口来保活的,所以只需关闭真实服务器上的http服务就OK。
如下所示,关掉nginx服务后,果真从lvs负载里踢出了。
root@ubuntu:/etc/keepalived# ipvsadm-L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  14.17.64.13:0 wrr persistent50
  -> 14.17.64.4:0                 Route   1     0          0        
  -> 14.17.64.5:0                 Route   1     0          0        
  -> 14.17.64.6:0                 Route   1     0          0        
  -> 14.17.64.7:0                 Route   1     3          0         
  -> 14.17.64.8:0                 Route   1     0          0        
  -> 14.17.64.9:0                 Route   1     0          0        
  -> 14.17.64.10:0                Route   1     2          1         
  -> 14.17.64.11:0                Route   1     1          1        
  -> 14.17.64.12:0                Route   1     0          0        
TCP  14.17.64.14:0 wrr persistent50
  -> 14.17.64.4:0                 Route   1     0          0        
  -> 14.17.64.5:0                 Route   1      0         0        
  -> 14.17.64.6:0                 Route   1     0          0        
  -> 14.17.64.7:0                 Route   1     0          0        
  -> 14.17.64.8:0                 Route   1     0          0        
  -> 14.17.64.9:0                 Route   1     0          0        
  -> 14.17.64.10:0                Route   1     0          0         
  -> 14.17.64.11:0                Route   1     0          0        
  -> 14.17.64.12:0                Route   1      0         0        
root@ubuntu:/etc/keepalived# /etc/init.d/nginxstop
root@ubuntu:/etc/keepalived# ipvsadm-L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  14.17.64.13:0 wrr persistent50
  -> 14.17.64.4:0                 Route   1     0          0        
  -> 14.17.64.5:0                 Route   1     0          0        
  -> 14.17.64.6:0                 Route   1     0          0        
  -> 14.17.64.7:0                 Route   1     3          0        
  -> 14.17.64.8:0                 Route   1     0          0        
  -> 14.17.64.9:0                 Route   1     0          0        
  -> 14.17.64.11:0                Route   1     1          1        
  -> 14.17.64.12:0                Route   1     0          0        
TCP  14.17.64.14:0 wrr persistent50
  -> 14.17.64.4:0                 Route   1     0          0        
  -> 14.17.64.5:0                 Route   1     0          0        
  -> 14.17.64.6:0                 Route   1     0          0        
  -> 14.17.64.7:0                 Route   1     0          0        
  -> 14.17.64.8:0                 Route   1     0          0        
  -> 14.17.64.9:0                 Route   1     0          0         
  -> 14.17.64.11:0                Route   1     0          0        
  -> 14.17.64.12:0                Route   1     0          0  

启动真实服务器上nginx后,该真实服务器又加入ipvsadm转发规则中。
root@ubuntu:/etc/keepalived# /etc/init.d/nginxstart
root@ubuntu:/etc/keepalived# ipvsadm-L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  14.17.64.13:0 wrr persistent50
  -> 14.17.64.4:0                 Route   1     0          0        
  -> 14.17.64.5:0                 Route   1     0          0        
  -> 14.17.64.6:0                 Route   1     0          0        
  -> 14.17.64.7:0                 Route   1     3          0        
  -> 14.17.64.8:0                 Route   1     0          0        
  -> 14.17.64.9:0                 Route   1     0          0        
  -> 14.17.64.10:0                Route   1     1          1         
  -> 14.17.64.11:0                Route   1      0         0        
  -> 14.17.64.12:0                Route   1     0          0        
TCP  14.17.64.14:0 wrr persistent50
  -> 14.17.64.4:0                 Route   1     0          0        
  -> 14.17.64.5:0                 Route   1     0          0        
  -> 14.17.64.6:0                 Route   1     0          0        
  -> 14.17.64.7:0                 Route   1     0          0        
  -> 14.17.64.8:0                 Route   1     0          0        
  -> 14.17.64.9:0                 Route  1      0          0        
  -> 14.17.64.10:0                Route   1     0          0         
  -> 14.17.64.11:0                Route   1     0          0        
  -> 14.17.64.12:0                Route   1     0          0  

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

5、LVS高可用自动切换测试由于都是在IDC机房服务器上操作,不可能断掉网卡,所以重启一台LVS服务器。

VIP接管查看:
其中一台LVS接管了14.17.64.14:
root@ubuntu:~# ip add |grep14.17.64
    inet 14.17.64.2/24 brd14.17.64.255 scope global p1p1
    inet 14.17.64.14/32 scopeglobal p1p1

另一台LVS接管了14.17.64.13:
root@ubuntu:/etc/keepalived# ipadd |grep 14.17.64
    inet 14.17.64.3/24 brd14.17.64.255 scope global p1p1
    inet 14.17.64.13/32 scopeglobal p1p1

把ipvsadm和keepalived加入开机自启动:
#cat  /etc/rc.local
ipvsadm
/etc/init.d/keepalived start

重启14.17.64.3服务器查看VIP切换情况:
经过测试,重启几秒钟后,14.17.64.2服务器就把VIP 14.17.64.13接管了过来。同时使用ssh登录14.17.64.13测试,能够正常的转发。
root@ubuntu:~# ip add|grep 14.17.64
    inet 14.17.64.2/24 brd14.17.64.255 scope global p1p1
    inet 14.17.64.14/32 scopeglobal p1p1
    inet 14.17.64.13/32 scopeglobal p1p1

root@ubuntu:~# ipvsadm -L -c      #从这儿可以看出,14.17.64.13转发到10真实服务器上。
IPVS connection entries
pro expire state      source             virtual            destination
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抢占回来
root@ubuntu:~# ip add|grep 14.17.64
    inet 14.17.64.2/24 brd14.17.64.255 scope global p1p1
    inet 14.17.64.14/32 scopeglobal p1p1

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


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


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-28758-1-1.html 上篇帖子: LVS NAT 超实用配置 解决页面无法访问 下篇帖子: LVS DR模型环境搭建
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表