etcd出问题导致整个集群不可用是很常见的事情,通常会发生这种事是因为数据不一致导致的,而解决方案往往都是通过删除掉不一致的数据或直接使用快照来恢复原本正常的数据。下面直接介绍各种问题及其解决方案:
问题1:集群id不匹配?
图示:
分析:是因为集群节点中data_dir(这个是配置文件中的参数,指定etcd节点工作时日志和快照的保存位置,etcd当前的工作目录也在这里)中的集群数据不一致导致的,只需要将该目录删除即可。
---------但请注意,etcd数据库中存储的数据都以db文件的形式存储在这个目录下(还有日志、快照等文件)如果直接将该目录删除,则数据库中的数据会全被删除干净。虽然将所有节点中的数据删除干净之后就不存在数据不一致,etcd集群也可以恢复正常,但原本的数据却不见了(因为此时相当于建立了一个新的etcd集群)。因此删除data_dir的方法要慎用,除非etcd在使用过程中你有意识地进行etcd数据的额外备份。这样一来即使data_dir被删除了,我们依然可以使用备份文件进行数据恢复(也就是在新etcd集群中恢复原本的数据)
提示:删除data_dir的方法基本是修复etcd集群最通用的方法,因为相当于清掉之前的数据,重新建立起一个新的etcd集群。但如果集群中的数据很重要,则只能另寻他径了。除非你有做额外的数据备