记一次 FastDFS 存储节点迁移:基于 scp 的实践与经验分享

一、背景

某某项目,机房到期,需要迁移至其他机房; 此项目已经运行了3年多,fastdfs累计数据大概在250G 左右,现需要把旧的fastdfs数据迁移到新的fastdfs上;

采用scp物理迁移数据的方式,停机迁移。

二、环境信息

机房 操作系统 IP 版本信息 备注
机房A centos7.9 172.16.10.28 fastdfs-v6.06 源码编译安装
机房B openeuler22.03 LTS SP4 172.22.33.201 fastdfs-v6.10.0,docker-27.1.1,docker-compose-v2.10.2 docker-compose部署

三、迁移前准备

3.1 在B机房,使用docker-compose部署fastdfs环境

docker,docker-compose 环境部署过程省略;

⚠️ 需要注意的是,fastdfs采用的宿主机网络直接通信的,请修改IP为宿主机IP地址

  • 创建fastdfs工作目录

    vim /home/application/Middleware/fastdfs/docker-compose.yml

  • 编辑docker-compose.yml

    version: '3'
    services:
    fastdfs:
    image: srebro/fastdfs:6.10.0
    container_name: fastdfs
    restart: always
    volumes:
    - "/home/application/Middleware/fastdfs/fastdfs_data:/home/dfs/data"
    ports:
    - "22122:22122"
    - "23000:23000"
    environment:
    FASTDFS_IPADDR: "172.22.33.201"
    network_mode: host

  • 运行docker-compose创建容器

    docker-compose up -d docker-compose ps
    NAME COMMAND SERVICE STATUS PORTS
    fastdfs "/home/fastdfs.sh" fastdfs running

  • 模拟测试上传下载

    #登录到fastdfs容器内部
    $ docker exec -it fastdfs bash

    #创建client.conf 配置文件
    $ cat > /etc/fdfs/client.conf << EOF
    base_path=/tmp
    tracker_server=172.22.33.201:22122
    EOF

    #创建一个测试文件,模拟写入一些内容

    $ cat > /tmp/test << EOF
    hello, srebro.cn | 运维小弟
    EOF

    #使用fdfs_upload_file,上传测试文件
    $ fdfs_upload_file /etc/fdfs/client.conf /tmp/test
    group1/M00/00/05/rBYhyWbayPGAWUFtAAAAIAqGCgY7719471

    #看到返回group1/M00/00/05/rBYhyWbayPGAWUFtAAAAIAqGCgY7719471, 在 fastdfs 数据目录上相应目录中均能查看到该文件

    $ ls -l /home/dfs/data/00/05/rBYhyWbayPGAWUFtAAAAIAqGCgY7719471
    -rw-r--r-- 1 root root 32 Sep 6 17:18 /home/dfs/data/00/05/rBYhyWbayPGAWUFtAAAAIAqGCgY7719471

    $ cat /home/dfs/data/00/05/rBYhyWbayPGAWUFtAAAAIAqGCgY7719471
    hello, srebro.cn | 运维小弟

  • 测试完没有问题之后,停掉新的fastdfs服务,准备接收迁移旧数据;

⚠️ 需要保持fastdfs_data 目录下内容为空,因为我们是采用直接物理拷贝的方式,把数据直接拷贝到fastdfs_data 目录下

复制代码
$ cd /home/application/Middleware/fastdfs/
$ docker-compose down
[+] Running 1/1
⠿ Container fastdfs  Removed   

# 删除 fastdfs 数据目录下的所有内容
# 删除前的fastdfs 数据目录下的所有内容
$ ls -l /home/application/Middleware/fastdfs/fastdfs_data/
总用量 1056
drwxr-xr-x 258 root root 4096  5月 16 22:24 00
drwxr-xr-x 258 root root 4096  5月 16 22:24 01
drwxr-xr-x 258 root root 4096  5月 16 22:24 02
drwxr-xr-x 258 root root 4096  5月 16 22:24 03
drwxr-xr-x 258 root root 4096  5月 16 22:24 04
drwxr-xr-x 258 root root 4096  5月 16 22:24 05
drwxr-xr-x 258 root root 4096  5月 16 22:24 06
drwxr-xr-x 258 root root 4096  5月 16 22:24 07
drwxr-xr-x 258 root root 4096  5月 16 22:24 08
drwxr-xr-x 258 root root 4096  5月 16 22:24 09
drwxr-xr-x 258 root root 4096  5月 16 22:24 0A
drwxr-xr-x 258 root root 4096  5月 16 22:24 0B
drwxr-xr-x 258 root root 4096  5月 16 22:24 0C
drwxr-xr-x 258 root root 4096  5月 16 22:24 0D
drwxr-xr-x 258 root root 4096  5月 16 22:24 0E
...........................
-rw-r--r--   1 root root    2  9月  6 17:10 fdfs_storaged.pid
-rw-r--r--   1 root root    2  9月  6 17:10 fdfs_trackerd.pid
drwxr-xr-x 258 root root 4096  5月 16 22:24 FE
drwxr-xr-x 258 root root 4096  5月 16 22:24 FF
-rw-r--r--   1 root root   48  9月  4 16:40 storage_changelog.dat
-rw-r--r--   1 root root  240  9月  4 16:40 storage_groups_new.dat
-rw-r--r--   1 root root 1366  9月  4 16:40 storage_servers_new.dat
-rw-r--r--   1 root root 1083  9月  6 17:20 storage_stat.dat
-rw-r--r--   1 root root   23  9月  4 16:40 storage_sync_timestamp.dat
drwxr-xr-x   2 root root 4096  5月 16 22:24 sync
...........................



# 删除 fastdfs 数据目录下的所有内容
$ rm -rf  /home/application/Middleware/fastdfs/fastdfs_data/*

# 删除后的fastdfs 数据目录下的所有内容
$ ls -l /home/application/Middleware/fastdfs/fastdfs_data/
总用量 0

3.2 测试A-B机房网络是否联通

复制代码
#A机房服务器上
[root@localhost ~]# ping 172.22.33.201 -c 8
PING 172.22.33.201 (172.22.33.201) 56(84) bytes of data.
64 bytes from 172.22.33.201: icmp_seq=1 ttl=63 time=0.365 ms
64 bytes from 172.22.33.201: icmp_seq=2 ttl=63 time=0.372 ms
64 bytes from 172.22.33.201: icmp_seq=3 ttl=63 time=0.389 ms
64 bytes from 172.22.33.201: icmp_seq=4 ttl=63 time=0.368 ms
64 bytes from 172.22.33.201: icmp_seq=5 ttl=63 time=0.372 ms
64 bytes from 172.22.33.201: icmp_seq=6 ttl=63 time=0.396 ms
64 bytes from 172.22.33.201: icmp_seq=7 ttl=63 time=0.292 ms
64 bytes from 172.22.33.201: icmp_seq=8 ttl=63 time=0.339 ms

--- 172.22.33.201 ping statistics ---
8 packets transmitted, 8 received, 0% packet loss, time 6999ms
rtt min/avg/max/mdev = 0.292/0.361/0.396/0.037 ms


#B机房服务器上
[root@localhost 05]# ping 172.16.10.28 -c 8
PING 172.16.10.28 (172.16.10.28) 56(84) bytes of data.
64 bytes from 172.16.10.28: icmp_seq=1 ttl=63 time=0.260 ms
64 bytes from 172.16.10.28: icmp_seq=2 ttl=63 time=0.378 ms
64 bytes from 172.16.10.28: icmp_seq=3 ttl=63 time=0.393 ms
64 bytes from 172.16.10.28: icmp_seq=4 ttl=63 time=0.392 ms
64 bytes from 172.16.10.28: icmp_seq=5 ttl=63 time=0.356 ms
64 bytes from 172.16.10.28: icmp_seq=6 ttl=63 time=0.349 ms
64 bytes from 172.16.10.28: icmp_seq=7 ttl=63 time=0.363 ms
64 bytes from 172.16.10.28: icmp_seq=8 ttl=63 time=0.293 ms

--- 172.16.10.28 ping statistics ---
8 packets transmitted, 8 received, 0% packet loss, time 7184ms
rtt min/avg/max/mdev = 0.260/0.348/0.393/0.044 ms

四、停机迁移

4.1 登录A机房服务器上,停止🛑旧的fastdfs服务

复制代码
#停止fastdfs服务
$ /etc/init.d/fdfs_storaged stop
Stopping fdfs_storaged (via systemctl):                    [  确定  ]

$ /etc/init.d/fdfs_trackerd stop
Stopping fdfs_trackerd (via systemctl):                    [  确定  ]


#查看是否还存在fdfs进程
$ ps -ef | grep fdfs | grep -v grep
#返回为空,表示fastdfs已经退出了

4.1 登录A 机房,旧的fastdfs服务器上

只需要拷贝数据目录下,两字符的目录,其他的不要

复制代码
#切换到数据目录下
$ cd /home/data/fdfs/data

# 查看数据目录下所有两字符目录个数【包含子目录】
$ ls -l ./[0-9A-F][0-9A-F] | wc -l
66303

#scp拷贝所有数据到新的服务器上
scp -rp  /home/data/fdfs/data/[0-9A-F][0-9A-F] root@172.22.33.201:/home/application/Middleware/fastdfs/fastdfs_data/

4.2 登录B 机房,新的fastdfs服务器上

复制代码
# 验证新的fastdfs服务器上,数据目录下所有两字符目录个数【包含子目录】
$ cd /home/application/Middleware/fastdfs/fastdfs_data/
$ ls -l ./[0-9A-F][0-9A-F] | wc -l
66303

两边数据保持一致,✅ 完成数据的迁移

4.3 启动 新的fastdfs服务器

复制代码
$ cd /home/application/Middleware/fastdfs

$ docker-compose up -d

$ docker-compose ps
NAME                COMMAND              SERVICE             STATUS              PORTS
fastdfs             "/home/fastdfs.sh"   fastdfs             running

五、业务端,测试新平台是否可用

六、其他

  • ⚠️注意事项: 注意FastDFS中有预留空间的概念,在tracker.conf中设置,配置项为:reserved_storage_space,为磁盘总空间的20%,请酌情设置reserved_storage_space这个参数,配合监控系统,及时关注磁盘剩余空间大小
  • Docker 环境下,FastDFS Tracker 必须使用 Host 网络https://github.com/happyfish100/fastdfs/issues/224
相关推荐
Teacher.chenchong3 小时前
基于GIS、RS、VORS模型、CCDM模型、geodetecto、GWR模型集成的生态系统健康的耦合协调分析
经验分享
yanjieliyun6 小时前
家庭服务器从入门到精通 · 第 5 篇 · NPM反向代理从安装到起飞:一条命令搞定HTTPS
docker
虹科数字化与AR6 小时前
农机机架、底盘等大型焊接结构件,如何快速检查结构偏差?
经验分享
天狼啸月19906 小时前
RagSEDE复现: Docker and Ragflow 关系
docker·容器·ragflow·ragsede
myqijin7 小时前
Obsidian 最佳同步插件:fast-note-sync的部署
经验分享
米尔的可达鸭7 小时前
深入操作系统 Socket 底层:EPOLLOUT 可写事件管理 + 非阻塞异步
开发语言·网络·数据结构·经验分享·websocket·网络协议
java_logo7 小时前
Docker 部署 SamWaf 完整教程:开源 Web 应用防火墙实测
docker·开源·防火墙·waf·samwaf·轩辕镜像·docker部署waf
C137的本贾尼7 小时前
第十篇:Docker & K8s——标准化应用的“集装箱“和“码头调度中心“
docker·容器·kubernetes
增量星球8 小时前
《持续交付2.0系列一》从技术交付到业务引领
java·docker·容器·devops
可以养肥8 小时前
我的技术信仰:在撕碎与重构中前行
经验分享·重构