`
lykops
  • 浏览: 86202 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

etcd集群日常维护

 
阅读更多

配置文件和启动参数说明

命令行                     |   配置文件                                |   说明
data-dir                    |   ETCD_DATA_DIR                       |   指定节点的数据存储目录,包括节点ID,集群ID,集群初始化配置,Snapshot文件,若未指定—wal-dir,还会存储WAL文件;
wal-dir                     |   ETCD_WAL_DIR                        |   指定节点的was文件的存储目录,若指定了该参数,wal文件会和其他数据文件分开存储。
name                        |   ETCD_NAME                           |   节点名称
initial-advertise-peer-urls |   ETCD_INITIAL_ADVERTISE_PEER_URLS    |   告知集群其他节点url
listen-peer-urls            |   ETCD_LISTEN_PEER_URLS               |   监听URL,用于与其他节点通讯
advertise-client-urls       |   ETCD_LISTEN_CLIENT_URLS             |   告知客户端url, 也就是服务的url
initial-cluster-token       |   ETCD_INITIAL_CLUSTER_TOKEN          |   集群的ID
initial-cluster             |   ETCD_INITIAL_CLUSTER                |   集群中所有节点

配置文件例子

more /etc/etcd/etcd.conf
# [member]
ETCD_NAME=lykops-etcd1
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
......
ETCD_LISTEN_PEER_URLS="http://192.168.0.101:2380,http://localhost:2380"
ETCD_LISTEN_CLIENT_URLS="http://192.168.0.101:2379,http://localhost:2379"
......
#[cluster]
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.0.101:2380"
# if you use different ETCD_NAME (e.g. test), set ETCD_INITIAL_CLUSTER value for this name, i.e. "test=http://..."
ETCD_INITIAL_CLUSTER="lykops-etcd1=http://192.168.0.101:2380,lykops-etcd2=http://192.168.0.102:2380,lykops-etcd3=http://192.168.0.103:2380"
#如果是单机版,注释上面一行
#ETCD_INITIAL_CLUSTER_STATE="new"
#ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.0.101:2379"
......
#
#[proxy]
......
#[security]
#如果要求SSL连接etcd的话,把下面的配置启用,并修改文件路径,详情请见http://blog.csdn.net/liyingke112/article/details/77776491
#ETCD_CERT_FILE="/etc/ssl/client.pem"
#ETCD_KEY_FILE="/etc/ssl/client-key.pem"
#ETCD_CLIENT_CERT_AUTH="true"
#ETCD_TRUSTED_CA_FILE="/etc/ssl/ca.pem"
#ETCD_AUTO_TLS="true"
#ETCD_PEER_CERT_FILE="/etc/ssl/member.pem"
#ETCD_PEER_KEY_FILE="/etc/ssl/member-key.pem"
#ETCD_PEER_CLIENT_CERT_AUTH="false"
#ETCD_PEER_TRUSTED_CA_FILE="/etc/ssl/ca.pem"
#ETCD_PEER_AUTO_TLS="true"
#
#[logging]
......

启动服务

service etcd start
systemctl enable etcd

集群维护

查看所有member

方法1、http://192.168.0.101:2379/v2/members
方法2、etcdctl member list
573789a076d6f1ab: name=lykops-etcd1 peerURLs=http://192.168.0.101:2380 clientURLs=http://192.168.0.101:2379 isLeader=false
90ad624a2e4158cf: name=lykops-etcd2 peerURLs=http:/192.168.0.102:2380 clientURLs=http://192.168.0.102:2379 isLeader=false
c9b8681eb46426ac: name=lykops-etcd3 peerURLs=http://192.168.0.103:2380 clientURLs=http://192.168.0.103:2379 isLeader=true

查看集群状态

etcdctl cluster-health
member 573789a076d6f1ab is healthy: got healthy result from http://192.168.0.101:2379
member 90ad624a2e4158cf is healthy: got healthy result from http://192.168.0.102:2379
member c9b8681eb46426ac is healthy: got healthy result from http://192.168.0.103:2379
cluster is healthy

更新一个节点

如果想更新一个节点的 IP(peerURLS),首先你需要知道那个节点的 ID。你可以列出所有节点,找出对应节点的 ID。

etcdctl member list

在本例中,假设要更新ID为90ad624a2e4158cf的节点的peerURLs为:http://192.168.0.105:2380

etcdctl member update 90ad624a2e4158cf http://192.168.0.105:2380
Updated member with ID 90ad624a2e4158cf in cluster

删除一个节点

假设要删除 ID 为 90ad624a2e4158cf 的节点

etcdctl member remove 90ad624a2e4158cf
Removed member 90ad624a2e4158cf from cluster

执行完后,目标节点会自动停止服务,并且打印一行日志: etcd: this member has been permanently removed from the cluster. Exiting. 如果删除的是 leader 节点,则需要耗费额外的时间重新选举 leader。

增加一个新的节点

增加一个新的节点分为两步:

通过etcdctl或对应的API注册新节点
使用恰当的参数启动新节点

先看第一步,假设要新加的节点取名为lykops-etcd6, peerURLs 是 http://192.168.0.106:2380

etcdctl member add lykops-etcd6 http://192.168.0.106:2380
added member 9bf1b35fc7761a23 to cluster
ETCD_NAME="lykops-etcd6"
ETCD_INITIAL_CLUSTER="lykops-etcd1=http://192.168.0.101:2380,lykops-etcd2=http://192.168.0.102:2380,lykops-etcd3=http://192.168.0.103:2380,lykops-etcd6=http://192.168.0.106:2380"
ETCD_INITIAL_CLUSTER_STATE=existing

第二步,修改配置文件,把第一步执行输出结果替换掉/etc/etcd/etcd.conf,然后启动

这样,新节点就会运行起来并且加入到已有的集群中了。

注意: 1、不能删除节点后,IP地址不变更的情况下加入集群是无法加入的,删除数据也不行 2、最后修改其他现有主机的/etc/etcd/etcd.conf的ETCDINITIALCLUSTER信息

备份数据

使用etcd自带命令etcdctl进行etc备份

etcdctl backup --data-dir /var/lib/etcd/default.etcd/ --backup-dir /backup/etcd

故障恢复

在使用过程中,有时会出现少量主机故障,需要对集群进行维护。然而在现实情况下,还可能遇到由于严重的设备或网络的故障,导致超过半数的节点无法正常工作。在etcd集群无法提供正常的服务,需要用到一些备份和数据恢复的手段。

首先,从剩余的正常节点中选择一个正常的成员节点, 使用etcdctl backup命令备份etcd数据。

etcdctl backup --data-dir /var/lib/etcd -backup-dir /tmp/etcd_backup
tar -zcxf backup.etcd.tar.gz /tmp/etcd_backup

这个命令会将节点中的用户数据全部写入到指定的备份目录中,但是节点ID,集群ID等信息将会丢失,并在恢复到目的节点时被重新。这样主要是防止原先的节点意外重新加入新的节点集群而导致数据混乱。

然后将Etcd数据恢复到新的集群的任意一个节点上,使用--force-new-cluster参数启动Etcd服务。这个参数会重置集群ID和集群的所有成员信息,其中节点的监听地址会被重置为localhost:2379, 表示集群中只有一个节点。

tar -zxvf backup.etcd.tar.gz -C /var/lib/etcd
etcd --data-dir=/var/lib/etcd --force-new-cluster ...

启动完成单节点的etcd,可以先对数据的完整性进行验证,确认无误后再通过Etcd API修改节点的监听地址,让它监听节点的外部IP地址,为增加其他节点做准备。例如:

用etcd命令找到当前节点的ID。 etcdctl member list 98f0c6bf64240842: name=cd-2 peerURLs=http://127.0.0.1:2580 clientURLs=http://127.0.0.1:2579

由于etcdctl不具备修改成员节点参数的功能, 下面的操作要使用API来完成。 curl http://127.0.0.1:2579/v2/members/98f0c6bf64240842 -XPUT -H "Content-Type:application/json" -d '{"peerURLs":["http://127.0.0.1:2580"]}'

注意,在Etcd中, 建议首先将集群恢复到一个临时的目录中,从临时目录启动etcd,验证新的数据正确完整后,停止etcd,在将数据恢复到正常的目录中。

最后,在完成第一个成员节点的启动后,可以通过集群扩展的方法使用 etcdctl member add 命令添加其他成员节点进来。


分享到:
评论

相关推荐

    Etcd3.3.18安装教程.md

    此外,教程还包含了故障排查指南,帮助用户解决安装过程中可能遇到的常见问题,并提供了关于如何更新Etcd和进行日常维护的建议。最后,教程以鼓励用户开始使用Etcd并提供了进一步学习资源的链接作为结束。

    Kubernetes v1.12 手动二进制部署集群.pdf

    Kubernetes 集群的部署可以通过多种方式实现,其中 Minikube 是一个非常方便的工具,它允许在本地环境中快速启动一个单节点的 Kubernetes 环境,适用于快速尝试 Kubernetes 或进行日常开发。Minikube 的官方地址为 ...

    用Operators管理多集群Kubernetes.docx

    总的来说,Kubernetes Operators提供了一种强大的方式来管理和扩展Kubernetes的多集群环境,使得大规模的集群部署和管理变得更为高效、安全且易于维护。Kubermatic Kubernetes平台通过这种方式,不仅简化了集群的...

    k8s-kubeadm离线安装包

    - 创建并配置etcd集群(如果使用)。 - 初始化控制平面节点,生成证书和密钥。 - 将工作节点加入到集群。 2. **kubelet**:kubelet是Kubernetes集群中的主要节点代理,负责在每个节点上运行。它的主要职责包括:...

    k8s-1.16.1-搭建和操作-详细笔记整理和相关软件包

    - 初始化etcd集群,作为Kubernetes的状态存储。 - 配置网络插件,如Calico或Flannel,为Pod提供跨节点的通信。 3. **集群管理与操作** 文件`k8s1.15.1-master-2-集群搭完后管理操作.docx`可能涵盖了集群的日常...

    Mastering Kubernetes

    Kubernetes集群的高可用性设计通常包括多Master节点、使用etcd集群存储配置信息、使用Pods的副本控制器来确保应用的高可用等。在高可用的环境下,保证数据的持久性和一致性同样重要,因此需要深入了解Kubernetes对...

    K8S日常基础速记指南

    ### K8S日常基础速记指南 #### 一、概述 Kubernetes,简称K8s,是一个开源平台,主要用于自动部署、扩展以及管理容器化的应用程序。它为开发者提供了一个高效且可靠的容器化应用管理和运维解决方案。 #### 二、...

    CKA认证-k8s基本操作.rar

    Kubernetes安装部署.docx):Kubernetes的部署涉及Master节点和Worker节点的配置,包括etcd集群、API Server、Controller Manager、Scheduler以及kubelet、kube-proxy等组件的安装。通常,使用kubeadm工具简化这一...

    Kubernetes介绍 与安装.pdf

    controller-manager则负责集群的日常任务控制器,如节点控制器、副本控制器、端点控制器、服务账户和令牌控制器等,保持集群状态稳定。 Node节点是Kubernetes集群的工作节点,负责运行容器化的应用。Node节点包括两...

    k8s-1.14.2-kubeadmin安装k8s

    - 配置并启动etcd,这是一个分布式的键值存储,用于k8s集群的状态管理。 - 安装kubelet和kube-proxy,它们分别负责节点管理和网络代理。 - 初始化控制平面组件,如API服务器、控制器管理器和调度器。 - 部署Pod...

    Kubernetes(k8s)高可用简相关镜像脚本

    通过Dashboard,用户可以直观地查看和管理Pod、Service、Deployment等资源,进行故障排查,这对于集群的日常运维和故障诊断非常方便。 4. **components.yaml**:这个名字暗示了它可能包含k8s集群的关键组件配置,如...

    基于OpenShift部署企业PaaS平台实践.docx

    4. **业务连续性与灾难恢复**:BCR和DR计划需预先设定,明确故障恢复策略,如在etcd集群丢失仲裁或外部服务故障时的应对措施。针对不同环境和依赖关系制定灵活的恢复计划。 5. **应用开发**:平台应考虑开发者的...

    Kubernetes(K8S)中文文档1

    - **k8s组件** 包括API Server、etcd、Controller Manager、Scheduler等,它们协同工作以维护集群状态。 **高级特性:** - **Ingress**:定义外部访问服务的规则,提供HTTP/HTTPS路由。 - **StatefulSets**:用于...

    【Cloud Native Lives】Kubernetes管理员实训 第1课:CKA考纲与K8S基础概念解读-v0.21

    CKA认证是针对Kubernetes管理员的专业认证,验证其在集群日常运维中的知识、技能和熟练度。考试费用为$300,包括一次补考机会,采用在线远程监考,考试形式为3小时的上机实操,允许查阅K8S手册,且证书有效期为两年...

    Kubernetes(K8s)入门学习文档

    - **Controller Manager**:运行控制器,执行集群维护任务,如节点同步、副本集管理等。 - **Scheduler**:调度器,根据资源需求和策略将Pod分配到节点上。 - **Kubelet**:每个节点上的代理,负责执行节点的指令,...

    kubernetes:用于启动kubernetes的所有配置文件

    此外,熟悉这些配置也有助于故障排查和集群的日常维护。 总之,"kubernetes:用于启动kubernetes的所有配置文件"这一压缩包包含的是Kubernetes核心组件的配置信息,对于想要深入了解Kubernetes架构和运维实践的人来...

    Linux 从入门到精通实战

    通过以上三个篇章的学习,读者将具备从日常维护到复杂系统设计的全方位Linux技能,能够胜任企业级Linux服务器的运维工作,包括服务器管理、Web服务配置、数据库管理、监控系统搭建、自动化运维和高可用架构设计等。...

    面试总结(1)(1)(5).docx

    - Etcd:存储集群的状态信息,是k8s中的关键数据存储。 - Kubelet:每个Node上的代理,负责维护Pods的状态,确保它们按预期运行。 - kube-proxy:网络代理,实现Service的网络规则和内部负载均衡。 - Docker ...

Global site tag (gtag.js) - Google Analytics