部署和操作etcd

这里采用docker compose来部署
部署三个节点组一个集群

etcd集群节点数量的相关说明

etcd 是基于 raft算法的分布式键值数据库,生来就为集群化而设计的,由于Raft算法在做决策时需要超半数节点的投票,所以etcd集群一般推荐奇数节点,如3、5或者7个节点构成一个集群。
etcd官方推荐3、5、7个节点,虽然raft算法也是半数以上投票才能有 leader,但奇数只是推荐,其实偶数也是可以的。如 2、4、8个节点。
下面分情况说明:

  • 1 个节点:就是单实例,没有集群概念,不做讨论
  • 2 个节点:是集群,但没人会这么配,这里说点废话:双节点的etcd能启动,启动时也能有主,可以正常提供服务,但是一台挂掉之后,就选不出主了,因为他只能拿到1票,剩下的那台也无法提供服务,也就是双节点无容错能力,不要使用。
  • 3 节点:标准的3 节点etcd 集群只能容忍1台机器宕机,挂掉 1 台此时等于2个节点的情况,如果再挂 1 台,就和 2节点的情形一致了,一直选,一直增加任期,但就是选不出来,服务也就不可用了
  • 4 节点:最大容忍1 台 服务器宕机
  • 5 节点:最大容忍 2 台 服务器宕机
  • 6 节点:最大容忍 2 台 服务器宕机
  • 7和8个节点,最大容忍 3台 服务器宕机
    以此类推,9和10个节点,最大容忍4台 服务器宕机
    总结以上可以得出结论:偶数节点虽然多了一台机器,但是容错能力是一样的,也就是说,你可以设置偶数节点,但没增加什么能力,还浪费了一台机器。同时etcd 是通过复制数据给所有节点来达到一致性,因此偶数的多一台机器增加不了性能,反而会拉低写入速度。

etcd集群节点数越多越好吗?

那有同学可能会问,我搞个几十上百台服务器做etcd集群,那集群的整体性能是不是无敌了,etcd集群永不会停止嘛?
有这个想法那就大错特错了,etcd 集群是一个 Raft Group,没有 shared。
所以它的极限有两部分

  • 一是单机的容量限制,内存和磁盘
  • 二是网络开销

每次 Raft 操作需要所有节点参与,每一次写操作需要集群中大多数节点将日志落盘成功后,Leader 节点才能修改内部状态机,并将结果返回给客户端。
因此节点越多性能越低,并且出错的概率会直线上升,并且是呈现线性的性能下降,所以扩展很多 etcd 节点是没有意义的;
其次,如果etcd集群超过7个达到十几个几十个,那么,对运维来说也是一个不小的压力了,并且集群的配置什么的也会更加的复杂,而不是简单易用了。
因此,etcd集群的数量一般是 3、5、7, 3 个是最低标准,7个也就是最高了。

docker安装

自行安装

$ docker version
Client: Docker Engine - Community
 Version:           27.5.1
 API version:       1.47
 Go version:        go1.22.11
 Git commit:        9f9e405
 Built:             Wed Jan 22 13:41:31 2025
 OS/Arch:           linux/amd64
 Context:           default

Server: Docker Engine - Community
 Engine:
  Version:          27.5.1
  API version:      1.47 (minimum version 1.24)
  Go version:       go1.22.11
  Git commit:       4c9b3b0
  Built:            Wed Jan 22 13:41:31 2025
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.7.25
  GitCommit:        bcc810d6b9066471b0b6fa75f557a15a1cbf31bb
 runc:
  Version:          1.2.4
  GitCommit:        v1.2.4-0-g6c52b3f
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

$ docker compose version
Docker Compose version v2.32.4

docker compose 清单文件

咱们这里使用三个节点来部署

services:
  etcd1:
    image: quay.io/coreos/etcd:v3.5.17  # 使用 etcd 官方镜像
    container_name: etcd1  # 容器名称
    ports:
      - "2379:2379"  # 客户端通信端口
      - "2380:2380"  # 节点间通信端口
    restart: always
    environment:
      - ETCD_NAME=etcd1  # 节点名称
      - ETCD_DATA_DIR=/var/etcd
      - ETCD_LISTEN_PEER_URLS=http://0.0.0.0:2380  # 监听节点间通信地址
      - ETCD_LISTEN_CLIENT_URLS=http://0.0.0.0:2379  # 监听客户端通信地址
      - ETCD_INITIAL_ADVERTISE_PEER_URLS=http://etcd1:2380  # 向其他节点广播的地址
      - ETCD_ADVERTISE_CLIENT_URLS=http://etcd1:2379  # 客户端访问地址
      - ETCD_INITIAL_CLUSTER=etcd1=http://etcd1:2380,etcd2=http://etcd2:2380,etcd3=http://etcd3:2380  # 初始集群配置
      - ETCD_INITIAL_CLUSTER_STATE=new  # 集群初始状态(新集群)
      - ETCD_ROOT_PASSWORD=111111  # 设置密码
      # - ALLOW_NONE_AUTHENTICATION=yes  # 允许空密码(仅限开发环境)
      - ETCD_HEARTBEAT_INTERVAL=200
      - ETCD_ELECTION_TIMEOUT=1000
      - ETCD_INITIAL_CLUSTER_TOKEN=etcd-cluster
      - ETCD_LOGGER=zap
    volumes:
      - ./etcd1-data:/var/etcd  # 持久化数据存储
    networks:
      - etcd-net  # 使用自定义网络

  etcd2:
    image: quay.io/coreos/etcd:v3.5.17
    container_name: etcd2
    ports:
      - "2479:2379"  # 客户端通信端口(避免与 etcd1 冲突)
      - "2480:2380"  # 节点间通信端口(避免与 etcd1 冲突)
    restart: always
    environment:
      - ETCD_NAME=etcd2
      - ETCD_DATA_DIR=/var/etcd
      - ETCD_LISTEN_PEER_URLS=http://0.0.0.0:2380
      - ETCD_LISTEN_CLIENT_URLS=http://0.0.0.0:2379
      - ETCD_INITIAL_ADVERTISE_PEER_URLS=http://etcd2:2380
      - ETCD_ADVERTISE_CLIENT_URLS=http://etcd2:2379
      - ETCD_INITIAL_CLUSTER=etcd1=http://etcd1:2380,etcd2=http://etcd2:2380,etcd3=http://etcd3:2380
      - ETCD_INITIAL_CLUSTER_STATE=new
      - ETCD_ROOT_PASSWORD=111111  # 设置密码
      # - ALLOW_NONE_AUTHENTICATION=yes  # 允许空密码(仅限开发环境)
      - ETCD_HEARTBEAT_INTERVAL=200
      - ETCD_ELECTION_TIMEOUT=1000
      - ETCD_INITIAL_CLUSTER_TOKEN=etcd-cluster
      - ETCD_LOGGER=zap
    volumes:
      - ./etcd2-data:/var/etcd
    networks:
      - etcd-net

  etcd3:
    image: quay.io/coreos/etcd:v3.5.17
    container_name: etcd3
    ports:
      - "2579:2379"  # 客户端通信端口(避免与 etcd1 和 etcd2 冲突)
      - "2580:2380"  # 节点间通信端口(避免与 etcd1 和 etcd2 冲突)
    restart: always
    environment:
      - ETCD_NAME=etcd3
      - ETCD_DATA_DIR=/var/etcd
      - ETCD_LISTEN_PEER_URLS=http://0.0.0.0:2380
      - ETCD_LISTEN_CLIENT_URLS=http://0.0.0.0:2379
      - ETCD_INITIAL_ADVERTISE_PEER_URLS=http://etcd3:2380
      - ETCD_ADVERTISE_CLIENT_URLS=http://etcd3:2379
      - ETCD_INITIAL_CLUSTER=etcd1=http://etcd1:2380,etcd2=http://etcd2:2380,etcd3=http://etcd3:2380
      - ETCD_INITIAL_CLUSTER_STATE=new
      - ETCD_ROOT_PASSWORD=111111  # 设置密码
      # - ALLOW_NONE_AUTHENTICATION=yes  # 允许空密码(仅限开发环境)
      - ETCD_HEARTBEAT_INTERVAL=200
      - ETCD_ELECTION_TIMEOUT=1000
      - ETCD_INITIAL_CLUSTER_TOKEN=etcd-cluster
      - ETCD_LOGGER=zap
    volumes:
      - ./etcd3-data:/var/etcd
    networks:
      - etcd-net
networks:
  etcd-net:  # 自定义网络
  • ETCD_NAME=etcd1
    • 作用:设置当前etcd节点的名称。
    • 说明:在集群中,每个节点需要有一个唯一的名称。这里节点名称为etcd1
  • ETCD_DATA_DIR=/var/etcd
    • 作用:指定etcd存储数据的目录。
    • 说明:etcd会将所有数据(如键值对、集群状态等)存储在这个目录中。这里设置为/var/etcd
  • ETCD_LISTEN_PEER_URLS=http://0.0.0.0:2380
    • 作用:设置当前节点监听其他etcd节点(peer)通信的地址和端口。
    • 说明:
      • 0.0.0.0表示监听所有网络接口。
      • 2380是etcd节点之间通信的默认端口。
      • 其他节点会通过这个URL与当前节点通信。
  • ETCD_LISTEN_CLIENT_URLS=http://0.0.0.0:2379
    • 作用:设置当前节点监听客户端请求的地址和端口。
    • 说明:
      • 0.0.0.0表示监听所有网络接口。
      • 2379是etcd客户端通信的默认端口。
      • 客户端(如应用程序)会通过这个URL与etcd交互。
  • ETCD_INITIAL_ADVERTISE_PEER_URLS=http://etcd3:2380
    • 作用:设置当前节点向其他节点通告的peer通信地址。
    • 说明:
      • 其他节点会通过这个URL与当前节点通信。
      • 这里设置为http://etcd3:2380,表示其他节点需要通过etcd3的主机名和端口2380访问当前节点。
  • ETCD_ADVERTISE_CLIENT_URLS=http://etcd1:2379
    • 作用:设置当前节点向客户端通告的访问地址。
    • 说明:
      • 客户端会通过这个URL访问当前节点。
      • 这里设置为http://etcd1:2379,表示客户端需要通过etcd1的主机名和端口2379访问当前节点。
  • ETCD_INITIAL_CLUSTER=etcd1=http://etcd1:2380,etcd2=http://etcd2:2380,etcd3=http://etcd3:2380
    • 作用:定义初始集群的成员列表。
    • 说明:
      • 这里指定了集群中有3个节点:etcd1etcd2etcd3
      • 每个节点的名称和对应的peer通信地址都需要明确列出。
      • 当前节点(etcd1)会根据这个列表与其他节点建立连接。
  • ETCD_INITIAL_CLUSTER_STATE=new
    • 作用:指定集群的初始状态。
    • 说明:
      • new表示这是一个全新的集群,etcd会初始化一个新的集群。
      • 如果是加入已有集群,可以设置为existing
  • ETCD_ROOT_PASSWORD=111111
    • 作用:设置etcd的root用户密码。
    • 说明:
      • 这里将root用户的密码设置为111111
      • 启用密码认证后,客户端需要提供正确的用户名和密码才能访问etcd。
  • ALLOW_NONE_AUTHENTICATION=yes
    • 作用:允许无密码访问(仅限开发环境)。
    • 说明:
      • 如果取消注释并设置为yes,则允许客户端无需认证即可访问etcd。
      • 注意:在生产环境中不建议启用此选项,因为会降低安全性。
  • ETCD_HEARTBEAT_INTERVAL=200
    • 作用:设置Leader节点向Follower节点发送心跳的间隔时间(单位:毫秒)。
    • 说明:
      • 这里设置为200毫秒。
      • 心跳间隔越短,Leader和Follower之间的通信越频繁,但也会增加网络负载。
  • ETCD_ELECTION_TIMEOUT=1000
    • 作用:设置Follower节点在多久未收到Leader心跳后开始选举(单位:毫秒)。
    • 说明:
      • 这里设置为1000毫秒。
      • 如果Follower在1秒内未收到Leader的心跳,会触发新的Leader选举。
  • ETCD_INITIAL_CLUSTER_TOKEN=etcd-cluster
    • 作用:设置集群的唯一标识符。
    • 说明:
      • 这里设置为etcd-cluster
      • 这个令牌用于防止不同集群之间的节点意外加入。
  • ETCD_LOGGER=zap
    • 作用:设置etcd的日志记录器。
    • 说明:
      • 这里使用zap作为日志记录器。
      • zap是一个高性能的日志库,适合生产环境使用。

创建文件夹

mkdir etcd1-data
mkdir etcd2-data
mkdir etcd3-data
chmod 777 etcd1-data
chmod 777 etcd2-data
chmod 777 etcd3-data

启服务

docker compose up -d

使用

基本用法

设置键值对

命令: etcdctl put <key> <value>
功能: 将指定的值存储到指定的键中。如果键已存在,则覆盖原有值。
示例:

$ ./etcdctl --endpoints=127.0.0.1:2379 --user=root --password="111111" get foo
# foo
# bar

获取键值对

命令: etcdctl get <key>
功能: 获取指定键的值。
示例:

$ ./etcdctl --endpoints=127.0.0.1:2379 --user=root --password="111111" put foo bar
# OK

只打印值

--print-value-only=true

./etcdctl --endpoints=127.0.0.1:2379 --user=root --password="111111" get abc --print-value-only=true

只打印键

--keys-only

./etcdctl --endpoints=127.0.0.1:2379 --user=root --password="111111" get abc --keys-only=true

获取指定前缀的键值对

--prefix

./etcdctl --endpoints=127.0.0.1:2379 --user=root --password="111111" get --prefix abc

获取以abc开头的键的键值对

限制返回的数量

--limit

./etcdctl --endpoints=127.0.0.1:2379 --user=root --password="111111" get --limit=10 --from-key /config/item-1

获取键的元数据

$ ./etcdctl get /path/to/key --write-out=json
./etcdctl --endpoints=127.0.0.1:2379 --user=root --password="111111" get abc --write-out=json
{"header":{"cluster_id":10316109323310759371,"member_id":12530464223947363063,"revision":145818,"raft_term":69},"kvs":[{"key":"YWJj","create_revision":145817,"mod_revision":145818,"version":2,"value":"YWJjMg=="}],"count":1}

获取键的计数

$ ./etcdctl --endpoints=127.0.0.1:2379 --user=root --password="111111" get --prefix /config/itemaaa-  --count-only --write-o
ut=fields
"ClusterID" : 10316109323310759371
"MemberID" : 12530464223947363063
"Revision" : 145818
"RaftTerm" : 69
"More" : false
"Count" : 100
  • ClusterID:这是 etcd 集群的唯一标识符(ID)
  • MemberID:这是当前 etcd 成员(节点)的唯一标识符(ID)
  • Revision:这是 etcd 存储的当前修订版本号(Revision)
  • RaftTerm:这是 Raft 协议的当前任期号(Term)
  • More:表示是否还有更多的数据可以查询
  • Count:表示当前查询返回的键值对数量

获取键的十六进制编码值

$ ./etcdctl --endpoints=127.0.0.1:2379 --user=root --password="111111" get abc --hex
\x61\x62\x63
\x61\x62\x63\x32

使用 --hex 选项可以将键和值以十六进制格式显示。

删除键值对

命令: etcdctl del <key>
功能: 删除指定的键。
示例:

$ ./etcdctl --endpoints=127.0.0.1:2379 --user=root --password="111111" del foo
# 1
$ ./etcdctl --endpoints=127.0.0.1:2379 --user=root --password="111111" get foo
# (无输出,键已删除)

监听键变化

命令: etcdctl watch <key>
功能: 监听指定键的变化,当键的值发生变化时,输出新值。
示例:

./etcdctl --endpoints=127.0.0.1:2379 --user=root --password="111111" watch foo
# PUT
# foo
# bar

事务操作

命令: etcdctl txn
功能: 执行原子事务操作。事务由条件、成功时的操作和失败时的操作组成。
示例:

./etcdctl --endpoints=127.0.0.1:2379 --user=root --password="111111" txn <<<'mod("key1") > "0"

put key1 "overwrote-key1"

put key1 "created-key1"
put key2 "some extra key"

'
# FAILURE
# OK
# OK

租约管理

命令: etcdctl lease grant <ttl>
功能: 创建一个租约,租约会在指定的 TTL(生存时间)后自动过期。
示例:

./etcdctl --endpoints=127.0.0.1:2379 --user=root --password="111111" lease grant 60
# lease 32695410dcc0ca06 granted with TTL(60s)
./etcdctl --endpoints=127.0.0.1:2379 --user=root --password="111111" put foo bar --lease=32695410dcc0ca06
# OK

管理

检查集群健康状态

endpoint health

./etcdctl --endpoints=127.0.0.1:2379,127.0.0.1:2479,127.0.0.1:2579 --user=root --password="111111" --write-out=table endpoint health

参数

  • --endpoints:用于指定 etcd 集群中的一个或多个节点的地址。etcdctl 会通过这些地址与集群进行交互。
  • --user:用户名(如果设置了认证)
  • --password:密码。如果设置了密码
  • --write-out:输出格式
    格式 可读性 机器可解析性 适用场景
    simple 日常命令行操作,快速查看结果
    json 自动化脚本或与其他工具集成
    protobuf 高性能场景,程序间通信
    fields 提取特定字段,适合命令行工具解析
    table 查看结构化数据,适合人类阅读

结果

+----------------+--------+------------+-------+
|    ENDPOINT    | HEALTH |    TOOK    | ERROR |
+----------------+--------+------------+-------+
| 127.0.0.1:2379 |   true | 4.635238ms |       |
| 127.0.0.1:2479 |   true | 8.458422ms |       |
| 127.0.0.1:2579 |   true | 7.839896ms |       |
+----------------+--------+------------+-------+

不同格式的输出

# simple格式
$ ./etcdctl --endpoints=127.0.0.1:2379,127.0.0.1:2479,127.0.0.1:2579 --user=root --password="111111" --write-out=simple endpoint health
127.0.0.1:2479 is healthy: successfully committed proposal: took = 4.042917ms
127.0.0.1:2379 is healthy: successfully committed proposal: took = 7.616517ms
127.0.0.1:2579 is healthy: successfully committed proposal: took = 5.400498ms


# json格式
$ ./etcdctl --endpoints=127.0.0.1:2379,127.0.0.1:2479,127.0.0.1:2579 --user=root --password="111111" --write-out=json endpoint health
[{"endpoint":"127.0.0.1:2579","health":true,"took":"3.930839ms"},{"endpoint":"127.0.0.1:2479","health":true,"took":"1.145915ms"},{"endpoint":"127.0.0.1:2379","health":true,"took":"1.741041ms"}]


# fields格式
$ ./etcdctl --endpoints=127.0.0.1:2379,127.0.0.1:2479,127.0.0.1:2579 --user=root --password="111111" --write-out=fields endpoint health
"Endpoint" : "127.0.0.1:2479"
"Health" : true
"Took" : 2.127138ms
"Error" : 

"Endpoint" : "127.0.0.1:2579"
"Health" : true
"Took" : 4.811186ms
"Error" : 

"Endpoint" : "127.0.0.1:2379"
"Health" : true
"Took" : 1.630513ms
"Error" : 

检查端点状态

endpoint status

$ ./etcdctl --endpoints=127.0.0.1:2379,127.0.0.1:2479,127.0.0.1:2579 --user=root --password="111111" --write-out=table endpoint status
+----------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+
|    ENDPOINT    |        ID        | VERSION | DB SIZE | IS LEADER | IS LEARNER | RAFT TERM | RAFT INDEX | RAFT APPLIED INDEX | ERRORS |
+----------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+
| 127.0.0.1:2379 | ade526d28b1f92f7 |  3.5.17 |   16 MB |     false |      false |        69 |     119394 |             119394 |        |
| 127.0.0.1:2479 | d282ac2ce600c1ce |  3.5.17 |   16 MB |      true |      false |        69 |     119395 |             119395 |        |
| 127.0.0.1:2579 | bd388e7810915853 |  3.5.17 |   16 MB |     false |      false |        69 |     119396 |             119396 |        |
+----------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+

列出集群成员

member list

$ ./etcdctl --endpoints=127.0.0.1:2379,127.0.0.1:2479,127.0.0.1:2579 --user=root --password="111111" --write-out=table  member list
+------------------+---------+-------+-------------------+-------------------+------------+
|        ID        | STATUS  | NAME  |    PEER ADDRS     |   CLIENT ADDRS    | IS LEARNER |
+------------------+---------+-------+-------------------+-------------------+------------+
| ade526d28b1f92f7 | started | etcd1 | http://etcd1:2380 | http://etcd1:2379 |      false |
| bd388e7810915853 | started | etcd3 | http://etcd3:2380 | http://etcd3:2379 |      false |
| d282ac2ce600c1ce | started | etcd2 | http://etcd2:2380 | http://etcd2:2379 |      false |
+------------------+---------+-------+-------------------+-------------------+------------+

还有其他 集群成员相关的命令

命令 功能描述
member add 向集群中添加新成员
member remove 从集群中移除成员
member update 更新集群成员的 peer URLs
# 向集群中添加一个新成员。
$ ./etcdctl --endpoints=127.0.0.1:2379,127.0.0.1:2479,127.0.0.1:2579 --user=root --password="111111" member add newMember --peer-urls=http://127.0.0.1:12380
# Member ced000fda4d05edf added to cluster 8c4281cc65c7b112

# 从集群中移除一个成员
$ ./etcdctl --endpoints=127.0.0.1:2379,127.0.0.1:2479,127.0.0.1:2579 --user=root --password="111111" member remove 2be1eb8f84b7f63e
# Member 2be1eb8f84b7f63e removed from cluster ef37ad9dc622a7c4

# 更新集群中某个成员的 peer URLs
$ ./etcdctl --endpoints=127.0.0.1:2379,127.0.0.1:2479,127.0.0.1:2579 --user=root --password="111111" member update 2be1eb8f84b7f63e --peer-urls=http://127.0.0.1:12381
# Member 2be1eb8f84b7f63e updated in cluster ef37ad9dc622a7c4

检查键值存储的哈希值

endpoint hashkv

$ ./etcdctl --endpoints=127.0.0.1:2379,127.0.0.1:2479,127.0.0.1:2579 --user=root --password="111111" --write-out=table endpoint hashkv
+----------------+------------+
|    ENDPOINT    |    HASH    |
+----------------+------------+
| 127.0.0.1:2379 | 3110076216 |
| 127.0.0.1:2479 | 3110076216 |
| 127.0.0.1:2579 | 3110076216 |
+----------------+------------+

列出所有警报

alarm list

$ ./etcdctl --endpoints=127.0.0.1:2379,127.0.0.1:2479,127.0.0.1:2579 --user=root --password="111111" --write-out=json alarm list
{"header":{"cluster_id":10316109323310759371,"member_id":12530464223947363063,"revision":119033,"raft_term":69}}
命令 功能描述
alarm disarm 解除所有警报
move-leader 将集群的领导权转移到指定的成员。
#  解除所有警报。
$ ./etcdctl --endpoints=127.0.0.1:2379,127.0.0.1:2479,127.0.0.1:2579 --user=root --password="111111" alarm disarm
# alarm:NOSPACE

# 将集群的领导权转移到指定的成员
$ ./etcdctl --endpoints=127.0.0.1:2379,127.0.0.1:2479,127.0.0.1:2579 --user=root --password="111111" move-leader c89feb932daef420
# Leadership transferred from 45ddc0e800e20b93 to c89feb932daef420

检查集群性能

check perf --load="s"

$ ./etcdctl --endpoints=127.0.0.1:2379,127.0.0.1:2479,127.0.0.1:2579 --user=root --password="111111" check perf --load="s"
 59 / 60 Boooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooom  !  98.33%
PASS: Throughput is 149 writes/s
PASS: Slowest request took 0.116064s
PASS: Stddev is 0.016313s
PASS

解读

  • Throughput: 吞吐量(每秒写入次数)。
  • Slowest request: 最慢请求的耗时。
  • Stddev: 请求耗时的标准差。

还有其他参数

  • --load
    作用: 指定性能测试的工作负载模型。
    可选值:
    负载类型 描述 适用场景
    s 小负载(Small) 小负载,模拟少量并发请求 测试集群的基本性能
    m 中负载(Medium) 中负载,模拟中等并发请求 测试集群的中等压力表现
    l 大负载(Large) 大负载,模拟高并发请求 测试集群的高压力表现
    xl 超大负载(XLarge) 超大负载,模拟极高并发请求 测试集群的极限性能
  • --prefix
    作用: 指定性能测试中写入的键的前缀。
    --prefix="/test"
  • --auto-compact
    作用: 在性能测试完成后,自动压缩存储(删除旧版本数据)。
    默认值: false。--auto-compact=true
  • --auto-defrag
    作用: 在性能测试完成后,自动进行数据碎片整理(释放磁盘空间)。
    默认值: false。 --auto-defrag=true
命令 功能描述
check datascale 检查集群在不同工作负载下的内存使用情况

快照和备份

保存快照

保存当前集群的快照到文件

snapshot save

./etcdctl --endpoints=127.0.0.1:2379,127.0.0.1:2479,127.0.0.1:2579 --user=root --password="111111" snapshot save snapshot.db

恢复快照

从快照文件恢复集群数据
snapshot restore

$ ./etcdctl --endpoints=127.0.0.1:2379,127.0.0.1:2479,127.0.0.1:2579 --user=root --password="111111" snapshot restore snapshot.db --initial-cluster-token etcd-cluster --initial-advertise-peer-urls http://127.0.0.1:2379 --name etcd1 --initial-cluster 'etcd1=http://127.0.0.1:2379,etcd2=http://127.0.0.1:2479,etcd3=http://127.0.0.1:2579'
  • --initial-cluster-token:指定新集群的唯一标识符(Token),用于区分不同的集群
  • --initial-advertise-peer-urls:指定当前节点的 peer URLs,用于集群内部通信
  • --name:指定当前节点的名称
  • --initial-cluster:指定新集群的初始成员列表,格式为 <name1>=<peer-url1>,<name2>=<peer-url2>,...

查看快照信息

snapshot status

./etcdctl --endpoints=127.0.0.1:2379,127.0.0.1:2479,127.0.0.1:2579 --user=root --password="111111" snapshot status file.db
# cf1550fb, 3, 3, 25 kB
posted @   厚礼蝎  阅读(21)  评论(0编辑  收藏  举报
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示