Osheep

时光不回头,当下最重要。

Nginx添加新模块sticky 1.1负载均衡会话粘贴模块


在Nginx服务器处理项目时,在弃用ip_hash后,我们选择了基于会话粘贴的sticky ,这样能够实现真正意义上的负载。


安装环境及软件版本
系统版本:CentOS 6.5_X64
Nginx版本:1.8.0
nginx-sticky-module版本:1.1

1.下载地址:

http://code.google.com/p/nginx-sticky-module/downloads/list
目前共有2个版本,一个是1.0,一个是1.1,1.0已经寿终正寝了.1.1增加了权重的参数.

2.查看nginx编译安装时的命令,安装了哪些模块

/mnt/nginx/sbin/nginx -V

3.加入需要安装的模块,重新编译

./configure –prefix=/mnt/nginx –with-http_ssl_module –with-http_spdy_module –with-http_stub_status_module –with-pcre –with-http_realip_module –add-module=../nginx-sticky-module-1.1


提示:如果有显示ERROR提示,请看这里

错误信息如下:

/tmp/soft/nginx-sticky-module-1.1/ngx_http_sticky_misc.c:281: error: too few arg
uments to function ‘ngx_sock_ntop’
make[1]: *** [objs/addon/nginx-sticky-module-1.1/ngx_http_sticky_misc.o] Error 1
make[1]: Leaving directory `/mnt/softwares/nginx-1.8.0′
make: *** [build] Error 2

处理办法:
根据资料把ngx_http_sticky_misc.c 的281行修改如下即可解决问题
原digest->len = ngx_sock_ntop(in,digest
        ->data, len, 1);
改后digest->len = ngx_sock_ntop(in,sizeof(struct sockaddr_in),digest
        ->data, len, 1);


4.进行编译

make,不要make install会覆盖


5.替换nginx二进制文件:

cp /mnt/nginx/sbin/nginx /mnt/nginx/sbin/nginx.bak    #复制备份
rm -rf /mnt/nginx/sbin/nginx    #删除启动文件
cp ./objs/nginx /mnt/nginx/sbin/   #将新编译的启动文件复制到原来的位置

6.配置nginx sticky

nginx 的upstream使用sticky,如下
upstream cluster_test {
     sticky;
     server 192.168.100.209:80;
     server 192.168.100.225:80;
}

相关:
nginx sticky其他语法
sticky [name=route] [domain=.foo.bar] [path=/] [expires=1h] [hash=index|md5|sha1] [no_fallback];
name: 可以为任何的string字符,默认是route
domain:哪些域名下可以使用这个cookie
path:哪些路径对启用sticky,例如path/test,那么只有test这个目录才会使用sticky做负载均衡
expires:cookie过期时间,默认浏览器关闭就过期,也就是会话方式。
no_fallbackup:如果设置了这个,cookie对应的服务器宕机了,那么将会返回502(bad gateway 或者 proxy error),建议不启用

nginx sticky expires用法
upstream cluster_test {
     sticky expires=1h;
     server 192.168.100.209:80;
     server 192.168.100.225:80;
}
启用了过期,cookie 1个小时才过期

7.重启nginx

service nginx restart


点赞