nginx 负载均衡之 ngx_http_upstream_hash_module

2024-04-04 13:32

本文主要是介绍nginx 负载均衡之 ngx_http_upstream_hash_module,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

nginx的upstream模块可以定义后端负载集群,负载的分配方式也有好几种,比如 ip_hash,RR,weight,url_hash,fair等。如果后端集群session不共享的 话,ip_hash,RR,weight,fair等负载均衡方式都将不适用,唯一可用的就是url_hash了。

要用url_hash需要安装第三方模块ngx_http_upstream_hash_module 。安装以及配置方法点击超链接即可。我这里主要介绍如何利用ngx_http_upstream_hash_module对session不共享的集群如何做负载均衡。

upstream的配置如下:

upstream pool1 {
hash   $cookie_jsessionid;
server server1:80;
server server2:80;
server server3:80;
hash_again 1;
}

为了保障同一个用户始终分配到同一个后端服务器,我们需要找到能唯一标示用户的标志,毫无疑问,非sessionid莫属了哈哈。因为服务器端也是 根据sessionid区分唯一用户的。所以我们hash用的变量是$cookie_jsessionid 。那么hash_again是什么意思呢?顾名思义hash_again就是再做一次hash的意思,那么什么情况下再做一次hash呢?为什么要再做一 次hash呢?我们配上access_log来看看nginx都做了些什么。

access_log格式配置如下:

log_format  main  ‘$remote_addr – $remote_user [$time_local] “$request” ‘
‘$status $body_bytes_sent ‘
‘”$http_user_agent” “$http_x_forwarded_for”‘
‘”$upstream_addr” “$upstream_cache_status” “$upstream_status” “$upstream_response_time” “$cookie_jsessionid“‘;

我们主要看upstream_addr、upsteam_status和cookie_jsessionid

首先我们访问下index.jsp,日志如下:

123.127.98.133 – - [02/Jul/2011:19:31:42 +0800] “GET /reg/register.jsp HTTP/1.1″ 200 14540 “Mozilla/5.0 (Windows NT 5.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1″ “-”"server1:80” “-” “200” “0.017″ “-

此时访问的是server1 sessionid居然为空!其实也可以理解第一次访问时确实木有sessionid,因为sessionid是服务器端生成后写到浏览器的cookie 里的,所以第一次访问肯定没有sessionid了。这样一来,我们可以推测所有用户的第一次请求都是发给同一台后端服务器的。这样的话如果恰好宕机的是 负责处理第一次用户的请求的服务器的话,那么所有的新访问的用户都将无法访问。

F5刷新页面:

123.127.98.133 – - [02/Jul/2011:19:31:46 +0800] “GET http://abc.efg.com/index.jsp” 200 8920 “Mozilla/5.0 (Windows NT 5.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1″ “-”"server2:80” “-” “200” “0.002″ “abcC8pjNRr3jGbAWKNQdt

有sessionid了,而且请求被重新分配到了server2了,而且之后用户所有的操作都分配到了server2。这个时候我们停掉server2,再次F5刷新页面。日志出如下:

123.127.98.133 – - [02/Jul/2011:19:33:08 +0800] “GET http://abc.efg.com/index.jsp” 200 14540 ” “Mozilla/5.0 (Windows NT 5.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1″ “-”"server2:80, server1:80” “-” “502, 200” “0.002, 0.015″ “abcC8pjNRr3jGbAWKNQdt

此时虽然我们已经停掉了server2但是我们仍然可以打开页面,为嘛?!此时hash_again大发神威了,此时我们可以从日志里看到 server2返回502,server1返回200。也就是说nginx请求server2是发现,靠!server2挂了,于是基于原来得到的 hash值再次进行hash,从而将请求发往了另外一台机器server1。之后所有的请求也都是这样,先请求server2,server2不可用,重 新hash,访问server1。那么hash_again=2时代表什么了?如果按照我们的配置hash_again=1,那么当server2和 server1都蛋掉,但是server3可用。用户请求时仍然会无法访问。如果我们改成hash_again=2,那么nginx会进行两次hash尝 试,尝试访问后端其他可以用的机器。也就是说hash_again的值越大,整个系统的可用性就越高。


这篇关于nginx 负载均衡之 ngx_http_upstream_hash_module的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/875908

相关文章

C++ HTTP框架推荐(特点及优势)

《C++HTTP框架推荐(特点及优势)》:本文主要介绍C++HTTP框架推荐的相关资料,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. Crow2. Drogon3. Pistache4. cpp-httplib5. Beast (Boos

Nginx 413修改上传文件大小限制的方法详解

《Nginx413修改上传文件大小限制的方法详解》在使用Nginx作为Web服务器时,有时会遇到客户端尝试上传大文件时返回​​413RequestEntityTooLarge​​... 目录1. 理解 ​​413 Request Entity Too Large​​ 错误2. 修改 Nginx 配置2.1

Web技术与Nginx网站环境部署教程

《Web技术与Nginx网站环境部署教程》:本文主要介绍Web技术与Nginx网站环境部署教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、Web基础1.域名系统DNS2.Hosts文件3.DNS4.域名注册二.网页与html1.网页概述2.HTML概述3.

NGINX 配置内网访问的实现步骤

《NGINX配置内网访问的实现步骤》本文主要介绍了NGINX配置内网访问的实现步骤,Nginx的geo模块限制域名访问权限,仅允许内网/办公室IP访问,具有一定的参考价值,感兴趣的可以了解一下... 目录需求1. geo 模块配置2. 访问控制判断3. 错误页面配置4. 一个完整的配置参考文档需求我们有一

使用Nginx配置文件服务器方式

《使用Nginx配置文件服务器方式》:本文主要介绍使用Nginx配置文件服务器方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 为什么选择 Nginx 作为文件服务器?2. 环境准备3. 配置 Nginx 文件服务器4. 将文件放入服务器目录5. 启动 N

Nginx路由匹配规则及优先级详解

《Nginx路由匹配规则及优先级详解》Nginx作为一个高性能的Web服务器和反向代理服务器,广泛用于负载均衡、请求转发等场景,在配置Nginx时,路由匹配规则是非常重要的概念,本文将详细介绍Ngin... 目录引言一、 Nginx的路由匹配规则概述二、 Nginx的路由匹配规则类型2.1 精确匹配(=)2

Nginx使用Keepalived部署web集群(高可用高性能负载均衡)实战案例

《Nginx使用Keepalived部署web集群(高可用高性能负载均衡)实战案例》本文介绍Nginx+Keepalived实现Web集群高可用负载均衡的部署与测试,涵盖架构设计、环境配置、健康检查、... 目录前言一、架构设计二、环境准备三、案例部署配置 前端 Keepalived配置 前端 Nginx

SpringBoot中HTTP连接池的配置与优化

《SpringBoot中HTTP连接池的配置与优化》这篇文章主要为大家详细介绍了SpringBoot中HTTP连接池的配置与优化的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录一、HTTP连接池的核心价值二、Spring Boot集成方案方案1:Apache HttpCl

Nginx 访问 /root/下 403 Forbidden问题解决

《Nginx访问/root/下403Forbidden问题解决》在使用Nginx作为Web服务器时,可能会遇到403Forbidden错误,文中通过示例代码介绍的非常详细,对大家的学习或者工作... 目录解决 Nginx 访问 /root/test/1.html 403 Forbidden 问题问题复现Ng

Nginx部署React项目时重定向循环问题的解决方案

《Nginx部署React项目时重定向循环问题的解决方案》Nginx在处理React项目请求时出现重定向循环,通常是由于`try_files`配置错误或`root`路径配置不当导致的,本文给大家详细介... 目录问题原因1. try_files 配置错误2. root 路径错误解决方法1. 检查 try_f