Hi,春哥:
先说下需求。
我想根据用户请求url一致性哈希到后端缓存,后端使用多个redis实例,后端redis实例的需要健康检查,当某个redis挂掉或有新redis加入时,一致性哈希算法自动感知。
我的做法:
一致性哈希使用lua-resty-balancer;
健康检查使用了lua-upstream-nginx-module + lua-resty-upstream-healthcheck;
(lua-resty-upstream-healthcheck只支持http,做了redis的检查扩展)
在healthcheck模块中,当发现peer_fail的时候,将对应server删除(调用lua-resty-balancer的delete接口);
当发现peer_ok的时候,重新加入server(调用lua-resty-balancer的set接口)。
问题:
测试发现,挂掉的redis健康检查可以自动发现,但是一致性哈希还是会将请求哈希到挂掉的redis上(调用lua-resty-balancer的find接口)。
另外,存储redis的server和lua-resty-balancer实例,是用来官方示例的方法package.loaded.*,根据healthcheck的结果动态更新。
请问,这是问题是我用法不对,还是lua-resty-balancer模块有问题?