服务(第三十四篇)ceph-分布式存储

news2024/11/28 5:38:28

什么是ceph?

ceph 是一种统一的分布式文件系统,具有优秀的性能、高可用性和可扩展性。ceph 的统一体现在可以提供文件系统、块存储和对象存储,分布式体现在可以动态扩展。在国内一些公司的云环境中,通常会采用 ceph 作为 openstack 的唯一后端存储来提高数据转发效率。

ceph的存储类型有哪些?

①块存储   
一对一,只能被一个主机挂载使用,数据以块为单位进行存储,典型代表:硬盘;

②文件存储
一对多,能被多个主机同时挂载使用,数据以文件的形式存储的(元数据和实际数据是分开存储的),并且有目录的层级关系,典型代表:NFS;

③对象存储
一对多,能被多个主机通过API接口访问使用,数据以文件进行存储,一个文件即一个对象,元数据和实际数据是存储在一起的,文件是扁平化的存储,没有目录的层级关系,典型代表:OSS、S3。
 

Ceph架构:

④ 客户端(APP/VM/HOST)
③ 三个默认接口(块存储RBD,文件存储cephFS,对象存储RGW)
② LibRADOS对象访问接口
① RADOS基础存储系统(统一存储池)

Ceph组件:

OSD                    负责存储数据,一般一个磁盘对应一个OSD,响应客户端的读写请求
Monitor(mon)      负责保存OSD的元数据,维护Ceph集群状态的MAP映射视图,管理客户端的认证与授权
Manager(mgr)     负责跟踪集群状态和监控指标,暴露接口给监控软件获取监控指标数据
MDS                    负责保存 CephFS 文件系统的元数据,仅在使用 CephFS 接口功能时使用

PG                       可以理解成保存OSD位置的索引,一个PG里包含多个数据对象,一个对象只能属于一个PG
Pool                     数据池,可以理解成一个命名空间,一个Pool里有多个PG

Ceph的存储过程:

①文件被分成一个或者多个4M大小的数据对象;

②每个数据对象有自己的oid(由ino和ono组成),通过对oid进行hash算法得到一个十六进制的数值,然后除以pool里的pg总数,取余得到pgid(由poolid和pgid组成);

③对pgid进行crush算法得到osdid;

④通过osdid获得数据对象该存储在那个osd里,然后存储进去。

基于 ceph-deploy 部署 Ceph 集群:

Ceph 生产环境推荐:
1、存储集群全采用万兆网络
2、集群网络(cluster-network,用于集群内部通讯)与公共网络(public-network,用于外部访问Ceph集群)分离
3、mon、mds 与 osd 分离部署在不同主机上(测试环境中可以让一台主机节点运行多个组件)
4、OSD 使用 SATA 亦可
5、根据容量规划集群
6、至强E5 2620 V3或以上 CPU,64GB或更高内存
7、集群主机分散部署,避免机柜的电源或者网络故障

①Ceph 环境规划

主机名Public网络Cluster网络角色
admin192.168.169.10admin(管理节点负责集群整体部署)、client
node01192.168.169.20192.168.100.20mon、mgr、osd(/dev/sdb、/dev/sdc、/dev/sdd)
node02192.168.169.40192.168.100.40mon、mgr、osd(/dev/sdb、/dev/sdc、/dev/sdd)
node03192.168.169.50192.168.100.50mon、osd(/dev/sdb、/dev/sdc、/dev/sdd)
admin192.168.169.60client

②关闭防火墙 

③配置 hosts 解析

cat > /etc/hosts << EOF
192.168.169.10 admin
192.168.169.20 node01
192.168.169.40 node02
192.168.169.50 node03
192.168.169.60 client
EOF

 ④安装常用软件和依赖包

yum -y install epel-release
yum -y install yum-plugin-priorities yum-utils ntpdate python-setuptools python-pip gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel zip unzip ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5-devel libidn libidn-devel openssl openssh openssl-devel nss_ldap openldap openldap-devel openldap-clients openldap-servers libxslt-devel libevent-devel ntp libtool-ltdl bison libtool vim-enhanced python wget lsof iptraf strace lrzsz kernel-devel kernel-headers pam-devel tcl tk cmake ncurses-devel bison setuptool popt-devel net-snmp screen perl-devel pcre-devel net-snmp screen tcpdump rsync sysstat man iptables sudo libconfig git bind-utils tmux elinks numactl iftop bwm-ng net-tools expect snappy leveldb gdisk python-argparse gperftools-libs conntrack ipset jq libseccomp socat chrony sshpass

⑤在 admin 管理节点配置 ssh 免密登录所有节点

ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
sshpass -p '123456' ssh-copy-id -o StrictHostKeyChecking=no root@admin
sshpass -p '123456' ssh-copy-id -o StrictHostKeyChecking=no root@node01
sshpass -p '123456' ssh-copy-id -o StrictHostKeyChecking=no root@node02
sshpass -p '123456' ssh-copy-id -o StrictHostKeyChecking=no root@node03

 ⑥配置时间同步

systemctl enable --now chronyd
timedatectl set-ntp true                    #开启 NTP
timedatectl set-timezone Asia/Shanghai        #设置时区
chronyc -a makestep                            #强制同步下系统时钟
timedatectl status                            #查看时间同步状态
chronyc sources -v                            #查看 ntp 源服务器信息
timedatectl set-local-rtc 0                    #将当前的UTC时间写入硬件时钟

#重启依赖于系统时间的服务
systemctl restart rsyslog 
systemctl restart crond

#关闭无关服务
systemctl disable --now postfix

 ⑦配置 Ceph yum源

wget https://download.ceph.com/rpm-nautilus/el7/noarch/ceph-release-1-1.el7.noarch.rpm --no-check-certificate

rpm -ivh ceph-release-1-1.el7.noarch.rpm --force

⑧执行完上面所有的操作之后重启所有主机
sync
reboot

⑨为所有节点都创建一个 Ceph 工作目录,后续的工作都在该目录下进行
mkdir -p /etc/ceph

安装 ceph-deploy 部署工具
cd /etc/ceph
yum install -y ceph-deploy

ceph-deploy --version

在管理节点为其它节点安装 Ceph 软件包
#ceph-deploy 2.0.1 默认部署的是 mimic 版的 Ceph,若想安装其他版本的 Ceph,可以用 --release 手动指定版本
cd /etc/ceph
ceph-deploy install --release nautilus node0{1..3} admin

#ceph-deploy install 本质就是在执行下面的命令:
yum clean all
yum -y install epel-release
yum -y install yum-plugin-priorities
yum -y install ceph-release ceph ceph-radosgw

⑩安装网卡,配置网卡

在管理节点运行下述命令,告诉 ceph-deploy 哪些是 mon 监控节点:

cd /etc/ceph

ceph-deploy new --public-network 192.168.169.0/24 --cluster-network 192.168.100.0/24 node01 node02 node03

命令执行成功后会在 /etc/ceph 下生成配置文件:

 ls /etc/ceph
ceph.conf                    #ceph的配置文件
ceph-deploy-ceph.log        #monitor的日志
ceph.mon.keyring            #monitor的密钥环文件

 在管理节点初始化 mon 节点:

cd /etc/ceph
ceph-deploy mon create node01 node02 node03            #创建 mon 节点,由于 monitor 使用 Paxos 算法,其高可用集群节点数量要求为大于等于 3 的奇数台

ceph-deploy --overwrite-conf mon create-initial     #配置初始化 mon 节点,并向所有节点同步配置
                                                                           # --overwrite-conf 参数用于表示强制覆盖配置文件

这里有过一次错误:node2和node3没成功一会出现bug?

解决方法:看ceph.conf的配置信息是否正确。

ceph-deploy gatherkeys node01                        #可选操作,向 node01 节点收集所有密钥

#命令执行成功后会在 /etc/ceph 下生成配置文件
ls /etc/ceph
ceph.bootstrap-mds.keyring            #引导启动 mds 的密钥文件
ceph.bootstrap-mgr.keyring            #引导启动 mgr 的密钥文件
ceph.bootstrap-osd.keyring            #引导启动 osd 的密钥文件
ceph.bootstrap-rgw.keyring            #引导启动 rgw 的密钥文件
ceph.client.admin.keyring            #ceph客户端和管理端通信的认证密钥,拥有ceph集群的所有权限
ceph.conf
ceph-deploy-ceph.log
ceph.mon.keyring

 在node节点上查看自动开启的 mon 进程
ps aux | grep ceph

 在管理节点查看 Ceph 集群状态:

 cd /etc/ceph
ceph -s

查看 mon 集群选举的情况:

ceph quorum_status --format json-pretty | grep leader

 扩容 mon 节点
ceph-deploy mon add <节点名称>

⑪部署能够管理 Ceph 集群的节点      #可实现在各个节点执行 ceph 命令管理集群 

cd /etc/ceph
ceph-deploy --overwrite-conf config push node01 node02 node03

ceph-deploy admin node01 node02 node03            #本质就是把 ceph.client.admin.keyring 集群认证文件拷贝到各个节点

 在节点上看:ls /etc/ceph

 查看下健康状态:ceph -s

⑫部署 osd 存储节点(三个node节点部署)
#主机添加完硬盘后不要分区,直接使用

如果是利旧的硬盘,则需要先擦净(删除分区表)磁盘(可选,无数据的新硬盘可不做)
cd /etc/ceph
ceph-deploy disk zap node01 /dev/sdb
ceph-deploy disk zap node02 /dev/sdb
ceph-deploy disk zap node03 /dev/sdb

添加 osd 节点:
ceph-deploy --overwrite-conf osd create node01 --data /dev/sdb
ceph-deploy --overwrite-conf osd create node02 --data /dev/sdb
ceph-deploy --overwrite-conf osd create node03 --data /dev/sd

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

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

相关文章

机器学习强基计划10-2:详细推导串行集成AdaBoost算法(附Python实现)

目录 0 写在前面1 串行集成学习2 AdaBoost原理推导3 Python实现3.1 算法流程3.2 核心代码3.3 可视化 0 写在前面 机器学习强基计划聚焦深度和广度&#xff0c;加深对机器学习模型的理解与应用。“深”在详细推导算法模型背后的数学原理&#xff1b;“广”在分析多个机器学习模…

chatgpt赋能python:Python数据处理之去除NaN值

Python 数据处理之去除 NaN 值 作为数据分析和处理领域中的一种高效工具&#xff0c;Python 在数据清理方面表现优异。而 NaN 是数据处理中常见的问题之一&#xff0c;过多的 NaN 值常常会导致分析结果不准确或无法得出结论&#xff0c;因此 Python 提供了多种方法去除 NaN 值…

chatgpt赋能python:Python反转数字的方法

Python反转数字的方法 Python作为一种高级编程语言&#xff0c;拥有着丰富的数学计算、数组处理及字符串操作等功能。在实际开发中&#xff0c;需要进行反转数字的操作时&#xff0c;Python提供了多种方法来完成此项任务。 用Python反转数字 反转数字是指将一个数字从后往前…

SQL语句之DML语言

说明&#xff1a;DML&#xff08;Data Manipulation Language&#xff09;&#xff0c;用来对数据库中表的数据记录进行增、删、改操作。注意&#xff0c;没有查询&#xff0c;数据的查询单独拎出来成DQL&#xff08;Data Query Language&#xff0c;数据查询语言&#xff09;&…

吴恩达 ChatGPT Prompt Engineering for Developers 系列课程笔记--03 Iterative

03 Iterative 本节主要通过代码来讲解如何在迭代中找到合适的prompt。对于初学者来说&#xff0c;第一次使用Prompt不一定得到语气的结果&#xff0c;开发者可以采用下述流程进行迭代优化&#xff1a; 给出清晰、具体的指令如果结果不正确&#xff0c;分析原因调整prompt重复…

ClickHouse的join优化

概要&#xff1a; ClickHouse 最为擅长的领域是一个大宽表来进行查询&#xff0c;多表 JOIN 时Clickhouse 性能表现不佳。 CK执行模式 第一阶段&#xff0c;Coordinator 收到查询后将请求发送给对应的 worker 节点&#xff1b;第二阶段&#xff0c;Coordinator 收到各个 work…

Java内存模型和常见的内存溢出类型及解决方案

Java内存模型与常见的内存溢出 一. Java 运行过程和内存分配1 Java的平台无关性2 Java内存模型2.1Java内存模型图 3 内存结构详解3.1 元空间&#xff08;MetaSpace&#xff09;3.2 堆区&#xff08;Heap&#xff09;新生代老年代 3.3 虚拟机栈&#xff08;VM Stack&#xff09;…

Linux :: vim 编辑器:详解:光标移动定位内容,行间:快速定位至文本:开头 / 结尾;行内:词间跳跃

前言&#xff1a;本篇是 Linux 基本操作篇章的内容&#xff01; 笔者使用的环境是基于腾讯云服务器&#xff1a;CentOS 7.6 64bit。 学习集&#xff1a; C 入门到入土&#xff01;&#xff01;&#xff01;学习合集Linux 从命令到网络再到内核&#xff01;学习合集 前言&#x…

Asana替代方案推荐:盘点2023年8种优质的免费和付费替代工具

Asana是一个项目管理和团队合作软件平台&#xff0c;自2008年成立以来&#xff0c;一直在彻底改变团队合作的方式。Asana以其直观的用户界面而闻名&#xff0c;是项目经理和团队领导的热门选择。然而在快节奏的项目管理世界中&#xff0c;技术发展很快。因此&#xff0c;当涉及…

chatgpt赋能python:Python取余方法介绍

Python取余方法介绍 在Python编程中&#xff0c;取余&#xff08;也称为求模运算或取模运算&#xff09;是计算机程序经常使用的一种基本算术运算。Python提供了两种方法来执行取余运算&#xff1a;使用百分号符号&#xff08;%&#xff09;和divmod()函数。 使用百分号符号&…

揭秘HTTP代理的神奇力量:让你的系统突破内网限制

大家好&#xff0c;我是你们的小米&#xff01;今天&#xff0c;我要和大家聊聊一个技术问题&#xff0c;那就是关于"http代理"的使用。昨日&#xff0c;我刚刚午休睡醒&#xff0c;项目经理杰哥叫我关注下其中一个项目的部署进展情况。而就在这时&#xff0c;客户侧…

15天学会EasyX 第2天:EasyX里的设备坐标与打开关闭绘图窗口

本文为山城瑞宝创作&#xff0c;转载请标注版权&#xff01; 本文里的函数使用都不需要先写明原型&#xff0c;原型就在其对应的库里&#xff08;直接用&#xff09; 目录 1. 设备及其坐标 2. 如何打开与关闭绘图窗口 2.1. initgraph 2.1.1. 没有flag的代码示例 2.1.2. 使用了…

会声会影2023旗舰中文试用版下载安装教程

会声会影2023版(Corel VideoStudio)是一款专业视频制作软件及视频剪辑软件,可以剪辑合并视频,制作视频,屏幕录制,光盘制作,视频后期编辑,添加特效,字幕和配音等操作,界面美观,素材丰富,操作简洁而! 会声会影有多轨道式编辑功能&#xff0c;可以独立处理视频、图片、音频等素材&…

MATLAB笔记总结(1) 东华大学MOOC

循环语句 MATLAB函数句柄 https://zhuanlan.zhihu.com/p/266263265 https://blog.csdn.net/shaozheng0503/article/details/130305984?spm1001.2014.3001.5501 数据和变量 表达式 分号;) 逗号(, ), 省略号(3个英文句点…)。 历史指令调用&#xff1a;用方向键(↑↓) 数据…

离散分类和非离散分类问题中的模型评价

离散分类问题中的模型评价 假设分类目标只有两类&#xff1a;正样本&#xff08;positive&#xff09;和负样本&#xff08;negative&#xff09;。 分类器的分类结果会出现以下四种情况&#xff1a; TP: 若一个实例为正&#xff0c;且被预测为正&#xff0c;即为“真正类”(…

chatgpt赋能python:Python去空格输出:优化您的代码和网站速度

Python去空格输出&#xff1a;优化您的代码和网站速度 Python是一种简单易用的编程语言&#xff0c;广泛用于各种应用和网站开发。然而&#xff0c;Python的代码输出&#xff08;如HTML和CSS&#xff09;中不可避免地包含了空格、制表符和换行符。这些额外的字符可能会影响网站…

模式识别算法的常见评价指标TP/FP/FN/TN,ROC,DET,EER

文章目录 TP/FP/FN/TN&#xff08;TA/FA/FR/TR&#xff09;误报率&#xff08;FAR&#xff09;漏报率&#xff08;FRR&#xff09; ROC曲线&#xff08;Receiver Operating Characteristic Curve&#xff0c;受试者特征曲线&#xff09;DET曲线&#xff08;Detection Error Tra…

Maven高级——继承与聚合——版本锁定

在前面的文章已经实现了Maven的继承&#xff0c;初次之外&#xff0c;还可以在父工程当中统一管理依赖的版本。 场景介绍 有一些依赖不是各个模块共有的&#xff0c;则需要到那些子模块当中单独配置了&#xff0c;这时需要到各个模块单独配置了&#xff0c;比如下图有一个模块…

【小沐学Python】Python实现Web服务器(CentOS+Docker下部署Flask)

&#x1f37a;基于Python的Web服务器系列相关文章编写如下&#x1f37a;&#xff1a; &#x1f388;【Web开发】Python实现Web服务器&#xff08;Flask快速入门&#xff09;&#x1f388;&#x1f388;【Web开发】Python实现Web服务器&#xff08;Flask案例测试&#xff09;&a…

Pyside6-第五篇-单选按钮QRadioButton

今天是Pyside6的第五篇内容。一起来看单选按钮。 QRadioButton。 class QRadioButton(QAbstractButton):"""QRadioButton(self, parent: Optional[PySide6.QtWidgets.QWidget] None) -> NoneQRadioButton(self, text: str, parent: Optional[PySide6.QtWidg…