zoukankan      html  css  js  c++  java
  • etcd集群安装和维护(V2)

    yum install -y etcd

    如果之前安装过etcd,停掉etcd服务并,清理持久化目录,默认目录在/var/lib/etcd/default.etcd

    停止方法:systemctl stop etcd

    数据清理方法: mv /var/lib/etcd/default.etcd /var/lib/etcd/default.etcd.bak

     

    1、修改配置文件vi /etc/etcd/etcd.conf

    配置文件如下,绿色部分IP需要修改,以172.28.73.54172.28.73.40172.28.16.153为例

    172.28.73.54配置

    ETCD_NAME="node1"
    ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
    ETCD_LISTEN_PEER_URLS="http://172.28.73.54:2380"
    ETCD_LISTEN_CLIENT_URLS="http://172.28.73.54:2379,http://127.0.0.1:2379"
    ETCD_INITIAL_ADVERTISE_PEER_URLS="http://172.28.73.54:2380"
    ETCD_ADVERTISE_CLIENT_URLS="http://172.28.73.54:2379"
    ETCD_INITIAL_CLUSTER="node1=http://172.28.73.54:2380,node2=http://172.28.73.40:2380,node3=http://172.28.16.153:2380"
    ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
    ETCD_INITIAL_CLUSTER_STATE="new"
    

    172.28.73.40配置

    ETCD_NAME="node2"
    ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
    ETCD_LISTEN_PEER_URLS="http://172.28.73.40:2380"
    ETCD_LISTEN_CLIENT_URLS="http://172.28.73.40:2379,http://127.0.0.1:2379"
    ETCD_INITIAL_ADVERTISE_PEER_URLS="http://172.28.73.40:2380"
    ETCD_ADVERTISE_CLIENT_URLS="http://172.28.73.40:2379"
    ETCD_INITIAL_CLUSTER="node1=http://172.28.73.54:2380,node2=http://172.28.73.40:2380,node3=http://172.28.16.153:2380"
    ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
    ETCD_INITIAL_CLUSTER_STATE="new"
    

    172.28.16.53配置

    ETCD_NAME="node3"
    ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
    ETCD_LISTEN_PEER_URLS="http://172.28.16.153:2380"
    ETCD_LISTEN_CLIENT_URLS="http://172.28.16.153:2379,http://127.0.0.1:2379"
    ETCD_INITIAL_ADVERTISE_PEER_URLS="http://172.28.16.153:2380"
    ETCD_ADVERTISE_CLIENT_URLS="http://172.28.16.153:2379"
    ETCD_INITIAL_CLUSTER="node1=http://172.28.73.54:2380,node2=http://172.28.73.40:2380,node3=http://172.28.16.153:2380"
    ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
    ETCD_INITIAL_CLUSTER_STATE="new"
    

    2、每台服务器修改etcd系统启动文件

    vi /usr/lib/systemd/system/etcd.service

    [Service]
    Type=notify
    WorkingDirectory=/var/lib/etcd/
    EnvironmentFile=-/etc/etcd/etcd.conf
    User=etcd
    # set GOMAXPROCS to number of processors
    ExecStart=/bin/bash -c "GOMAXPROCS=$(nproc) /usr/bin/etcd 
    --name="${ETCD_NAME}" 
    --data-dir="${ETCD_DATA_DIR}" 
    --listen-peer-urls="${ETCD_LISTEN_PEER_URLS}" 
    --listen-client-urls="${ETCD_LISTEN_CLIENT_URLS}" 
    --initial-advertise-peer-urls="${ETCD_INITIAL_ADVERTISE_PEER_URLS}" 
    --advertise-client-urls="${ETCD_ADVERTISE_CLIENT_URLS}" 
    --initial-cluster="${ETCD_INITIAL_CLUSTER}"  
    --initial-cluster-token="${ETCD_INITIAL_CLUSTER_TOKEN}" 
    --initial-cluster-state="${ETCD_INITIAL_CLUSTER_STATE}""
    Restart=on-failure
    LimitNOFILE=65536

    3、启动

    依次启动etcd服务

    systemclt start etcdctl

    4、验证

    查看成员

    etcdctl member list

    每个节点上执行查看健康状态

    etcdctl cluster-health

    在任意一个节点etcdctl  set  /test  "hello etcd"

    在另一个几点 etcdctl  get  /test 能看到数据则正常

    5、添加新节点

    如在ip172.28.16.166上添加

    配置文件

    ETCD_NAME="node4"
    ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
    ETCD_LISTEN_PEER_URLS="http://172.28.16.166:2380"
    ETCD_LISTEN_CLIENT_URLS="http://172.28.16.166:2379,http://127.0.0.1:2379"
    ETCD_INITIAL_ADVERTISE_PEER_URLS="http://172.28.16.166:2380"
    ETCD_ADVERTISE_CLIENT_URLS="http://172.28.16.166:2379"
    ETCD_INITIAL_CLUSTER="node1=http://172.28.73.54:2380,node2=http://172.28.73.40:2380,node3=http://172.28.16.153:2380,node4=http://172.28.16.166:2380"
    ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
    ETCD_INITIAL_CLUSTER_STATE="existing" 

    启动文件修改同上

    启动节点systemctl start etcd

    在另外任意节点上执行

    etcdctl member add node4  http://172.28.16.166:2380 

    etcdctl member list 查看节点信息和状态

    如果出现添加失败,则清理node4的存储目录并重启node4的etcd服务

    修改另外3个节点的 ETCD_INITIAL_CLUSTER ,添加node4信息,重启etcd服务

    6、移除节点

    先查出节点id      etcdctl member list
    删除             etcdctl member remove 节点id
    

    修改另外3个节点的 ETCD_INITIAL_CLUSTER ,去掉node4信息,重启etcd服务 

     7、持久化数据备份和恢复

     etcd v2 和 v3 的数据不能混合存放,默认是v2。以下是v2的备份和恢复方法,v3参考 etcd集群备份和数据恢复

    7.1备份

    //预置测试数据,非必须
    etcdctl set /test test
    etcdctl backup --data-dir /var/lib/etcd/default.etcd/ -backup-dir /tmp/etcd_backup
    tar -cvf backup.etcd.tar.gz /tmp/etcd_backup

     backup.etcd.tar.gz 为备份的数据

    7.2恢复

    将backup.etcd.tar.gz copy到要恢复的集群任意一个服务器上,集群默认配置为1中的配置,将第一个恢复的服务器的ETCD_INITIAL_CLUSTER_STATE设置为new,其他两个设置为exsiting

    tar -xvf backup.etcd.tar.gz
    rm -rf /var/lib/etcd/* mv tmp/etcd_backup/ /var/lib/etcd/default.etcd/

    7.3数据验证和修改节点信息

    etcd -data-dir="/var/lib/etcd/default.etcd" --name="node1" --force-new-cluster
    开启一个新的窗口 etcdctl get /test

    查看节点id 

    etcdctl member list
    

     修改peerURL

    curl http://localhost:2379/v2/members/71bf939a1c01 -XPUT -H "Content-Type:application/json" -d '{"peerURLs":["http://172.28.73.54:2380"]}'
    etcdctl member list

     第一个窗口ctrl c,关闭当前节点

    7.4启动当前节点

    chown etcd:etcd /var/lib/etcd -R
    systemctl daemon-reload
    systemctl start etcd

    7.5添加节点(ip为第二个服务器ip)

    etcdctl member add node2 http://172.28.73.40:2380
    etcdctl member list

    不管。

    7.6启动第二个节点

    更新/etc/etcd/etcd.conf的配置

    ETCD_INITIAL_CLUSTER="node1=http://172.28.73.54:2380,node2=http://172.28.73.40:2380"

    ETCD_INITIAL_CLUSTER_STATE="existing"

    启动

    rm -rf /var/lib/etcd/*
    systemctl daemon-reload
    systemctl start etcd
    

    7.7启动第三个节点

    etcdctl member add node3 http://172.28.16.153:2380

    同7.6

    做好数据验证,如没问题,将第二个节点的ETCD_INITIAL_CLUSTER更新为3个节点的,然后重启。

    8、常见错误

    无法启动:

    方法1、清理data-dir再重启

    方法2、查看相关目录权限是否和/usr/lib/systemd/system/etcd.service中的一直,如不一致,则修改,如默认为etcd,经过迁移后相关目录权限变成了root导致无法启动

    chown etcd:etcd /var/lib/etcd -R
    systemctl daemon-reload
    systemctl start etcd
  • 相关阅读:
    系统编码、文件编码与python系统编码
    python2判断编码格式
    android: 对apk进行系统签名
    android: 对普通的apk应用进行签名
    android studio: 设置单条注释不换行
    Gradle: Could not determine the dependencies of task ':app:processDebugResources'解决(转)
    android Dialog: 去除dialog 顶部 蓝色的线
    android:Error:” ” is not translated in “en” (English) [MissingTranslation]处理方法(转)
    android: 通过Intent筛选多种类型文件
    GIt: git rebase 和 git merge 的区别 (转)
  • 原文地址:https://www.cnblogs.com/wuweidong/p/12785712.html
Copyright © 2011-2022 走看看