ceph分布式存储

一、ceph的组件和功能

1.简介

Ceph是一种为了优秀的性能、可靠性和可扩展性而设计的统一的、 分布式的存储系统。
“统一的” : 意味着Ceph可以一套存储系统同时提供对象存储、 块存储和文件系统存储三种功能, 以便在满足不同应用需求的前提下简化部署和运维。
“分布式” : 在Ceph系统中则意味着真正的无中心结构和没有理论上限的系统规模可扩展性。

2.层次结构和功能

image-20210319112421811

RADOS: 是一个完整的对象存储系统,所有存储在Ceph系统中的用户数据最终都是由这一层来存储的,主要由OSD、Monitor组成。

OSD:由数目可变的大规模OSD(Object Storage Devices)组成的集群,负责存储所有的Objects数据。( 默认有3个副本,但可以调整副本数)

Monitor:由少量Monitors组成的强耦合、小规模集群,负责管理Cluster Map。其中,Cluster Map是整个RADOS系统的关键数据结构,管理集群中的所有成员、关系和属性等信息以及数据的分发。

LIBRADOS:层的功能是对RADOS进行抽象和封装,并向上层提供API。

RADOSGW:功能特性基于LIBRADOS之上,提供当前流行的RESTful协议的网关,API抽象层次更高,并且兼容S3和Swift接口,作为对象存储

RBD(Rados Block Device):功能特性也是基于LIBRADOS之上,通过LIBRBD创建一个块设备,通过QEMU/KVM附加到VM上,作为传统的块设备来用。目前OpenStack、CloudStack等都是采用这种方式来为VM提供块设备,同时也支持快照、COW(Copy On Write)等功能。

Ceph FS(Ceph File System):功能特性是基于RADOS来实现分布式的文件系统,引入了MDS(Metadata Server),主要为兼容POSIX文件系统提供元数据。一般都是当做文件系统来挂载。(也就是说,Ceph 块设备和 Ceph 对象存储不使用MDS )

MGR (ceph-mgr) :该组件的主要作用是分担和扩展monitor的部分功能,减轻monitor的负担,让更好地管理ceph存储系统

二、ceph的数据读写流程

image-20210319115539721

当某个client需要向Ceph集群写入一个file时, 首先需要在本地完成寻址流程, 将file变为一个object, 然后找出存储该object的一组三个OSD。

找出三个OSDS, client将直接和Primary OSD通信,
发起写入操作(步驟1 ) ;
Primary OSD收到请求后, 分别向Secondary OSD和
Tertiary OSD发起写入操作(步驟2 、 3) ;
当Secondary OSD和Tertiary OSD各自完成写入操作后, 将分别向Primary OSD发送确认信息(步骤4、 5) ;
当Primary OSD确信其他两个OSD的写入完成后, 则自己也完成数据写入, 并向client确认object写入操作完成( 步骤6) ;

三、使用ceph-deploy安装一个最少三个节点的ceph集群(推荐3个或以上的磁盘作为专用osd)

1.基础配置

IP地址 主机名 附加磁盘 系统
192.168.43.111 node1 sdb,sdc,sdd CentOS 7 X64
192.168.43.112 node2 sdb,sdd CentOS 7 X64
192.168.43.113 node3 sdb,sdd CentOS 7 X64
192.168.43.114 client sdb,sdd CentOS 7 X64

sdb划分为两个区各5G,作为journal跟cache的缓存盘;sdc,sdd为数据共享盘

关闭防火墙和selinux

配置主机名

[root@localhost ~]# hostnamectl set-hostname node1
[root@localhost ~]# hostnamectl set-hostname node2
[root@localhost ~]# hostnamectl set-hostname node3
[root@localhost ~]# hostnamectl set-hostname client

给三台主机写入hosts解析

在这里插入图片描述

配置node1到所有节点root用户免密钥互信

只在node1上配置,生成密钥对
[root@node1 ~]# ssh-keygen -f ~/.ssh/id_rsa -N ‘’ -q
公钥分发到所有节点
[root@node1 ~]# for i in node1 node2 node3 client; do ssh-copy-id $i; done
验证免密钥互信
[root@node1 ~]# for i in node1 node2 node3 client; do ssh $i hostname; done
node1
node2
node3
client

在这里插入图片描述


在这里插入图片描述

配置时间同步

配置node1为时间服务器,其他节点作为客户端向node1同步时间
四台需同时操作

在这里插入图片描述

修改配置文件

在这里插入图片描述

重启,并设置开机自启

在这里插入图片描述

检查时间同步

在这里插入图片描述


在这里插入图片描述

在这里插入图片描述


在这里插入图片描述

在node1上配置本地yum源

[root@node1 ~]# cat getcephrpm.sh
#!/bin/sh

url=$1
version=$2

curl $1 |awk -F '"' '{print $4}' |grep $2 > /home/$2-list

mkdir -p /ceph/ceph-$2-rpm

for i in `cat /home/$2-list`
do
        echo "===================== Now get file: $i ======================="
        wget -r -p -np -k -P /ceph/ceph-$2-rpm $url$i
done

rm -f /home/$2-list

执行脚本:
[root@node1 ~]# sh getcephrpm.sh http://mirrors.aliyun.com/ceph/rpm-nautilus/el7/x86_64/ 14.2.10-0

查看下载的指定包
[root@node1 ~]# ls /ceph/ceph-14.2.10-0-rpm/mirrors.aliyun.com/ceph/rpm-nautilus/el7/x86_64/

同样,下载http://mirrors.aliyun.com/ceph/rpm-nautilus/el7/noarch/ 下面的rpm包
[root@node1 ~]# sh getcephrpm.sh http://mirrors.aliyun.com/ceph/rpm-nautilus/el7/noarch/ 14.2.10-0

在这里插入图片描述

ceph下创建目录x86_64和noarch,将下载好的x86_64和noarch下面内容分别拷贝到创建的对应目录

[root@node1 ~]# mkdir /ceph/{x86_64,noarch}
[root@node1 ~]# mv /ceph/ceph-14.2.10-0-rpm/mirrors.aliyun.com/ceph/rpm-nautilus/el7/x86_64/* /ceph/x86_64/
[root@node1 ~]# mv /ceph/ceph-14.2.10-0-rpm/mirrors.aliyun.com/ceph/rpm-nautilus/el7/noarch/* /ceph/noarch/

单独下载ceph部署工具ceph-deploy至/ceph/ceph-noarch/

在这里插入图片描述

[root@node1 ~]# wget http://mirrors.tuna.tsinghua.edu.cn/ceph/rpm-nautilus/el7/noarch/ceph-deploy-2.0.1-0.noarch.rpm -P /ceph/noarch/

使用createrepo创建仓库档案

[root@node1 ~]# yum install createrepo -y
[root@node1 ~]# createrepo -v /ceph/x86_64/
[root@node1 ~]# createrepo -v /ceph/noarch/

在这里插入图片描述


说明:
filelists.xml.gz:软件报的安装清单
primary.xml.gz:软件报的基本/主要信息
other.xml.gz:软件包的其他信息
repomd.xml:提高.xml.gz下载和校验信息

目录文件制作ISO文件

[root@node1 ~]# yum install mkisofs -y
[root@node1 ~]# mkisofs -r -o /opt/ceph.iso /ceph/

在这里插入图片描述

node1配置为yum仓库服务器,其他节点使用ftp方式使用ceph仓库

# 上传ceph.iso到node1
[root@node1 ~]# ll ceph.iso
-rw-r--r-- 1 root root 2408808448 Mar 18 09:15 ceph.iso

# 安装httpd并设置为开机自启动
[root@node1 ~]# yum install -y vsfpd
[root@node1 ~]# systemctl enable vsftpd --now

# 挂载ceph.iso到/var/ftp
[root@node1 ~]# mkdir /var/ftp/ceph
[root@node1 ~]# echo "/opt/ceph.iso  /var/ftp/ceph  iso9660 defaults 0 0" >> /etc/fstab 
[root@node1 ~]# mount -a

# yum文件ceph.repo由后面的ceph-deploy工具安装时自动生成。

在这里插入图片描述


在这里插入图片描述

2.部署ceph集群

步骤一:安装ceph-deploy

注意:直接设置环境变量即可,否则集群部署过程将使用官方yum源;只在第一个节点操作

1、在node1上安装部署工具,学习工具的语法格式。
Ceph官方推出了一个用python写的工具 cpeh-deploy,可以很大的简化ceph集群的配置过程
[root@node1 ceph-cluster]# yum install /var/ftp/ceph/noarch/ceph-deploy-2.0.1-0.noarch.rpm
注意:安装高版本的ceph-deploy,否则后面配置会报错
[root@node1 ~]# ceph-deploy --help
[root@node1 ~]# ceph-deploy mon --help

2、node1上创建工作目录
[root@node1 ~]# mkdir /ceph-cluster
[root@node1 ~]# cd /ceph-cluster

步骤二:创建ceph集群,在/ceph-cluster目录下生成配置文件。

1、创建ceph集群
创建一个新集群,并设置mon节点。
node1-node3添加epel源
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

在这里插入图片描述


解决方法——pip install distribute
[root@node1 ceph-cluster]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
[root@node1 ceph-cluster]# yum install python2-pip -y
[root@node1 ceph-cluster]# pip install distribute -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
再次执行:ceph-deploy new node1 node2 node3

在这里插入图片描述

2、给node1节点安装ceph相关软件包。
[root@node1 ceph-cluster]# ceph-deploy install node1 node2 node3

在这里插入图片描述

3、添加监控节点
初始化所有节点的mon服务,也就是启动mon服务。
[root@node1 ceph-cluster]# ceph-deploy mon create-initial
作用是将ceph.conf配置文件拷贝到所有mon节点,并将ceph-mon服务启动并设置开机自启
[root@node3 ~]# ls /etc/ceph/
ceph.conf rbdmap tmpn1zEAD
[root@node3 ~]# systemctl is-active ceph-mon@node3.service
active

4、创建ceph管理节点(mgr)
注意:每个运行了mon的节点上都需要安装mgr节点
[root@node1 ceph-cluster]# ceph-deploy mgr create node1 node2 node3

在这里插入图片描述

步骤三:准备日志磁盘分区

注意:sdb1和sdb2两个分区用来做存储服务器的journal缓存盘。生产中固态用于缓存,sas用户共享。

1、格式化sdb
[root@node1 ceph-cluster]# for i in node{1…3}
do
ssh $i parted /dev/sdb mklabel gpt
ssh $i parted /dev/sdb mkpart primary 1 50%
ssh $i parted /dev/sdb mkpart primart 50% 100%
done

在这里插入图片描述

2、磁盘分区后的默认权限无法让ceph对其进行读写操作,需要修改权限。
[root@node1 ceph-cluster]# for i in node{1…3}
do
ssh $i chown ceph.ceph /dev/sdb1 /dev/sdb2
done
以上操作服务器重启后再次重值导致授权失效,所以需要把规则写到配置文件实现永久有效。
规则1:如果设备名为/dev/sdb1,则设备文件的拥有者和拥有组为ceph
规则2:如果设备名为/dev/sdb2,则设备文件的拥有者和拥有组为ceph
[root@node1 ceph-cluster]# vim /etc/udev/rules.d/70-sdb.rules

ENV{DEVNAME}==“/dev/sdb1”,OWNER=“ceph”,GROUP=“ceph”

ENV{DEVNAME}==“/dev/sdb2”,GROUP=“ceph”

复制到其他osd节点
[root@node1 ceph-cluster]# for i in node{2…3}
do
scp /etc/udev/rules.d/70-sdb.rules $i:/etc/udev/rules.d/
done

在这里插入图片描述

步骤四:创建OSD存储空间

1、初始化清空磁盘数据(仅在node1操作)
注意ceph-deploy v2.0.0开始不再使用ceph-disk命令来初始化osd磁盘,如果还使用旧的命令初始磁盘报错
[root@node1 ceph-cluster]# for i in node{1…3}
do
ssh $i parted /dev/sdc mklabel gpt
ssh $i parted /dev/sdd mklabel gpt
done
清理磁盘
[root@node1 ceph-cluster]# for i in node{1…3}
do
ssh $i ceph-volume lvm zap /dev/sdc
ssh $i ceph-volume lvm zap /dev/sdd
done

2、创建OSD存储空间
[root@node1 ceph-cluster]# ceph-deploy osd create --data /dev/sdc --journal /dev/sdb1 --data /dev/sdd --journal /dev/sdb2 node1
// 创建osd存储设备,sdc提供存储空间,sdb1提供缓存
[root@node1 ceph-cluster]# ceph-deploy osd create --data /dev/sdc --journal /dev/sdb1 --data /dev/sdd --journal /dev/sdb2 node2
[root@node1 ceph-cluster]# ceph-deploy osd create --data /dev/sdc --journal /dev/sdb1 --data /dev/sdd --journal /dev/sdb2 node3

步骤五:查看ceph状态,验证

在主节点生成的ceph.client.admin.keyring文件拷贝至所有节点的/etc/ceph下
[root@node1 ceph-cluster]# ceph-deploy admin node1 node2 node3

检查集群状态:使用命令 ceph health 或者 ceph -s
[root@node1 ceph-cluster]# ceph health

在这里插入图片描述


在这里插入图片描述

步骤六:启用dashboard

自 nautilus开始,dashboard作为一个单独的模块独立出来了,使用时需要在所有的mgr节点上单独安装
在所有的mgr节点上单独安装
[root@node1 ceph-cluster]# for i in node{1…3}
do
ssh $i yum install -y ceph-mgr-dashboard
done

启用dashboard
[root@node1 ceph-cluster]# ceph mgr module enable dashboard --force

在这里插入图片描述


默认启用SSL/TLS,所以需要创建自签名根证书
[root@node1 ceph-cluster]# ceph dashboard create-self-signed-cert

创建具有管理员角色的用户
[root@node1 ceph-cluster]# ceph dashboard ac-user-create admin admin administrator
{“username”: “admin”,“lastUpdate”: 1616031372,“name”: null,“roles”: [“administrator”],“password”: “$2b$12$4wa4pCKkDf.pvDO9LFldZuwn1GRt.W6zDXvV9QHxnjovrmpA3inWS”,“email”: null}

在这里插入图片描述

查看ceph-mgr服务
[root@node1 ceph-cluster]# ceph mgr services
{
“dashboard”: “https://node1:8443/”
}

在这里插入图片描述


在这里插入图片描述


在这里插入图片描述

原文地址:https://blog.csdn.net/zhuangjiu

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


软件简介:蓝湖辅助工具,减少移动端开发中控件属性的复制和粘贴.待开发的功能:1.支持自动生成约束2.开发设置页面3.做一个浏览器插件,支持不需要下载整个工程,可即时操作当前蓝湖浏览页面4.支持Flutter语言模板生成5.支持更多平台,如Sketch等6.支持用户自定义语言模板
现实生活中,我们听到的声音都是时间连续的,我们称为这种信号叫模拟信号。模拟信号需要进行数字化以后才能在计算机中使用。目前我们在计算机上进行音频播放都需要依赖于音频文件。那么音频文件如何生成的呢?音频文件的生成过程是将声音信息采样、量化和编码产生的数字信号的过程,我们人耳所能听到的声音频率范围为(20Hz~20KHz),因此音频文件格式的最大带宽是20KHZ。根据奈奎斯特的理论,音频文件的采样率一般在40~50KHZ之间。奈奎斯特采样定律,又称香农采样定律。...............
前言最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿遍又亿遍,久久不能离开!看着小仙紫姐姐的蹦迪视频,除了一键三连还能做什么?突发奇想,能不能把舞蹈视频转成代码舞呢?说干就干,今天就手把手教大家如何把跳舞视频转成代码舞,跟着仙女姐姐一起蹦起来~视频来源:【紫颜】见过仙女蹦迪吗 【千盏】一、核心功能设计总体来说,我们需要分为以下几步完成:从B站上把小姐姐的视频下载下来对视频进行截取GIF,把截取的GIF通过ASCII Animator进行ASCII字符转换把转换的字符gif根据每
【Android App】实战项目之仿抖音的短视频分享App(附源码和演示视频 超详细必看)
前言这一篇博客应该是我花时间最多的一次了,从2022年1月底至2022年4月底。我已经将这篇博客的内容写为论文,上传至arxiv:https://arxiv.org/pdf/2204.10160.pdf欢迎大家指出我论文中的问题,特别是语法与用词问题在github上,我也上传了完整的项目:https://github.com/Whiffe/Custom-ava-dataset_Custom-Spatio-Temporally-Action-Video-Dataset关于自定义ava数据集,也是后台
因为我既对接过session、cookie,也对接过JWT,今年因为工作需要也对接了gtoken的2个版本,对这方面的理解还算深入。尤其是看到官方文档评论区又小伙伴表示看不懂,所以做了这期视频内容出来:视频在这里:本期内容对应B站的开源视频因为涉及的知识点比较多,视频内容比较长。如果你觉得看视频浪费时间,可以直接阅读源码:goframe v2版本集成gtokengoframe v1版本集成gtokengoframe v2版本集成jwtgoframe v2版本session登录官方调用示例文档jwt和sess
【Android App】实战项目之仿微信的私信和群聊App(附源码和演示视频 超详细必看)
用Android Studio的VideoView组件实现简单的本地视频播放器。本文将讲解如何使用Android视频播放器VideoView组件来播放本地视频和网络视频,实现起来还是比较简单的。VideoView组件的作用与ImageView类似,只是ImageView用于显示图片,VideoView用于播放视频。...
采用MATLAB对正弦信号,语音信号进行生成、采样和内插恢复,利用MATLAB工具箱对混杂噪声的音频信号进行滤波
随着移动互联网、云端存储等技术的快速发展,包含丰富信息的音频数据呈现几何级速率增长。这些海量数据在为人工分析带来困难的同时,也为音频认知、创新学习研究提供了数据基础。在本节中,我们通过构建生成模型来生成音频序列文件,从而进一步加深对序列数据处理问题的了解。
基于yolov5+deepsort+slowfast算法的视频实时行为检测。1. yolov5实现目标检测,确定目标坐标 2. deepsort实现目标跟踪,持续标注目标坐标 3. slowfast实现动作识别,并给出置信率 4. 用框持续框住目标,并将动作类别以及置信度显示在框上
数字电子钟设计本文主要完成数字电子钟的以下功能1、计时功能(24小时)2、秒表功能(一个按键实现开始暂停,另一个按键实现清零功能)3、闹钟功能(设置闹钟以及到时响10秒)4、校时功能5、其他功能(清零、加速、星期、八位数码管显示等)前排提示:前面几篇文章介绍过的内容就不详细介绍了,可以看我专栏的前几篇文章。PS.工程文件放在最后面总体设计本次设计主要是在前一篇文章 数字电子钟基本功能的实现 的基础上改编而成的,主要结构不变,分频器将50MHz分为较低的频率备用;dig_select
1.进入官网下载OBS stdioOpen Broadcaster Software | OBS (obsproject.com)2.下载一个插件,拓展OBS的虚拟摄像头功能链接:OBS 虚拟摄像头插件.zip_免费高速下载|百度网盘-分享无限制 (baidu.com)提取码:6656--来自百度网盘超级会员V1的分享**注意**该插件必须下载但OBS的根目录(应该是自动匹配了的)3.打开OBS,选中虚拟摄像头选择启用在底部添加一段视频录制选择下面,进行录制.
Meta公司在9月29日首次推出一款人工智能系统模型:Make-A-Video,可以从给定的文字提示生成短视频。基于**文本到图像生成技术的最新进展**,该技术旨在实现文本到视频的生成,可以仅用几个单词或几行文本生成异想天开、独一无二的视频,将无限的想象力带入生活
音频信号叠加噪声及滤波一、前言二、信号分析及加噪三、滤波去噪四、总结一、前言之前一直对硬件上的内容比较关注,但是可能是因为硬件方面的东西可能真的是比较杂,而且需要渗透的东西太多了,所以学习进展比较缓慢。因为也很少有单纯的硬件学习研究,总是会伴随着各种理论需要硬件做支撑,所以还是想要慢慢接触理论学习。但是之前总找不到切入点,不知道从哪里开始,就一直拖着。最近稍微接触了一点信号处理,就用这个当作切入点,开始接触理论学习。二、信号分析及加噪信号处理选用了matlab做工具,选了一个最简单的语音信号处理方
腾讯云 TRTC 实时音视频服务体验,从认识 TRTC 到 TRTC 的开发实践,Demo 演示& IM 服务搭建。
音乐音频分类技术能够基于音乐内容为音乐添加类别标签,在音乐资源的高效组织、检索和推荐等相关方面的研究和应用具有重要意义。传统的音乐分类方法大量使用了人工设计的声学特征,特征的设计需要音乐领域的知识,不同分类任务的特征往往并不通用。深度学习的出现给更好地解决音乐分类问题提供了新的思路,本文对基于深度学习的音乐音频分类方法进行了研究。首先将音乐的音频信号转换成声谱作为统一表示,避免了手工选取特征存在的问题,然后基于一维卷积构建了一种音乐分类模型。
C++知识精讲16 | 井字棋游戏(配资源+视频)【赋源码,双人对战】
本文主要讲解如何在Java中,使用FFmpeg进行视频的帧读取,并最终合并成Gif动态图。
在本篇博文中,我们谈及了 Swift 中 some、any 关键字以及主关联类型(primary associated types)的前世今生,并由浅及深用简明的示例向大家讲解了它们之间的奥秘玄机。