前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >(WJW)etcd v3 集群最佳操作指南 顶

(WJW)etcd v3 集群最佳操作指南 顶

作者头像
白石
发布2019-08-23 10:28:12
1.6K0
发布2019-08-23 10:28:12
举报
文章被收录于专栏:白石白石白石

(WJW)etcd v3 集群最佳操作指南

etcd参数简单解释

--name                         #etcd集群中的节点名,这里可以随意,可区分且不重复就行  
--initial-cluster-token        #节点的token值,设置该值后集群将生成唯一id,并为每个节点也生成唯一id,当使用相同配置文件再启动一个集群时,只要该token值不一样,etcd集群就不会相互影响.
--initial-cluster              #集群自举时的url
--initial-advertise-peer-urls  #建议用于节点之间通信的url,节点间将以该值进行通信.
--listen-peer-urls             #监听的用于节点之间通信的url,可监听多个,集群内部将通过这些url进行数据交互(如选举,数据同步等)
--listen-client-urls           #监听的用于客户端通信的url,同样可以监听多个.
--advertise-client-urls        #建议使用的客户端通信url,该值用于etcd代理或etcd成员与etcd节点通信.

etcd所在目录解释

/opt/app                                 #etcd的根目录
/opt/app/etcd/create_etcd_first_node.sh #初始化集群时,第一个节点首次执行的脚本
/opt/app/etcd/run_etcd.sh  #以后正常启动的脚本

/opt/app/etcd/bin/etcd     #etcd的server程序
/opt/app/etcd/bin/etcdctl  #etcd的管理程序

/opt/app/etcd/data/        #etcd的数据目录

初始化第一个节点

export NODE_IP="192.168.68.17"
export ETCD_INITIAL_CLUSTER_TOKEN="token-01"
export ETCD_NAME="node1"
export ETCD_DATA_DIR="/opt/app/etcd/data"
/opt/app/etcd/bin/etcd \
    --initial-cluster-token "${ETCD_INITIAL_CLUSTER_TOKEN}" --initial-cluster "${ETCD_NAME}=http://${NODE_IP}:2380" \
    --initial-advertise-peer-urls "http://${NODE_IP}:2380" \
    --listen-peer-urls="http://${NODE_IP}:2380" \
    --listen-client-urls "http://${NODE_IP}:2379" \
    --advertise-client-urls "http://${NODE_IP}:2379"

根据实际情况替换变量NODE_IP,ETCD_INITIAL_CLUSTER_TOKEN,ETCD_NAME

查看到当前集群

/opt/app/etcd/bin/etcdctl --endpoints "http://192.168.68.17:2379"  member list

检查集群健康状态

/opt/app/etcd/bin/etcdctl --endpoints "http://192.168.68.17:2379" cluster-health

停止第一个节点pkill etcd,然后使用/opt/app/etcd/run_etcd.sh脚本正常启动第一个节点的etcd

向集群中添加一台机器

登录需要加入到集群的那个节点机器

  1. 先执行etcdctl命令把节点加入集群
export NODE_IP="192.168.68.18"
export ETCD_NAME="node2"
/opt/app/etcd/bin/etcdctl --endpoints "http://192.168.68.17:2379" member add ${ETCD_NAME} http://${NODE_IP}:2380

根据实际情况替换变量NODE_IP,ETCD_NAME 然后根据屏幕提示把环境变量保存下来:ETCD_NAME,ETCD_INITIAL_CLUSTER,ETCD_INITIAL_CLUSTER_STATE

  1. 启动新加入的节点
export NODE_IP="192.168.68.18"
export ETCD_NAME="node2"
export ETCD_DATA_DIR="/opt/app/etcd/data"
export ETCD_INITIAL_CLUSTER="node1=http://192.168.68.17:2380,node2=http://192.168.68.18:2380"
export ETCD_INITIAL_CLUSTER_STATE="existing"
/opt/app/etcd/bin/etcd \
    --initial-advertise-peer-urls "http://${NODE_IP}:2380" \
    --listen-peer-urls="http://${NODE_IP}:2380" \
    --listen-client-urls "http://${NODE_IP}:2379" \
    --advertise-client-urls "http://${NODE_IP}:2379"

注意: ETCD_NAME,ETCD_INITIAL_CLUSTER,ETCD_INITIAL_CLUSTER_STATE必须使用上面的etcdctl member add命令产生的输出! 根据实际情况替换变量NODE_IP,ETCD_NAME

  1. 检查集群正常后,停止新加入的节点pkill etcd,然后执行/opt/app/etcd/run_etcd.sh命令正常启动新加入的节点,再次检查集群状态! 以下是/opt/app/etcd/run_etcd.sh文件内容
#! /bin/sh

basedir=`dirname $0`
echo "BASE DIR:$basedir"
cd $basedir

export NODE_IP="192.168.68.18"
export ETCD_NAME="node2"
export ETCD_DATA_DIR="/opt/app/etcd/data"
/opt/app/etcd/bin/etcd \
    --initial-advertise-peer-urls "http://${NODE_IP}:2380" \
    --listen-peer-urls="http://${NODE_IP}:2380" \
    --listen-client-urls "http://${NODE_IP}:2379" \
    --advertise-client-urls "http://${NODE_IP}:2379"

注意根据实际情况替换变量NODE_IP,ETCD_NAME

附录:

运行阶段member异常恢复

假设一个节点node2异常重启,可以执行/opt/app/etcd/run_etcd.sh脚本命令正常起来

测试读写数据

/opt/app/etcd/bin/etcdctl --endpoints "http://192.168.68.17:2379" set /message hello
/opt/app/etcd/bin/etcdctl --endpoints "http://192.168.68.17:2379" get /message

移除节点

/opt/app/etcd/bin/etcdctl --endpoints "http://192.168.68.17:2379" member remove ${NODE_ID}

${NODE_ID}可以从/opt/app/etcd/bin/etcdctl --endpoints "http://192.168.68.17:2379" member list的输出来查找!

节点迁移和替换

当你节点所在的机器出现硬件故障,或者节点出现如数据目录损坏等问题,导致节点永久性的不可恢复时,就需要对节点进行迁移或者替换.当一个节点失效以后,必须尽快修复,因为etcd集群正常运行的必要条件是集群中多数节点都正常工作. 迁移一个节点需要进行四步操作:

  • 暂停正在运行着的节点程序进程
  • 把数据目录从现有机器拷贝到新机器
  • 使用api更新etcd中对应节点指向机器的url记录更新为新机器的ip
  • 使用同样的配置项和数据目录,在新的机器上启动etcd.
/opt/app/etcd/bin/etcdctl --endpoints "http://192.168.68.17:2379" member update ${NODE_ID} ${LISTEN_PEER_URLS}

${NODE_ID}可以从/opt/app/etcd/bin/etcdctl --endpoints "http://192.168.68.17:2379" member list的输出来查找!

集群损坏后,强制性重启集群

当集群超过半数的节点都失效时,就需要通过手动的方式,强制性让某个节点以自己为Leader,利用原有数据启动一个新集群. 此时你需要进行一下操作.

1. 备份原有数据到新机器.

export ETCD_DATA_DIR="/opt/app/etcd/data"
/opt/app/etcd/bin/etcdctl \
      backup \
      --data-dir "${ETCD_DATA_DIR}" \
      --backup-dir /tmp/etcd_backup

它首先将节点的源信息写入到备份区,但是节点的id,集群的id等将会被重写,这就意味着节点之前的集群信息就被抹掉.

2. 使用--force-new-cluster加备份的数据启动第一个节点

export NODE_IP="192.168.68.17"
export ETCD_INITIAL_CLUSTER_TOKEN="token-01"
export ETCD_NAME="node1"
export ETCD_DATA_DIR="/tmp/etcd_backup"
/opt/app/etcd/bin/etcd \
    --force-new-cluster \
    --initial-cluster-token "${ETCD_INITIAL_CLUSTER_TOKEN}" --initial-cluster "${ETCD_NAME}=http://${NODE_IP}:2380" \
    --initial-advertise-peer-urls "http://${NODE_IP}:2380" \
    --listen-peer-urls="http://${NODE_IP}:2380" \
    --listen-client-urls "http://${NODE_IP}:2379" \
    --advertise-client-urls "http://${NODE_IP}:2379"

注意:强制性重启是一个迫不得已的选择,它会破坏一致性协议保证的安全性(如果操作时集群中尚有其它节点在正常工作,就会出错),所以在操作前请务必要保存好数据.

3. 检查第一个节点运行正常后,停止etcd

pkill etcd

4. 使用/opt/app/etcd/create_etcd_first_node.sh脚本,启动第一个节点的etcd

5. 检查第一个节点运行正常后,再次停止etcd

pkill etcd

6. 使用/opt/app/etcd/run_etcd.sh脚本正常启动etcd

检查第一个节点是否运行正常!

7. 逐一按照新建集群的步骤,把新的节点加入到集群

开启访问控制

  1. auth enable 之前必须添加root用户,添加时设置密码:
/opt/app/etcd/bin/etcdctl --endpoints "http://192.168.68.17:2379" user add root
  1. 开启认证:
/opt/app/etcd/bin/etcdctl --endpoints "http://192.168.68.17:2379" auth enable
  1. 添加一个非特权账号:(注意,这时候就需要有权限的用户来操作了)
/opt/app/etcd/bin/etcdctl --endpoints "http://192.168.68.17:2379" --username root:root user add wjw
  1. 查看有哪些账号:
/opt/app/etcd/bin/etcdctl --endpoints "http://192.168.68.17:2379" --username root:root user list
  1. 添加角色:
/opt/app/etcd/bin/etcdctl --endpoints "http://192.168.68.17:2379" --username root:root role add test1
  1. 给角色添加能力:
/opt/app/etcd/bin/etcdctl --endpoints "http://192.168.68.17:2379" --username root:root role grant --rw --path "/*" test1
  1. 查看有哪些角色了:
/opt/app/etcd/bin/etcdctl --endpoints "http://192.168.68.17:2379" --username root:root role list
  1. 查看指定角色的权限:
/opt/app/etcd/bin/etcdctl --endpoints "http://192.168.68.17:2379" --username root:root role get test1
  1. 将用户添加到角色:
/opt/app/etcd/bin/etcdctl --endpoints "http://192.168.68.17:2379" --username root:root user grant --roles test1 wjw
  1. 查看用户拥有哪些角色:
/opt/app/etcd/bin/etcdctl --endpoints "http://192.168.68.17:2379" --username root:root user get wjw
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • (WJW)etcd v3 集群最佳操作指南
  • etcd参数简单解释
  • etcd所在目录解释
  • 初始化第一个节点
  • 查看到当前集群
  • 检查集群健康状态
  • 停止第一个节点pkill etcd,然后使用/opt/app/etcd/run_etcd.sh脚本正常启动第一个节点的etcd
  • 向集群中添加一台机器
  • 附录:
  • 运行阶段member异常恢复
    • 测试读写数据
      • 移除节点
        • 节点迁移和替换
          • 集群损坏后,强制性重启集群
            • 1. 备份原有数据到新机器.
            • 2. 使用--force-new-cluster加备份的数据启动第一个节点
            • 3. 检查第一个节点运行正常后,停止etcd
            • 4. 使用/opt/app/etcd/create_etcd_first_node.sh脚本,启动第一个节点的etcd
            • 5. 检查第一个节点运行正常后,再次停止etcd
            • 6. 使用/opt/app/etcd/run_etcd.sh脚本正常启动etcd
            • 7. 逐一按照新建集群的步骤,把新的节点加入到集群
          • 开启访问控制
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档