ceph更换磁盘不改变引起大量数据迁移

博客介绍新更换硬盘后磁盘的配置方法。需求是保持ID不变、系统crushmap不变,以维持pg分布。所用工具为ceph - disk和ceph。配置步骤包括初始化配置文件、磁盘分区及格式化,恢复原损坏磁盘相关参数,如设置ID、keyring、UUID、集群fsid,最后激活磁盘。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、需求

新更换后的磁盘,需满足如下要求(根本是为了保持pg分布情况不变,避免其他无关osd上的pg重新计算分布):

  • 保持ID不变
  • 系统crushmap不变

二、所用工具

  • ceph-disk
  • ceph

三、配置方法

3.1 初始化配置文件
[root@node0 ]$ cat /etc/ceph/init.conf

[global]
	osd_journal_size = 30720	# 30GB,根据实际情况调整
3.2 磁盘分区及格式化(有时候需要先执行ceph-disk zap )
[root@node0 ]$ sudo ceph-disk zap  /dev/sdX
[root@node0 ]$ sudo ceph-disk prepare --cluster init  /dev/sdX [journal location]
3.3 恢复原损坏磁盘相关参数

挂载初始化后的磁盘到本地目录/mnt:

[root@node0 ]$ sudo mount /dev/sdX1 /mnt
[root@node0 ]$ cd /mnt
3.3.1 设置 ID (保持OSD ID不变)

[root@node0 ]$ echo ${ID} | sudo tee whoami

3.3.2 设置 keyring (保持keyring不变)

[root@node0 ]$ ceph auth get-or-create osd.${ID} | sudo tee keyring

3.3.3 设置 UUID (保持原OSD的uuid不变)

[root@node0 ]$ ceph osd dump | grep ^osd.${ID} | awk '{print $NF}' | sudo tee fsid

3.3.4 设置集群fsid(保持集群fsid不变)

[root@node0 ]$ ceph-conf --lookup fsid | sudo tee ceph_fsid

3.3.5 激活磁盘
[root@node0 ]$ cd
[root@node0 ]$ sudo umount /mnt
[root@node0 ]$ sudo ceph-disk activate  --mark-init none  /dev/sdX1
### 如何从现有 Ceph 系统导出数据并导入到新的 Ceph 系统 为了实现从一个 Ceph 集群导出数据并将这些数据导入到另一个 Ceph 集群,可以根据同类型的数据(如对象存储池、块设备或文件系统)选择同的方法。以下是详细的解决方案: --- #### **方法一:针对 RBD 块设备的导出与导入** 对于基于 RBD 的块设备,可以使用 `rbd` 工具进行全量和增量备份。 ##### 1. 导出 RBD 数据 使用以下命令将 RBD 映像导出为镜像文件: ```bash rbd export <pool>/<image> <destination_file> ``` 例如: ```bash rbd export rbd/my_image /tmp/my_image.img ``` ##### 2. 导入 RBD 数据到新集群 在目标 Ceph 集群中,使用以下命令将镜像文件重新导入为 RBD 映像: ```bash rbd import <source_file> <pool>/<image> ``` 例如: ```bash rbd import /tmp/my_image.img rbd/new_my_image ``` 如果需要支持增量备份,还可以按照以下方式进行操作[^4]: - 使用 `rbd snap create` 创建快照。 - 使用 `rbd export-diff` 和 `rbd import-diff` 处理增量部分。 --- #### **方法二:针对 RADOSGW 对象存储的迁移** RADOSGW 是 Ceph 提供的对象存储服务,其元数据和对象可以通过特定工具进行迁移。 ##### 1. 导出桶元数据 在源集群中,使用 `radosgw-admin` 工具导出桶的元数据: ```bash radosgw-admin metadata get bucket:<bucket_name> > bucket.metadata.json ``` ##### 2. 导出对象数据 使用以下命令导出桶内的所有对象: ```bash radosgw-admin bucket sync list --bucket=<bucket_name> ``` 这一步可以帮助识别需要同步的具体对象列表。 ##### 3. 导入元数据到新集群 在目标集群中,使用以下命令导入之前导出的元数据: ```bash radosgw-admin metadata put bucket.<instance_id> <metadata_json_file> ``` ##### 4. 同步对象数据 通过脚本化的方式批量上传对象到目标集群中的对应桶。可以借助 S3 API 或者其他工具完成这一过程。 --- #### **方法三:针对 CephFS 文件系统的迁移** CephFS 可以通过 NFS 导出功能或者其他方式实现在同集群之间的迁移。 ##### 1. 设置 NFS 导出 在源集群中创建一个 NFS 导出路径,并挂载到本地磁盘以便访问数据: ```bash ceph nfs cluster create <cluster_id> [<placement>] ceph nfs export create cephfs --cluster-id=<cluster_id> --pseudo-path=<export_path> --fsname=<filesystem_name> --path=/<subdir> ``` 例如: ```bash ceph nfs cluster create my_nfs_cluster ceph nfs export create cephfs --cluster-id=my_nfs_cluster --pseudo-path=/exports/cephfs --fsname=cephfs01 --path=/ ``` 随后可以在客户端挂载该 NFS 路径: ```bash mount -t nfs <nfs_server_ip>:<export_path> <local_mount_point> ``` ##### 2. 将数据复制到目标集群 使用标准 Linux 工具(如 `rsync` 或 `scp`)将数据从源集群复制到目标集群上的临时位置。 ##### 3. 在目标集群中恢复 CephFS 结构 确保目标集群已正确配置好相同的 CephFS 文件系统名称和路径结构。最后将复制过来的数据写回到目标 CephFS 中。 --- #### **注意事项** - 在执行任何数据迁移之前,请务必验证两个集群间的兼容性(如版本一致性)。如果一致,可能需要升级其中一个集群后再继续操作[^1]。 - 如果涉及大量数据传输,建议优化网络环境以减少延迟和提高吞吐率。 - 对于生产环境中敏感信息较多的情况,考虑启用加密通道保护通信安全。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值