Ceph 集群在线迁移方案

2023-11-13

一 环境准备

1.1 场景介绍

        最近收到一个需求,客户希望将运行了多年的ceph集群服务器全部更换掉,因为这些老服务器性能和容量都已经无法满足当前业务的需求,并希望在迁移到新服务器的过程中,业务不中断。在参考一些网上的方案后,选择了一个方案进行了测试,效果还不错,决定将测试过程记录下来,并且自己写了些自动化的脚本,希望以后迁移能够变得更轻松。

1.2 环境介绍

        本文测试环境为centos7,+ceph 14.2.0,主要使用RBD(块存储),暂不包含RGW,MDS。
具体节点配置如下: 

主机名 IP地址 Ceph 组件
node1 192.168.10.17 mon,osd*1
node2 192.168.10.18 mon,osd*1
node3 192.168.10.19 mon,osd*1


 

       集群迁移完成后,各组件分布如下:(将node1,node2,node3上的集群迁移到node4,node5,node6这3台新机器上)

主机名 IP地址 Ceph 组件
node1 192.168.10.17
node2 192.168.10.18
node3 192.168.10.19
node4 192.168.10.123 mon,osd*2
node5 192.168.10.124 mon,osd*2
node6 192.168.10.125 mon,osd*2

注意:原集群一共3个osd,我在每个新节点上多增加了一块硬盘,所以迁移后集群共有6个osd

二 数据迁移

2.1 迁移思路

(注意:osd_crush_update_on_start = false 这一项必须设置为false,否则加入osd后会自动分配到默认的crush下,造成了数据迁移。)

2.2 准备数据迁移

         编辑config.ini配置文件,添加集群信息。示例配置如下:

#重要:请保证配置信息正确,不要配错,否则会影响到数据迁移后续操作

#此项name属性为需要迁移的存储池名称,size为此存储池的副本数
[pool]
name=rbd
size=3

#此项name属性所有新节点的主机名,用“,”号隔开(请用英文输入法的逗号隔开,不要有空格)
[host]
name=node4,node5,node6

#以下配置为新节点所对应的osd信息,其中osd属性为osd的id,size属性为osd的大小,单位为GB,用“,”号隔开(请用英文输入法的逗号隔开,不要有空格)
#此项配置意思为在节点node4上有两个osd,分别为osd.3 大小为20GB,osd.4,大小为20GB.
[node4]
osd=3,4
size=20,20

#此项配置意思为在节点node5上有两个osd,分别为osd.5 大小为20GB,osd.6,大小为20GB.
[node5]
osd=5,6
size=20,20

#此项配置意思为在节点node6上有两个osd,分别为osd.7 大小为20GB,osd.8,大小为20GB.
[node6]
osd=7,8
size=20,20

2.3 开始数据迁移

        确认config.ini信息配置无误后,开始迁移数据。
        1.执行sh crush.sh(此脚本会创建一些迁移规则,如下图所示,等待控制台不再刷新集群动态的消息时,按ctrl+c退出集群监控,继续执行下面的步骤,若想再次打开集群监控,可执行ceph -w命令)

rule.sh:(crush.sh会调用)

#!/bin/bash
poolName=$1
migrateCrush=$2
size=$3
maxId=$4
echo  "rule src_${size} {
        id $[${maxId}+1]
        type replicated
        min_size 1
        max_size 10
        step take ${poolName}
        step chooseleaf firstn ${size} type host
        step emit
}
rule src_temp_${size} {
        id $[${maxId}+2]
        type replicated
        min_size 1
        max_size 10
        step take ${poolName}
        step chooseleaf firstn ${size} type host
        step emit
        step take ${migrateCrush}
        step chooseleaf firstn ${size} type host
        step emit
}
rule target_${size} {
        id $[${maxId}+3]
        type replicated
        min_size 1
        max_size 10
        step take ${migrateCrush}
        step chooseleaf firstn ${size} type host
        step emit
}"

crush.sh:

#!/bin/bash
config="config.ini"
poolName=`awk -F '=' '/\[pool\]/{a=1}a==1&&$1~/name/{print $2;exit}' $config`
poolSize=`awk -F '=' '/\[pool\]/{a=1}a==1&&$1~/size/{print $2;exit}' $config`
migrateCrush=$poolName"_migrate_temp"
ceph osd crush add-bucket $migrateCrush root
hostnames=`awk -F '=' '/\[host\]/{a=1}a==1&&$1~/name/{print $2;exit}' $config`
for hostname in `echo "$hostnames" | sed 's/,/\n/g'`
do
        ceph osd crush add-bucket $hostname"_"$poolName host
        ceph osd crush move $hostname"_"$poolName root=$migrateCrush
        osds=`awk -F '=' '/\['$hostname'\]/{a=1}a==1&&$1~/osd/{print $2;exit}' $config`
        sizes=`awk -F '=' '/\['$hostname'\]/{a=1}a==1&&$1~/size/{print $2;exit}' $config`
        sizeArr=(${sizes//,/ })
        index=0
        for osd in `echo "$osds" | sed 's/,/\n/g'`
        do
                weight=`awk 'BEGIN{printf "%0.5f",'${sizeArr[$index]}'/1000}'`
                ceph osd crush create-or-move osd.$osd $weight host=$hostname"_"$poolName
        done
done

ceph osd getcrushmap -o crushmap
crushtool -d crushmap -o crushmap.txt
id=`grep 'id' -A 0 crushmap.txt |tail -n 1`
idArr=(${id// / })
maxId=${idArr[1]}
sh rule.sh $poolName $migrateCrush $poolSize $maxId>> crushmap.txt
crushtool -c crushmap.txt -o crushmap.bin
ceph osd setcrushmap -i crushmap.bin
ceph osd pool set $poolName crush_rule "src_"$poolSize
ceph osd pool set $poolName size $[$poolSize*2]
ceph -w

        2.执行sh migrate.sh(此脚本开始复制集群数据,数据量越大耗时越长,等待集群ok了就代表复制完毕,执行ceph -w可监控集群实时状态)

#!/bin/bash
config="config.ini"
poolName=`awk -F '=' '/\[pool\]/{a=1}a==1&&$1~/name/{print $2;exit}' $config`
poolSize=`awk -F '=' '/\[pool\]/{a=1}a==1&&$1~/size/{print $2;exit}' $config`
ceph osd pool set $poolName crush_rule "src_temp_"$poolSize
ceph -w

      3,.执行sh target.sh(此脚本将删除旧osd上的数据,看到cluster is now healthy表示完成)

#!/bin/bash
config="config.ini"
poolName=`awk -F '=' '/\[pool\]/{a=1}a==1&&$1~/name/{print $2;exit}' $config`
poolSize=`awk -F '=' '/\[pool\]/{a=1}a==1&&$1~/size/{print $2;exit}' $config`
ceph osd pool set $poolName crush_rule "target_"$poolSize
ceph osd pool set $poolName size $poolSize
ceph -w

        此时集群数据已经完成迁移,可以将旧的osd删除掉

三 MON迁移

3.1 迁移原则

        先增加一个MON,成功后再删除一个MON。

3.2 开始迁移MON

       1.将node4设置为mon和管理节点。
       2.将node1的mon和管理节点去掉。
       3.将node5设置为mon和管理节点。
      4.将node2的mon和管理节点去掉。
      5.将node6设置为mon和管理节点。
      6.将node3的mon和管理节点去掉。

mon和osd等服务都迁移完成后就可以删除旧的主机了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ceph 集群在线迁移方案 的相关文章

  • 6. Proxmox VE安装Ceph Dashboard

    6 Proxmox VE安装Ceph Dashboard span class token function apt get span span class token function install span ceph mgr dash
  • Ceph集群更改IP地址

    由于一些原因 xff0c 有时需要将Ceph集群的IP地址进行更改 xff0c 以下为更改Ceph集群IP地址的步骤 xff1a 1 更改各机器IP地址 2 更改每台机器 etc hosts文件中的ip地址 3 更改ceph conf文件中
  • ceph 17版本:使用cephadm部署单节点集群

    ceph 17版本 xff1a 使用cephadm部署17 2版本的单节点集群 文章目录 前言一 环境版本信息二 基础环境部署1 服务器准备2 配置DNS3 安装时间服务4 关闭防火墙5 安装docker服务5 安装lvm服务 二 ceph
  • Ceph性能调优

    1 最佳实践 1 1 基本 监控节点对于集群的正确运行非常重要 xff0c 应当为其分配独立的硬件资源 如果跨数据中心部署 xff0c 监控节点应该分散在不同数据中心或者可用性区域日志可能会让集群的吞吐量减半 理想情况下 xff0c 应该在
  • Ceph OSD扩容与缩容

    在企业生产环境中 xff0c 随着时间的迁移数据会存在磁盘空间不足 xff0c 或者机器节点故障等情况 OSD又是实际存储数据 xff0c 所以扩容和缩容OSD就很有必要性 随着我们数据量的增长 xff0c 后期可能我们需要对osd进行扩容
  • Ceph文件存储-挂载文件系统

    文章目录 1 创建文件系统1 1 方法11 2 方法2 2 挂载文件系统3 卸载 1 创建文件系统 1 1 方法1 span class token number 1 span 创建存储池 ceph osd pool create tgmf
  • CentOS8联网部署Ceph-Quincy集群

    文章目录 1 环境准备1 1 关闭selinux1 2 关闭防火墙1 3 配置免密1 4 设置yum源1 5 安装依赖1 6 设置时间同步1 7 安装docker 2 安装Ceph2 1 安装cephadm2 2 部署ceph集群2 3 集
  • 手把手带你部署Ceph集群

    前言 xff1a Ceph作为开源的分布式文件系统 xff0c 可以轻松地将存储容量扩展到PB以上并拥有不错的性能 Ceph提供对象存储 块存储和文件系统三种存储方式 xff0c 如果不想花时间安装ceph xff0c 可以通过ceph d
  • ceph学习(3)——rbd-mirror双机热备

    一 概述 本文主要关注于rbd mirror的使用以及使用过程中的遇到的问题 二 环境准备 ceph版本 14 2 16 服务器 3台centos7服务器 ceph1 ceph2 ceph3 硬盘 每台服务器1块10GB以上硬盘做osd 分
  • CentOS 7部署 Ceph分布式存储架构

    一 概述 随着OpenStack日渐成为开源云计算的标准软件栈 Ceph也已经成为OpenStack的首选后端存储 Ceph是一种为优秀的性能 可靠性和可扩展性而设计的统一的 分布式文件系统 ceph官方文档 http docs ceph
  • 【Ceph】1 pools have many more objects per pg than average

    公司 Ceph 集群从 v12 升级到 v14 后 今天某个 CephFS 的集群收到一个 HEALTH WARN 的告警 具体的 Warning 的信息为 1 pools have many more objects per pg tha
  • Learning Ceph

    Author 海峰 http weibo com 344736086 参考章宇兄的开源项目学习ABC的方法来对ceph进行简单的学习与分析 下面是分析过程中画的图片
  • Ceph 存储池命令 以及 数据压缩

    文章目录 一 存储池操作 1 1 常用命令 1 2 删除存储池 1 3 存储池配额 1 4 存储池可用参数 二 存储池快照 2 1 创建快照 2 2 验证快照 2 3 回滚快照 2 4 删除快照 三 数据压缩 3 1 启用压缩并指定压缩算法
  • ceph-pg状态详解

    Creating 含义 PG正在创建 引起原因 创建pool的时候 根据指定的pg数量进行创建pg时出现的状态 正常状态 后果 无 解决方案 无需解决 正常状态之一Peering 含义 PG之间进行互联 就其中的对象和元数据状态达成一致 引
  • Ceph入门到精通-ceph对于长文件名如何处理

    RADOS object with short name 上一篇博文 我们将介绍了对象相关的数据结构ghobject t 以及对象在底层文件系统存储的文件名 以及如何从文件名对应到 ghobject t对象 映射关系如下图所示 这里面有一个
  • ceph-deploy命令应用

    记录 336 场景 在CentOS 7 9操作系统上 使用ceph deploy创建ceph集群 部署集群的mon mgr mds osd rgw等组件 版本 操作系统 CentOS 7 9 ceph版本 ceph 13 2 10 名词 c
  • ceph安装部署

    Ceph 简介 存储基础 单机存储设备 单机存储的问题 分布式存储的类型 分布式存储 软件定义的存储 SDS Ceph 架构 Ceph 核心组件 编辑 Pool中数据保存方式支持两种类型 OSD 存储后端 Ceph 数据的存储过程 Ceph
  • BlueStore 架构及原理分析

    BlueStore 架构及原理分析 Ceph 底层存储引擎经过了数次变迁 目前最常用的是 BlueStore 在 Jewel 版本中引入 用来取代 FileStore 与 FileStore 相比 Bluesore 越过本地文件系统 直接操
  • Loongnix单机部署Ceph(LoongArch架构、Ceph N版、手动部署MON、OSD、MGR、Dashboard服务)

    基础环境信息 CPU 龙芯3C5000L 2 内存 128G 硬盘 系统盘 一块512G的NVME的SSD 数据盘 三块16T的HDD 操作系统版本 Loongnix 8 4 Ceph版本 Ceph 14 2 21 Nautilus Cep
  • Ceph 4 slow ops, oldest one blocked for 638 sec, mon.cephnode01 has slow ops

    因为实验用的是虚拟机的关系 晚上一般会挂起 第二天早上都能看到 4 slow ops oldest one blocked for 638 sec mon cephnode01 has slow ops的报错 虽然不影响使用 但看着有点难受

随机推荐

  • java image 透明,绘制完全透明的“白色”在Java BufferedImage中

    This might sound like a bit of strange title but bear with me there is a reason I am trying to generate a white glow aro
  • 【调用百度翻译接口实现简单窗口的汉译英】

    与百度翻译同种方法实现简单窗口的汉译英 前言 一 思路梳理 二 思路3的文件代码展示 1 引入库 总结 前言 基于python爬虫方面 我们能做很多事 这里 我们先找到百度翻译的接口 然后自己构建逻辑 实现建议窗口汉语翻译英语功能 一 思路
  • python 数据库连接池_python数据库连接池

    一 DBUtils的认识 首先管理数据库连接池的包是 DBUtils 为高频度并发的数据库访问提供更好的性能 可以自动管理连接对象的创建和释放 最常用的两个外部接口是PersistentDB 和 PooledDB 前者提供了单个线程专用的数
  • mac下面有epoll?

    没有的 但是mac下面有kqueue 跟epoll原理是差不多的 这个是没办法的 如果实在需要 就用Ubuntu吧 这个也可以无缝迁移 更多资源 更多文章由小白技术社提供 是我啦
  • Mysql学习(十一) -- 常见问题处理

    1 MySQL数据库cpu飙升的话你会如何分析 重点是定位问题 使用top观察mysqld的cpu利用率 切换到常用的数据库 使用show full processlist 查看会话 观察是哪些sql消耗了资源 其中重点观察state指标
  • 5G到底有哪些能力

    来源 工信头条 作者 华为5G首席科学家 童文 摘要 华为5G首席科学家告诉你5G到底有哪些能力 2019年是5G产业进入全面商用的关键一年 全球5G网络的部署已经启动 2018年6月 5G独立组网标准冻结 5G完成了第一阶段全功能eMBB
  • Android Execution failed for task ‘:app:mergeDebugAssets‘. > java.nio.file.AccessDeniedException:错误

    博主前些天发现了一个巨牛的人工智能学习网站 通俗易懂 风趣幽默 忍不住也分享一下给大家 点击跳转到网站 错误详情图 在项目中引入萤石云的依赖后 compile com ezviz sdk ezuikit 2 2 1 就开始报这个错误 前前后
  • (.*?)正则表达式

    1 匹配任意除换行符 n 外的字符 2 表示匹配前一个字符0次或无限次 3 表示前边字符的0次或1次重复 4 或 后跟 表示非贪婪匹配 即尽可能少的匹配 如 重复任意次 但尽可能少重复 5 表示匹配任意数量的重复 但是在能使整个匹配成功的前
  • cookies添加python selenium

    def add ck a browser delete all cookies 删除原有cookies cookies 在浏览器里面复制 a BIDUPSID B8D733AE1AF91ABF07AE6448B2DF91AA PSTM 16
  • 预约到家按摩小程序开发定制同城服务

    随着生活节奏加快 生活压力也随之而来 很多人忙于工作与生计 身体和心理两方面都在承受重压 而按摩能够消除身体的疲惫 增强人的身体体质 在劳累过后放松身心按摩一会儿 可以快速恢复精神状态 增强免疫力和抵抗力 按摩的好处很多 但由于现代人时间和
  • 0001.两数之和(简单)

    代码 Java版 2020 07 03 public int twoSum int nums int target int ans new int 2 for int i 0 i lt nums length i for int j i 1
  • c#线程二

    下面的表格列展了 NET对协调或同步线程动作的可用的工具 简易阻止方法 构成 目的 Sleep 阻止给定的时间周期 Join 等待另一个线程完成 锁系统 构成 目的 跨进程 速度 lock 确保只有一个线程访问某个资源或某段代码 否 快 M
  • 记录WIN10选择文件右键后资源管理器无响应的解决方法

    现象 WIN10选择文件 右键文件后资源管理器无响应 解决方法 找到一种亲测可用的解决方法 即清除文件资源管理器历史记录 详细操作 1 打开文件资源管理器 2 点击左上角 文件 点击 选项 找到 隐私 下方的 清除 按钮 点击 清除 最后点
  • DVWA - XSS DOM (high)

    随便选择一个 url中会出现我们选的哪个 http 127 0 0 1 DVWA master vulnerabilities xss d default 3Cscript
  • CVPR 2022

    点击下方卡片 关注 CVer 公众号 AI CV重磅干货 第一时间送达 作者 轻尘一笑 已授权转载 源 知乎 编辑 CVer https zhuanlan zhihu com p 489839282 导读 在CVPR 2022上 新加坡南洋
  • 【H5】canvas画布像素的设置与获取:

    H5 canvas画布像素的设置与获取 getImageData 从Canvas画板上取得指定位置的像素数据 putImageData 将所得到的像素数据描画到Canvas画板上 createImageData 方法创建新的空白像素 Ima
  • IPSec基础知识

    文章目录 IPSec基础知识 IPSec特性 IPSec组成部分 IPSec对等体 IPSec隧道 安全联盟 Security Association AH安全协议 AH包结构 ESP安全协议 ESP包结构 AH和ESP比较 封装模式 传输
  • 解决Rational Rose找不到suite objects.dll文件的问题

    问题描述 打开Rational Rose 2007时 发现有以下问题 提示找不到suite objects dll文件 需要重装软件 但是查看Rational Rose 2007安装文件夹 发现Common文件夹下有suite object
  • Windows系统管理七:本地组策略&注册表及其维护与优化

    本地组策略 概述 组策略 英语 Group Policy 是微软 Windows NT 家族操作系统的一个特性 它可以控制用户帐户和计算机帐户的工作环境 组策略提供了操作系统 应用程序和活动目录中用户设置的集中化管理和配置 组策略的其中个版
  • Ceph 集群在线迁移方案

    一 环境准备 1 1 场景介绍 最近收到一个需求 客户希望将运行了多年的ceph集群服务器全部更换掉 因为这些老服务器性能和容量都已经无法满足当前业务的需求 并希望在迁移到新服务器的过程中 业务不中断 在参考一些网上的方案后 选择了一个方案