共享存储-一步一步部署ceph分布式文件系统
一、Ceph 简介
Ceph 是一个开源的分布式文件系统。因为它还支持块存储、对象存储,所以很自 然的被用做云计算框架 openstack 或 cloudstack 整个存储后端。当然也可以单独作 为存储,例如部署一套集群作为对象存储、SAN 存储、NAS 存储等。
二、ceph 支持的 3 种存储方式
1、对象存储:即 radosgw,兼容 S3 接口。通过 rest api 上传、下载文件。
2、文件系统:posix 接口。可以将 ceph 集群看做一个共享文件系统挂载到本地。
3、块存储:即 rbd。有 kernel rbd 和 librbd 两种使用方式。支持快照、克隆。相 当于一块硬盘挂到本地,用法和用途和硬盘一样。比如在 OpenStack 项目里,Ceph 的块设备存储可以对接 OpenStack 的后端存储。
三、ceph 集群部署
环境准备 (禁用 selinux, 关闭防火墙)
拓扑

前 3台机器添加一块 20G 的硬盘
硬盘给 osd 做存储使用

禁用 selinux, 关闭防火墙
__所有服务器__都需要关闭防火墙,selinux
[root@cong11 ~]# systemctlstop firewalld[root@cong11 ~]# systemctl disable firewalld[root@cong11 ~]# setenforce 0[root@cong11 ~]# sed \-i "s/SELINUX=enforcing/SELINUX=disabled/g"/etc/selinux/config
编辑 hosts 文件
所有的服务器都需要设置 hosts
[root@cong11 ~]# vim /etc/hosts #在文件最后加入以下行
192.168.1.11 cong11
192.168.1.12 cong12
192.168.1.13 cong13
192.168.1.14 cong14
SSH 免密码登录
在管理节点使用ssh-keygen 生成 ssh keys 发布到各节点,这里使用主机名
[root@cong11 ~]# ssh -keygen #一直回车,不设密码
[root@cong11 ~]# ssh-copy-id cong11
[root@cong11 ~]# ssh-copy-id cong12
[root@cong11 ~]# ssh-copy-id cong13
[root@cong11 ~]# ssh-copy-id cong14
配置 yum 源配置阿里网络源(所有节点)
\[root@cong11~\]\#wget \-O /etc/yum\.repos\.d/CentOS\-Base\.repo[http://mirrors\.aliyun\.com/repo/Centos\-7\.repo](http://mirrors.aliyun.com/repo/Centos-7.repo)
配置 ceph 源(所有节点)
\[root@cong11 ~\]\# vim /etc/yum\.repos\.d/ceph\.repo\[Ceph\]name=Ceph packages for $basearchbaseurl=[http://mirrors\.aliyun\.com/ceph/rpm\-15\.2\.9/el7/$basearch](http://mirrors.aliyun.com/ceph/rpm-15.2.9/el7/$basearch) enabled=1gpgcheck=0 type=rpm\-md\#gpgkey=[https://download\.ceph\.com/keys/release\.asc](https://download.ceph.com/keys/release.asc)\[Ceph\-noarch\]name=Ceph noarch packagesbaseurl=[http://mirrors\.aliyun\.com/ceph/rpm\-15\.2\.9/el7/noarch](http://mirrors.aliyun.com/ceph/rpm-15.2.9/el7/noarch)enabled=1gpgcheck=0 type=rpm\-md#gpgkey=[https://download\.ceph\.com/keys/release\.asc](https://download.ceph.com/keys/release.asc) \[ceph\-source]name=Ceph source packagesbaseurl=[http://mirrors\.aliyun\.com/ceph/rpm\-15\.2\.9/el7/SRPMS](http://mirrors.aliyun.com/ceph/rpm-15.2.9/el7/SRPMS)enabled=1gpgcheck=0 type=rpm\-md\#gpgkey=[https://download\.ceph\.com/keys/release\.asc](https://download.ceph.com/keys/release.asc)
安装 epel-release(所有节点)
[root@cong11 ~\]# yum \-y install epel\-release yum\-plugin\-priorities yum\-utils ntpdate
在每服务器上部署 ceph
在 cong11、cong12、cong13 上安装,ceph-deploy 是 ceph 集群部署工具。其他软 件是依赖包。
\[root@cong11 ~\]\# yum install \-y ceph\-deploy ceph ceph\-radosgw snappy leveldbgdisk python\-argparse gperftools\-libs python\-setuptools
管理节点 cong11 上部署服务
创建 monitor 服务
也可以同时在 cong12,cong13 上部署 mon,实现高可用,生产环境至少 3 个 mon 独立
[root@cong11 ~]# cd /etc/ceph
[root@cong11 ceph]# ceph-deploy new cong11

修改副本数
配置文件的默认副本数从 3 改成 2,这样只有两个 osd 也能达到 active+clean 状态
\[root@cong11 ceph\]\# vim ceph\.conf\[global\]fsid = 085c7b61\-cac0\-494b\-9bfc\-18fe2cc2deb0mon\_initial\_members = cong11 mon\_host = [192\.168\.1\.11](192.168.1.11)auth\_cluster\_required = cephx auth\_service\_required = cephx auth\_client\_required = cephx__osd\_pool\_default\_size = 2 \#最后添加这行__
部署 initial monitor
[root@cong11 ceph]# ceph-deploy mon create cong11

收集节点的 keyring 文件
[root@cong11 ceph]# ceph-deploy gatherkeys cong11
[root@cong11 ceph]# ls

[root@cong11 ceph\]\# cat ceph\.client\.admin\.keyring__\#连接__ __ceph 集群的admin 账号密码__### __部署__ __mgr 管理服务__在 master 上部署 mgr 管理服务,也可以同时在 cong12 ,cong13 上部署 mgr,实 现高可用。```bash
[root@cong11 ceph]# ceph-deploy mgr create cong11

部署 osd 服务
使用 ceph 自动分区
[root@cong11 ceph]# cd /etc/ceph/[root@cong11 ceph]# ceph-deploy disk zap cong11 /dev/sdb
[root@cong11 ceph]# ceph\-deploy disk zap cong12 /dev/sdb
[root@cong11 ceph]# ceph\-deploy disk zap cong13 /dev/sdb
添加 osd 节点
[root@cong11 ceph\]# ceph-deploy osd create cong11 --data /dev/sdb
[root@cong11 ceph\]# ceph-deploy osd create cong12 --data /dev/sdb
[root@cong11 ceph\]# ceph-deploy osd create cong13 --data /dev/sdb
查看 osd 状态
[root@cong11 ceph]# ceph-deploy osd list cong11 cong12 cong13
统一集群配置
用 ceph-deploy 把配置文件和admin 密钥拷贝到所有节点,这样每次执行 Ceph 命 令行时就无需指定 monitor 地址和 ceph.client.admin.keyring 了
[root@cong11 ceph\]\# ceph\-deploy admin cong11 cong12 cong13 cong14

各节点修改 ceph.client.admin.keyring 权限
[root@cong11 ceph\]# chmod +r /etc/ceph/ceph.client.admin.keyring
[root@cong12 ~]# chmod +r /etc/ceph/ceph.client.admin.keyring
[root@cong13 ~]# chmod +r /etc/ceph/ceph.client.admin.keyring
[root@cong14 ~]# chmod +r /etc/ceph/ceph.client.admin.keyring
部署 mds 服务
安装 mds
[root@cong11 ceph]# ceph-deploy mds create cong12 cong13
查看 mds 服务
\[root@cong11 ceph\]\# ceph mds stat
查看集群状态
[root@cong11 ceph]# ceph -s

创建 ceph 文件系统
创建之前查看文件系统
[root@cong11 ceph]# cephfsls #没有 ceph 文件系统No filesystems enabled
创建存储池
命令:ceph osd pool create cephfs_data <pg_num>
ceph osd pool create cephfs_metadata <pg_num>
其中:<pg_num> = 128 , 关于创建存储池
确定 pg_num 取值是强制性的,因为不能自动计算。下面是几个常用的值:
*少于 5 个 OSD 时可把 pg_num 设置为 128
*OSD 数量在 5 到 10 个时,可把 pg_num 设置为 512
*OSD 数量在 10 到 50 个时,可把 pg_num 设置为 4096
*OSD 数量大于 50 时,你得理解权衡方法、以及如何自己计算 pg_num
取值
*自己计算 pg_num 取值时可借助 pgcalc 工具
随着 OSD 数量的增加,正确的 pg_num 取值变得更加重要,因为它显著地影响 着集群的行为、以及出错时的数据持久性(即灾难性事件导致数据丢失的概率)。
[root@cong11 ceph]# ceph osd pool create cephfs_data 128[root@cong11 ceph]# ceph osd pool create cephfs_metadata 128
创建文件系统
创建好存储池后,你就可以用 fs new 命令创建文件系统了 命令:
cephfs new <fs_name> cephfs_metadata cephfs_data
其中:<fs_name> = cephfs 可自定义 给刚才创建的 2 个存储池创建文件系统
[root@cong11 ceph]# cephfs new cephfscephfs_metadata cephfs_data
查看 ceph 文件系统
[root@cong11 ceph]# cephfsls
查看 mds 节点状态
[root@cong11 ceph]# ceph mds stat
内核驱动挂载 Ceph 文件系统
创建挂载点
[root@cong14 ~]# mkdir /mnt/aa存储密钥(如果没有在管理节点使用 ceph\-deploy 拷贝ceph 配置文件)
cat /etc/ceph/ceph\.client\.admin\.keyring__\[client\.admin\]____key = AQA6Fuli0zChIBAAN8ZnZp3uR\+\+DzP9cbbzaBA==__
将 __key 对应的值__复制下来保存到文件:/etc/ceph/admin.secret 中。建挂载点
使用密钥挂载
[root@cong14 ~\]# mount -t ceph [192.168.1.11](192.168.1.11) :6789:/ /mnt/aa -oname=admin,secret= AQA6Fuli0zChIBAAN8ZnZp3uR\+\+DzP9cbbzaBA==
[root@cong14 ~\]\# df -h[root@cong14 ~]# mount -t ceph [192.168.1.11](192.168.1.11) :6789:/ /mnt/aa -oname=admin,secret= AQA6Fuli0zChIBAAN8ZnZp3uR++DzP9cbbzaBA==
[root@cong14 ~]# df -h

使用密钥文件挂载
[root@cong14 ~]# vim admin.secretAQA6Fuli0zChIBAAN8ZnZp3uR++DzP9cbbzaBA==[root@cong14 ~]# mount -t ceph [192.168.1.11](192.168.1.11):6789:/ /data/ \-oname=admin,secretfile=/root/admin.secret
用户控件挂载 Ceph 文件系统
安装 ceph-fuse
[root@cong14 ~]# yum install -y ceph-fuse
挂载
[root@cong14 ~]# ceph-fuse -m [192.168.1.11](192.168.1.11):6789 /mnt/aa
root@cong14 ~]# df -h

RBD 的使用
Ceph 支持一个非常好的特性,以 COW(写时复制)的方式从 RBD 快照创建克隆, 在 Ceph 中被称为快照分层。分层特性允许用户创建多个 CEPH RBD 克隆实例。这 些特性应用于 OpenStack 等云平台中,使用快照形式保护ceph RBD 镜像,快照是 只读的,但 COW 克隆是完全可以写 ,可以多次来孵化实例,对云平台来说是非常 有用的。
Ceph RBD 镜像有format-1 和 format-2 两种类型,RBD 支持这两种类型,但是 分层特性 COW 克隆特性只支持 format-2 镜像,默认 RBD 创建的镜像是 format-2。 (这个在克隆的时候特别重要)
检测 linux 内核是否支持 RBD
[root@cong11 ~]# modprobe rbd
如果有错误信息说明内核不支持,那你就先去升级一下内核
创建 rbd 存储池
[root@cong11 ~]# ceph osd pool create rbd 64
创建指定大小的块设备
[root@cong11 ~]# rbd create --size 102400 rbd/test1
这里需要注意 size 的大小,这个大小可以超过你实际 pool 的大小,这个叫做瘦 分配,也叫超卖和按需分配。创建块之后可以通过指令 rbd resize test/myrbd1 --size 51200 --allow-shrink 来动态的更改。
查看 test1 信息
[root@cong11 ~]# rbd info test1

映射进内核
映射进内核操作之前,首先查看内核版本, jw 版本的 ceph 默认 format 为 2, 2.x 及 之前的内核版本需手动调整 format 为 1, 4.x 之前要关闭 object-map, fast-diff, deep- flatten 功能才能成功映射到内核,这里使用的是 centos7.9, 内核版本 3.10。
[root@cong11 ~]# rbd feature disable test1 object -map fast-diff deep-flatten exclusive-lock[root@cong11 ~]# rbdmaptest1[root@cong11 ~]# ls /dev/rbd0
可以看见在/dev 下创建了一个叫 rbd0 的设备文件
挂载使用
挂载 rbd 的 Linux 服务器首先需要机器支持 ceph 客户端,如果是一台新机器的 话,请安装 ceph,然后同步下配置文件。
创建挂载点
[root@cong11 ~]# mkdir /mnt/cephrbd
格式化分区
[root@cong11 ~]# mkfs.xfs /dev/rbd0

挂载
[root@cong11 ~]# mount /dev/rbd0 /mnt/cephrbd
[root@cong11 ~]# df -h
测试写入数据
[root@cong11 ~]# dd if=/dev/zero of=/mnt/cephrbd/file bs=100M count=1 oflag=direct[root@cong11 ~]# rados df
可以看到写了 100M 数据,ceph 的 rbd pool相应的使用了 100M 的数据,也就是对/mnt/cephrbd 目录的操作将会直接写到 ceph 集群的 rbd 这个 pool 中,然后写到 ceph 的 osd 上。
相关文章:
共享存储-一步一步部署ceph分布式文件系统
一、Ceph 简介 Ceph 是一个开源的分布式文件系统。因为它还支持块存储、对象存储,所以很自 然的被用做云计算框架 openstack 或 cloudstack 整个存储后端。当然也可以单独作 为存储,例如部署一套集群作为对象存储、SAN 存储、NAS 存储等。 二、ceph 支…...
19.Python实战:实现对博客文章的点赞系统
Flask博客点赞系统 一个基于Flask的简单博客系统,具有文章展示和点赞功能。系统使用MySQL存储数据,支持文章展示、点赞/取消点赞等功能。 功能特点 文章列表展示文章详情查看(模态框展示)点赞/取消点赞功能(每个IP只…...
【stm32】定时器输出PWM波形(hal库)
一. PWM基本原理 PWM是一种通过调节信号的占空比(Duty Cycle)来控制输出平均电压的技术。占空比是指高电平时间与整个周期时间的比值。例如: - 占空比为50%时,输出平均电压为电源电压的一半。 - 占空比为100%时,输出始…...
当Ollama遇上划词翻译:我的Windows本地AI服务搭建日记
🚀 实现Windows本地大模型翻译服务 - 基于OllamaFlask的划词翻译实践 🛠️ 步骤概要1️⃣ python 环境准备2️⃣ Ollama 安装3️⃣ 一个 Flask 服务4️⃣ Windows 服务化封装5️⃣ 测试本地接口6️⃣ 配置划词翻译自定义翻译源7️⃣ 效果展示8️⃣ debug…...
Linux上Elasticsearch 集群部署指南
Es 集群部署 Es 集群部署 Es 集群部署 准备好三台服务器。示例使用:110.0.5.141/142/143 1、es用户和用户组创建,使用root账号 groupadd esuseradd -g es es2、将es安装包和ik分词器上传到:/home/es/目录下(任意目录都行&#…...
字节Trae使用感想(后端)
前言 昨天分享了字节哥的Trae从0到1创作模式构建一个vue前端项目,今天又来试试她的后端项目能力。不是我舔,不得不说确实不错。可惜现在曾经没有好好学习,进不了字节。既然进不了字节,那我就用字节哥的产品吧。 后面有惊喜…...
国产编辑器EverEdit - 二进制模式下观察Window/Linux/MacOs换行符差异
1 换行符格式 1.1 应用场景 稍微了解计算机历史的人都知道, 计算机3大操作系统: Windows、Linux/Unix、MacOS,这3大系统对文本换行的定义各不相同,且互不相让,导致在文件的兼容性方面存在一些问题,比如它们…...
文心一言4月起全面免费,6月底开源新模型:AI竞争进入新阶段?
名人说:莫听穿林打叶声,何妨吟啸且徐行。—— 苏轼 Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 一、文心一言免费化的背后:AI成本与应用的双重驱动1️⃣成本下降,推动文心一言普及2…...
解锁机器学习算法 | 线性回归:机器学习的基石
在机器学习的众多算法中,线性回归宛如一块基石,看似质朴无华,却稳稳支撑起诸多复杂模型的架构。它是我们初涉机器学习领域时便会邂逅的算法之一,其原理与应用广泛渗透于各个领域。无论是预测房价走势、剖析股票市场波动࿰…...
如何使用Three.js制作3D月球与星空效果
目录 1. 基本设置2. 创建星空效果3. 创建月球模型4. 添加中文3D文字5. 光照与相机配置6. 动画与控制7. 响应式布局8. 结语 在本文中,我们将一起学习如何利用Three.js实现一个3D月球与星空的效果,并添加一些有趣的元素,比如中文3D文字和互动功…...
SQL语句语法
SQL数据库的结构为 库database 表table 段segment 行row 列column 或field SQL 语句主要分为以下几类: 数据定义语言(DDL):用于定义数据库对象,如数据库、表、视图、索引等。数据操作语言(DML)&…...
github上文件过大无法推送问题
GitHub 对文件大小有限制,超过 100 MB 的文件无法直接推送到仓库中。 解决思路: 使用 Git Large File Storage (Git LFS) 来管理大文件不上传对应的大文件 使用Git LFS: 1. 安装 Git LFS 首先,你需要安装 Git LFS。可以按照以…...
微信小程序的请求函数封装(ts版本,uniapp开发)
主要封装函数代码: interface HttpOptions {url: string;method?: string;headers?: { [key: string]: string };data?: any; }class Http {private timeout: number;private baseUrl: string;public constructor() { this.timeout 60 * 1000;this.baseUrl ht…...
Visual Studio Code支持WSL,直接修改linux/ubuntu中的文件
步骤1 开始通过 WSL 使用 VS Code | Microsoft Learn 点击远程开发扩展包。 步骤2 Remote Development - Visual Studio Marketplace 点击install, 允许打开Visual Studio Code。 步骤3 共有4项,一齐安装。 步骤4 在WSL Linux(Ubuntu)中…...
openAI最新o1模型 推理能力上表现出色 准确性方面提升 API如何接入?
OpenAI o1模型在回答问题前会进行深入思考,并生成一条内部推理链,使其在尝试解决问题时可以识别并纠正错误,将复杂的步骤分解为更简单的部分,并在当前方法无效时尝试不同的途径。据悉,o1不仅数学水平与美国奥林匹克竞赛…...
GC 基础入门
什么是GC(Garbage Collection)? 内存管理方式通常分为两种: 手动内存管理(Manual Memory Management)自动内存管理(Garbage Collection, GC) 手动内存管理 手动内存管理是指开发…...
Go语言协程Goroutine高级用法(一)
什么协程 在Go语言中,协程就是一种轻量的线程,是并发编程的单元,由Go来管理,所以在GO层面的协程会更加的轻量、高效、开销更小,并且更容易实现并发编程。 轻量级线程 Go语言中协程(线程)与传…...
DeepSeek处理自有业务的案例:让AI给你写一份小众编辑器(EverEdit)的语法着色文件
1 DeepSeek处理自有业务的案例:让AI给你写一份小众编辑器(EverEdit)的语法着色文件 1.1 背景 AI能力再强,如果不能在企业的自有业务上产生助益,那基本也是一无是处。将企业的自有业务上传到线上训练,那是脑子进水的做法ÿ…...
【鸿蒙HarmonyOS Next实战开发】lottie动画库
简介 lottie是一个适用于OpenHarmony和HarmonyOS的动画库,它可以解析Adobe After Effects软件通过Bodymovin插件导出的json格式的动画,并在移动设备上进行本地渲染。 下载安裝 ohpm install ohos/lottieOpenHarmony ohpm 环境配置等更多内容,…...
PAT乙级真题 — 1084 外观数列(java)
外观数列是指具有以下特点的整数序列: d, d1, d111, d113, d11231, d112213111, ...它从不等于 1 的数字 d 开始,序列的第 n1 项是对第 n 项的描述。比如第 2 项表示第 1 项有 1 个 d,所以就是 d1;第 2 项是 1 个 d(对…...
大话软工笔记—需求分析概述
需求分析,就是要对需求调研收集到的资料信息逐个地进行拆分、研究,从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要,后续设计的依据主要来自于需求分析的成果,包括: 项目的目的…...
DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI
前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...
JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案
JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停 1. 安全点(Safepoint)阻塞 现象:JVM暂停但无GC日志,日志显示No GCs detected。原因:JVM等待所有线程进入安全点(如…...
IP如何挑?2025年海外专线IP如何购买?
你花了时间和预算买了IP,结果IP质量不佳,项目效率低下不说,还可能带来莫名的网络问题,是不是太闹心了?尤其是在面对海外专线IP时,到底怎么才能买到适合自己的呢?所以,挑IP绝对是个技…...
Selenium常用函数介绍
目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...
2025年渗透测试面试题总结-腾讯[实习]科恩实验室-安全工程师(题目+回答)
安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 腾讯[实习]科恩实验室-安全工程师 一、网络与协议 1. TCP三次握手 2. SYN扫描原理 3. HTTPS证书机制 二…...
NPOI Excel用OLE对象的形式插入文件附件以及插入图片
static void Main(string[] args) {XlsWithObjData();Console.WriteLine("输出完成"); }static void XlsWithObjData() {// 创建工作簿和单元格,只有HSSFWorkbook,XSSFWorkbook不可以HSSFWorkbook workbook new HSSFWorkbook();HSSFSheet sheet (HSSFSheet)workboo…...
Python 训练营打卡 Day 47
注意力热力图可视化 在day 46代码的基础上,对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...
GraphQL 实战篇:Apollo Client 配置与缓存
GraphQL 实战篇:Apollo Client 配置与缓存 上一篇:GraphQL 入门篇:基础查询语法 依旧和上一篇的笔记一样,主实操,没啥过多的细节讲解,代码具体在: https://github.com/GoldenaArcher/graphql…...
大数据治理的常见方式
大数据治理的常见方式 大数据治理是确保数据质量、安全性和可用性的系统性方法,以下是几种常见的治理方式: 1. 数据质量管理 核心方法: 数据校验:建立数据校验规则(格式、范围、一致性等)数据清洗&…...
