分布式存储系统(Ceph)基础

存储基础

  • 存储设备
    • DAS:IDE、SATA、SCSI、SAS、USB
    • NAS:NFS、CIFS
    • SAN:SCSI、FC SAN、iSCSI

存储内容包括元数据和数据,名称节点(NameNode)存放元数据,数据节点(DataNode)存放实体数据。

元数据节点通常将随机IO转换为顺序IO进行存取,参考redis的AOF机制。

  • 高可用
    • 主从复制或者冗余备份

Ceph

  • Ceph是一个对象式存储系统,它把每一个待管理的数据流切分为一到多个固定大小的对象数据,并以其为原子单元完成数据存取。
  • 对象数据的底层存储服务是由多个主机组成的存储集群,该集群也被称之为RADOS(Reliable Automatic Distributed Object Store)存储集群,即可靠、自动化、分布式对象存储系统。
  • librados是RADOS存储集群的API,支持C、C++、Java、Python、Ruby和PHP等编程语言。
  • Ceph uniquely delivers object, block, and file storage in one unified system. (RaodsGW、RBD、CephFS)

osd (Object Storage Device)

mon (Monitor):维护集群元数据

mgr (Manager):维护查询类操作

将整个存储空间切分为区,每个分区就是存储池,存储池的大小取决于磁盘大小,

SP (Storage Pool):rados cluster抽象而成的存储池

PG (Placement Group):存储池中可以映射到osd上的归置组,便于管理

存储过程:

对象名称进行一致性hash计算,映射到PG上,根据存储池类型和冗余副本数量,找到足量的osd进行存储。

Monitors

  • ceph-mon 维护集群图的状态,包括monitor、manager、OSD、CRUSH
  • CephX认证协议,负责维护认证信息并实行认证,任何组件间都需要认证
  • 通常至少需要三个monitors用于冗余和高可用

Managers

  • ceph-mgr跟踪ceph集群运行时的指标数据,包括存储空间利用率、当前性能指标、系统负载
  • 可利用基于python的插件,对于mgr进行功能扩展,本身支持网络面板以及REST API
  • 通常至少需要俩个managers用于高可用

RADOS 组件

  • Ceph OSDs
    • OSD(守护进程,ceph-osd)存储数据、数据复制、恢复、重新均衡,并提供监视信息给mon和mgr通过心跳检查其他守护进程
    • 至少需要三个OSDs用于高可用
  • MDSs
    • MDS存储Ceph文件系统的元数据
    • 允许POSIX文件系统用户执行基本的命令

数据抽象接口

  • LIBRADOS
    • 用户可通过支持的编程语言开发自定义客户端程序通过RADOS协议与存储系统进行交互
  • CephFS
    • 使用POSIX规范文件系统在Ceph集群存放数据
    • 依赖于独立运行的守护进程ceph-mds向客户端提供服务
  • Ceph Block Device (RBD)
    • 拥有RADOS的功能,如快照、复制、一致性,并使用内核模块或librbd库与OSD进行交互
    • 与内核模块、KVMs和云计算系统的交互均可以展现无限伸缩的高性能
    • 无须依赖于特定的守护进程,内建了librbd库
  • Ceph Object GateWay (RadosGW)
    • 在librados基础上提供对REST形式的对象存储功能
    • 依赖于守护进程ceph-radosgw,其是一个用于与Ceph集群交互的HTTP服务器

管理节点

  • 常用的管理接口是一组命令行工具程序,例如rados、ceph、rbd等命令,管理员可以从某个特定的MON节点执行管理操作,也可使用专用的管理节点
  • 专用的管理节点有助于在Ceph相关的程序升级或硬件维护期间为管理员提供一个完整的、独立的并隔离于存储集群之外的操作环境,从而避免因重启或意外中断而导致维护操作异常中断

文件存储方式

  • FileStore:将文件分割成对象,OSD格式化成了XFS文件系统,需要先将对象转换成文件,属组文件级元数据放在元数据区,对象自己的元数据放在levelDB中。

  • BlueStore:OSD就是裸设备不进行格式化,levelDB(RocksDB)配合BlueFS存放元数据,其他地方直接存放并管理数据。

部署

  • ceph-deploy (primary, run on admin-host)
    • 只用于Ceph部署,并且不会处理客户端配置
  • ceph-ansible (recommand)
  • ceph-chef
  • puppet-ceph

集群拓扑及网络

  • 每个节点使用两个网卡
    • 一个与客户端交互(public network, mandatory)
    • 一个与集群其它节点交互(private network, optional)

部署准备

设备前提

ifconfig

fdisk -l /dev/vd*

cat /etc/hosts

系统设置

设定时钟同步

若可直接访问互联网,启动chronyd服务并设定随系统启动

systemctl start chronyd.service

systemctl enable chronyd.service

配置本地时间服务器,当存在可用本地服务器时,修改节点的/etc/crhony/conf配置文件

server CHRONY-SERVER-NAME-OR-IP iburst

主机名称解析

ip hostname name…

关闭iptables或firewalld服务

在不确定具体启动状态的前提下,同时关闭并禁用二者即可

systemctl stop firewalld.service

systemctl stop iptables.service

systemctl disable firewalld.service

systemctl disable iptables.service

yum仓库配置

在ceph-admin节点上,安装生成所需版本的yum仓库配置

rpm -ivh https://mirrors.aliyun.com/ceph/rom-xxx/xx/xxx/xxxx.rpm

cd /etc/yum.repos.d/

cat ceph.repo

yum install epel-release // 相关依赖库

创建Ceph特定用户账号

ceph-deploy必须以普通用户登录到各目标节点,且此用户需要拥有无密码使用sudo命令的权限,以便在安装软件及生成配置文件的过程中无需中断配置过程。新版ceph-deploy支持使用"–username {username}"选项提供可无密码使用sudo命令的用户名,指定的用户需要能够通过SSH协议自动认证并连接到各个节点

在各个节点创建新用户并设置密码magedu

useradd cephadm && echo “magedu” | passwd --stdin cephadm

确保无密码执行sudo命令 (可直接编辑/etc/sudoers.d/cephadm)

echo “cephadm ALL = (root) NOPASSWD:ALL” | sudo tee /etc/sudoers.d/cephadm

chmod 0440 /etc/sudoers.d/cephadm

sudo -l

su - cephadm

配置用户基于密钥的ssh认证

使用cephadm用户生成密钥

ssh-keygen -t rsa -P ‘’

ssh-copy-id -i .ssh/id_rsa.pub cephadm@localhost

ssh-copy-id -i .ssh/id_rsa.pub cephadm@store01

[scp -rp .ssh/ cephadm@store01:/home/cephadm] // 或者直接copy文件夹

为了方便操作,可修改~/.ssh/config文件,设定访问其它节点默认使用的用户名

Host store01

​ Hostname store01.magedu.com

​ User cephadm

配置其他节点sudo权限

scp -rp /etc/sudoers.d/cephadm store01:/etc/sudoers.d/

管理节点安装ceph-deploy

yum update

yum install ceph-deploy python-setuptools python2-subprocess32

部署RADOS集群

初始化

创建集群相关配置文件目录

mkdir ceph-cluster

cd ceph-cluster

初始化第一个MON节点

ceph-deploy new {initial-monitor-node(s)} // 名称必须与节点当前使用的主机名称保存一致

编辑生成ceph.conf配置文件,在[global]配置段中设置面向客户端通信使用的IP地址所在网络

public network = 172.20.0.0/16

安装Ceph集群

ceph-deploy install {ceph-node}[{ceph-node}…]

配置初始MON节点,手机所有密钥

ceph-deploy mon create-install

将配置文件和admin密钥拷贝到各节点上,以免每次执行需要指定MON节点和amdin.keyring

ceph-deploy admin store01 …

在需要运行ceph命令的节点上以root身份设定cephadm可以读取keyring文件

setfacl -m u:cephadm:r /etc/ceph/ceph.client.admin.keyring

配置manager节点,启动mgr进程

ceph-deploy mgr create store01

在Ceph集群的各节点上以cephadm用户测试集群的状态

ceph health

ceph -s

向RADOS集群添加OSD

整理磁盘

ceph-deploy disk list {osd-server-name} …

ceph-deploy disk zap {osd-server-name} {disk-name}

【如果对应节点的设备有数据,需要以root身份执行ceph-volumn lvm zap --destroy {DEVICE}】

添加OSD

ceph-deploy osd create {node} --data {data-disk}

ceph-deploy osd list {node} …

ceph osd stat 或者 ceph osd {dump / ls}

移除OSD

ceph osd out {osd-num}

sudo systemctl stop ceph-osd@{osd-num}

ceph osd rm {osd-num}

上传/下载数据对象

ceph osd pool create {pool-name} [rule-num] {PG-num}

rados put {object-name} {obj-location} --pool={pool-name} // 或者使用-p 指定存储池

rados ls --pool = {pool-name}

ceph osd map {pool-name} {object} // 获取在存储池中数据对象的具体位置信息

rados rm {object-name} --pool = {pool-name}

ceph osd pool rm {pool-name} {pooll-name} --yes-i-really-really-mean-it // 需要先启用存储池删除配置

扩展Ceph集群

扩展Monitor节点

ceph-deploy mon add {ceph-nodes} // 最好是奇数个节点

ceph quorum_status --format json-query

扩展Manager节点

ceph-deploy mgr create {ceph-nodes}

ceph -s

访问接口

Ceph块设备接口

创建存储池并启用rbd功能进行初始化

ceph osd pool create {pool-name} {PG-num}

ceph osd pool application enable {pool-name} rbd

rbd pool init -p {pool-name}

按需创建映像,将映像文件作为块设备使用

rbd create {image-name} --size {size} --pool {pool-name}

rbd info // 获取相关信息

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

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

相关文章

【布局优化】基于遗传算法的车间布局优化 车间设施布局优化【Matlab代码#50】

文章目录 【获取资源请见文章第5节:资源获取】1. 车间布局优化2. 基于GA的布局优化模型3. 部分代码展示4. 仿真结果展示5. 资源获取 【获取资源请见文章第5节:资源获取】 1. 车间布局优化 车间设施布置的规划一直是工业工程领域不断研究和探索的内容&am…

JavaWeb(5)——HTML、CSS、JS 快速入门

一、JavaScript 对象 二、JavaScript BOM对象 和 DOM对象 关于BOM主要对 Window 和 location 进行说明&#xff1a; 三、JavaScript 事件监听 事件绑定 常见事件 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8">…

libcurl库使用实例

libcurl libcurl是一个功能强大的跨平台网络传输库&#xff0c;支持多种协议&#xff0c;包括HTTP、FTP、SMTP等&#xff0c;同时提供了易于使用的API。 安装 ubuntu18.04平台安装 sudo apt-get install libcurl4-openssl-dev实例 这个示例使用libcurl库发送一个简单的HTTP …

数据结构——树

数据结构——树 树&#xff08;Tree&#xff09;是一种常见的数据结构&#xff0c;用于存储具有层级关系的数据。树由一组称为节点&#xff08;Node&#xff09;的元素组成&#xff0c;节点之间通过边连接。其中一个节点被称为根节点&#xff08;Root&#xff09;&#xff0c;根…

数据库的基本查询(二)

目录 一、简单查询二、高级查询2.1 分页2.3 结果集排序2.4 去重 三、条件查询3.1 算术运算符3.2 比较运算符3.3 逻辑运算符3.4 按位运算符3.5 WHERE子句的注意事项 一、简单查询 # 查询t_emp表的所有字段 SELECT * FROM t_emp;# 查询t_emp表的指定字段 SELECT ename, empno FR…

谷歌Bard:ChatGPT之外的第三选择

2023年年初&#xff0c;为了对应ChatGPT方面的压力&#xff0c;谷歌Bard仓促上线&#xff0c;此后便进入了低调前行。目前为止已经迭代了9个版本&#xff0c;也就是在近期的版本更新中支持了中文&#xff08;简体/繁体&#xff09;语言&#xff0c;对国内用户可以说又友好了一步…

RabbitMQ log 文件过大 解决方案

log文件地址 C:\Users\Administrator\AppData\Roaming\RabbitMQ\log\rabbitlocalhost.log log文件作用 rabbitlocalhost.log MQ启动、连接日志 rabbitlocalhost-sasl.log saal用来记录Erlang相关的信息&#xff0c;例如查看Erlang崩溃的报告 RabbitMQ官网Log相关介绍 Log…

物理层——数据通信基础知识

1.典型的数据通信模型 2.数据通信的相关术语 2.1 三种通讯方式 2.2 数据传输方式 2.3 常用编码方式&#xff08;数字信号&#xff09; 曼彻斯特编码 将一个码元分成两个相等的间隔&#xff1b; 前一个间隔为 低电平 &#xff0c;后一个间隔为 高电平 表示码元1&#xff1b; 码…

el-dialog 添加loading;avue-form 表单插槽

效果: 第一步&#xff1a;custom-class"publishDialog" 新起一个类名 <el-dialog title"发布配置" custom-class"publishDialog" :visible.sync"publishDialogVisible" width"800px" :append-to-body"true":b…

实现高效数据处理的利器:Java Stream API 的妙用与性能优化

Java作为一门强大的编程语言&#xff0c;提供了丰富的工具和库来处理数据。其中&#xff0c;Java Stream API&#xff08;流式API&#xff09;是一项强大而灵活的特性&#xff0c;它能够简化数据处理过程&#xff0c;并提供高效的性能。本文将深入探索Java Stream API的使用方法…

babel兼容低版本游览器

文章目录 1. webpack项目的搭建2. babel 命令行使用3. babel的预设与编译器流程4. babel项目中配置4.1 babel-loader与插件的使用4.2 babel-preset使用 5. 游览器兼容性使用5.1 browserslist工具与编写规则5.2 browserslist配置5.3 优化babel的配置文件 6. polyfill6.1 useBuil…

Flutter——最详细(NavigationRail)使用教程

NavigationRail 简介 一个 Material Design 小部件&#xff0c;旨在显示在应用程序的左侧或右侧&#xff0c;以便在少量视图&#xff08;通常在三到五个视图之间&#xff09;之间导航。 使用场景&#xff1a; 通过Row属性&#xff0c;左侧或右侧菜单栏按钮 属性作用onDestinati…

Halcon机器视觉-15种常用缺陷检测实例

一、Halcon 15种常用缺陷检测实例分享 缺陷检测是一种通过计算机视觉技术来检测产品制造过程中的缺陷的方法。该技术可以检测出产品表面的缺陷&#xff0c;如裂纹、凹陷、划痕、气泡等&#xff0c;并且可以实时监测和诊断制造过程中的问题。在制造业中&#xff0c;机器视觉缺陷…

GRE实验

题目参考&#xff1a; 实验步骤&#xff1a; 第一步&#xff1a;地址规划拓扑设计&#xff0c;配置IP地址 R1配置&#xff1a; <Huawei>system-view [Huawei]sy R1 [R1]int g 0/0/1 [R1-GigabitEthernet0/0/1]ip address 192.168.1.1 24 [R1-GigabitEthernet0/0/1]in…

智能电表数据采集器

智能电表数据采集器是一种用于采集智能电表数据的设备&#xff0c;它可以将智能电表的数据传输到远程服务器上&#xff0c;以便进行数据分析和监控。智能电表数据采集器的主要功能是采集智能电表的实时数据&#xff0c;并将其发送到远程服务器上&#xff0c;从而实现对智能电表…

拷贝class文件内容发生报错(二)

又粘到项目里几个文件&#xff0c;这回报错信息是&#xff1a; 16:29:34.892 [main] INFO org.ansj.util.MyStaticValue - init ambiguity to env value is : dict/ansj/ambiguity.dic 16:29:34.892 [main] INFO org.ansj.util.MyStaticValue - init synonyms to env valu…

【windows测试通过】关于Godot导入外部音频文件的问题

file.open(filepath, file.READ) var buffer file.get_buffer(file.get_len()) #put data into audiostreamsample var stream AudioStreamSample.new() stream.data buffer 代码给出&#xff0c;还没有测试过。(godot3.2测试未通过&#xff09; 在运行时轻松加载外部音频…

业务安全分析第19期 | 今年暑假,博物馆的门票为什么抢不到?

目录 “黄牛”&#xff1a;加价代预约、加价售票、兜售野导游套餐 “黄牛”倒票带来的危害 “黄牛”为什么能够抢到票 博物馆与“黄牛”的门票攻防 “黄牛”使用的作弊软件有什么特征 技术上防范“黄牛”的作弊软件抢票 遏制“黄牛”倒票给博物馆带来的收益 随着暑期参观…

rust版本更新错误记录:Os { code: 5, kind: PermissionDenied }

使用 rustup update 更新 rust 版本时遇到错误&#xff1a; info: cleaning up downloads & tmp directories thread ‘main’ panicked at ‘Unable to clean up C:\Users\GrapeX.rustup\tmp: Os { code: 5, kind: PermissionDenied, message: “拒绝访问。” }’, src\ut…

[nlp] GPT

一、联合训练任务 1.1 NTP(Next Token Prediction) gpt预训练的一个目标函数有两个,第一个是基础的下一个词预测任务,选择一个K窗口,将窗口中的K个词的embedding作为条件去预测下一个词。 1.2 TC(Text Classification) 第二个是一个分类任务,一段话给一个标签,然后去预…