一个Lain集群有且只有一个etcd-cluster支持。每一个Lain集群中的node上都会运行一个etcd,或是etcd-member,或是etcd-proxy。
所以在任何一个node上,只需通过 http://localhost:4001
即可访问etcd-cluster
Lain集群初始化时,会启动一个etcd节点,此时是一个单节点的etcd-cluster。
此后每一个新加入Lain集群的node上,都会在加入时启动一个etcd,以proxy身份连入etcd-cluster
etcdctl member list
或
etcdctl ls /lain/nodes/etcd-members # 结果现实节点为member
如上所说,etcd cluster只有一个member,其他的node上全都是proxy。此时的etcd cluster并不是高可用的。
Lain支持手动修改各个node上etcd的mode,即把一个etcd-proxy变成etcd-member,以提高可用性;或将etcd-member改成etcd-proxy以提高性能。
以node2:192.168.77.22:22
为例(可通过etcdctl ls /lain/nodes/nodes
查看所有节点)。
etcdctl set /lain/nodes/etcd-members/node2:192.168.77.22:22 192.168.77.22
ansible-playbook -i playbooks/cluster -e role=etcd playbooks/role.yaml
etcdctl rm /lain/nodes/etcd-members/node2:192.168.77.22:22
ansible-playbook -i playbooks/cluster -e role=etcd playbooks/role.yaml
如果 etcd 集群的 member 所在机器发生了宕机或其他异常(如磁盘空间不足)。会导致 etcd member 不能正常工作。
修复的方法通常是,将故障节点从 etcd cluster 中移除,再作为一个新节点动态的加入到集群中。
具体的操作方法,请参考 etcd 官方文档
在对 etcd 集群进行修改时,为避免出现操作错误导致整个集群不可恢复。建议提前做一次备份,具体的操作方法参考 Backing up the datastore。这样如果在操作过程中出现了整个集群无可用而且无法恢复的情况,可利用备份重建一个新集群。