kubernetes - etcd 可以检测问题并为其他集群选举领导者吗?
问题描述
据我所知,etcd
使用 Raft 作为共识和领导者选择算法来维护一个领导者,该领导者负责使节点集合与集群etcd
内的数据变化保持同步。etcd
除其他外,这允许从运行etcd
的集群中的节点故障中恢复etcd
。
但是如何etcd
管理其他集群,即除了etcd
运行的集群之外的集群?
例如,假设我们有一个etcd
集群和一个由主(读写)节点和(只读)副本组成的数据库(例如 MySQL 或 Redis)集群。可以etcd
管理此其他集群的节点角色吗?
进一步来说:
是否可以为正在运行的集群以外的集群
etcd
选择领导者并将该信息提供给其他集群和节点?etcd
为了使这一点更具体,使用上面的示例,假设上面示例中提到的 MySQL 数据库集群中的主节点出现故障。再次注意,MySQL 数据库的主服务器和副本运行在与运行和托管
etcd
数据的节点不同的集群上。是否
etcd
提供了在集群上检测这种类型的节点故障而不是etcd
自动检测的功能?如果是,这在实践中是如何完成的?(例如 MySQL DB 或任何其他节点可以承担不同角色的集群)。检测到这样的故障后,是否可以
etcd
在这个单独的集群中重新安排节点角色(即指定新的master和replica),是否也使用Raft的leader选择算法呢?一旦这样做了,是否还
etcd
可以通知依赖于该数据库的客户端(应用程序)节点并进行相应的配置?最后,以上任何一项都需要Kubernetes吗?还是可以
etcd
自己管理外部集群?
如果有帮助,这里是 Zookeper 的一个类似问题。
解决方案
etcd 的 master 选举严格来说是为了选举 etcd 本身的领导者。
然而,其他集群可以使用分布式强一致性键值存储(例如 etcd)来实现自己的故障检测、领导者选举并允许该集群的客户端做出响应。
Etcd 不管理自己的集群以外的集群。这不是神奇的酱汁。
如果你想使用 etcd 来管理一个 mysql 集群,你需要一个组件来管理 mysql 节点并将集群状态存储在 etcd 中。客户端可以观察该集群状态的变化并进行调整。
推荐阅读
- javascript - Vue/nuxt - 如何从子组件访问父级引用
- jquery - 如何在另一个具有多个 contentEditable div 的 div 中识别活动的 contentEditable div
- reactjs - antd表格排序忽略children
- c# - 从 Prefab 中的 Sprite 获取 Animator (Unity)
- c# - 过滤不包含所有类型元素的组的有效方法
- java - How to re-ask the user to enter Yes or No?
- c++ - OpenGl transparency not working despite setting up blend function
- python-3.x - Binance API data user stream not receiving any data
- java - 如何在我的 Java 代码中替换递归?
- prometheus - How to set a retention time for Pushgateway for metrics to expire?