欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

keepalive生成的genhash相同的情况

程序员文章站 2022-05-07 16:28:24
...

最近遇到一个有趣的事情,在这里记录下来。

keepalive做LVS负载均衡。

截取部分架构图:

keepalive生成的genhash相同的情况
LVS做了负载均衡代理nginx。

其中nginx也做负载均衡,代理了tomcat,而且tomcat的资源还是NFS集中存储上的。

所以最后的结果就是配置keepalive时生成genhash是相同的,我又查了下genhash的信息,没有查到太多,多番研究后得出。

genhash这个工具生成的MD5校验和是根据server提供的页面来计算的,如果页面相同生成的MD5校验和也是相同的。

keepalive中的这个校验和是用来做健康检查的。最好不相同。

我的环境中用genhash生成的命令是这样写的

[aaa@qq.comlocalhost ~]#  genhash -s 172.16.12.122 -p 80 -u /index.html
MD5SUM = 95a9e38ed40ad581299005622d4963ec

[aaa@qq.comlocalhost ~]#  genhash -s 172.16.12.123 -p 80 -u /index.html
MD5SUM = 95a9e38ed40ad581299005622d4963ec
genhash	-S使用到远程服务器的ssl连接。
genhash	-s使用指定的远程服务器地址。
genhash	-p使用指定的远程服务器端口。
genhash	-u使用指定的远程服务器url。
genhash -V在GET查询中使用指定的virtualhost。
genhash	-v使用详细模式输出。
genhash	-h显示这个简短的内联帮助屏幕。
genhash	-r显示版本号

得到的校验和是一样的。

我就很懵逼了,因为index.html的内容不同啊。

-u又是URL ,实际的访问地址应该是 http://172.16.12.122/index.html。

我又访问测试了下,发现index.html页面的问题。

因为nginx里设置了转发,所有的请求都被转走了,-u index.html这个选项不生效。MD5 生成时访问到的还是NFS 集中存储上相同的页面,根本没访问index.html。

找到了原因就好解决了。
就增加一个nginx的访问供keepalive做健康检查用就行了

而且这个建议换个名字。不要用index。

server {
        listen       80;
        server_name  172.16.12.122;
        location /heal.html {
            root   /usr/local/nginx/html/;
            index  index.html index.htm heal.html;
        }
        location / {
            proxy_pass http://WebA;
            proxy_next_upstream http_500 http_502 http_503 error timeout invalid_header;
            include /usr/local/nginx/conf/proxy.conf;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
}

上边是我的这段,2个location/heal.html就是健康监测,生成MD5校验和用的。

heal.html要不一样生成的就不一样。这里边随便写点东西就好。

然后重新生成就ok了

[aaa@qq.comlocalhost ~]#  genhash -s 172.16.12.122 -p 80 -u /heal.html
MD5SUM = b451e0427af20e3ec419231ebdf40c4a

[aaa@qq.comlocalhost ~]#  genhash -s 172.16.12.123 -p 80 -u /heal.html
MD5SUM = 304193c30d5d188358e7786fb08c8858
相关标签: 集群