Nginx 负载均衡及其高可用

news/2024/7/10 2:59:46 标签: nginx, 负载均衡, 服务器

优质博文:IT-BLOG-CN

负载均衡(Load Balance): 意思就是分摊到多个操作单元上进行执行,例如Web服务器FTP服务器、企业关键应用服务器和其他任务服务器等,从而共同完成工作任务。负载均衡建立在现有的网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的宽带、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。

一、配置负载均衡

当网站访问量非常大时,一台服务器已经不够用了(因为网站越来越慢)。于是将相同的应用部署在多台服务器上,将大量用户的请求分配给多台机器处理。带来的好处是,其中一台服务器万一挂了,只要还有其他服务器正常运行,就不会影响用户使用。架构图:Web层的负载均衡通过Nginx来实现,服务层的负载均衡一般通过zookeeper来实现。

【1】配置conf/nginx.conf文件,将多个Tomcat地址配置在upstream属性中:

#可以用于配置负载均衡
upstream proxy_test {
	server 192.168.88.130:8080;
	server 192.168.88.130:8989;
}

server {
	listen       80;
	server_name  virtual.test.com;

	location / {
		#通过反向代理,将请求转发给配置的负载均衡
		proxy_pass   http://proxy_test;
		index  index.html;
	}
}

【2】通过访问http://virtual.test.com/虚拟域名(需要配置本机的HOSTS文件),测试Nginx负载均衡

● 第一次请求,结果展示:

● 第二次请求,结果展示:

二、属性值配置

配置中weightmax_failsfail_timeout等可选属性值配置

upstream proxy_test {
	server 192.168.88.130:8080 weight=1 max_fails=2 fail_timeout=10s;
	server 192.168.88.130:8989 weight=2 max_fails=2 fail_timeout=10s;
}

  ● weightweigth参数表示权值,权值越高被分配到的几率越大(例如:上述中的权重分配,通常访问8989两次后才会访问一次8080,从而实现对于性能好的服务器理应承担更多的压力)。
  ● max_failsfail_timeout:用于判断后端节点状态(例如:如上配置表明如果后端节点10秒内出现2次不可用情况,判定节点不可用。判定不可用后10秒内请求不会转发到此节点,直到10秒后重新检测节点健康情况)既在单位周期为fail_timeout设置的时间,中达到max_fails次数,这个周期次数内,如果后端同一个节点不可用,那么接将把节点标记为不可用,并等待下一个周期(同样时常为fail_timeout)再一次去请求,判断是否连接是否成功。如果成功,将恢复之前的轮询方式,如果不可用将在下一个周期(fail_timeout)再试一次。默认:fail_timeout10s,max_fails1次。在两个节点都可用的情况下,突然有一个节点挂掉,客户端请求过来后哪怕请求到了不可用的节点,此次请求也不会失败,因为Nginx会把此次请求转发到另外一个可用节点,再把结果返回给客户端。当一个节点挂掉,Nginx不知道节点是否恢复的时候,会把客户端的请求同时转发到两个节点,判断节点健康情况。

三、高可用

Nginx作为负载均衡器,所有的请求都到Nginx,可见Nginx处于非常重点的位置,如果Nginx服务器宕机后端web服务将无法提供服务,影响严重。

为了屏蔽负载均衡服务器的宕机,需要建立一个备份机。主服务器和备份机上都运行高可用Hight Availabillty监控系统,通过传送诸如 I am alive这样的信息来监控对方的运行状况。当备份机不能在一定的时间内收到这样的信息时,它就接管主服务器的服务IP并继续提供负载均衡服务;当备份管理器又从主服务器接收到I am alive这样的信息时,它就释放服务IP地址,这样主服务器就开始再次提供负载均衡服务。可以通过如下技术实现检测功能:

keepalived:用于集群管理,保证集群搞可用的一个服务软件,用来防止单点故障。Keepalived的作用是检测Web服务器的状态,如果有一台服务器死机或工作出现故障,Keepalived的作用是检测到,并将有故障的web服务器从系统中剔除,当web服务器正常工作后Keepalived自动将 web服务器加入到服务器群中,这些工作自动完成,无需人工干涉,需要人工做的是修复故障的web服务器keepalived是以VRRP协议为实现基础的,VRRP全称Virtual Router Redundancy Protocol,即虚拟路由冗余协议。虚拟路由冗余协议,可以认为是实现路由器高可用的协议,即将N台提供相同功能的路由器组成一个路由器组,这个组里面有一个master和多个backupmaster上面有一个对外提供服务的vipVIP = Virtual IPAddress,虚拟IP地址,该路由器所在局域网内其他机器的默认路由为该vip),master会发组播,当backup收不到VRRP包时就认为 master宕掉了,这时就需要根据VRRP的优先级来选举一个backupmaster。这样的话就可以保证路由器的高可用了。

keepalived主要有三个模块,分别是corecheckVRRPcore模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析。check负责健康检查,包括常见的各种检查方式。VRRP模块是来实现VRRP协议的。


http://www.niftyadmin.cn/n/183671.html

相关文章

机器学习算法 | 算法使用说明(Matlab)

基本介绍 涉及到BP分类代码的不支持2016版本,使用后错误率非常高,原因不详。回归:删除原始Excel表格内数据,将自己数据复制进去,最后一列为输出,其他列为输入即可。 分类:删除原始Excel表格内数据,将自己数据复制进去,最后一列为输出,其他列为输入即可。同时类别从1开…

python怎么自学

其实0基础选择python学习入行的不在少数,Python近段时间一直涨势迅猛,在各大编程排行榜中崭露头角,得益于它多功能性和简单易上手的特性,让它可以在很多不同的工作中发挥重大作用。 正因如此,目前几乎所有大中型互联网…

配置我自己的vim终端

zsh 可以先查看下系统当前 shell cat /etc/shells 安装zsh apt install zsh #安装zshchsh -s /bin/zsh #将zsh设置成默认shell(不设置的话启动zsh只有直接zsh命令即可)安装oh-my-zsh   事实上如果我们要是自己配置zsh的配置的话会比较麻烦&#xff…

electron+vue3全家桶+vite项目搭建【二】vite自动引入插件,按需引入element-plus

引入 demo项目地址 全局引入非常简单,这里不做详细介绍,咱们直接走按需引入 element-plus官网地址 1.安装依赖 element-plus相关依赖 npm install element-plus --savevite按需引入插件 npm install -D unplugin-vue-components unplugin-auto-im…

Github 突然无法推送代码的解决方案(REMOTE HOST IDENTIFICATION HAS CHANGED)

最近(2023-03-24 05:00 UTC) github 更改了 ssh rsa 主机密钥,具体见:We updated our RSA SSH host key,导致推送代码时报如下错误: WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! IT IS POSSIBLE…

ElasticSearch系列 - SpringBoot整合ES:映射中定义字段的数据类型及属性

文章目录01. ElasticSearch 搜索结果的准确性和召回率是什么?02. ElasticSearch 字段支持的数据类型有哪些?03. ElasticSearch 映射是什么?04. ElasticSearch 动态映射是什么?05. ElasticSearch 字段的属性有哪些?06. …

数据库主从配置

首先mysql的主从配置非常简单,不要怕错,勇敢尝试。 一、准备环境 搭建虚拟机环境,我在这里搭建了两个虚拟机centos7.6和centos7.6s,如何搭建虚拟机看这里:(3条消息) Oracle VM VirtualBox虚拟机运行LockyLinux_lockylinuc_CV猿码…

【开发】中间件——ElasticStack

Beats FileBeatMetricbeat KibanaLogstash ElasticStack 简介 ELK(旧称呼),由ElasticSearch、Logstash、Kibana组成,及新加入的Beats Beats 采集系统监控数据的代理,是在被监控服务器上以客户端形式运行的数据收集器的统称。可以直接把数据发送给Elas…