您的位置:

etcd集群部署

一、etcd集群部署哪个最稳定

对于etcd的部署方式,我们可以选择Standalone,Cluster和HA模式。

其中Standalone模式适用于开发、测试环境,Cluster适用于小型生产环境,HA适用于中大型的生产环境。因此,如果在生产环境中使用etcd集群,建议选择HA模式,以确保稳定和可靠性。

二、etcd集群恢复

在etcd集群中,可能会发生一些异常情况,需要对etcd集群进行恢复。如果发生类似节点宕机的情况,我们需要进行集群节点的重新加入。

具体步骤如下:

1. 确定宕机节点的状态
   etcdctl endpoint status -w table | grep 'unreachable'
   以上命令行显示的为unreachable或者down,那么就表示该节点宕机了。
2. 去掉宕机节点
   如果打算重新加入一个节点,要先去掉之前失联的节点。
   etcdctl member remove [memberid]
   也可以直接在其他节点上执行。
   etcdctl --endpoints=http://[otherIP]:2379 member remove [memberid]
3. 重新加入节点
   etcdctl member add [member.node.name] --peer-urls=http://[memberIP]:2380
4. 上报节点信息给所有节点
   etcdctl member list //需要获取到 memberID,peer-urls,name
   这里的memberID 是etcd集群认证的节点凭证之一,可以通过member list拿到,也可以看etcd.log
   etcdctl member update [memberid] [flags]

   如果宕机节点不支持恢复,那么建议重新创建一个新的etcd节点,然后将数据迁移到新的节点上。

三、etcd集群原理

etcd是一种高可用性的分布式键值存储系统,能够保证分布式应用程序的一致性。

etcd集群的核心机制是Raft协议,利用Raft协议实现节点之间的一致性和数据的同步。

集群中的每个节点都有自己的ID(节点编号)、地址、磁盘存储等信息。在etcd集群中,数据是以key-value的形式存储的。当一个节点收到一个写请求时,它会将请求广播给其集群中的其他节点,并等待各节点的反馈。如果反馈成功,则将写请求处理完成并返回给客户端,否则重新发起广播。当集群中有节点宕机时,etcd能够自动进行故障转移,确保数据的一致性和可靠性。

四、etcd集群数据同步

etcd的数据同步采用Raft协议,Raft协议是一种分布式一致性算法。它将整个集群分为Leader、Follower和Candidate三种角色,通过选举Leader的过程来实现数据复制和同步。

当Follower节点有更新时,会通知Leader,随后Leader根据Raft协议将变更复制给其他Follower节点。当节点失效或者新节点加入集群时,etcd能够通过Raft协议自动进行数据迁移和重新分配。

五、etcd集群搭建

etcd集群的搭建,主要分为如下几个步骤:

1. 下载etcd二进制文件
   wget https://github.com/coreos/etcd/releases/download/v3.5.0/etcd-v3.5.0-linux-amd64.tar.gz
   tar -zxvf etcd-v3.5.0-linux-amd64.tar.gz
   cd etcd-v3.5.0-linux-amd64
2. 创建etcd集群配置文件
   cp etcd.conf.sample etcd.conf
   vi etcd.conf
3. 配置etcd集群
   name:当前节点名称
   data-dir:数据目录
   initial-cluster-state:新建集群时设为new
   initial-cluster-token:集群身份标识符,任选一取
   initial-cluster:集群中所有机器的地址
   listen-peer-urls:集群内所有节点的监听地址
   listen-client-urls:服务的请求地址
4. 启动etcd集群
   ./etcd -conf-file=etcd.conf

六、k8s etcd集群

k8s官方文档建议将etcd集群部署在k8s集群外部,以确保etcd的高可用性。

kops是一种常用的k8s集群部署工具,我们可以使用kops来部署etcd集群。具体步骤如下:

1. 安装kops和kubectl
   # Mac
   brew update && brew install kops kubectl
   # Ubuntu
   sudo apt-get update && sudo apt-get install -y kops kubectl
2. 创建kops集群
   kops create cluster --name=mycluster.example.com --state=s3://mybucket --node-count=2 --zones=us-east-1a --node-size=t2.micro --master-size=t2.micro
3. 配置etcd集群
   可以按照上面的方法在较为简单的环境下,单独对etcd集群进行配置。使用kops在AWS上部署集群并不少见,如果使用AWS,还需要开放相关端口,确保集群正常运转。
4. 删除集群
   kops delete cluster --name=mycluster.example.com --state=s3://mybucket --yes

七、k8s部署etcd集群

kubernetes的control plane中使用了etcd来存储所有的集群状态信息。etcd状态集群的容量应该与kubernetes集群大小成比例,而且它们必须同时运行才能达到预期的高可用性。

默认情况下,kubernetes会在所有master节点中部署一个etcd实例副本。但是,也可以将etcd集群独立部署在外部,这需要修改kubernetes的etcd集群地址或证书配置。

具体步骤如下:

1. 进入Kubernetes的github项目目录
   cd kubernetes
2. 编译etcd镜像
   在需要编译 etcd 的版本时,执行如下操作.
   cd ./build/
   make WHAT=cmd/etcd
   make WHAT=cmd/etcdctl
   make WHAT=cmd/etcd-migrate
3. 部署etcd集群
   运行部署etcd集群的脚本
   ./hack/local-up-etcd.sh
   注: 使用二进制方式部署应该详细的阅读文档。
4. 现在kubernetes etcd配置项就变成了:
   KUBE_ETCD_SERVERS="--etcd-servers=http://127.0.0.1:2379"\
        设置env变量KUBE_ETCD_SERVERS 连接新etcd集群

八、查看etcd集群状态

我们可以使用以下命令来查看etcd集群状态:

etcdctl member list

其中,member list命令可以用于查看当前etcd集群中的所有成员,包括其ID、名称、状态和地址信息。