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

(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

转载于:https://my.oschina.net/wstone/blog/884602

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值