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

news2025/1/12 13:21:13

一、背景

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

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

image-20240906164022920

二、环境信息

机房操作系统IP版本信息备注
机房Acentos7.9172.16.10.28fastdfs-v6.06源码编译安装
机房Bopeneuler22.03 LTS SP4172.22.33.201fastdfs-v6.10.0,docker-27.1.1,docker-compose-v2.10.2docker-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/

image-20240906175728404

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

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

image-20240906181256063

image-20240906181237339

六、其他

  • ⚠️注意事项: 注意FastDFS中有预留空间的概念,在tracker.conf中设置,配置项为:reserved_storage_space,为磁盘总空间的20%,请酌情设置reserved_storage_space这个参数,配合监控系统,及时关注磁盘剩余空间大小
  • Docker 环境下,FastDFS Tracker 必须使用 Host 网络,https://github.com/happyfish100/fastdfs/issues/224

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2131158.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

技术分享 | RK3568修改eMMC分区大小

我司IAC-RK3568-CM根据eMMC大小的不同&#xff0c;有着不同规格的产品&#xff0c;不论eMMC大小如何改变&#xff0c;其分区的配置大同小异&#xff0c;除了eMMC厂商所使用的区域无法变更外&#xff0c;留给用户的区域可自由写入。 我司产品默认eMMC启动&#xff0c;所以eMMC用…

【AI-18】Adam和SGD优化算法比较

Adam&#xff08;Adaptive Moment Estimation&#xff09;和 SGD&#xff08;Stochastic Gradient Descent&#xff0c;随机梯度下降&#xff09;是两种常见的优化算法&#xff0c;它们在不同方面有各自的特点。 一、算法原理 SGD&#xff1a; 通过计算损失函数关于每个样本的…

干货分享 | 激光测风雷达中准确监测温度、湿度和气压的重要性

前言 风场信息的测量是气象或空气动力学领域的重要工作内容之一&#xff0c;其测量的精确性对于气象研究尤为重要。 激光测风雷达作为新型测风技术&#xff0c;利用多普勒&#xff08;Doppler&#xff09;原理获取风向、风速信息&#xff0c;具有能够探测晴空风场、测风范围广…

element select + tree

element select tree的使用 <template slot"action1" slot-scope"text, record, index"><el-select v-model"record.tagValue" multiple placeholder"请选择":filter-method"(e) > filterTree(e, index)" filt…

5分钟配置Nginx?(二)

前言: 此文章分为两个部分。 5分钟搞懂什么是Nginx?(一)-CSDN博客文章浏览阅读82次。2.、那么此时入口的安全性则格外重要,同时因为加强了入口的安全性,后端的web server的安全则可以不用做额外安全工作。因为入口如果破防,后端web server一定破防,如果不…

支付宝开放平台-开发者社区——AI 日报「9 月 13 日」

1 OpenAl推出了一个新的大语言模型一 OpenAl o1 前沿技术瞭望官&#xff5c;阅读原文 新的模型主要体现在下面几个方面&#xff0c;思维链&#xff1a;o1在回答问题前会产生一个内部的思维链&#xff0c;这使得它能够进行更深入的推理。强化学习&#xff1a;通过大规模强化学…

Linux操作系统入门(一)

Linux操作系统是开源的类Unix操作系统内核&#xff0c;由林纳斯托瓦兹在1991年创建。 Linux操作系统以其强大的性能、稳定性和开放性&#xff0c;赢得了全球用户的广泛认可&#xff0c;从服务器到个人电脑&#xff0c;从超级计算机到嵌入式设备&#xff0c;都有它的身影。作为…

停止向供应商提供您的数据

组织管理其数据基础设施的方式正在发生重大转变。越来越多的公司认识到存储和计算分离的优势&#xff0c;从而获得更好的性能、成本节约和可扩展性。这一趋势是由 AI 和 ML 工作负载日益复杂所推动的&#xff0c;这些工作负载需要灵活、高性能的系统。Databricks 首席执行官 Al…

自定义Spring-start学习笔记

Spring Boot Start的创建和使用 start的工作原理(网图) 1. 设置Maven项目&#xff1a; 创建一个新的Maven或Gradle项目&#xff0c;并在项目的pom.xml文件中添加必要的Spring Boot依赖项和插件。下面以maven项目为例&#xff1a; 创建Spring Boot项目 &#xff0c;并在项目的…

私域流量的价值探索:开源链动 2+1 模式、AI 智能名片与 S2B2C 商城小程序的助力

摘要&#xff1a;本文从渠道视角深入剖析私域流量的特殊价值&#xff0c;探讨其作为一种新的销售渠道所具有的重要意义。同时引入开源链动 21 模式、AI 智能名片和 S2B2C 商城小程序等创新元素&#xff0c;阐述它们如何为私域流量的发展提供新的动力和机遇&#xff0c;进一步提…

UE5安卓项目打包安装

Android studio安装 参考&#xff1a;https://docs.unrealengine.com/5.2/zh-CN/how-to-set-up-android-sdk-and-ndk-for-your-unreal-engine-development-environment/ 打开android studio的官网&#xff1a;Download Android Studio & App Tools - Android Developers …

浅谈电动汽车火灾特点及扑救对策研究

0引言 电动汽车火灾事件增多&#xff0c;其特点包括电池高能量密度、快速热释放和烟雾毒性。本文提出应对策略&#xff1a;加强火灾预防&#xff0c;完善电池管理系统&#xff0c;提高电池安全性能&#xff1b;使用干粉灭火器、气溶胶灭火系统等灭火剂&#xff1b;对严重火灾采…

力扣13.罗马数字转整数

4.定义一个哈希存字符和对应的数字 16.定义ans存最终数字 17.定义n存字符串长度 18.开始循环 19.设置value存第一个字符的值 20.如果第一个字符的值小于下一个字符的值&#xff0c;比如IV那么值就是V-I 反之则正常&#xff0b; 最后返回

【实证分析】中国工业经济-数实产业技术融合与企业全要素生产率(2008-2022)

数据简介&#xff1a;本数据参考黄先海和高亚兴老师&#xff08;2023&#xff09;的研究方法&#xff0c;对原文数据进行了年份扩充&#xff0c;更新到了2008-2022年。并按照原文的处理方法对样本进行了清洗和筛选。 数据范围&#xff1a;上市企业层面时间跨度&#xff1a;200…

利用Leaflet.js创建交互式地图:添加Popup

在现代Web开发中&#xff0c;交互式地图已成为展示地理位置数据的强大工具。Leaflet.js是一个开源的JavaScript库&#xff0c;它提供了一个简单易用的界面来创建这样的地图。在本文中&#xff0c;我们将探讨如何使用Leaflet.js创建一个交互式地图&#xff0c;并添加Popup来显示…

配置WSL(单纯记录

[参考链接(https://blog.csdn.net/mustuo/article/details/133960230) 1.开始相关功能 在控制面板-启用或关闭windows功能中 勾选适用于Linux的Windows子系统和虚拟机平台 重启后用管理员权限打开Powershell dism.exe /Online /Enable-Feature /FeatureName:VirtualMachinePl…

js TypeError: Cannot read property ‘initialize’ of undefined

js TypeError: Cannot read property ‘initialize’ of undefined 在JavaScript开发旅程中&#xff0c;遇到TypeError: Cannot read property ‘initialize’ of undefined这样的错误提示&#xff0c;无疑是令人沮丧的。这个错误通常意味着你试图访问一个未定义对象的initiali…

Mac 电脑 git credential osxkeychain问题之一

git credential osxkeychain问题&#xff0c;无法拉取最新代码&#xff0c;failed to get:-128 1.问题描述 不知道是系统还是brew进行了更新&#xff0c;启动项目后 git pull 无法拉取最新代码&#xff0c;git项目git pull 操作时突然提示&#xff1a;git credential osxkeych…

NPU 与 GPU 相比,有什么差别?| 技术速览

编者按&#xff1a; 随着2024年被业界誉为“AI PC元年”&#xff0c;各大笔记本电脑厂商纷纷推出搭载NPU的全新AI PC&#xff0c;而在介绍产品性能时&#xff0c;“NPU”一词频频被提及。但NPU和我们所熟知的GPU之间的区别究竟是什么&#xff1f; 我们今天为大家分享的这篇文章…

RS485隔离方案对比

RS485总线作为一种通用串口通信总线,在工业智能仪表、通讯设备等领域中应用广泛,得益于其优秀的抗干扰能力、长距离传输能力以及高数据传输速率。然而,在实际应用中,RS485总线在面临复杂电磁环境和远距离通信时,可能会受到各种电气干扰,导致信号传输不稳定,甚至可能损坏…