接上回,自从搭建起副本集之后,很嗨,再也不担心单机挂了之后数据丢失了。应用往MongoDB副本集写也做了相应配置。
在做nginx读取MongoDB副本集数据测试中,发现了新问题
按照 https://github.com/mdirolf/nginx-gridfs 中连接副本集的配置例子,如下:
1 | location /gridfs/ { |
在主节点关闭后,其设置的第二个节点是不起作用的(我设置了五个,均不起作用,nginx读取MongoDB节点中的文件报错)
由此可见nginx-gridfs插件这里是有问题的,但是我们的web服务器已经在使用了这个插件,不能轻易更换,只能另寻他法。
经过测试,发现副本集在原主节点挂掉后,余下节点(包括新选举的主节点和从节点)都可以使用直连模式来读取文件。
于是一个大胆的想法浮现了,何不在nginx和副本集之间加个负载均衡器? 嗯,我选了HAproxy。
HAproxy的介绍百度一大堆,我就不重复了,直接上配置文件(部分以变量代替)
1 | global |
上了之后,问题解决,哈哈哈哈哈。。。。。。。。。。。。。。。。。
总结
- 如果用HAproxy转发HTTP连接,须考虑Linux的open files限制,如果是tcp的代理,可以忽略,其在内核就完成转发了。
- 多看官方文档。
- 任何解决方案都要考虑业务场景的真实需求。
- 这里因为对从节点的数据实时性要求不是即时同步,首要需求是数据的多份拷贝的完整性和服务的高可用。