projecteru / redis-cerberus

Redis Cluster Proxy
MIT License
352 stars 82 forks source link

关于rw模式 #27

Closed jasonjoo2010 closed 8 years ago

jasonjoo2010 commented 8 years ago

请教关于rw模式下的规则问题:

一年之前check的代码,在rw模式下均是只走master,我们自己增加的写M读所有MS 现在看到又有不少更新,正在研究追代码,请问现在官方版还是读写只走M的模式吗?考虑是什么??

多谢回答

zheplusplus commented 8 years ago

谢谢提问.

现在 master 上发布的版本如果没有设置 read-slave yes, 请求均会发送至集群中的主节点.

并没有实现读写分离的计划, 也没有继续添加新功能的打算. 由于很多客户端和应用程序库已经提供集群支持, 建议应用程序在使用 Redis 集群时直接连接 Redis.

如果有兴趣添加相关的功能, 欢迎提交 PR. 如果对 C++ 不熟悉, 可以使用 "饿了么" 的 C 实现的代理程序. https://github.com/eleme/corvus

jasonjoo2010 commented 8 years ago

感谢回复。

提问的主要目的是想要了解下是否有在考虑时或尝试时遇到了性能或实现性的问题,有没有坑,如果如想象中那样我也很愿意完善这个patch来实现这个功能,之前主要是支持了单个读命令的均布。

之前没有在前面继续加一层,一是为了稳定性,二是为了效率,毕竟多一层多一个故障点,多一倍流量。

zheplusplus commented 8 years ago

@jasonjoo2010 我们生产环境中的策略是, 如果使用代理而非直连的程序, 用内网 dns 解析到多个不同地址的代理 (端口号须保持一致), 这样比较方便水平扩展, 也兼顾一定程度的稳定性 (一个地址失败而重试连接可能解析到其他正常运行的代理地址). 并没有前端再添加如 HAProxy 这样的程序.

jasonjoo2010 commented 8 years ago

@neuront 你讲的这个是proxy的高可用实现,我们考虑这个的原因是平时我们是一组三节点(1Master-2Slaves)为单位组成多组的cluster,使用时只消费了各组Master的CPU资源比较浪费,所以才考虑集成读写分离。 那你们是在应用端做的读写分离到不同的proxy?

zheplusplus commented 8 years ago

@jasonjoo2010 是的. 配两个端口 :cold_sweat:

jasonjoo2010 commented 8 years ago

了解,多谢 @neuront 耐心解答 我们也在研究下是不是继续打读写分离的补丁~

jasonjoo2010 commented 8 years ago

另外如果是只读proxy的话,目前好像没做随机选slave?在我们的多从架构里如果建立只读proxy的话,好像也得需要做一下重排均布负载

jasonjoo2010 commented 8 years ago

不过缺点是会增加连接重连,这个可以通过启动的种子数来固定解决单实例的稳定性

zheplusplus commented 8 years ago

没有随机 slave, 根据 cluster nodes 拿到的结果固定去选. 只有个 read-slave-filter 按照地址前缀来区分, 这个需求还是因为弊厂有跨机房 redis 集群的原因...

jasonjoo2010 commented 8 years ago

恩明白了,多谢 @neuront

wooparadog commented 8 years ago

@jasonjoo2010 corvus 刚刚实现了读写分离的实现. 现在是在配置文件中制定后, 会将读流量全部转到 slave 中.

https://github.com/eleme/corvus/pull/59/files

edit: 我们会在近期测试通过后合入 master. 现在我们的线上版本是 0.2.2.