用法

  1. 查看版本:
    etcdctl version

  2. 获取集群成员列表:
    etcdctl member list

  3. 角色权限配置:

    1. 创建root角色/用户并开启权限认证:
      # 创建root角色
      etcdctl role add root
      # 创建root用户
      etcdctl user add root
      # 给root用户赋予root角色
      etcdctl user grant-role root root
      # 开启权限认证
      etcdctl auth enable
    2. 角色相关操作:
      1. 添加角色:
        etcdctl role add testRole --user root:123456
      2. 给角色赋予对key的管理权限(read/write/readwrite):
        # 对单个key授权
        etcdctl role grant-permission testRole read /config/a.conf --user root:123456
        # 以前缀授权
        etcdctl role grant-permission testRole read /config/ --prefix=true --user root:123456
      3. 列出所有的角色:
        etcdctl role list --user root:123456
      4. 获取一个角色的详细信息:
        etcdctl role get testRole --user root:123456
      5. 收回角色对key的管理权限:
        etcdctl role revoke-permission testRole /config/a.conf --user root:123456
      6. 删除角色:
        etcdctl role delete testRole --user root:123456
    3. 用户相关操作:
      1. 添加用户:
        etcdctl user add testUser --user root:123456
      2. 给用户赋予角色:
        etcdctl user grant-role testUser testRole --user root:123456
      3. 获取用户的详细信息:
        etcdctl user get testUser --user root:123456
      4. 列出所有的用户:
        etcdctl user list --user root:123456
      5. 修改用户密码:
        etcdctl user passwd testUser --user root:123456
      6. 删除用户的角色:
        etcdctl user revoke-role testUser testRole --user root:123456
      7. 删除用户:
        etcdctl user delete testUser --user root:123456
  4. 键值对操作:

    1. 写入值:
      etcdctl put /config/a.conf  runMod=dev
      etcdctl --endpoints=http://10.0.0.13:2379 put /config/a.conf  runMod=dev  # 连接远程节点
    2. 查询值:
      etcdctl get /config/a.conf
      etcdctl get --prefix /config/  # 以前缀查询
      etcdctl get --prefix --limit=2 /config/  # 以前缀查询,限制返回条数
      etcdctl get foo foo3  # 查询从foo-foo3的值(不包含foo3)
      etcdctl get /config/a.conf --print-value-only  # 只打印值
    3. 监听值的变化:
      etcdctl watch /config/a.conf
      etcdctl watch --prefix /config/  # 以前缀监听
      # 监听多个值的变化
      etcdctl watch -i
       watch /config/a.conf
       watch /config/b.conf
    4. 删除值:
      etcdctl del /config/a.conf
      etcdctl del --prefix /config/  # 以前缀删除
    5. 定义过期时间为10秒的租约:
      etcdctl lease grant 10
    6. 使用租约:
      etcdctl put /config/a.conf runMod=dev --lease=租约id

使用场景

  1. 服务注册/发现:

    • 实现原理:
      • 存值方式:/服务名/ip地址:端口号
      • 服务注册(服务器):PUT+定时续租(KeepAliveOnce)
      • 服务发现(网关):GET(以前缀获取)+WATCH(监听前缀)–”PUT事件”或”DELETE(租期过期)事件”,将存活的服务器的ip地址及端口保存到内存或 redis 中
      • 负载均衡(网关):从内存或 redis 中选取一个可用的服务器信息并返回
      • 连接(客户端):首先请求网关,获取可用的服务器信息(1个),然后连接服务器
      • 说明:网关客户端可以是同一个进程,也可以分开(即多个客户端请求一个网关)
  2. 配置中心:
    实现原理:PUT+WATCH(监听指定key)

  3. 分布式锁:
    实现原理:事务

文档更新时间: 2024-04-20 10:57   作者:lee