zoukankan      html  css  js  c++  java
  • etcd3集群管理

    在什么情况下需要集群的运行时更改

    • 维护和升级多个机器
      如果你因为进行诸如硬件升级或者断网等计划维护,而需要移动多个节点到新机器上,最好是逐个节点移动,一次操作一个。 移动leader节点是安全的,只不过leader节点下线后,需要耗费更多的时间选举新节点,所以建议最后移动。如果集群有超过50M的数据,最好进行节点的迁移而不要通过删除旧节点,增加新节点来实现节点的移动。
    • 更改集群的大小
    • 替换一个坏掉的节点
    • 集群多数宕机后的重启
      基于原先的数据创建新集群;强制让一个节点成为leader节点,并最终通过运行时更改添加新节点的方式将其他节点添加到这个新的集群中。

    集群运行时更改的操作

    一般来讲,集群更改通常都是执行如下操作:

    • 升级单个节点的 peerURLs,需要执行一个更新节点操作
    • 替换一个节点,需要先执行一个添加节点操作,再执行一个删除节点操作
    • 将集群大小从 3 更改到 5,需要执行两个添加节点操作
    • 将集群大小从 5 降低到 3,需要执行两个删除节点操作

    更新一个节点

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

    etcdctl member list
    4d4f508502c31ddc, started, name=etcd3 http://10.5.12.18:2380, http://10.5.12.18:2379
    d20b3f1647802774, started, name=etcd2 http://10.5.12.17:2380, http://10.5.12.17:2379
    fdbaf2aa62569cb3, started name=etcd1 http://10.5.12.16:2380, http://10.5.12.16:2379
    

    假设要更新ID为fdbaf2aa62569cb3的节点的peerURLs为http://10.5.12.20:2380,操作如下:

    etcdctl member update fdbaf2aa62569cb3 http://10.5.12.20:2380
    

    删除一个节点

    删除ID为fdbaf2aa62569cb3的节点:

    etcdctl member remove fdbaf2aa62569cb3
    

    注:如果删除的是leader节点,则需要额外的时间重新选举

    增加一个节点

    增加节点分为两步:通过etcdctl或对应的api注册新节点,然后根据注册新节点时给出的相关参数启动新节点

    假设新加的节点取名为etcd4,peerURLs为http://10.5.12.10:2380,配置如下:

    etcdctl member add etcd4 http://10.5.12.10:2380
    

    etcd在注册完新节点后,会返回一段提示,包含三个环境变量,如下:

    ETCD_NAME="etcd4"
    ETCD_INITIAL_CLUSTER="etcd1=http://10.5.12.16:2830,etcd2=http://10.5.12.17:2830,etcd3=http://10.5.12.18:2830,etcd4=http://10.5.12.10:2830"
    ETCD_INITIAL_CLUSTER_STATE=existing
    

    在启动新节点时,带上这三个变量即可,新节点/opt/kubernetes/cfg/etcd.conf部分配置如下:

    ......
    ETCD_NAME="etcd4"
    ETCD_INITIAL_CLUSTER="etcd0=http://10.5.12.16:2830,etcd1=http://10.5.12.17:2830,etcd2=http://10.5.12.18:2830,etcd3=http://10.5.12.10:2830"
    ETCD_INITIAL_CLUSTER_STATE=existing
    ......
    

    另外,还需要说明的是,如果新添加的节点--data-dir目录下存在以前的etcd数据,需要先清空该目录 。节点删除后,集群中的成员信息会更新,新节点加入集群是作为一个全新的节点加入,如果--data-dir有数据,etcd启动时会读取己经存在的数据,启动时仍然用的老member ID,也会造成,集群不无法加入,所以一定要清空新节点的--data-dir。

    注:如果原先的集群只有1个节点,在新节点成功启动之前,新集群并不能正确的形成。因为原先的单节点集群无法完成leader的选举。 直到新节点启动完,和原先的节点建立连接以后,新集群才能正确形成。

    节点迁移和灾难恢复

    迁移节点

    移动节点有两种方式:删除旧的节点,增加新的节点; 迁移节点。当集群的数据超过 50M 的时候,建议通过迁移节点的方式来移动节点。

    迁移节点的核心就是数据目录的迁移。因为 etcd 的各个节点会将自己的 ID 存放在自己的数据目录下面,所以迁移节点不会改变节点的 ID。

    迁移节点的步骤简单来说,包括以下几步:

    • 停止需要迁移的节点的服务
    • 从老机器上拷贝数据目录到新机器上
    • 通过集群运行时更改的更新操作,改变节点的 peerURLs 值为新机器的 IP:port
    • 在新机器上指定拷贝过来的数据目录,启动 etcd 的节点服务

    下面通过一个例子具体说明。
    假设已有集群示例如下:

    etcdctl member list
    4d4f508502c31ddc, started, name=etcd3 http://10.5.12.18:2380, http://10.5.12.18:2379
    d20b3f1647802774, started, name=etcd2 http://10.5.12.17:2380, http://10.5.12.17:2379
    fdbaf2aa62569cb3, started name=etcd1 http://10.5.12.16:2380, http://10.5.12.16:2379
    

    移动 etcd0从10.5.12.16到10.5.12.19:

    1. 停止etcd1上的etcd进程:
    pkill etcd
    
    1. 从10.5.12.16上复制数据目录到10.5.12.19:
    tar -zcf etcd1.tar.gz /data/etcd
    scp etcd1.tar.gz 10.5.12.19:/data
    
    1. 变更etcd1的peerURLs:
    etcdctl member update fdbaf2aa62569cb3 http://10.5.12.19:2380
    
    1. 在新机器上启动etcd:
    tar xf etcd1.tar.gz -C /data/etcd
    etcd --name etcd1 --listen-peer-urls http://10.5.12.19:2380 --listen-client-urls http://10.5.12.19:2379,http://127.0.0.1:2379 --advertise-client-urls http://10.5.12.19:2379,http://127.0.0.1:2379
    

    灾难恢复

    1. 备份数据
      需要在活着的节点上操作:
    etcdctl backup --data-dir /data/etcd --backup-dir /data/backup/etcd
    

    这个命令会将原数据备份到/data/backup/etcd目录下,并冲洗掉相关的元数据,如节点ID和集群ID等。这意味着备份数据中,只包含数据,而不包含身份信息

    1. 用备份数据重建单节点集群
    etcd --name etcd1 --data-dir=/data/backup/etcd --force-new-cluster --listen-peer-urls http://10.5.12.19:2380 --listen-client-urls http://10.5.12.19:2379,http://127.0.0.1:2379 --advertise-client-urls http://10.5.12.19:2379,http://127.0.0.1:2379 --initial-advertise-peer-urls http://10.5.12.19:2380
    

    当确定新集群正常后,就可以删除原来的集群数据,暂停新集群,将新集群的数据目录拷贝到原先数据的位置,并重新启动

    pkill etcd
    rm -rf /data/etcd
    mv /data/backup/etcd /data/etcd
    etcd --name etcd0 --data-dir /data/etcd ....
    

    注:如果还是使用之前的节点创建集群,一定要kill掉之前的etcd进程,并清除掉之前的数据

  • 相关阅读:
    分享下有趣的注释头
    android studio 的自动更新问题
    docker 搭建kafka集群(入门版)
    brew换源
    golang web框架 kratos中的日志框架
    golang 日志框架(zap)完整配置和使用
    python 日志模块
    mysqldump备份恢复数据
    寻找二叉树上从根结点到给定结点的路径
    linux 磁盘IO速度测试
  • 原文地址:https://www.cnblogs.com/breezey/p/8836385.html
Copyright © 2011-2022 走看看