etcd常见问题解决方案

      etcd出问题导致整个集群不可用是很常见的事情,通常会发生这种事是因为数据不一致导致的,而解决方案往往都是通过删除掉不一致的数据或直接使用快照来恢复原本正常的数据。下面直接介绍各种问题及其解决方案:

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

问题2:删除data_dir目录时报只读文件系统的错误?
图示etcd常见问题解决方案_第2张图片
分析:原本这个节点是可读可写的,但不知道什么原因变成了只读文件系统。这个时候可以先尝试用reboot命令重启一下这个节点,一般重启之后就正常了。但如果重启之后无法解决问题,则需要使用mount命令查看一下当前挂载的分区,如下图:etcd常见问题解决方案_第3张图片
括号中的rw即表示是可读可写的,如果出现有ro的则表示该设备是只读的,可以尝试使用umount命令先将该设备卸载,然后再使用mount进行挂载。
提示:如果卸载的时候提示“device is busy”则说明该设备正在被使用,需要先终止使用该设备的进程,可以通过fuser -m 设备(就是上图中on后面那一串),此时可以看到设备被哪个进程PID使用着,在这里插入图片描述
如上图的结果就是【设备:进程PID】,至于后面的字母是访问方式,详细地可以去了解一下fuser命令。查到使用设备的进程PID之后在确保进程可以退出的情况下杀死进程,除了kill命令外也可以使用命令fuser -mk 设备,直接杀死使用该设备的进程PID,然后重新挂载一遍即可。

你可能感兴趣的:(ETCD,etcd,数据库)