- 浏览: 71475 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
Alex_Cheung:
对了,第二个没有提取码,请知悉。
一大波视频分享 -
Alex_Cheung:
谢谢分享。
一大波视频分享 -
Jiy:
很详细,谢谢分享
java并发之同步辅助类Phaser -
walle1027:
非常不错,学习了。
java并发之同步辅助类Phaser -
huangjinjin520:
somefuture 写道除了单词写错了 其他挺好的已更正
dubbo注解使用详解
在使用负载均衡的时候会遇到会话保持的问题,常用的方法有:
1.ip hash,根据客户端的IP,将请求分配到不同的服务器上
2.cookie,服务器给客户端下发一个cookie,具有特定cookie的请求会分配给它的发布者
注意:cookie需要浏览器支持,且有时候会泄露数据
1.Sticky工作原理:
Sticky是nginx的一个模块,它是基于cookie的一种nginx的负载均衡解决方案,通过分发和识别cookie,来使同一个客户端的请求落在同一台服务器上,默认标识名为route
(a)客户端首次发起访问请求,nginx接收后,发现请求头没有cookie,则以轮询方式将请求分发给后端服务器。
(b)后端服务器处理完请求,将响应数据返回给nginx。
(c)此时nginx生成带route的cookie,返回给客户端。route的值与后端服务器对应,可能是明文,也可能是md5、sha1等Hash值
(d)客户端接收请求,并保存带route的cookie。
(e)当客户端下一次发送请求时,会带上route,nginx根据接收到的cookie中的route值,转发给对应的后端服务器。
2.重新编译nginx增加nginx-sticky-module模块
查询bitbucket.org上的该模块相关文档
https://bitbucket.org/nginx-goodies/nginx-sticky-module-ng/overview
#查询当前的nginx编译参数可以使用以下命令:
/usr/local/nginx/sbin/nginx -V
[root@nginx ~]# mkdir -p /server/tools
[root@nginx ~]# cd /server/tools
[root@nginx tools]# /usr/local/nginx/sbin/nginx -V
nginx version: nginx/1.8.0
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC)
built with OpenSSL 1.0.1e-fips 11 Feb 2013
TLS SNI support enabled
configure arguments: --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module --with-http_ssl_module
#下载该模块的软件包()
#其他平台上的nginx-sticky-module模块包多是国外的资源的不方便下载,找到GITHUB上面的该软件包
[root@nginx tools]# wget https://bitbucket.org/nginx-goodies/nginx-sticky-module-ng/get/08a395c66e42.zip
#解压
[root@nginx tools]# unzip -D nginx-goodies-nginx-sticky-module-ng-08a395c66e42.zip
[root@nginx tools]# mv nginx-goodies-nginx-sticky-module-ng-08a395c66e42 nginx-sticky-module-ng
#备份之前的nginx目录(注意:nginx日志可能很大)
[root@nginx tools]# cp -rf /usr/local/nginx/ /server/backup/
#进入到之前编译好的nginx目录下,重新进行编译安装
# 注意:是覆盖安装
[root@nginx tools]# cd nginx-1.8.0
[root@nginx nginx-1.8.0]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module --with-http_ssl_module --add-module=/server/tools/nginx-sticky-module-ng
[root@nginx nginx-1.8.0]# make
[root@nginx nginx-1.8.0]# make install
#安装完再次查看nginx编译参数
[root@nginx tools]# /usr/local/nginx/sbin/nginx -V
nginx version: nginx/1.8.0
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC)
built with OpenSSL 1.0.1e-fips 11 Feb 2013
TLS SNI support enabled
configure arguments: --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module --with-http_ssl_module --add-module=/server/tools/nginx-sticky-module-ng
#需要重新启动nginx才可以使用sticky模块
[root@nginx tools]# service nginx restart
#编辑配置文件,实例:
upstream www_web_com {
#ip_hash;
sticky expires=1h domain=web.com path=/;
server 10.0.0.16:8080;
server 10.0.0.17:8080;
}
#具体的配置根据公司的相关业务配置即可
#之后打开网站进行测试,使用sticky的情况下,不管怎么刷新都是如下结果
#不使用Nginx sticky模块时,刷几次就变了(有时候刷一次,有时候多刷几次)
备注:每台后端真实服务器都会有一个唯一的route值,所以不管你真实服务器前端有几个装了sticky的nginx代理,他都是不会变化的.
3.sticky模块的使用
#位置:upstream标签内
upstream {
sticky;
server 127.0.0.1:9000;
server 127.0.0.1:9001;
server 127.0.0.1:9002;
}
#参数,解析
sticky [name=route] [domain=.foo.bar] [path=/] [expires=1h]
[hash=index|md5|sha1] [no_fallback] [secure] [httponly];
[name=route] 设置用来记录会话的cookie名称
[domain=.foo.bar] 设置cookie作用的域名
[path=/] 设置cookie作用的URL路径,默认根目录
[expires=1h] 设置cookie的生存期,默认不设置,浏览器关闭即失效,需要是大于1秒的值
[hash=index|md5|sha1] 设置cookie中服务器的标识是用明文还是使用md5值,默认使用md5
[no_fallback] 设置该项,当sticky的后端机器挂了以后,nginx返回502 (Bad Gateway or Proxy Error) ,而不转发到其他服务器,不建议设置
[secure] 设置启用安全的cookie,需要HTTPS支持
[httponly] 允许cookie不通过JS泄漏,没用过
4.其他的参数:语法:
以下内容摘录于:http://blog.csdn.net/yu870646595/article/details/52056340
session_sticky [cookie=name] [domain=your_domain] [path=your_path] [maxage=time][mode=insert|rewrite|prefix]
[option=indirect] [maxidle=time] [maxlife=time] [fallback=on|off] [hash=plain|md5]
mode设置cookie的模式:
insert:在回复中本模块通过Set-Cookie头直接插入相应名称的cookie。
prefix:不会生成新的cookie,但会在响应的cookie值前面加上特定的前缀,当浏览器带着这个有特定标识的cookie再次请求时,模块在传给后端服务前先删除加入的前缀,后端服务拿到的还是原来的cookie值,这些动作对后端透明。如:”Cookie: NAME=SRV~VALUE”。
rewrite: 使用服务端标识覆盖后端设置的用于session sticky的cookie。如果后端服务在响应头中没有设置该cookie,则认为该请求不需要进行session sticky,使用这种模式,后端服务可以控制哪些请求需要sesstion sticky,哪些请求不需要。
option设置用于session sticky的cookie的选项,可设置成indirect或direct。indirect不会将session sticky的cookie传送给后端服务,该cookie对后端应用完全透明。direct则与indirect相反。
maxidle设置session cookie的最长空闲的超时时间
maxlife设置session cookie的最长生存期
maxage是cookie的生存期。不设置时,浏览器或App关闭后就失效。下次启动时,又会随机分配后端服务器。所以如果希望该客户端的请求长期落在同一台后端服务器上,可以设置maxage。
hash不论是明文还是hash值,都有固定的数目。因为hash是server的标识,所以有多少个server,就有等同数量的hash值。
5.其他需要注意的
(a)同一客户端的请求,有可能落在不同的后端服务器上
如果客户端启动时同时发起多个请求。由于这些请求都没带cookie,所以服务器会随机选择后端服务器,返回不同的cookie。当这些请求中的最后一个请求返回时,客户端的cookie才会稳定下来,值以最后返回的cookie为准。
(b)cookie不一定生效
由于cookie最初由服务器端下发,如果客户端禁用cookie,则cookie不会生效。
(c)客户端可能不带cookie
Android客户端发送请求时,一般不会带上所有的cookie,需要明确指定哪些cookie会带上。如果希望用sticky做负载均衡,请对Android开发说加上cookie。
(d)cookie名称不要和业务使用的cookie重名。Sticky默认的cookie名称是route,可以改成任何值。
(e)客户端发的第一个请求是不带cookie的。服务器下发的cookie,在客户端下一次请求时才能生效。
(f)Nginx sticky模块不能与ip_hash同时使用
关注获取视频
1.ip hash,根据客户端的IP,将请求分配到不同的服务器上
2.cookie,服务器给客户端下发一个cookie,具有特定cookie的请求会分配给它的发布者
注意:cookie需要浏览器支持,且有时候会泄露数据
1.Sticky工作原理:
Sticky是nginx的一个模块,它是基于cookie的一种nginx的负载均衡解决方案,通过分发和识别cookie,来使同一个客户端的请求落在同一台服务器上,默认标识名为route
(a)客户端首次发起访问请求,nginx接收后,发现请求头没有cookie,则以轮询方式将请求分发给后端服务器。
(b)后端服务器处理完请求,将响应数据返回给nginx。
(c)此时nginx生成带route的cookie,返回给客户端。route的值与后端服务器对应,可能是明文,也可能是md5、sha1等Hash值
(d)客户端接收请求,并保存带route的cookie。
(e)当客户端下一次发送请求时,会带上route,nginx根据接收到的cookie中的route值,转发给对应的后端服务器。
2.重新编译nginx增加nginx-sticky-module模块
查询bitbucket.org上的该模块相关文档
https://bitbucket.org/nginx-goodies/nginx-sticky-module-ng/overview
#查询当前的nginx编译参数可以使用以下命令:
/usr/local/nginx/sbin/nginx -V
[root@nginx ~]# mkdir -p /server/tools
[root@nginx ~]# cd /server/tools
[root@nginx tools]# /usr/local/nginx/sbin/nginx -V
nginx version: nginx/1.8.0
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC)
built with OpenSSL 1.0.1e-fips 11 Feb 2013
TLS SNI support enabled
configure arguments: --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module --with-http_ssl_module
#下载该模块的软件包()
#其他平台上的nginx-sticky-module模块包多是国外的资源的不方便下载,找到GITHUB上面的该软件包
[root@nginx tools]# wget https://bitbucket.org/nginx-goodies/nginx-sticky-module-ng/get/08a395c66e42.zip
#解压
[root@nginx tools]# unzip -D nginx-goodies-nginx-sticky-module-ng-08a395c66e42.zip
[root@nginx tools]# mv nginx-goodies-nginx-sticky-module-ng-08a395c66e42 nginx-sticky-module-ng
#备份之前的nginx目录(注意:nginx日志可能很大)
[root@nginx tools]# cp -rf /usr/local/nginx/ /server/backup/
#进入到之前编译好的nginx目录下,重新进行编译安装
# 注意:是覆盖安装
[root@nginx tools]# cd nginx-1.8.0
[root@nginx nginx-1.8.0]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module --with-http_ssl_module --add-module=/server/tools/nginx-sticky-module-ng
[root@nginx nginx-1.8.0]# make
[root@nginx nginx-1.8.0]# make install
#安装完再次查看nginx编译参数
[root@nginx tools]# /usr/local/nginx/sbin/nginx -V
nginx version: nginx/1.8.0
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC)
built with OpenSSL 1.0.1e-fips 11 Feb 2013
TLS SNI support enabled
configure arguments: --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module --with-http_ssl_module --add-module=/server/tools/nginx-sticky-module-ng
#需要重新启动nginx才可以使用sticky模块
[root@nginx tools]# service nginx restart
#编辑配置文件,实例:
upstream www_web_com {
#ip_hash;
sticky expires=1h domain=web.com path=/;
server 10.0.0.16:8080;
server 10.0.0.17:8080;
}
#具体的配置根据公司的相关业务配置即可
#之后打开网站进行测试,使用sticky的情况下,不管怎么刷新都是如下结果
#不使用Nginx sticky模块时,刷几次就变了(有时候刷一次,有时候多刷几次)
备注:每台后端真实服务器都会有一个唯一的route值,所以不管你真实服务器前端有几个装了sticky的nginx代理,他都是不会变化的.
3.sticky模块的使用
#位置:upstream标签内
upstream {
sticky;
server 127.0.0.1:9000;
server 127.0.0.1:9001;
server 127.0.0.1:9002;
}
#参数,解析
sticky [name=route] [domain=.foo.bar] [path=/] [expires=1h]
[hash=index|md5|sha1] [no_fallback] [secure] [httponly];
[name=route] 设置用来记录会话的cookie名称
[domain=.foo.bar] 设置cookie作用的域名
[path=/] 设置cookie作用的URL路径,默认根目录
[expires=1h] 设置cookie的生存期,默认不设置,浏览器关闭即失效,需要是大于1秒的值
[hash=index|md5|sha1] 设置cookie中服务器的标识是用明文还是使用md5值,默认使用md5
[no_fallback] 设置该项,当sticky的后端机器挂了以后,nginx返回502 (Bad Gateway or Proxy Error) ,而不转发到其他服务器,不建议设置
[secure] 设置启用安全的cookie,需要HTTPS支持
[httponly] 允许cookie不通过JS泄漏,没用过
4.其他的参数:语法:
以下内容摘录于:http://blog.csdn.net/yu870646595/article/details/52056340
session_sticky [cookie=name] [domain=your_domain] [path=your_path] [maxage=time][mode=insert|rewrite|prefix]
[option=indirect] [maxidle=time] [maxlife=time] [fallback=on|off] [hash=plain|md5]
mode设置cookie的模式:
insert:在回复中本模块通过Set-Cookie头直接插入相应名称的cookie。
prefix:不会生成新的cookie,但会在响应的cookie值前面加上特定的前缀,当浏览器带着这个有特定标识的cookie再次请求时,模块在传给后端服务前先删除加入的前缀,后端服务拿到的还是原来的cookie值,这些动作对后端透明。如:”Cookie: NAME=SRV~VALUE”。
rewrite: 使用服务端标识覆盖后端设置的用于session sticky的cookie。如果后端服务在响应头中没有设置该cookie,则认为该请求不需要进行session sticky,使用这种模式,后端服务可以控制哪些请求需要sesstion sticky,哪些请求不需要。
option设置用于session sticky的cookie的选项,可设置成indirect或direct。indirect不会将session sticky的cookie传送给后端服务,该cookie对后端应用完全透明。direct则与indirect相反。
maxidle设置session cookie的最长空闲的超时时间
maxlife设置session cookie的最长生存期
maxage是cookie的生存期。不设置时,浏览器或App关闭后就失效。下次启动时,又会随机分配后端服务器。所以如果希望该客户端的请求长期落在同一台后端服务器上,可以设置maxage。
hash不论是明文还是hash值,都有固定的数目。因为hash是server的标识,所以有多少个server,就有等同数量的hash值。
5.其他需要注意的
(a)同一客户端的请求,有可能落在不同的后端服务器上
如果客户端启动时同时发起多个请求。由于这些请求都没带cookie,所以服务器会随机选择后端服务器,返回不同的cookie。当这些请求中的最后一个请求返回时,客户端的cookie才会稳定下来,值以最后返回的cookie为准。
(b)cookie不一定生效
由于cookie最初由服务器端下发,如果客户端禁用cookie,则cookie不会生效。
(c)客户端可能不带cookie
Android客户端发送请求时,一般不会带上所有的cookie,需要明确指定哪些cookie会带上。如果希望用sticky做负载均衡,请对Android开发说加上cookie。
(d)cookie名称不要和业务使用的cookie重名。Sticky默认的cookie名称是route,可以改成任何值。
(e)客户端发的第一个请求是不带cookie的。服务器下发的cookie,在客户端下一次请求时才能生效。
(f)Nginx sticky模块不能与ip_hash同时使用
关注获取视频
发表评论
-
一大波视频分享
2018-06-09 09:36 11421.ps 链接: https://pan.baidu ... -
利用Sharding-Jdbc实现分表
2018-05-24 22:32 3789你们团队使用SpringMVC+Spr ... -
MINA原理详解
2018-05-19 13:51 14881. 通过SocketConnector同服务器端建立连接 ... -
最近有人说我欺骗消费者,今天来一波视频分享
2018-05-12 21:00 1255最近有人说我欺骗消费者,今天来一波视频分享 dubbo入门 ... -
SVN多版本库环境的搭建
2018-05-02 21:00 1215一、 1、启动SVN sudo svn ... -
前端 Java Python等资源合集大放送
2018-04-21 22:11 698如果需要学习视频,欢 ... -
dubbo源码学习(四):暴露服务的过程
2018-04-14 11:38 980dubbo采用的nio异步的通信,通信协议默认为 netty, ... -
dubbo源码学习(四)初始化过程细节:解析服务
2018-04-12 20:32 616今天将真正去看dubbo内部的实现过程,看dubbo的源码前我 ... -
dubbo源码学习(二) : spring 自定义标签
2018-04-09 20:29 634做dubbo的配置时很容易发现,dubbo有一套自己的标签,提 ... -
Dubbo多注册中心和Zookeeper服务的迁移
2018-04-06 08:58 1506一、Dubbo多注册中心 1、 应用场景 例如阿里有些服务 ... -
dubbo源码学习一:基础知识及使用的相关技术
2018-04-05 20:10 691Dubbo是Alibaba开源的分布式服务框架,它最大的特点是 ... -
worker模式
2018-03-29 20:16 636今天来学学,大家也好对线程池有一个更好的理解。 public ... -
线程各种状态转移分析
2018-03-28 22:13 901线程在它的生命周期 ... -
生产者-消费者模式实现
2018-03-26 22:45 1161生产者是指:生产数据的线程 消费者是指:使用数据的线程 生产者 ... -
java并发之同步辅助类Phaser
2018-03-19 21:46 1106Phaser含义: 更加复杂和强大的同步辅助类。它允许并发执 ... -
java并发之同步辅助类CyclicBarrier
2018-03-18 20:13 834CyclicBarrier含义: 栅栏允许两个或者多个线程在 ... -
java并发之同步辅助类semaphore
2018-03-14 21:24 781semaphore(seməˌfôr)含义: 信号量就是可以 ... -
Tomcat 集群 文件上传下载的共享问题 NFS配置
2018-03-12 21:50 664Tomcat 集群时上传文件时如何使得多部tomcat中的文件 ... -
it技术谱图分享
2018-03-10 22:05 5181、程序开发语言综述 2、前端工程师必备技能 3、 ... -
捋一捋dubbo配置
2018-03-07 22:37 554配置类关系(Configuration Relation) ...
相关推荐
Sticky是nginx的一个模块,它是基于cookie的一种nginx的负载均衡解决方案,通过分发和识别cookie,来使同一个客户端的请求落在同一台服务器上,默认标识名为route (a)客户端首次发起访问请求,nginx接收后,发现...
在 `nginx-sticky-module-ng-1.2.6` 压缩包中,通常包含以下组件: 1. `src`: 这是源代码目录,包含了模块的核心代码,如 `ngx_http_sticky_module.c`,它是实现会话保持功能的主要源文件。 2. `config`: 配置脚本...
而 Nginx 的 sticky 模块是它的一个扩展,用于实现会话持久化,即在负载均衡环境中保持用户会话与特定后端服务器之间的关联,从而提高服务的连续性和响应速度。Nginx sticky module 1.1 是该模块的一个版本,下面...
目前的项目网站架构中使用了F5和nginx,F5用来做负载均衡,nginx只用作反向代理服务器。最近应客户的要求准备去掉F5...上网搜索了一番,知道了nginx-sticky-module这个第三方模块可以基于cookie实现会话保持,决定试试
mv nginx-sticky-module-1.1/ modules/ ``` 现在,你需要配置Nginx编译选项,将Sticky模块包含进来: ```bash ./configure --prefix=/usr/local/nginx \ --with-http_stub_status_module \ --with-...
`nginx-sticky-module-1.26` 是一个专为 Nginx 设计的负载均衡模块,它的主要功能是在负载均衡策略中保持客户端请求的会话持久性。这个模块在分布式系统中尤其有用,它可以确保来自同一客户端的多次请求被定向到同一...
因此,社区开发了更新的`nginx-goodies-nginx-sticky-module-ng`,以兼容最新的Nginx版本。这个模块的版本号为`08a395c66e42`,意味着它在不断地进行优化和改进,以适应不断变化的技术环境。 **会话持久化的重要性*...
1. **获取源码**:首先,从 GitHub 或其他来源下载 Nginx 的 sticky 模块源码,例如 `nginx-sticky-module-1.1`。 2. **安装依赖**:确保系统已经安装了编译 Nginx 所需的依赖,如 `pcre`、`openssl` 和 `zlib`。 3....
nginx反向代理负载均衡和session会话保持详细配置,附带必须软件包,nginx-sticky-module-1.1,nginx_upstream1.1,pcre-8.35, nginx-1.6.0, nginx_upstream_check_module-master
patch -p0 < ../nginx_upstream_check_module-master/nginx-sticky-module.patch cd ../ # 配置和编译 ./configure --user=root --prefix=/qhapp/nginx --with-http_ssl_module --with-http_stub_status_module --...
本文将深入探讨Nginx的Cookie模块,特别是`nginx-sticky-module-ng`,它是对原生Nginx功能的增强,帮助运维人员更灵活地管理会话。 ### 一、Cookie模块基础 Cookie是Web服务器在客户端存储的小型文本文件,通常...
“sticky模块”是Nginx的一个第三方模块,用于实现会话持久化。它使得来自同一客户端的请求总是被转发到同一台后端服务器,从而提高负载均衡的效率。安装步骤如下: 1. 获取源码:从Nginx的官方模块库或者第三方...
"nginx-sticky-module-ng.zip"提供会话持久化,使得特定用户连接始终被定向到同一台服务器,提高用户体验。 5. **配置Nginx**:编辑nginx.conf配置文件,设置负载均衡策略(如轮询、权重、最少连接数等),定义上游...
2. JVM-Remote 补丁:这是一个Nginx的扩展模块,允许基于Cookie的Session Sticky功能,保持用户的会话粘滞在同一台Tomcat服务器上。 接下来,按照以下步骤进行安装和配置: 1. 下载所需软件: - Nginx:访问...
2. 可选安装 nginx-sticky 模块,用于负载均衡时保持会话持久性: ``` [root@nginx src]# wget https://bitbucket.org/nginx-goodies/nginx-sticky-module-ng/get/master.tar.gz ``` 3. 可选安装 ngx_cache_purge ...
Nginx-sticky-module-ng是一个粘滞会话模块,它允许将用户请求定向到同一台后端服务器,以保持会话状态的一致性,这对于负载均衡中的会话持久化至关重要。而nginx_upstream_check_module则是健康检查模块,用于定期...
完成以上步骤后,Nginx将会根据客户端的Cookie信息将请求分发到相应的Tomcat实例,保证用户的会话状态在集群中的连续性。同时,通过负载均衡策略,可以有效地分散流量,提高系统的整体处理能力。如果需要调整负载...
同时,为了扩展功能,可以下载额外的模块,如`nginx_upstream_check_module`用于检查后端服务器状态,`nginx-goodies-nginx-sticky-module-ng`用于处理负载均衡中的会话粘滞性问题。 编译前,运行`./configure`...
Nginx可以配置成使用 sticky module 或者 upstream模块,通过特定的负载均衡策略,如IP哈希,确保来自同一用户的请求总是被转发到同一台Tomcat服务器。但这仅解决了部分问题,如果所有服务器需要共享Session数据,还...
会话管理器使用redis配置tomcat共享会话结构图分析分布式web server集群部署后需要实现session共享,针对 tomcat 服务器的实现方案多种多样,比如 tomcat cluster session 广播、nginx IP hash策略、nginx sticky ...