Comments (4)
问题描述:redis在集群工作时,一个从节点发现自己的主节点进入下线状态时将进行故障转移。故障转移即是发生故障主节点的所有从节点进行选主(Raft算法领头选举)。您是觉得对于部署在和主节点不同机房的从节点被选中后跨机房通信会对性能有影响是吧。
对于这个问题一个方面是避免跨机房的节点发起选举,另一方面,跨机房部署cluster可能会有潜在不稳定因素(比如机房间网络波动)导致集群发生不正确的跨机房切换。
所以dc-id的最大作用是防止自动的机房切换,做到一种隔离或者说剥夺了发起选举的权利,个人觉得dc-id只是一个不是特别抽象名字。
延伸:其实我觉得redis cluster对于用户来说最大的问题是运维问题,过于“自动化”,对人工干预不友好,这也是好多用户不敢用的原因。
我持相反观点,对于上规模的环境来说,自动化可以大大减轻运维压力,很多人害怕自动化,可能是缺少足够的了解,redis cluster中对于人工干预几乎都可以使用命令来实现,你在用途中提到
人为干预转移整个集群到另一个机房(实现集群的平移)
如果只是搬迁集群的话我们只需要 :
- 跨机房添加从节点
- 手动在需要成为新主节点的node上执行failover命令
- 切换完,删除之前机房节点
这个步骤中其实没有依赖dc_id功能,需要dc_id的主要是机房切换,这个是公司决策需要(因为某种原因,需要立即切走) ,所以跨机房部署本身只是一种容灾。
回到前面的问题。
对人工干预不友好
这个我觉得并不存在,前面也提到可以手动failover。
实际上cluster 自动failover流程主要几步
- slave发现master pfail->fail
- 发起投票
- 赢得选举,成为新master
手动failover 其实就是直接开始介入 step 2,并没有特别神秘的地方
确实相比于其他一些(也许更加暴力)的切换方式来说,操作者可能缺少信心
redis自带机制可以让master将尚未复制到slave上的log复制完成之后在开始切换,恰恰保证了数据安全。
写在最后
其实多机房只是一个功能,背后其实问题在于失效判定。
redis cluster的失效判定和redis sentinel 其实很近。他的正确性取决于支撑的理论基础和工程实现正确性。很多人看到这个会有种恐惧,从而选择一些 ‘土方子’ 来实现,但实际上很多实现其实是存在缺陷或者说并不可靠。
高度的自动化确实让人觉得无法把控,在多机房部署问题上确实存在,所以多数据中心标签功能算是一种对于现实的一种妥协,用手动代替自动,最终构成 机房内自动切换+机房间手动切换容灾 的功能。
以上仅代表个人观点,欢迎探讨~
手动at一下作者吧 @JingchengLi
from swapdb.
这块的实现是按照redis作者antirez的想法实现的,可以参考:
redis/redis#2458
相关的PR为:
redis/redis#3363
另外,datacenter-id中的datacenter只是一个名称而已,按你的例子,在实际配置时,也可以将相同交换机下面的机器配置为相同的datacenter-id。
实际上,这个多机房支持的功能要解决的问题就是redis cluster“过于”自动化的问题,因为机房间的脑裂问题一旦发生,那结果可能是灾难性的。通过这个PR,就可以实现A机房节点提供服务,而B机房节点只作为从节点进行实时同步,并且B机房节点不参与自动failover。只在有必要时(A机房维护/断电),才通过运维组件将服务切换到B机房。
from swapdb.
@zts1993 相同观点的略过了哈
- 人工干预是否友好问题
回到前面的问题。
对人工干预不友好
这个我觉得并不存在,前面也提到可以手动failover。
这个观点不赞同,可以手动failover不代表就“友好”了,此项目增加配置项datacenter-id就是解决人工干预不友好的一个例子么?当然“友好”也没有什么标准,仁者见仁吧,只是表达一下看法而已。
2. redis cluster是否应该给用户进行人工干预的更多选项(配置)问题
我持相反观点,对于上规模的环境来说,自动化可以大大减轻运维压力,很多人害怕自动化,可能是缺少足够的了解,redis cluster中对于人工干预几乎都可以使用命令来实现
redis cluster的失效判定和redis sentinel 其实很近。他的正确性取决于支撑的理论基础和工程实现正确性。很多人看到这个会有种恐惧,从而选择一些 ‘土方子’ 来实现,但实际上很多实现其实是存在缺陷或者说并不可靠。
你的这些意见我都不太赞同,其实用户不是害怕自动化,而是害怕不可靠的自动化,用户也不是不了解,而是由于缺少进行人工干预选项而使得用户不放心而害怕。redis cluster如果不深入分析用户的需求和痛点而一概说用户不足够了解,会在“开始”就被“恐惧”的用户所抛弃。自动化运维好处众多,也需要一步一步过度,拔苗助长会适得其反。用户也有既可以使用“人工干预”也可以使用“自动化”的权利。
个人观点,期待反馈~
from swapdb.
此项目增加配置项datacenter-id就是解决人工干预不友好的一个例
用户也有既可以使用“人工干预”也可以使用“自动化”的权利。
我觉现在就是可以使用“人工干预”也可以使用“自动化”的,但是我感觉您的意思是: cluster 既要支持自动切换也要可以同时支持完全手动切换? (或者说手动切换在特殊情况下作为一种降级模式)?
可以展开说下人工干预友好可以举个例子么?
或者说,人工干预=类似手动模式,不知道这个理解有没有偏差?
from swapdb.
Related Issues (8)
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from swapdb.