负载均衡配置多节点
背景介绍
在现代分布式系统中,负载均衡是一项至关重要的技术,它通过将传入的请求分配到多个服务器节点上,确保了系统的高可用性和高性能,负载均衡可以采用硬件设备或软件解决方案来实现,本文主要讨论基于软件的负载均衡配置,特别是使用Keepalived和HAProxy进行多节点的高可用性配置。
一、负载均衡基础概念
1 什么是负载均衡?
负载均衡(Load Balancing)是一种计算机网络技术,旨在优化资源使用、最大化吞吐量、最小化响应时间并避免任何单一资源过载,其基本思想是将任务分摊到多个处理单元上,以提高整体性能。
2 负载均衡的类型
静态负载均衡:预先设定好的负载分配策略,如轮询、最少连接等。
动态负载均衡:根据实时监控数据调整负载分配策略,如基于权重的分配、基于当前连接数的分配等。
3 常见负载均衡算法
轮询(Round Robin):按顺序依次将请求分配给每个服务器。
加权轮询(Weighted Round Robin):根据服务器的权重进行轮询,权重高的服务器分配更多的请求。
最少连接(Least Connections):将请求分配给当前连接数最少的服务器。
源地址哈希(IP Hash):根据客户端IP地址计算哈希值,将请求分配给特定的服务器,适用于有状态服务。
二、Keepalived与HAProxy组合实现高可用负载均衡
1 Keepalived简介
Keepalived是一款基于VRRP(Virtual Router Redundancy Protocol)的高可用性解决方案,主要用于实现路由器冗余和故障转移,它可以管理LVS(Linux Virtual Server),并为Nginx、HAProxy等提供高可用性支持。
2.1.1 核心功能
LVS负载均衡软件的管理:Keepalived最初是专为解决LVS的问题而诞生的,Keepalived和LVS可紧密结合。
LVS集群节点健康检查:当LVS集群中某个节点服务器发生故障时,Keepalived服务会自动将失效的节点从正常队列中剔除,并将请求调度到别的正常的节点服务器上,从而保证用户访问不受影响,当故障节点被修复后,Keepalived服务又会自动切换回来。
网络服务高可用功能:Keepalived可以实现任意两台主机之间,如Master服务器和Backup服务器间的故障转移和自动切换,假设某个服务是不能停机的,如LVS负载均衡、Nginx反向代理服务器等,可以利用Keepalived保证其高可用性。
2.1.2 高可用原理
Keepalived的高可用服务的故障切换转移是通过VRRP机制来实现的,在Keepalived服务正常运行时,Master节点会不断向Backup节点发送(多播方式)心跳信息,用以通知Master节点的存活状态,当Master节点发生故障时,就无法发送心跳信息,Backup节点也就无法检测到来自Master的心跳信息,于是调用自身的接管程序,接管Master的资源和服务,当Master恢复时,Backup又会释放Master故障时自身接管的资源和服务,恢复到原来的备用角色,无论Master如何切换,对外都应该提供相同的服务IP地址,该IP也称作虚拟地址VIP,客户端并不需要因Master的改变而修改自己的配置,对他们来说这种切换是透明的。
2.1.3 安装与配置
由于本文引用的技术构架中Keepalived将仅为HAProxy提供高可用服务,所以管理配置LVS负载均衡及节点健康检查功能将不准备展开篇幅,仅对高可用功能进行介绍演示。
2.1.3.1 安装
Keepalived支持源码安装,同时也可以通过不同操作系统安装工具进行安装,本文以CentOS的yum工具为例进行安装介绍,此时应该准备两台服务器分别作为Master节点和Backup节点,分别在两台服务器上执行以下命令进行安装。
sudo yum install keepalived -y
2.1.3.2 高可用配置
yum安装后,Keepalived将生成配置文件:/etc/keepalived/keepalived.conf
,可利用文本编辑器进行配置修改。
配置文件中主要由全局段、VRRP实例段、脚本段组成。
全局段定义(global_defs):允许用户设置全局相关信息,例如通知信息、关键参数配置等,该段配置在Master节点和Backup节点上应当一致。
notification_email:定义报警邮件地址,当服务切换时发送报警邮件。
notification_email_from:定义发件人信息。
smtp_server和smtp_connect_timeout:分别定义SMTP服务器及相应的连接超时时间。
vrrp_mcast_group4:为VRRP IPv4多播地址,默认为224.0.0.18,如果同一局域网内
2 HAProxy简介
HAProxy是一款TCP/HTTP反向代理负载均衡服务器软件,可工作在OSI模型中的四层传输层以及七层应用层,HAProxy特别适用于那些负载压力大的web站点,这些站点通常需要会话保持或七层处理,HAProxy运行在时下的服务器上,可以支持数以万计的并发连接,并且它的运行模式使得它可以很简单安全地整合进现有的系统架构中,同时可以保护web服务器不被暴露到网络上,HAproxy允许用户定义多组服务代理,代理由前端和后端组成,前端定义了服务监听的IP及端口,后端则定义了一组服务器及负载均衡的算法,通过服务代理将流量由前端负载均衡至后端服务器节点上。
2.3 Keepalived与HAProxy组合
由于HAProxy会存在单点故障问题,可以由Keepalived来为HAProxy提供高可用服务,而HAProxy提供四层或七层高性能负载均衡及反向代理服务,两者共同实现高可用负载均衡,结构如图1所示。
图1 Keepalived + HAProxy 高可用负载均衡架构图
三、Nginx负载均衡配置示例
1 实验环境说明
本次实验的测试环境使用的宿主机操作系统为Windows 7,在Vmware虚拟机安装CentOS 6.5(3台),说明如下:
主机类型 | 操作系统 | IP地址 | 作用 |
宿主机 | Windows 7 | 10.0.0.1/24 (VMnet8的IP地址) | 远程3台虚拟机,进行配置,同时也作为后面测试使用的客户端 |
虚拟机1: lb01 | CentOS 6.5 | 10.0.0.7/24 | 负载均衡服务器lb01,将请求分担到Web节点服务器中 |
虚拟机2: web01 | CentOS 6.5 | 10.0.0.9/24 | Web节点服务器web01 |
虚拟机3: web02 | CentOS 6.5 | 10.0.0.10/24 | Web节点服务器web02 |
而当使用NAT的方式进行上网时虚拟机、宿主机之间的网络连接关系可如下所示:
关于为什么网络拓扑结构是这样的,这里不展开说明,可以参考博主的另一篇博文《在实践中深入理解VMware虚拟机的上网模式NAT模式》,这篇文章深入地分析了VMware虚拟机使用NAT模式上网时的网络结构细节,相信看完这篇文章后,这里搭建Nginx的实验环境也就很容易理解了,所以首先,应该是自己先配置好网络环境,让宿主机跟我们的虚拟机可以通信,如果理解了VMware虚拟机上网方式的原理,这一步是非常简单的,就可以很轻松完成的,这里就不给出过程了,这里所用的IP地址跟上面的图示是一样的。
在这个实验环境中,我们假定web01和web02提供bbs.xpleaf.org的网站内容服务,Nginx在web01和web02前面作为反向代理服务器与负载均衡服务器,当用户访问bbs.xpleaf.org时,Nginx负载均衡器会把请求分发到web01和web02节点服务器上,由节点服务器返回实际的内容数据。
3.2 配置与测试实战:节点服务器单虚拟机场景
在这个实验中,我们将使用Nginx的版本为:1.6.3,关于Nginx的安装与基本配置,这里不再做说明,可以参考博主前面关于Nginx的博文,同样也给出了详细的实验环境,可以去实践一下,接下来我们在每台web服务器上,只配置了一个虚拟机,即bbs.xpleaf.org。
3.2.1 web01配置与测试
web01作为节点服务器,配置它的虚拟机域名为bbs.xpleaf.org
cd /etc/nginx/conf/html/bbs/ echo "bbs.xpleaf.org node1 10.0.0.9">index.html
添加相应的站点目录和内容
cd /etc/nginx/conf/html/bbs/ echo "bbs.xpleaf.org node1 10.0.0.9">index.html
配置hosts解析
echo "127.0.0.1 bbs.xpleaf.org">/etc/hosts
检查配置文件与启动
/application/nginx/sbin/nginx -t nginx: the configuration file /application/nginx-1 .6.3 //conf/nginx .conf syntax is ok nginx: configuration file /application/nginx-1 .6.3 //conf/nginx .conf test is successful /application/nginx/sbin/nginx -s reload
本机上进行测试
curl http://bbs.xpleaf.org/index.html
3.2.2 web02配置与测试
web02作为节点服务器,配置它的虚拟机域名为bbs.xpleaf.org
cd /etc/nginx/conf/html/bbs/ echo "bbs.xpleaf.org node2 10.0.0.10">index.html
添加相应的站点目录和内容
cd /etc/nginx/conf/html/bbs/ echo "bbs.xpleaf.org node2 10.0.0.10">index.html
配置hosts解析
echo "127.0.0.1 bbs.xpleaf.org">/etc/hosts
检查配置文件与启动
/application/nginx/sbin/nginx -t nginx: the configuration file /application/nginx-1 .6.3 //conf/nginx .conf syntax is ok nginx: configuration file /application/nginx-1 .6.3 //conf/nginx .conf test is successful /application/nginx/sbin/nginx -s reload
本机上进行测试
curl http://bbs.xpleaf.org/index.html
3.2.3 lb01配置与测试
lb01作为负载均衡服务器,安装Nginx并进行配置。
yum install nginx -y vim /etc/nginx/conf/nginx.conf
在http
段中添加以下配置:
upstream bbs.xpleaf.org { server 10.0.0.9; server 10.0.0.10; } server { listen 80; server_name lb01; location / { proxy_pass http://bbs.xpleaf.org; } }
启动Nginx服务并测试
/application/nginx/sbin/nginx -t nginx: the configuration file /application/nginx-1 .6.3 //conf/nginx .conf syntax is ok nginx: configuration file /application/nginx-1 .6.3 //conf/nginx .conf test is successful /application/nginx/sbin/nginx -s reload
本机上进行测试
curl http://lb01/index.html
3 Nginx负载均衡算法详解
3.3.1 轮询(Round Robin)
每个请求按时间顺序逐一分配到不同的后端服务器,如果某个服务器宕机,自动剔除。
upstream backend { server backend1.example.com; server backend2.example.com; } server { listen 80; location / { proxy_pass http://backend; } }
3.3.2 加权轮询(Weighted Round Robin)
根据服务器的权重分配请求,权重越高分配的请求越多,适用于服务器性能不一致的环境。
upstream backend { server backend1.example.com weight=3; server backend2.example.com weight=2; } server { listen 80; location / { proxy_pass http://backend; } }
3.3.3 IP哈希(IP Hash)
根据客户端IP地址的哈希值分配请求,确保同一个客户端总是访问同一个服务器,适用于有状态服务。
upstream backend { ip_hash; server backend1.example.com; server backend2.example.com; } server { listen 80; location / { proxy_pass http://backend; } }
3.3.4 最少连接(Least Connections)
优先将请求分配给当前连接数最少的服务器,尽量使各服务器的负载均衡。
upstream backend { least_conn; server backend1.example.com; server backend2.example.com; } server { listen 80; location / { proxy_pass http://backend; } }
3.3.5 最小响应时间(Least Time)
监控各服务器的响应时间,优先将请求分配给响应时间最短的服务器,需要第三方模块的支持。
upstream backend { least_time header; server backend1.example.com; server backend2.example.com; } server { listen 80; location / { proxy_pass http://backend; } }
四、Feign客户端负载均衡配置示例
1 Feign客户端简介
Feign是一个声明式的HTTP客户端调用工具,采用接口+注解方式实现,易读性比较强,在Spring Cloud体系中,Feign常用于微服务之间的调用,Feign支持与多种负载均衡策略结合,如Ribbon、随机、轮询等,本文将以Ribbon为例进行说明。
2 Ribbon负载均衡策略详解
Ribbon是一款客户端负载均衡工具,提供了多种负载均衡策略,如轮询、随机、加权轮询等,以下是Ribbon支持的主要负载均衡策略:
轮询(RoundRobinRule):按顺序依次将请求分配给每个服务器。
随机(RandomRule):随机选择一个服务器进行请求。
加权轮询(WeightedResponseTimeRule):根据服务器的权重分配请求,权重越高分配的请求越多,适用于服务器性能不一致的环境。
加权随机(WeightedConfigurationRule):根据服务器的配置权重进行加权随机选择,适用于需要根据配置权重进行负载分配的场景。
区域感知(ZoneAvoidanceRule):根据区域亲和性进行负载分配,优先选择同一区域内的服务器,适用于跨区域部署的场景。
主备(PrimaryRule):只选择一个服务器进行请求,除非该服务器不可用才会选择其他服务器,适用于主备模式的服务。
最优可用(BestAvailableRule):找到最空闲的服务器进行请求分配,适用于需要动态调整负载的场景。
一致性哈希(ConsistentHashRule):根据一致性哈希算法进行负载分配,适用于缓存等需要数据分片的场景。
饥饿(HungryLoadBalancer):总是选择最新的服务器进行请求分配,适用于需要最新数据的场景。
公平(FairLoadBalancer):根据服务器的响应时间进行加权轮询选择,适用于需要公平分配负载的场景。
随机(RandomRule):随机选择一个服务器进行请求分配,适用于无特殊需求的简单场景。
可用过滤(AvailableFilteringRule):先过滤掉不可用的服务器再进行负载均衡选择,适用于需要高可用性的场景。
区域偏好(ZonePreferenceRule):根据区域偏好进行负载分配,优先选择偏好区域的服务器,适用于跨区域部署且有明确区域偏好的场景。
权重轮询(WeightedRoundRobinRule):根据服务器的权重进行轮询选择,适用于需要根据权重进行负载分配的场景。
响应时间加权(ResponseTimeWeightedRule):根据服务器的响应时间进行加权选择,适用于需要根据响应时间进行负载分配的场景。
失败率加权(FailureRateRule):根据服务器的失败率进行加权选择,适用于需要根据失败率进行负载分配的场景。
忙碌率加权(BusynessWeightedRule):根据服务器的忙碌率进行加权选择,适用于需要根据忙碌率进行负载分配的场景。
重试次数加权(RetryRule):根据服务器的重试次数进行加权选择,适用于需要根据重试次数进行负载分配的场景。
合并(CompositeRule):合并多个规则进行负载均衡选择,适用于需要多种策略组合的场景。
自定义(CustomRule):自定义负载均衡策略,适用于有特殊需求的场景。
以上内容就是解答有关“负载均衡配置多节点”的详细内容了,我相信这篇文章可以为您解决一些疑惑,有任何问题欢迎留言反馈,谢谢阅读。
最新评论
本站CDN与莫名CDN同款、亚太CDN、速度还不错,值得推荐。
感谢推荐我们公司产品、有什么活动会第一时间公布!
我在用这类站群服务器、还可以. 用很多年了。