• 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 命令添加其他成员节点进来。


  • 相关阅读:
    springboot 的国际化路径出现问题
    算法思想_常见四种
    数据结构_6种简单概述_java
    火狐同步和账号的区别
    java_泛型解析
    购书打折最优方案
    团队小组开发NABC分析
    环状二维数组最大子数组求和
    返回一个整数数组中最大子数组的和之测试
    首尾相连的一位数组最大子数组和
  • 原文地址:https://www.cnblogs.com/lykops/p/8263116.html
Copyright © 2020-2023  润新知