我有一个Elasticache redis集群设置,其中包含1个主服务器和3个从属服务器。我们使用群集端点(这是主机的别名)连接到主机,并使用节点端点连接到从机。每当发生故障转移时,别名都会更改为指向最新的主服务器。
最近一次这样的故障转移期间(由于主服务器关闭),别名已更新,但Nginx仍在尝试连接到旧的主服务器。即使对旧版主机的请求已超时,但Nginx仍继续尝试击中旧版主机进行书写。
在2.5小时后,旧的主节点(现在是从节点)启动后,nginx尝试在其上进行写操作,由于我们在Elasticache中设置了“ close-on-slave-write”,因此连接已关闭。 / p>
以下是我对nginx设置的摘要,我们将redis2-nginx-module用作OpenResty中的redis模块。
keepalive_timeout 240;
redis2_read_timeout 5s;
redis2_connect_timeout 30s;
upstream redis_master_prod {
server <<cluster_endpoint>> max_fails=0;
# a pool with at most 600 connections
# and do not distinguish the servers:
keepalive 600;
}
我的问题是If the requests were timing out, why wasn't the keep-alived connection closed immediately?