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

简介: 1、环境说明:系统版本:Ubuntu 14.04LVS1物理IP:14.17.64.2   初始接管VIP:14.17.64.13LVS2物理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、环境说明:

系统版本:Ubuntu 14.04

LVS1物理IP14.17.64.2   初始接管VIP14.17.64.13

LVS2物理IP14.17.64.3   初始接管VIP14.17.64.14

真实web服务器IP14.17.64.4-12

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

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

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


2、安装LVSKeepalived

#aptitude install ipvsadm          #安装lvs

#ipvsadm                             #加载lvsipvsadm的规则由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配置

此处是单台LVSkeepalived.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

 

ipvsadmkeepalived加入开机自启动:

#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接管。


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
相关文章
|
9月前
|
人工智能 Ubuntu 前端开发
Dify部署全栈指南:AI从Ubuntu配置到HTTPS自动化的10倍秘籍
本文档介绍如何部署Dify后端服务及前端界面,涵盖系统环境要求、依赖安装、代码拉取、环境变量配置、服务启动、数据库管理及常见问题解决方案,适用于开发与生产环境部署。
1793 1
|
Ubuntu 安全 数据安全/隐私保护
在Docker容器中部署GitLab服务器的步骤(面向Ubuntu 16.04)
现在,你已经成功地在Docker上部署了GitLab。这就是我们在星际中的壮举,轻松如同土豆一样简单!星际旅行结束,靠岸,打开舱门,迎接全新的代码时代。Prepare to code, astronaut!
710 12
|
Ubuntu NoSQL 编译器
在Ubuntu 20.04上构建RISC-V和QEMU环境
以上的步骤只是开始,RISC-V的世界里有无数的未知等待你去探索。加油,勇敢的探险家。
815 18
|
Ubuntu jenkins 机器人
在Jenkins上配置触发Ubuntu环境的图形用户界面(GUI)构建任务。
以上,这趟融合了技术与艺术的Jenkins配置之旅就告一段落了。记住,技术应当像艺术一样有趣和生动,这样才能激发出最大的创新和效率。
387 2
|
Ubuntu 安全 Docker
Ubuntu下部署及操作Docker技巧
以上就是在Ubuntu下部署及操作Docker的具体步骤。但这只是冰山一角,Docker的魅力远不仅如此。你可以将其视为存放各种工具的小箱子,随时随地取用,极大地提升工作效率。你也可以私人订制,适应不同的开发环境,就像一个拥有各种口味冰淇淋的冰箱,满足各种各样的需求。好了,现在你已经掌握了基本的Docker运用技巧,快去尝试使用吧!记住,沉浸在探索中,你会找到无尽的乐趣和满满的收获。
613 23
|
负载均衡 前端开发 JavaScript
LVS-DR模式、keepalived、Nginx与Tomcat合作,打造动静分离,高效负载均衡与高可用性
为了采用这样的架构,你需要对LVS-DR、Keepalived、Nginx与Tomcat有一定的理解和掌握,同时也需要投入一些时间去研究和配置,但是一旦你把它运行起来,你将会发现,这一切都是值得的。
494 11
|
负载均衡 网络协议 Linux
LVS,软负载均衡
LVS(Linux Virtual Server)是一项广泛应用的负载均衡技术,由章文嵩博士于1998年发起,自Linux 2.4.24版本起成为官方内核的一部分。LVS通过四层负载均衡技术实现高性能、高可用的服务器集群,支持多种调度算法和工作模式(如D-NAT、full-NAT、IP隧道、DR),适用于HTTP、数据库等应用。相比7层负载均衡器(如Nginx、HAProxy),LVS具有更高的并发处理能力和更低的资源消耗,适合大规模流量分发。本期文章详细介绍了LVS的工作原理、优势与不足,并对比了常见的负载均衡产品,帮助读者根据具体需求选择合适的解决方案。
2621 6
LVS,软负载均衡
|
负载均衡 算法 Linux
LVS+Keepalived:实现高效软负载均衡的利器
本文介绍了如何使用LVS(Linux Virtual Server)和Keepalived搭建高可用负载均衡集群。LVS通过不同调度算法将请求转发给后端服务器,而Keepalived基于VRRP协议实现服务高可用,避免IP单点故障。具体步骤包括环境准备、安装配置ipvsadm和Keepalived、启动服务及测试。文中还详细解释了配置文件中的关键参数,并提供了故障转移测试方法。最后,文章简要对比了软件、硬件和云负载均衡方案的特点,帮助读者选择合适的负载均衡策略。
2147 4
|
Ubuntu 测试技术 网络安全
Ubuntu系统下部署flatpress轻量级博客系统
【10月更文挑战第3天】Ubuntu系统下部署flatpress轻量级博客系统
439 3
Ubuntu系统下部署flatpress轻量级博客系统
|
运维 负载均衡 网络协议
LVS+Keepalived 负载均衡
LVS+Keepalived 负载均衡
536 8
LVS+Keepalived 负载均衡