目录
Nginx和Sticky介绍
编译安装sticky的nginx环境
安装过程碰到的问题和编译安装过程遇到的错误:
(1)第一个错误:修改源代码ngx_http_sticky_module.c
(2)第二个错误:修改源代码ngx_http_sticky_misc.c
解决完以上两个错误,最后执行./configure --add-module=../nginx-sticky-module-ng && make && sudo make install,总算成功了
nginx配置脚本(仅供参考)
Nginx和Sticky介绍
Nginx具有负载均衡的功能,纯 ip_hash 像局域网内的访问ip访问会导致ip倾斜 ,cookie_hash服务器给客户端下发一个cookie,具有特定cookie的请求会分配给它的发布者,cookie需要浏览器支持。
nginx在会话保持这方面比较弱,用ip_hash做会话保持有很大的缺陷,它是通过客户端ip来实现,根据访问ip的hash结果分配请求到后端的app服务器,负载不会很均匀。nginx-sticky-module这个第三方模块可以基于cookie实现会话保持。
nginx-sticky-module模块是nginx实现负载均衡的一种方案,和ip_hash负载均衡算法会有区别的ip_hash 根据客户端ip将请求分配到不同的服务器上.
sticky 根据服务器个客户端的cookie,客户端再次请求是会带上此cookie,nginx会把有次cookie的请求转发到颁发cookie的服务器上.
编译安装sticky的nginx环境
(1)nginx版本:1.25.0
(2)sticky模块源码:git clone https://bitbucket.org/nginx-goodies/nginx-sticky-module-ng.git
cd /k8s-deploy
git clone https://bitbucket.org/nginx-goodies/nginx-sticky-module-ng.git
cd /k8s-deploy/nginx-1.25.0
./configure --add-module=../nginx-sticky-module-ng
make && sudo make install
./configure --add-module=../nginx-sticky-module-ng
安装过程碰到的问题和编译安装过程遇到的错误:
make && sudo make install
(1)第一个错误:修改源代码ngx_http_sticky_module.c
执行命令:
cd /k8s-deploy/nginx-sticky-module-ng sed -i "s/ngx_http_parse_multi_header_lines.*/ngx_http_parse_multi_header_lines(r, r->headers_in.cookie, \&iphp->sticky_conf->cookie_name, \&route) != NULL){/g" ngx_http_sticky_module.c
(2)第二个错误:修改源代码ngx_http_sticky_misc.c
找到ngx_http_sticky_misc.c,增加两个库:
#include <openssl/sha.h>
#include <openssl/md5.h>cd /k8s-deploy/nginx-sticky-module-ng vim ngx_http_sticky_misc.c # 增加声明,引入两个头文件,最后保存,如截图所示 #include <openssl/sha.h> #include <openssl/md5.h> :wq
解决完以上两个错误,最后执行./configure --add-module=../nginx-sticky-module-ng && make && sudo make install,总算成功了
nginx配置脚本(仅供参考)
upstream iphashserver {
#ip_hash;sticky;
server 127.0.0.1:8071;
server 127.0.0.1:8072;
}server {
listen 8000;
server_name localhost;location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection upgrade;proxy_connect_timeout 7200;
proxy_read_timeout 7200;
proxy_send_timeout 7200;add_header 'Access-Control-Allow-Origin' *;
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Access-Control-Allow-Methods' *;
add_header 'Access-Control-Allow-Headers' *;
proxy_pass http://iphashserver;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}