windows11下基于docker单机部署ceph集群

windows下基于docker单机部署ceph集群

  1. 创建ceph专用网络
docker network create --driver bridge --subnet 172.20.0.0/16 ceph-network
  1. 查看是否创建成功(查看创建状态)
docker network inspect ceph-network
  1. 拉取镜像:(镜像源自行选择)
docker pull ceph/daemon:latest-luminous
# 查看镜像
docker images
  1. 搭建 monitor 节点(监控集群状态)
# 创建本地目录
New-Item -ItemType Directory -Force -Path ./etc/ceph
New-Item -ItemType Directory -Force -Path ./var/lib/ceph
New-Item -ItemType Directory -Force -Path ./var/log/ceph# 运行容器
docker run -d --name ceph-mon --network ceph-network --ip 172.20.0.10 -e CLUSTER=ceph -e WEIGHT=1.0 -e MON_IP=172.20.0.10 -e MON_NAME=ceph-mon -e CEPH_PUBLIC_NETWORK=172.20.0.0/16 -v ${PWD}/etc/ceph:/etc/ceph -v ${PWD}/var/lib/ceph/:/var/lib/ceph/ -v ${PWD}/var/log/ceph/:/var/log/ceph/ ceph/daemon:latest-luminous mon
  1. 搭建 osd 节点(对象存储节点)
# 执行命令获取密钥环
docker exec ceph-mon ceph auth get client.bootstrap-osd -o /var/lib/ceph/bootstrap-osd/ceph.keyring# 修改配置文件,使用 PowerShell 追加内容到文件
$configPath = "${PWD}/etc/ceph/ceph.conf"
"osd max object name len = 256`nosd max object namespace len = 64" | Out-File -FilePath $configPath -Append -Encoding UTF8# 创建 OSD 本地目录
New-Item -ItemType Directory -Force -Path ./var/lib/ceph/osd/1
New-Item -ItemType Directory -Force -Path ./var/lib/ceph/osd/2
New-Item -ItemType Directory -Force -Path ./var/lib/ceph/osd/3# 分别启动三个容器来模拟集群
docker run -d --privileged=true --name ceph-osd-1 --network ceph-network --ip 172.20.0.11 -e CLUSTER=ceph -e WEIGHT=1.0 -e MON_NAME=ceph-mon -e MON_IP=172.20.0.10 -e OSD_TYPE=directory -v ${PWD}/etc/ceph:/etc/ceph -v ${PWD}/var/lib/ceph/:/var/lib/ceph/ -v ${PWD}/var/lib/ceph/osd/1:/var/lib/ceph/osd ceph/daemon:latest-luminous osd
docker run -d --privileged=true --name ceph-osd-2 --network ceph-network --ip 172.20.0.12 -e CLUSTER=ceph -e WEIGHT=1.0 -e MON_NAME=ceph-mon -e MON_IP=172.20.0.10 -e OSD_TYPE=directory -v ${PWD}/etc/ceph:/etc/ceph -v ${PWD}/var/lib/ceph/:/var/lib/ceph/ -v ${PWD}/var/lib/ceph/osd/2:/var/lib/ceph/osd ceph/daemon:latest-luminous osd
docker run -d --privileged=true --name ceph-osd-3 --network ceph-network --ip 172.20.0.13 -e CLUSTER=ceph -e WEIGHT=1.0 -e MON_NAME=ceph-mon -e MON_IP=172.20.0.10 -e OSD_TYPE=directory -v ${PWD}/etc/ceph:/etc/ceph -v ${PWD}/var/lib/ceph/:/var/lib/ceph/ -v ${PWD}/var/lib/ceph/osd/3:/var/lib/ceph/osd ceph/daemon:latest-luminous osd
  1. 搭建 mgr 节点(管理节点,可打开管理面板)
docker run -d --privileged=true --name ceph-mgr --network ceph-network --ip 172.20.0.14 -e CLUSTER=ceph -p 7000:7000 --pid=container:ceph-mon -v ${PWD}/etc/ceph:/etc/ceph -v ${PWD}/var/lib/ceph/:/var/lib/ceph/ ceph/daemon:latest-luminous mgr# 开启管理界面
docker exec ceph-mgr ceph mgr module enable dashboard
  1. 搭建 rgw 节点(ceph网关,可以搭建多个)
# 执行命令获取密钥环
docker exec ceph-mon ceph auth get client.bootstrap-rgw -o /var/lib/ceph/bootstrap-rgw/ceph.keyring# 运行 RGW 容器
docker run -d --privileged=true --name ceph-rgw --network ceph-network --ip 172.20.0.15 -e CLUSTER=ceph -e RGW_NAME=ceph-rgw -p 7480:7480 -v ${PWD}/var/lib/ceph/:/var/lib/ceph/ -v ${PWD}/etc/ceph:/etc/ceph ceph/daemon:latest-luminous rgw
  1. 检查 ceph 状态
docker exec ceph-mon ceph -s

集群已经部署完毕,下面是用于开发的步骤:在这里插入图片描述

  1. 测试添加 rgw 用户,生成 access_key 和 secret_key 用于访问
docker exec ceph-rgw radosgw-admin user create --uid="test" --display-name="test user"

生成结果如:


PS C:\WINDOWS\system32> docker exec ceph-rgw radosgw-admin user create --uid="test" --display-name="test user"
{"user_id": "test","display_name": "test user","email": "","suspended": 0,"max_buckets": 1000,"auid": 0,"subusers": [],"keys": [{"user": "test","access_key": "7367PT68J5OCWA84XXXXX","secret_key": "ieAuUzUJJ9Wa9SBTGSnloaIjS8eD8p9z2zXXXXX"}],"swift_keys": [],"caps": [],"op_mask": "read, write, delete","default_placement": "","placement_tags": [],"bucket_quota": {"enabled": false,"check_on_raw": false,"max_size": -1,"max_size_kb": 0,"max_objects": -1},"user_quota": {"enabled": false,"check_on_raw": false,"max_size": -1,"max_size_kb": 0,"max_objects": -1},"temp_url_keys": [],"type": "rgw"
}

开发使用:
可以直接通过代码进行操作:

package cephimport ("gopkg.in/amz.v1/aws""gopkg.in/amz.v1/s3""log"cfg "filestore-server/config"
)var cephConn *s3.S3// GetCephConnection : 获取ceph连接
func GetCephConnection() *s3.S3 {if cephConn != nil {return cephConn}// 1. 初始化ceph的一些信息auth := aws.Auth{AccessKey: cfg.Config.CephConfig.CephAccessKey,SecretKey: cfg.Config.CephConfig.CephSecretKey,}curRegion := aws.Region{Name:                 "default",EC2Endpoint:          cfg.Config.CephConfig.CephGWEndpoint,S3Endpoint:           cfg.Config.CephConfig.CephGWEndpoint,S3BucketEndpoint:     "",S3LocationConstraint: false,S3LowercaseBucket:    false,Sign:                 aws.SignV2,}// 2. 创建S3类型的连接return s3.New(auth, curRegion)
}// GetCephBucket : 获取指定的bucket对象
func GetCephBucket(bucket string) *s3.Bucket {conn := GetCephConnection()b := conn.Bucket(bucket)// 检查存储桶是否存在_, err := b.List("", "", "", 0)if err != nil {if s3err, ok := err.(*s3.Error); ok && s3err.StatusCode == 404 {log.Printf("存储桶 %s 不存在,尝试创建...", bucket)// 创建存储桶err = b.PutBucket(s3.PublicRead)if err != nil {log.Printf("创建存储桶 %s 失败: %v", bucket, err)return nil}log.Printf("存储桶 %s 创建成功", bucket)} else {log.Printf("访问存储桶 %s 出错: %v", bucket, err)return nil}}return b
}// PutObject : 上传文件到ceph集群
func PutObject(bucket string, path string, data []byte) error {buck := GetCephBucket(bucket)return buck.Put(path, data, "octet-stream", s3.PublicRead)
}

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

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

相关文章

使用DataGrip连接安装在Linux上的Redis

目录 一、前言 二、开放防火墙端口 三、使用DataGrip连接安装在Linux上的Redis 一、前言 在学习黑马Redis从入门到实战的视频,完成了Redis在linux上的安装配置之后,我们可以使用图形化界面方便操作使用redis数据库。在24年JavaWebAI学习时连接MySQL数…

MySQL的union、union all导致排序失效

今天练习SQL,使用union all 连接各个查询导致我的各个查询排序失效,最后发现使用union all后会忽略各个模块的order by,只有最外层的order by才会生效原SQL如下:( selectexam_id tid,count(distinct uid) uv, count(uid) pv frome…

LVS 集群技术实践:NAT 与 DR 模式的配置与对比

1 实验环境规划 实验目标是搭建一个负载均衡集群,通过 LVS 调度器将流量分发到两台真实服务器(RS1 和 RS2)。2.网络配置3 实验步骤关闭防火墙和 SELinux安装 HTTP 服务(在 RS21和 RS2 上):sudo systemctl s…

YOLOv8中添加SENet注意力机制

注意力机制(Attention Mechanism)是深度学习中的一种方法,在图像处理领域,尤其是在卷积神经网络(CNN)和视觉Transformer等架构中。图像数据具有局部相关性,注意力机制可以帮助模型聚焦于图像中更重要的区域,从而提升处理效果。 SENet(Squeeze-and-Excitation Network)…

SpringBoot五分钟快速入门指南

使用 Spring Boot 构建应用 本指南提供了关于Spring Boot如何帮助您加速应用开发的一些示例。随着您阅读更多 Spring 入门指南,您将看到 Spring Boot 的更多用例。本指南旨在让您快速了解 Spring Boot。如果您想创建自己的基于 Spring Boot 的项目,请访问 Spring Initializr…

docker,防火墙关闭后,未重启docker,导致端口映射失败

首先,看这篇文章前,建议先把网上其他的文章说的方法尝试一遍!!! 1. 现象 docker启动某一个容器,然后映射端口时显示失败2. 解决 把网上的方法尝试一遍之后,最后发现是防火墙的问题!&…

事务处理与AOP(web后端笔记第四期)

p.s.这是萌新自己自学总结的笔记,如果想学习得更透彻的话还是请去看大佬的讲解 目录事务spring事物管理事物属性--回滚事物属性--传播行为(propagation)AOP一些核心概念通知类型通知的执行顺序切入点表达式executionannotation连接点事务 事物是一组操作的集合&…

第36周———— RNN实现阿尔茨海默病诊断

目录 前言 1.检查GPU 2.查看数据 3.划分数据集 4.创建模型与编译训练 ​​​​5.编译及训练模型 6.结果可视化 7.模型预测 8.总结: 前言 🍨 本文为🔗365天深度学习训练营中的学习记录博客 🍖 原作者:K同学啊 1.检查G…

equals和hashcode方法重写

在 Java 中,当你需要基于对象的内容而非引用地址来判断两个对象是否相等时,就需要重写equals和hashCode方法。以下是具体场景和实现原则:一、为什么需要同时重写这两个方法?equals方法:默认比较对象的内存地址&#xf…

Excel批量生成SQL语句 Excel批量生成SQL脚本 Excel拼接sql

Excel批量生成SQL语句 Excel批量生成SQL脚本 Excel拼接sql一、情境描述在Excel中有标准的格式化数据,如何快速导入到数据库中呢?有些工具支持Excel导入的,则可以快速导入数据---例如Navicat;如果不支持呢,如果将Excel表…

金和OA C6 DelTemp.aspx 存在XML实体注入漏洞(CVE-2025-7523)

免责声明 本文档所述漏洞详情及复现方法仅限用于合法授权的安全研究和学术教育用途。任何个人或组织不得利用本文内容从事未经许可的渗透测试、网络攻击或其他违法行为。 前言:我们建立了一个更多,更全的知识库。每日追踪最新的安全漏洞,追中25HW情报。 更多详情: http…

Android性能优化之启动优化

一、启动性能瓶颈深度分析 1. 冷启动阶段耗时分布阶段耗时占比关键阻塞点进程创建15%fork进程 加载ZygoteApplication初始化40%ContentProvider/库初始化Activity创建30%布局inflate 视图渲染首帧绘制15%VSync信号等待 GPU渲染2. 高频性能问题 初始化风暴:多个库…

中国优秀开源软件及企业调研报告

中国优秀开源软件及企业调研报告 引言 当前中国开源生态呈现蓬勃发展态势,技术创新领域尤为活跃,其中人工智能大模型成为开源动作的核心聚焦方向。2025年上半年,国内AI领域开源生态迎来密集爆发,头部科技企业相继推出重要开源举…

C++语法 匿名对象 与 命名对象 的详细区分

目录一、匿名对象的本质定义二、匿名对象的调用逻辑:即生即用的设计三、与命名对象的核心差异四、匿名对象的典型应用场景五、匿名对象的潜在风险与规避六、总结:匿名对象的价值定位在 C 类与对象的知识体系中,匿名对象是一种容易被咱们忽略&…

【Fedora 42】Linux内核升级后,鼠标滚轮失灵,libinput的锅?

解决: 最近在玩Fedora 42,升级了一次给俺鼠标滚轮干失灵了。原因可能是 libinput 升级后与Fedora升级后的某些配置有冲突?(搞不懂) sudo dnf downgrade libinput降级 libinput (1.28.901-1.fc42 -> 1.28.0-1.fc42) …

虚拟机centos服务器安装

创建虚拟机选择镜像启动 移除旧的repo文件: sudo rm -f /etc/yum.repos.d/CentOS-Base.repo下载阿里云的repo文件: 对于CentOS 7: sudo wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo清除缓存并生…

【js(1)一文解决】var let const

var let const!在 ES6 之前,JavaScript 只有两种作用域: 全局变量 与 函数内的局部变量一、var1. 函数级作用域,有变量提升二、let(ES6新增)1. 块级作用域,不会影响外部作用域2.let 关键字在不同…

论螺旋矩阵

螺旋矩阵题型总结。我刷了几道螺旋矩阵相关的题目,这里我们介绍一下一些常见的解法。 螺旋矩阵 方形矩阵 当我们遇到n*n的方形矩阵时,可以用一种特殊的解法来遍历实现,以下面这道题为例: 59. 螺旋矩阵 II 我们可以定义几个变…

数学金融与金融工程:学科差异与选择指南

在金融领域的学习中,数学金融与金融工程常被混淆。两者虽同属 “金融 量化” 交叉方向,但在研究侧重、培养路径上有显著区别。结合学科特点与行业实践,帮大家理清两者的核心差异,以便更精准地选择方向。一、核心差异:…

包管理工具npm cnpm yarn的使用

包管理工具 1. 什么是包管理工具? 包管理工具是用于管理和安装 Node.js 项目依赖的工具。它们提供了一种结构化的方式来管理项目的依赖关系,使得项目的依赖管理变得更加便捷和可靠。 2. 常见的包管理工具有哪些? npm(Node Package Manager):是 Node.js 的默认包管理工…