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 集群在线迁移方案 的相关文章

  • 5. 在 Proxmox VE 配置Ceph

    Pool 用于存储虚拟机的img xff0c 如果需要实现虚拟机的HA xff0c 那么虚拟机必须创建在Ceph上 xff0c 通过Ceph的多副本来实现故障恢复 CephFS 在PVE中主要用于共享文件 xff0c 如iso文件等 创建O
  • Ceph 配置URL访问s3 Bucket

    一 创建json文件 xff0c 用于编辑policy xff0c 文件内容如下 xff08 Version并不重要 xff09 xff0c Action存在多种选择 如步骤三所示 xff0c 并且允许同时选择多个 xff0c 本文只是通过
  • 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 UPSTART Ubuntu系统下 xff0c 基于ceph deploy部署集群后 xff0c 可以用这种方法来操控集群 列出节点上所有Ceph进程 xff1a start ceph all 启动节点上特定类型的Ce
  • Ceph性能调优

    1 最佳实践 1 1 基本 监控节点对于集群的正确运行非常重要 xff0c 应当为其分配独立的硬件资源 如果跨数据中心部署 xff0c 监控节点应该分散在不同数据中心或者可用性区域日志可能会让集群的吞吐量减半 理想情况下 xff0c 应该在
  • 【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
  • Ubuntu22.04搭建ceph 集群

    Ceph是一个开源的 提供软件定义的 统一的分布式存储系统 设计初衷是提供较好的性能 可靠性和可扩展性 open source distributed reliable scalable unified 统一的 意味着一套存储系统同时提供块
  • k8s进阶篇-云原生存储ceph

    第一章 Rook安装 rook的版本大于1 3 不要使用目录创建集群 要使用单独的裸盘进行创建 也就是创建一个新的磁盘 挂载到宿主机 不进行格式化 直接使用即可 对于的磁盘节点配置如下 做这个实验需要高配置 每个节点配置不能低于2核4G k
  • Ceph性能优化总结(v0.94)

    如需转载请标明作者 原文地址 http xiaoquqi github io blog 2015 06 28 ceph performance optimization summary 最近一直在忙着搞Ceph存储的优化和测试 看了各种资料
  • ceph-deploy命令应用

    记录 336 场景 在CentOS 7 9操作系统上 使用ceph deploy创建ceph集群 部署集群的mon mgr mds osd rgw等组件 版本 操作系统 CentOS 7 9 ceph版本 ceph 13 2 10 名词 c
  • 基于dmclock分布式限流策略

    结合Cepb自身的特点 较为合理的做法是将QoS机制直接嵌入每个OSD中来实现 dmclock基本原理 mclock算法 mClock基本原理主要包含以下两个方面 1 为客户端设置一套QoS模板 并在每个1 0请求中携带该QoS模板 2 服
  • 删除 Ceph 集群里的某个节点的全部OSD (2 of 3)

    前言 如果你的ceph集群的数据只存在在该节点的所有OSD上 删除该节点的OSD会导致数据丢失 如果集群配置了冗余replication或者EC 需要做pg 修复 出于数据安全考虑 请一定 一定 一定 备份好你要删除的OSD上的数据 这里一
  • Linux OOM机制&线上osd异常kill

    一 引言 某日早上收到邮件告警信息 上报pg stale以及recovery信息 于是登录系统运维 二 排查 解决 登录系统后发现系统已恢复正常 按照正常来讲并无影响 但系统既已出现recovery信息意味着一定有osd down发生 于是
  • Ceph—报错锦集(mgr2、pgs、mgr依赖缺失等)

    Ceph 手动部署Ceph报错锦集 mgr2 pgs mgr依赖缺失等 报错锦集 1 执行 do cmake sh时的报错提示 2 do cmake sh 的note 3 导入一些链接库 4 No module named ceph mgr
  • Ceph入门到精通-Macvlan网络模式

    Docker中的Macvlan网络模式提供了一种将容器直接连接到宿主机网络的方式 使得容器可以拥有自己的MAC地址和与宿主机网络的直接连接 以下是使用Macvlan网络模式的一般步骤 创建Macvlan网络 docker network c
  • cehp 维护(二)常见告警维护

    零 修订记录 序号 修订时间 修订内容 1 2021 11 18 新增 一 摘要 笨猪主要介绍ceph常见告警及维护方法或过程中遇到的问题 二 环境信息 2 1 ceph版本 cephadmin proceph01 ceph v ceph
  • Ceph bluestore中的缓存管理

    从15年3月接触Ceph分布式存储系统 至今已经5年了 因为工作的需要 对Ceph的主要模块进行了较深入的学习 也在Ceph代码层面做了些许改进 以满足业务需要 我们主要使用M版本 最近得闲 将过往的一些学习心得 改进以及优化思路记录下了
  • Ceph入门到精通- smartctl -l error检查硬盘指标

    smartctl l error 是一个 Linux 命令 用于查看磁盘驱动器的 SMART Self Monitoring Analysis and Reporting Technology 错误日志 SMART 是一种技术 能够监测硬盘
  • Flink 使用 Ceph 作为持久存储

    Flink 文档建议 Ceph 可以用作状态的持久存储 https ci apache org projects flink flink docs release 1 3 dev stream checkpointing html http

随机推荐

  • 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集群服务器全部更换掉 因为这些老服务器性能和容量都已经无法满足当前业务的需求 并希望在迁移到新服务器的过程中 业务不中断 在参考一些网上的方案后 选择了一个方案