更改etcd默认存储2G限制

系统版本
[root@aaaaaa etcd]# cat /etc/redhat-release 
Red Hat Enterprise Linux release 8.4 (Ootpa)
etcd 版本
[root@aaaaaa etcd]# /data/etcd/etcd-v3.5.15-linux-amd64/etcdctl version
etcdctl version: 3.5.15
API version: 3.5
etcd 配置文件
[root@aaaaaa etcd]# cat /data/etcd/ceshinodefile.yml 
name: node1
data-dir: /data/etcd1/etcddata
listen-client-urls: 'http://192.168.73.114:12379'
advertise-client-urls: 'http://192.168.73.114:12379'
listen-peer-urls: 'http://192.168.73.114:12380'
initial-advertise-peer-urls: 'http://192.168.73.114:12380'
initial-cluster: node1=http://192.168.73.114:12380
initial-cluster-token: etcd-cluster-1
initial-cluster-state: new
# quota-backend-bytes: 8589934592 # 更改etcd存储为8G
etcd 启动脚本
[root@aaaaaa etcd]# cat /data/etcd/etcd-start.sh 
#!/bin/bash
nohup /data/etcd/etcd-v3.5.15-linux-amd64/etcd \
--auto-compaction-retention=1 \
--max-request-bytes=10485760 \
--auth-token jwt \
--config-file=/data/etcd/ceshinodefile.yml \
>> /data/etcd/etcd.log 2>&1 &
etcd 状态查看脚本
[root@aaaaaa etcd]# cat /data/etcd/status-cat.sh 
#!/bin/bash
# 设置环境变量
export ETCDCTL_API=3
ENDPOINTS="http://192.168.73.114:12379"

# 查询集群成员
/data/etcd/etcd-v3.5.15-linux-amd64/etcdctl  \
--endpoints=${ENDPOINTS} \
member list

# 查询端点状态
/data/etcd/etcd-v3.5.15-linux-amd64/etcdctl  \
--endpoints=${ENDPOINTS} \
endpoint status --write-out=table

# 持续查看etcd的状态
# for i in {1..10000};do echo $i;sh -x /data/etcd/status-cat.sh;sleep 5;done
etcd 数据压缩清理脚本
[root@aaaaaa etcd]# cat /data/etcd/compact-defrag-etcd.sh 
#!/bin/bash
# vi compact-defrag-etcd.sh
export ETCDCTL_DIAL_TIMEOUT=30s
# 如果遇到空间不足,可以这样操作:
# 获取当前版本号
rev=$(ETCDCTL_API=3 /data/etcd/etcd-v3.5.15-linux-amd64/etcdctl --endpoints http://192.168.73.114:12379  endpoint status --write-out="json" | egrep -o '"revision":[0-9]*' | egrep -o '[0-9]*')
# 压缩所有旧版本
ETCDCTL_API=3 /data/etcd/etcd-v3.5.15-linux-amd64/etcdctl --endpoints http://192.168.73.114:12379 compact $rev
# 去碎片化
ETCDCTL_API=3 /data/etcd/etcd-v3.5.15-linux-amd64/etcdctl --endpoints http://192.168.73.114:12379 defrag
# 取消警报
ETCDCTL_API=3 /data/etcd/etcd-v3.5.15-linux-amd64/etcdctl --endpoints http://192.168.73.114:12379  alarm disarm
# 测试通过
ETCDCTL_API=3 /data/etcd/etcd-v3.5.15-linux-amd64/etcdctl --endpoints http://192.168.73.114:12379 put key0 1234
etcd 批量测试数据写入脚本
# [root@aaaaaa etcd]# cat /data/etcd/test-data-to-etcd.py 

# 安装pyetcd包
# python3 -m pip install etcd-sdk-python

# 导入所需的库和模块
from concurrent.futures import ThreadPoolExecutor
from pyetcd import MultiEndpointEtcd3Client, Endpoint
from pyetcd.exceptions import ConnectionFailedError
import json
import time

# 初始化etcd的连接端点,指定IP地址、端口,关闭安全连接,设置连接失败后30秒重试
etcd = Endpoint(host="192.168.73.114", port=12379, secure=False, time_retry=30)
# 创建一个多端点的etcd客户端,启用故障转移
client = MultiEndpointEtcd3Client([etcd], failover=True)

# 创建一个10秒的租约
l = client.lease(10)
# 准备要存储的数据
data = {"data": 8000}
# 使用租约将数据存储在etcd中,键为"/test_ttl",值为data的JSON字符串形式
client.put("/test_ttl", json.dumps(data).encode("utf-8"), lease=l)

# 等待5秒
time.sleep(5)
# 尝试获取"/test_ttl"键的值,由于租约未到期,此时应能获取到值
b = client.get("/test_ttl")
print(b)

# 定义一个函数用于在etcd中写入数据
def write_data(etcd, start_index, count):
    for i in range(count):
        key = f"key{start_index + i}"
        value = 'x' * 1024 * 1024  # 每个值的大小设定为1MB
        etcd.put(key, value)  # 写入键值对到etcd

# 设置并发线程数和每个线程写入的记录数
num_threads = 10
records_per_thread = 1000000

# 使用线程池来并发执行数据写入操作
with ThreadPoolExecutor(max_workers=num_threads) as executor:
    futures = []
    for j in range(num_threads):
        start_index = j * records_per_thread
        # 打印
        print(start_index)
        # 向线程池提交任务
        futures.append(executor.submit(write_data, client, start_index, records_per_thread))

    # 等待所有线程执行完成
    for future in futures:
        future.result()

# 所有数据写入完成后打印消息
print("数据写入完成。")
启动etcd
[root@aaaaaa etcd]# sh -x /data/etcd/etcd-start.sh 
+ nohup /data/etcd/etcd-v3.5.15-linux-amd64/etcd --auto-compaction-mode=revision --auto-compaction-retention=1000 --config-file=/data/etcd/ceshinodefile.yml
[root@aaaaaa etcd]# ps -ef |grep '/data/etcd'
root      210091       1  1 18:14 pts/8    00:00:00 /data/etcd/etcd-v3.5.15-linux-amd64/etcd --auto-compaction-mode=revision --auto-compaction-retention=1000 --config-file=/data/etcd/ceshinodefile.yml
root      211266    3550  0 18:15 pts/8    00:00:00 grep --color=auto /data/etcd
etcd 状态查看
[root@aaaaaa etcd]# sh -x /data/etcd/status-cat.sh 
+ export ETCDCTL_API=3
+ ETCDCTL_API=3
+ ENDPOINTS=http://192.168.73.114:12379
+ /data/etcd/etcd-v3.5.15-linux-amd64/etcdctl --endpoints=http://192.168.73.114:12379 member list
5dd99bf7560a9ed0, started, node1, http://192.168.73.114:12380, http://192.168.73.114:12379, false
+ /data/etcd/etcd-v3.5.15-linux-amd64/etcdctl --endpoints=http://192.168.73.114:12379 endpoint status --write-out=table
+-----------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+
|          ENDPOINT           |        ID        | VERSION | DB SIZE | IS LEADER | IS LEARNER | RAFT TERM | RAFT INDEX | RAFT APPLIED INDEX | ERRORS |
+-----------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+
| http://192.168.73.114:12379 | 5dd99bf7560a9ed0 |  3.5.15 |   20 kB |      true |      false |         2 |          4 |                  4 |        |
+-----------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+
安装python脚本依赖包
[root@aaaaaa etcd]#  python3 -m pip install etcd-sdk-python
etcd测试数据写入
[root@aaaaaa etcd]# python3 /data/etcd/test-data-to-etcd.py 
(b'{"data": 8000}', <pyetcd.client.KVMetadata object at 0x7f7fc9daaa00>)
0
1000000
2000000
3000000
4000000
5000000
6000000
7000000
8000000
9000000
Traceback (most recent call last):
  File "/data/etcd/test-data-to-etcd.py", line 53, in <module>
    future.result()
# 因etcd数据不能写入报错
更改etcd的启动文件,设置存储为8G
[root@aaaaaa etcd]# cat /data/etcd/ceshinodefile.yml 
name: node1
data-dir: /data/etcd1/etcddata
listen-client-urls: 'http://192.168.73.114:12379'
advertise-client-urls: 'http://192.168.73.114:12379'
listen-peer-urls: 'http://192.168.73.114:12380'
initial-advertise-peer-urls: 'http://192.168.73.114:12380'
initial-cluster: node1=http://192.168.73.114:12380
initial-cluster-token: etcd-cluster-1
initial-cluster-state: new
quota-backend-bytes: 8589934592 # 更改etcd存储为8G
查看etcd状态
[root@aaaaaa etcd]# sh -x /data/etcd/status-cat.sh 
+ export ETCDCTL_API=3
+ ETCDCTL_API=3
+ ENDPOINTS=http://192.168.73.114:12379
+ /data/etcd/etcd-v3.5.15-linux-amd64/etcdctl --endpoints=http://192.168.73.114:12379 member list
5dd99bf7560a9ed0, started, node1, http://192.168.73.114:12380, http://192.168.73.114:12379, false
+ /data/etcd/etcd-v3.5.15-linux-amd64/etcdctl --endpoints=http://192.168.73.114:12379 endpoint status --write-out=table
+-----------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------------------------------+
|          ENDPOINT           |        ID        | VERSION | DB SIZE | IS LEADER | IS LEARNER | RAFT TERM | RAFT INDEX | RAFT APPLIED INDEX |             ERRORS             |
+-----------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------------------------------+
| http://192.168.73.114:12379 | 5dd99bf7560a9ed0 |  3.5.15 |  2.2 GB |      true |      false |         2 |       1996 |               1996 |   memberID:6762607802076274384 |
|                             |                  |         |         |           |            |           |            |                    |                 alarm:NOSPACE  |
+-----------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------------------------------+
# DB SIZE 为 2.2GB,etcd默认的存储是2G
对etcd数据进行压缩
[root@aaaaaa etcd]# sh -x /data/etcd/compact-defrag-etcd.sh 
+ export ETCDCTL_DIAL_TIMEOUT=30s
+ ETCDCTL_DIAL_TIMEOUT=30s
++ ETCDCTL_API=3
++ /data/etcd/etcd-v3.5.15-linux-amd64/etcdctl --endpoints http://192.168.73.114:12379 endpoint status --write-out=json
++ egrep -o '"revision":[0-9]*'
++ egrep -o '[0-9]*'
+ rev=1982
+ ETCDCTL_API=3
+ /data/etcd/etcd-v3.5.15-linux-amd64/etcdctl --endpoints http://192.168.73.114:12379 compact 1982
compacted revision 1982
+ ETCDCTL_API=3
+ /data/etcd/etcd-v3.5.15-linux-amd64/etcdctl --endpoints http://192.168.73.114:12379 defrag
{"level":"warn","ts":"2024-08-22T18:28:27.470669+0800","logger":"etcd-client","caller":"v3@v3.5.15/retry_interceptor.go:63","msg":"retrying of unary invoker failed","target":"etcd-endpoints://0xc00053a000/192.168.73.114:12379","attempt":0,"error":"rpc error: code = DeadlineExceeded desc = context deadline exceeded"}
Failed to defragment etcd member[http://192.168.73.114:12379] (context deadline exceeded)
+ ETCDCTL_API=3
+ /data/etcd/etcd-v3.5.15-linux-amd64/etcdctl --endpoints http://192.168.73.114:12379 alarm disarm
memberID:6762607802076274384 alarm:NOSPACE 
+ ETCDCTL_API=3
+ /data/etcd/etcd-v3.5.15-linux-amd64/etcdctl --endpoints http://192.168.73.114:12379 put key0 1234
OK
查看etcd状态
[root@aaaaaa etcd]# sh -x /data/etcd/status-cat.sh 
+ export ETCDCTL_API=3
+ ETCDCTL_API=3
+ ENDPOINTS=http://192.168.73.114:12379
+ /data/etcd/etcd-v3.5.15-linux-amd64/etcdctl --endpoints=http://192.168.73.114:12379 member list
5dd99bf7560a9ed0, started, node1, http://192.168.73.114:12380, http://192.168.73.114:12379, false
+ /data/etcd/etcd-v3.5.15-linux-amd64/etcdctl --endpoints=http://192.168.73.114:12379 endpoint status --write-out=table
+-----------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+
|          ENDPOINT           |        ID        | VERSION | DB SIZE | IS LEADER | IS LEARNER | RAFT TERM | RAFT INDEX | RAFT APPLIED INDEX | ERRORS |
+-----------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+
| http://192.168.73.114:12379 | 5dd99bf7560a9ed0 |  3.5.15 |  2.1 GB |      true |      false |         5 |       2015 |               2015 |        |
+-----------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+
重启etcd
[root@aaaaaa etcd]# ps -ef |grep '/data/etcd'|grep -v grep|awk '{print $2}'|xargs kill -9 
[root@aaaaaa etcd]# sh -x /data/etcd/etcd-start.sh 
+ nohup /data/etcd/etcd-v3.5.15-linux-amd64/etcd --auto-compaction-mode=revision --auto-compaction-retention=1000 --config-file=/data/etcd/ceshinodefile.yml
查看etcd日志
在日志中能够找到相关的后端信息
"quota-backend-bytes":8589934592
这个为后端存储为8G,说明已经改到8G了
测试数据写入测试
[root@aaaaaa etcd]# python3 /data/etcd/test-data-to-etcd.py 
(b'{"data": 8000}', <pyetcd.client.KVMetadata object at 0x7ff5ca679a00>)
0
1000000
2000000
3000000
4000000
5000000
6000000
7000000
8000000
9000000
Traceback (most recent call last):
  File "/data/etcd/test-data-to-etcd.py", line 53, in <module>
    future.result()
# etcd存储满导致的报错
查看etcd状态
[root@aaaaaa etcd]# sh -x /data/etcd/status-cat.sh 
+ export ETCDCTL_API=3
+ ETCDCTL_API=3
+ ENDPOINTS=http://192.168.73.114:12379
+ /data/etcd/etcd-v3.5.15-linux-amd64/etcdctl --endpoints=http://192.168.73.114:12379 member list
5dd99bf7560a9ed0, started, node1, http://192.168.73.114:12380, http://192.168.73.114:12379, false
+ /data/etcd/etcd-v3.5.15-linux-amd64/etcdctl --endpoints=http://192.168.73.114:12379 endpoint status --write-out=table
+-----------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------------------------------+
|          ENDPOINT           |        ID        | VERSION | DB SIZE | IS LEADER | IS LEARNER | RAFT TERM | RAFT INDEX | RAFT APPLIED INDEX |             ERRORS             |
+-----------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------------------------------+
| http://192.168.73.114:12379 | 5dd99bf7560a9ed0 |  3.5.15 |  8.6 GB |      true |      false |         6 |       8007 |               8007 |   memberID:6762607802076274384 |
|                             |                  |         |         |           |            |           |            |                    |                 alarm:NOSPACE  |
+-----------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------------------------------+
# DB SIZE 8.6 GB,说明存已经更改到了8G
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值