Please enable Javascript to view the contents

DeepSeek 3FS 运维指南

 ·  ☕ 9 分钟

记录一些 DeepSeek 3FS 的运维操作,持续更新中。

1. 基本概念及注意事项

  • Chain

一个 Chain 是由若干个 Target 组成,每个 Target 是一个存储的副本。在全部提交就绪的情况下,一个 Chain 的所有 Target 都是一致的。

一个 Chain 上的 Target 不能在同一个节点上。

Chain 就是存储的空间,写文件是会被分配到一个 Chain 上,读文件也是从一个 Chain 上读取。

  • Target

一个 Target 是一个数据副本,Target 分布在一组节点上。

Target 有三种 Role:HEAD、MIDDLE、TAIL。HEAD 是最新的数据,TAIL 是最旧的数据,MIDDLE 同步 HEAD 的数据,TAIL 同步 MIDDLE 的数据。

Target 被 remove 之后,磁盘空间也会被释放。

  • ChainTable

ChainTable 记录着一组 Chain ID,代表着存储系统能用的 Chain。Chain 在没有加入 ChainTable 之前,是不会被用来存储数据的。

  • 参数约束
1
2
3
链的数量 >= 磁盘数量 * 存储目标数 / 副本数
链的数量 >= 条带化宽度
磁盘数量 >= 副本数
  • 提交配置

MGMTD、META、STORAGE、FUSE 节点的配置都需要提交,才能正常工作。

  • Storage 节点的数据要谨慎处理

启动带有数据的 Storage 节点时,目录中的 Target 会被重新注册到集群中。这时的 Target 处于 TAIL 状态,会同步 MIDDLE 的数据,容易发生数据的紊乱。

最好不要带数据启动 Storage 节点,直接让 3FS 重建数据。

  • 操作要慢一点

3FS 组件的状态同步需要一点时间,操作要慢一点,等待状态同步完成。

  • 命令是幂等的

一条命令可以重复执行,不会有危害。有时状态同步不及时,可以重复执行命令。

2. 条带化参数怎么设置

在初始化集群时,有一个 init-cluster 的操作,里面有一个非常重要的参数 strip size,即条带化的宽度。

条带化技术就是将数据分割为若干个数据块,分布在不同的 Chain 上,以提高并行读写的性能。条带化的宽度就是被分割的数据块的数量。

条带化的宽度太大会增加元数据管理的复杂度,数据重建恢复的时间也会变长。一般来说,设置为 16 就够了。

如果磁盘太少,可能会限制条带化参数的设置。最好先不要进行 init-cluster 操作,在生成 chainTable 之后,上传之前,执行命令:

1
cat output/generated_chains.csv
1
2
3
4
ChainId,TargetId,TargetId,TargetId
900100001,100100100101,100100200101,100100400101
900100002,100100200102,100100300101,100100500101
...

查看有多少个 chain-id,条带化参数不能大于 Chain 的数量。

3. 重置、初始化集群

  • 进入 fdbcli 清空元数据
1
2
writemode on
clearrange "" \xFF

之后,节点会下线,全部节点的 ConfigVersion 重置为 0。

  • 重启全部 Storage 节点

需要重启全部的 Storage 节点,顺便清理一下挂载的存储目录。

1
rm -rf /data1/3fs/*
1
nerdctl restart 3fs_storage
  • 查看全部节点
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
/opt/3fs/bin/admin_cli --cfg /opt/3fs/etc/admin_cli.toml list-nodes

Id    Type     Status               Hostname      Pid  Tags  LastHeartbeatTime    ConfigVersion  ReleaseVersion
3     MGMTD    PRIMARY_MGMTD        8c05a1fbdf97  16   []    N/A                  0(UPTODATE)    250228-dev-1-999999-8c9883c2
1     MGMTD    HEARTBEAT_CONNECTED  58ca52320c3b  16   []    2025-03-19 02:20:58  0(UPTODATE)    250228-dev-1-999999-8c9883c2
2     MGMTD    HEARTBEAT_CONNECTED  391173a5a978  16   []    2025-03-19 02:20:59  0(UPTODATE)    250228-dev-1-999999-8c9883c2
101   META     HEARTBEAT_CONNECTED  b3fea43900e6  193  []    2025-03-19 02:21:04  0              250228-dev-1-999999-8c9883c2
102   META     HEARTBEAT_CONNECTED  fcebcb6ca5c3  186  []    2025-03-19 02:21:06  0              250228-dev-1-999999-8c9883c2
103   META     HEARTBEAT_CONNECTED  fea159ba0bd6  186  []    2025-03-19 02:21:00  0              250228-dev-1-999999-8c9883c2
1001  STORAGE  HEARTBEAT_CONNECTED  919404e2891f  187  []    2025-03-19 02:21:06  8(UPTODATE)    250228-dev-1-999999-8c9883c2
1002  STORAGE  HEARTBEAT_CONNECTED  e19b012d073c  179  []    2025-03-19 02:21:05  8(UPTODATE)    250228-dev-1-999999-8c9883c2
1003  STORAGE  HEARTBEAT_CONNECTED  fd2423d5e695  179  []    2025-03-19 02:21:05  8(UPTODATE)    250228-dev-1-999999-8c9883c2
1004  STORAGE  HEARTBEAT_CONNECTED  e8b6fbb9a774  178  []    2025-03-19 02:21:07  8(UPTODATE)    250228-dev-1-999999-8c9883c2
1005  STORAGE  HEARTBEAT_CONNECTED  19db0bc40648  172  []    2025-03-19 02:21:08  8(UPTODATE)    250228-dev-1-999999-8c9883c2

此时 MGMTD、META 的配置还没有提交,在初始化集群操作之后,需要再次重启 MGMTD、META 节点。

  • 计算 data placement
1
2
python3 /opt/3fs/deploy/data_placement/src/model/data_placement.py \
   -ql -relax -type CR --num_nodes 5 --replication_factor 3 --min_targets_per_disk 6
1
2025-03-19 10:02:29.157 | SUCCESS  | __main__:run:148 - saved solution to: output/DataPlacementModel-v_5-b_10-r_6-k_3-λ_2-lb_1-ub_1
  • 生成 chainTable
1
2
3
4
5
python3 /opt/3fs/deploy/data_placement/src/setup/gen_chain_table.py \
   --chain_table_type CR --node_id_begin 1001 --node_id_end 1005 \
   --num_disks_per_node 1 --num_targets_per_disk 6 \
   --target_id_prefix 1 --chain_id_prefix 9 \
   --incidence_matrix_path output/DataPlacementModel-v_5-b_10-r_6-k_3-λ_2-lb_1-ub_1/incidence_matrix.pickle
  • 查看 Chains 数量
1
cat output/generated_chains.csv

一共有 10 个 Chain

  • 初始化集群
1
/opt/3fs/bin/admin_cli -cfg /opt/3fs/etc/admin_cli.toml "init-cluster --mgmtd /opt/3fs/etc/mgmtd_main.toml 1 1048576 10"
  • 重启 MGMTD、META 节点
1
2
nerdctl restart 3fs_mgmtd
nerdctl restart 3fs_meta

此时,全部节点已经就绪。

  • 创建 Target
1
/opt/3fs/bin/admin_cli --cfg /opt/3fs/etc/admin_cli.toml < output/create_target_cmd.txt
  • 创建用户
1
/opt/3fs/bin/admin_cli -cfg /opt/3fs/etc/admin_cli.toml "user-add --root --admin 0 root"
1
Token              AACJgD5Y8QCi6ce42wDfTDcr(Expired at N/A)

保存一下 Token,后续的操作都需要用到。

  • 上传 chainTable
1
/opt/3fs/bin/admin_cli --cfg /opt/3fs/etc/admin_cli.toml "upload-chains output/generated_chains.csv"
1
/opt/3fs/bin/admin_cli --cfg /opt/3fs/etc/admin_cli.toml "upload-chain-table --desc stage 1 output/generated_chain_table.csv"

4. 查看使用存储的客户端

1
2
3
4
/opt/3fs/bin/admin_cli --cfg /opt/3fs/etc/admin_cli.toml list-clients

ClientId                              ClientStart          SessionStart         LastExtend           ConfigVersion  Hostname                      Description                         Tags  ReleaseVersion
a938c253-1030-4138-b618-0e11113a4876  2025-03-14 08:04:26  2025-03-14 08:04:26  2025-03-18 03:39:39  336            927bb7bb3396                  fuse: 927bb7bb3396                  []    250228-dev-1-999999-8c9883c2

5. 重建一个存储节点

在原来的机器上,就地重建存储节点,通常用于存储目录变更、磁盘更换等情况。

  • 删除存储节点的数据
1
rm -rf /data1/3fs/*
  • 重启存储节点
1
nerdctl restart 3fs_storage
  • 查看 Target
1
2
3
4
5
6
7
8
/opt/3fs/bin/admin_cli --cfg /opt/3fs/etc/admin_cli.toml  list-targets | grep 1001001

100100100101  900100001  TAIL    OFFLINE      OFFLINE     1001    0          1342177280
100100100105  900100008  TAIL    OFFLINE      OFFLINE     1001    0          4027580416
100100100104  900100005  TAIL    OFFLINE      OFFLINE     1001    0          4027580416
100100100106  900100010  TAIL    OFFLINE      OFFLINE     1001    0          4026531840
100100100102  900100003  TAIL    OFFLINE      OFFLINE     1001    0          4026531840
100100100103  900100004  TAIL    OFFLINE      OFFLINE     1001    0          4027580416
  • 创建 Target
1
2
3
4
5
6
7
8
echo "
create-target --node-id 1001 --disk-index 0 --target-id 100100100101 --chain-id 900100001  --use-new-chunk-engine
create-target --node-id 1001 --disk-index 0 --target-id 100100100105 --chain-id 900100008  --use-new-chunk-engine
create-target --node-id 1001 --disk-index 0 --target-id 100100100104 --chain-id 900100005  --use-new-chunk-engine
create-target --node-id 1001 --disk-index 0 --target-id 100100100106 --chain-id 900100010  --use-new-chunk-engine
create-target --node-id 1001 --disk-index 0 --target-id 100100100102 --chain-id 900100003  --use-new-chunk-engine
create-target --node-id 1001 --disk-index 0 --target-id 100100100103 --chain-id 900100004  --use-new-chunk-engine
" > create_target_cmd.txt
1
/opt/3fs/bin/admin_cli --cfg /opt/3fs/etc/admin_cli.toml < create_target_cmd.txt
  • 等待节点上的 Target 重建完成
1
2
3
/opt/3fs/bin/admin_cli --cfg /opt/3fs/etc/admin_cli.toml  list-targets

100100500101  900100002  TAIL    SYNCING      ONLINE      1005    0          1342177280

SYNCING 的 Target,表示正在进行数据重建,需要等待其完成。

6. 替换一个存储节点

换一个新的存储节点,node-id 也发生变化。

  • 删除旧节点的 Target
1
2
3
4
5
6
7
8
/opt/3fs/bin/admin_cli --cfg /opt/3fs/etc/admin_cli.toml list-targets |grep 1004

100100400101  900100001  MIDDLE  SERVING      UPTODATE    1004    0          4026531840
100100400105  900100008  MIDDLE  SERVING      UPTODATE    1004    0          1342177280
100100400104  900100007  MIDDLE  SERVING      UPTODATE    1004    0          4026531840
100100400102  900100005  HEAD    SERVING      UPTODATE    1004    0          4026531840
100100400106  900100009  MIDDLE  SERVING      UPTODATE    1004    0          4026531840
100100400103  900100006  TAIL    SERVING      UPTODATE    1004    0          4026531840
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
echo "
offline-target --node-id 1004 --target-id 100100400101
update-chain --mode remove 900100001 100100400101
remove-target --node-id 1004 --target-id 100100400101

offline-target --node-id 1004 --target-id 100100400105
update-chain --mode remove 900100008 100100400105
remove-target --node-id 1004 --target-id 100100400105

offline-target --node-id 1004 --target-id 100100400104
update-chain --mode remove 900100007 100100400104
remove-target --node-id 1004 --target-id 100100400104

offline-target --node-id 1004 --target-id 100100400102
update-chain --mode remove 900100005 100100400102
remove-target --node-id 1004 --target-id 100100400102

offline-target --node-id 1004 --target-id 100100400106
update-chain --mode remove 900100009 100100400106
remove-target --node-id 1004 --target-id 100100400106

offline-target --node-id 1004 --target-id 100100400103
update-chain --mode remove 900100006 100100400103
remove-target --node-id 1004 --target-id 100100400103
" > remove_target_cmd.txt
1
/opt/3fs/bin/admin_cli --cfg /opt/3fs/etc/admin_cli.toml < remove_target_cmd.txt
  • 删除下线的 Target
1
2
3
4
5

- 停掉旧的存储节点

```bash
nerdctl rm 3fs_storage -f

其状态会变为 HEARTBEAT_FAILED,Target 处于 OFFLINE 状态。

  • 启动相同 ID 的新存储节点

将新节点的 node-id 设置为 1006。这里尝试过将新节点的 node-id 与之前的保持一致,但是并不能重建,即使 hostname 相同也不想,可能是还有其他的唯一标识符。

  • 创建 Target 加入 Chain
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
echo "
create-target --node-id 1006 --disk-index 0 --target-id 100100400101 --chain-id 900100001  --use-new-chunk-engine
update-chain --mode add 900100001 100100400101

create-target --node-id 1006 --disk-index 0 --target-id 100100400105 --chain-id 900100008  --use-new-chunk-engine
update-chain --mode add 900100008 100100400105

create-target --node-id 1006 --disk-index 0 --target-id 100100400104 --chain-id 900100007  --use-new-chunk-engine
update-chain --mode add 900100007 100100400104

create-target --node-id 1006 --disk-index 0 --target-id 100100400102 --chain-id 900100005  --use-new-chunk-engine
update-chain --mode add 900100005 100100400102

create-target --node-id 1006 --disk-index 0 --target-id 100100400106 --chain-id 900100009  --use-new-chunk-engine
update-chain --mode add 900100009 100100400106

create-target --node-id 1006 --disk-index 0 --target-id 100100400103 --chain-id 900100006  --use-new-chunk-engine
update-chain --mode add 900100006 100100400103
" > create_target_cmd.txt
1
/opt/3fs/bin/admin_cli --cfg /opt/3fs/etc/admin_cli.toml < create_target_cmd.txt

此时会触发 Target 的数据重建,等待 Target 的状态变为 SERVING

7. 扩容一个存储节点

这里需要提前规划,总的 Target 数量应该是总的存储数量的整数倍。这里从 5 个节点扩容到 6 个节点,总得 Target 数量是 30 个,扩容之前每个节点上有 6 个 Target,扩容之后每个节点上有 5 个 Target。

  • 新起一个存储节点

node-id 为 1006。新的节点加入后,每个节点上应该有 5 个 Target。下面我们需要找 5 个 Target,然后将其分配到新的节点上。

  • 筛选出需要迁移的 Target
1
/opt/3fs/bin/admin_cli --cfg /opt/3fs/etc/admin_cli.toml list-targets

可以借助 LLM 找到需要迁移的 Target,列出其中的 5 行数据,要求来自不同的 Chain,分别来自不同的节点,按照原始格式输出数据即可

1
2
3
4
5
100100100101  900100001  HEAD    SERVING      UPTODATE    1001    0          1342177280
100100200102  900100002  HEAD    SERVING      UPTODATE    1002    0          1342177280
100100300105  900100009  HEAD    SERVING      UPTODATE    1003    0          1342177280
100100400105  900100008  TAIL    SERVING      UPTODATE    1004    0          1342177280
100100500106  900100010  TAIL    SERVING      UPTODATE    1005    0          1342177280
  • 移除这些 Target
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
echo "
offline-target --node-id 1001 --target-id 100100100101
update-chain --mode remove 900100001 100100100101
remove-target --node-id 1001 --target-id 100100100101

offline-target --node-id 1002 --target-id 100100200102
update-chain --mode remove 900100002 100100200102
remove-target --node-id 1002 --target-id 100100200102

offline-target --node-id 1003 --target-id 100100300105
update-chain --mode remove 900100009 100100300105
remove-target --node-id 1003 --target-id 100100300105

offline-target --node-id 1004 --target-id 100100400105
update-chain --mode remove 900100008 100100400105
remove-target --node-id 1004 --target-id 100100400105

offline-target --node-id 1005 --target-id 100100500106
update-chain --mode remove 900100010 100100500106
remove-target --node-id 1005 --target-id 100100500106
" > offline_target_cmd.txt
1
/opt/3fs/bin/admin_cli --cfg /opt/3fs/etc/admin_cli.toml < offline_target_cmd.txt
  • 添加新的 Target 并加入 Chain
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
echo "
create-target --node-id 1006 --disk-index 0 --target-id 100100100101 --chain-id 900100001  --use-new-chunk-engine
update-chain --mode add 900100001 100100100101

create-target --node-id 1006 --disk-index 0 --target-id 100100200102 --chain-id 900100002  --use-new-chunk-engine
update-chain --mode add 900100002 100100200102

create-target --node-id 1006 --disk-index 0 --target-id 100100300105 --chain-id 900100009  --use-new-chunk-engine
update-chain --mode add 900100009 100100300105

create-target --node-id 1006 --disk-index 0 --target-id 100100400105 --chain-id 900100008  --use-new-chunk-engine
update-chain --mode add 900100008 100100400105

create-target --node-id 1006 --disk-index 0 --target-id 100100500106 --chain-id 900100010  --use-new-chunk-engine
update-chain --mode add 900100010 100100500106
" > create_target_cmd.txt
1
/opt/3fs/bin/admin_cli --cfg /opt/3fs/etc/admin_cli.toml < create_target_cmd.txt

此时,新节点马上就会开始进行数据重建,可以通过 list-targets 查看状态。

8. 下线一个存储节点

这里准备下线 1001 节点,然后将其迁移到其他节点上。

  • 过滤出需要重建的 Target
1
2
3
4
5
6
7
8
/opt/3fs/bin/admin_cli --cfg /opt/3fs/etc/admin_cli.toml list-targets |grep 1001001

100100100101  900100001  MIDDLE  SERVING      UPTODATE    1001    0          5369757696
100100100105  900100008  MIDDLE  SERVING      UPTODATE    1001    0          2684354560
100100100104  900100005  MIDDLE  SERVING      UPTODATE    1001    0          5369757696
100100100106  900100010  MIDDLE  SERVING      UPTODATE    1001    0          2684354560
100100100102  900100003  TAIL    SERVING      UPTODATE    1001    0          5368709120
100100100103  900100004  TAIL    SYNCING      ONLINE      1001    0          3121610752
  • 移除旧的 Target
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
echo "
offline-target --node-id 1001 --target-id 100100100101
update-chain --mode remove 900100001 100100100101
remove-target --node-id 1001 --target-id 100100100101

offline-target --node-id 1001 --target-id 100100100105
update-chain --mode remove 900100008 100100100105
remove-target --node-id 1001 --target-id 100100100105

offline-target --node-id 1001 --target-id 100100100104
update-chain --mode remove 900100005 100100100104
remove-target --node-id 1001 --target-id 100100100104

offline-target --node-id 1001 --target-id 100100100106
update-chain --mode remove 900100010 100100100106
remove-target --node-id 1001 --target-id 100100100106

offline-target --node-id 1001 --target-id 100100100102
update-chain --mode remove 900100003 100100100102
remove-target --node-id 1001 --target-id 100100100102

offline-target --node-id 1001 --target-id 100100100103
update-chain --mode remove 900100004 100100100103
remove-target --node-id 1001 --target-id 100100100103
" > remove_target_cmd.txt
1
/opt/3fs/bin/admin_cli --cfg /opt/3fs/etc/admin_cli.toml < remove_target_cmd.txt
  • 规划 Target 的分布

这里又需要借助 LLM 来规划 Target 的分布。

/opt/3fs/bin/admin_cli --cfg /opt/3fs/etc/admin_cli.toml list-targets 的输出结果和提示词 将节点 1001 上的全部 Target 迁移到其他节点上,需要保障属于同一个 Chain 的 Target 不在同一个节点上,输出迁移后 Target Chain 与新节点的对应关系 一起输入到 LLM 中。得到分布结果:

TargetChainRoleNew Node
100100100101900100001MIDDLE1003
100100100105900100008MIDDLE1002
100100100104900100005MIDDLE1004
100100100106900100010MIDDLE1004
100100100102900100003TAIL1005
100100100103900100004TAIL1006
  • 将 Target 均匀分布到其他节点上
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
echo "
create-target --node-id 1003 --disk-index 0 --target-id 100100100101 --chain-id 900100001  --use-new-chunk-engine
update-chain --mode add 900100001 100100100101

create-target --node-id 1002 --disk-index 0 --target-id 100100100105 --chain-id 900100008  --use-new-chunk-engine
update-chain --mode add 900100008 100100100105

create-target --node-id 1004 --disk-index 0 --target-id 100100100104 --chain-id 900100005  --use-new-chunk-engine
update-chain --mode add 900100005 100100100104

create-target --node-id 1004 --disk-index 0 --target-id 100100100106 --chain-id 900100010  --use-new-chunk-engine
update-chain --mode add 900100010 100100100106

create-target --node-id 1005 --disk-index 0 --target-id 100100100102 --chain-id 900100003  --use-new-chunk-engine
update-chain --mode add 900100003 100100100102

create-target --node-id 1006 --disk-index 0 --target-id 100100100103 --chain-id 900100004  --use-new-chunk-engine
update-chain --mode add 900100004 100100100103
" > create_target_cmd.txt
1
/opt/3fs/bin/admin_cli --cfg /opt/3fs/etc/admin_cli.toml < create_target_cmd.txt

等待 Target 的状态从 SYNCING 变为 SERVING

  • 下线节点
1
nerdctl rm 3fs_storage -f

此时 Storage 节点的状态会变为 HEARTBEAT_FAILED

1
1001  STORAGE  HEARTBEAT_FAILED     919404e2891f  190  []    2025-03-20 03:13:57  7(UPTODATE)    250228-dev-1-999999-8c9883c2
  • 列表中删除节点
1
/opt/3fs/bin/admin_cli --cfg /opt/3fs/etc/admin_cli.toml unregister-node 1001 STORAGE

只有节点处于异常状态,才能够下线节点。

9. 添加 Chain

添加 Chain 能够增加 Target 数量,将 Target 放在新的节点上也可以达到扩容的目的。

9.1 添加新的 Chain

  • 导出 Chain
1
/opt/3fs/bin/admin_cli --cfg /opt/3fs/etc/admin_cli.toml dump-chains dump-for-add-nodes
  • 查看 Chain
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
vim dump-for-add-nodes.3

ChainId,TargetId,TargetId,TargetId
900100001,100100200101,100100100101,100100400101
900100002,100100300101,100100500101,100100200102
900100008,100100100105,100100300104,100100400105
900100007,100100200106,100100500104,100100400104
900100005,100100100104,100100500103,100100400102
900100010,100100100106,100100300106,100100500106
900100009,100100500105,100100300105,100100400106
900100003,100100100102,100100200103,100100300102
900100004,100100100103,100100200104,100100500102
900100006,100100200105,100100300103,100100400103

增加新的 Chain,要保证 Chain 上的 Target 数量是一致的。

1
2
990100001,190000000001,190000000002,190000000003
...

可以加很多条 Chain,但如果想要使用这些 Chain 也意味着需要更多的存储节点,因为相同 Chain 上的 Target 不能在同一个节点上。

  • 上传 Chain
1
/opt/3fs/bin/admin_cli --cfg /opt/3fs/etc/admin_cli.toml "upload-chains dump-for-add-nodes.3"
  • 查看 Target
1
2
3
4
5
/opt/3fs/bin/admin_cli --cfg /opt/3fs/etc/admin_cli.toml  list-targets

190000000001   990100001  HEAD    SERVING      OFFLINE     N/A     N/A        0
190000000002   990100001  MIDDLE  SERVING      OFFLINE     N/A     N/A        0
190000000003   990100001  TAIL    SERVING      OFFLINE     N/A     N/A        0

此时有新的 Target 等待放置到节点上。

9.2 添加新的 Target

  • 添加新的节点

这里以加入的新节点为 1009 为例,只分配部分 Target。

  • 分配 Target
1
2
3
4
5
echo "
create-target --node-id 1003 --disk-index 0 --target-id 190000000001 --chain-id 990100001  --use-new-chunk-engine
create-target --node-id 1004 --disk-index 0 --target-id 190000000002 --chain-id 990100001  --use-new-chunk-engine
create-target --node-id 1002 --disk-index 0 --target-id 190000000003 --chain-id 990100001  --use-new-chunk-engine
" > create_target_cmd.txt
1
/opt/3fs/bin/admin_cli --cfg /opt/3fs/etc/admin_cli.toml < create_target_cmd.txt
  • 查看 Target
1
2
3
4
5
/opt/3fs/bin/admin_cli --cfg /opt/3fs/etc/admin_cli.toml  list-targets |grep 1900

190000000003  990100001  HEAD    SERVING      UPTODATE    1002    0          0
190000000001  990100001  MIDDLE  SERVING      UPTODATE    1003    0          0
190000000002  990100001  TAIL    SYNCING      ONLINE      1004    0          0

此时,存储还不能使用这个 Chain,需要将其加入到 ChainTable 中。

9.3 添加新的 ChainTable

  • 导出 ChainTable
1
/opt/3fs/bin/admin_cli --cfg /opt/3fs/etc/admin_cli.toml dump-chain-table 1 ./dump-chainTable
  • 查看 ChainTable
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
vim dump-chainTable

ChainId
900100001
900100002
900100003
900100004
900100005
900100006
900100007
900100008
900100009
900100010

新增 Chain 的 ChainId

1
990100001
  • 上传 ChainTable
1
/opt/3fs/bin/admin_cli --cfg /opt/3fs/etc/admin_cli.toml "upload-chain-table --desc stage 1 ./dump-chainTable"
  • remove Target

1200000000001 920100001 HEAD SERVING UPTODATE 1001 0 0

1
2
3
echo "
create-target --node-id 1001 --disk-index 0 --target-id 1200000000006 --chain-id 920100002  --use-new-chunk-engine
" > remove_chain_cmd.txt
1
/opt/3fs/bin/admin_cli --cfg /opt/3fs/etc/admin_cli.toml < remove_chain_cmd.txt

10. LASTSRV 状态的 Target

  • LASTSRV

这种状态通常是 Target 提前加入了存储中,导致的异常状态。

1
2
3
120000000004   930100002  HEAD    LASTSRV      OFFLINE     N/A     N/A        0
120000000005   930100002  MIDDLE  OFFLINE      OFFLINE     N/A     N/A        0
120000000006   930100002  TAIL    OFFLINE      OFFLINE     N/A     N/A        0
  • 分配 OFFLINE 状态的 Target
1
2
3
echo "
create-target --node-id 1001 --disk-index 0 --target-id 120000000005 --chain-id 930100002  --use-new-chunk-engine
" > create_target_cmd.txt
1
/opt/3fs/bin/admin_cli --cfg /opt/3fs/etc/admin_cli.toml < create_target_cmd.txt
  • 轮转 Chain 上的 Target
1
/opt/3fs/bin/admin_cli --cfg /opt/3fs/etc/admin_cli.toml rotate-lastsrv 930100002
  • 查看 Target
1
2
3
120000000005   930100002  HEAD    SERVING      ONLINE      1001    0          0
120000000006   930100002  MIDDLE  OFFLINE      OFFLINE     N/A     N/A        0
120000000004   930100002  TAIL    OFFLINE      OFFLINE     N/A     N/A        0

此时,Chains 中 HEAD 的状态已经变为 SERVING。

11. 重建一个 Target

适用于 Target 状态异常,比如大小与其他 Target 不一致等情况。

  • 查看 Target
1
/opt/3fs/bin/admin_cli --cfg /opt/3fs/etc/admin_cli.toml  list-targets |grep 100100200102
1
100100200102  900100002  TAIL    SYNCING      ONLINE      1002    0          3911188480
  • 删除 Target
1
2
3
4
5
echo "
offline-target --node-id 1002 --target-id 100100200102
update-chain --mode remove 900100002 100100200102
remove-target --node-id 1002 --target-id 100100200102
" > offline_target_cmd.txt
1
/opt/3fs/bin/admin_cli --cfg /opt/3fs/etc/admin_cli.toml < offline_target_cmd.txt
  • 重新创建 Target
1
2
3
4
echo "
create-target --node-id 1002 --disk-index 0 --target-id 100100200102 --chain-id 900100002  --use-new-chunk-engine
update-chain --mode add 900100002 100100200102
" > create_target_cmd.txt
1
/opt/3fs/bin/admin_cli --cfg /opt/3fs/etc/admin_cli.toml < create_target_cmd.txt

微信公众号
作者
微信公众号