部署和操作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个节点:
etcd1
、etcd2
和etcd3
。 - 每个节点的名称和对应的peer通信地址都需要明确列出。
- 当前节点(
etcd1
)会根据这个列表与其他节点建立连接。
- 这里指定了集群中有3个节点:
ETCD_INITIAL_CLUSTER_STATE=new
- 作用:指定集群的初始状态。
- 说明:
new
表示这是一个全新的集群,etcd会初始化一个新的集群。- 如果是加入已有集群,可以设置为
existing
。
ETCD_ROOT_PASSWORD=111111
- 作用:设置etcd的root用户密码。
- 说明:
- 这里将root用户的密码设置为
111111
。 - 启用密码认证后,客户端需要提供正确的用户名和密码才能访问etcd。
- 这里将root用户的密码设置为
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
本文来自博客园,作者:厚礼蝎,转载请注明原文链接:https://www.cnblogs.com/guangdelw/p/18689599
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南