Ceph存储

数据存储类型

块存储

存储设备与客户端主机是 一对一 的关系,块存储设备只能被一个主机挂载使用,数据以块为单位进行存储的,典型代表:硬盘

文件存储

一对多,能被多个主机同时挂载/传输使用,数据以文件的形式存储的,其中文件的元信息和实际数据是分开存储的,并且有目录的层级关系,典型代表:NFS、FTP

对象存储

一对多,能被多个主机/应用程序通过API接口访问使用,数据以文件的形式存储的,一个文件即是一个对象(object),文件的元信息和实际数据是在一起的。

文件是扁平化方式存储的,没有目录的层级关系,典型代表:OSS(阿里云) S3(AWS)

Ceph 开源的分布式存储系统,具有高性能、高可扩展性、高可用性等特点,还集块存储、文件存储、对象存储功能于一身。

单机存储设备

DAS(直接附加存储,是直接接到计算机的主板总线上去的存储)

IDE、SATA、SCSI、SAS、USB 接口的磁盘

所谓接口就是一种存储设备驱动下的磁盘设备,提供块级别的存储

NAS(网络附加存储,是通过网络附加到当前主机文件系统之上的存储)

NFS、CIFS、FTP文件系统级别的存储,本身就是一个做好的文件系统,通过nfs接口在用户空间输出后,客户端基于内核模块与远程主机进行网络通信,把它转为好像本地文件系统一样来使用,这种存储服务是没办法对它再一次格式化创建文件系统块的

SAN(存储区域网络)

SCSI协议(只是用来传输数据的存取操作,物理层使用SCSI线缆来传输)、FCSAN(物理层使用光纤来传输)、iSCSI(物理层使用以太网来传输)

也是一种网络存储,但不同之处在于SAN提供给客户端主机使用的接口是块级别的存储

什么是Ceph

Ceph使用C++语言开发,是一个开放、自我修复和自我管理的开源分布式存储系统。具有高扩展性、高性能、高可靠性的优点。

Ceph的优势

高扩展性

去中心化,支持使用普通X86服务器,支持上千个存储节点的规模,支持TB到EB级的扩展。

高可靠性

没有单点故障,多数据副本,自动管理,自动修复。

高性能

摒弃了传统的集中式存储元数据寻址的方案,采用 CRUSH 算法,数据分布均衡,并行度高。

功能强大

Ceph是个大一统的存储系统,集块存储接口(RBD)、文件存储接口(CephFS)、对象存储接口(RadosGW)于一身,因而适用于不同的应用场景。

Ceph架构

客户端(主机/虚拟机/容器/应用程序)

使用Ceph进行数据读写的客户终端

LibRADOS对象访问接口

提供存储访问接口给客户端使用。Ceph默认提供三个接口:RBD块存储接口、RGW对象存储接口、CephFS文件存储接口。还支持用户使用JAVA/Python/C/PHP等编程语言二次开发自定义访问接口

RADOS基础存储系统(统一存储池)

提供存储能力的。Ceph中一切都是以对象(object)形象存储的,RADOS就是负责存储这些对象的,并保证数据的一致性和可靠性。

Ceph组件

OSD(ceph-osd)

负责存储数据,一般一个磁盘对应一个OSD,响应客户端的读写请求

Monitor(ceph-mon)

负责保存OSD的元数据,维护Ceph集群状态的各种映射视图(监控全局状态),管理客户端的认证与授权

Manager(ceph-mgr)

负责跟踪Ceph集群状态和监控指标,暴露接口给监控软件获取监控指标数据

MDS(ceph-mds)

负责保存CephFS文件存储系统的元数据,管理目录结构,仅在使用CephFS文件存储接口功能的时候使用

PG

归置组,可理解成保存OSD位置的索引,一个PG可以包含多个数据对象(object),一个数据对象(object)只能属于一个PG

Pool

数据池/资源池/存储池,可理解成一个存放PG的命名空间,一个Pool可以多个PG,不同Pool的PG可以同名

OSD的存储引擎

FileStore

是L(12.X)以前版本的唯一可选的OSD存储引擎,将数据对象(object)存储为文件系统中的文件,性能上存在许多不足

BlueStore

是L(12.X)版本及以后版本默认的OSD存储引擎,将数据对象(object)直接存储在块设备上,具有更好的数据读写性能和可靠性

Ceph的存储过程

  1. 文件默认会被按照4M大小进行分片成一个或者多个数据对象(object)
  2. 每个数据对象(object)都有一个oid(由文件ID(ino)和分片编号(non组成),通过对oid使用hash算法得到一个16进制的特征码,再除以Pool的PG总数取余,得到数据对象(object)的pgid(由Pool_id+pgid组成)
  3. 通过对pgid使用CRUSH算法得到PG对应的OSD的ID(如果是多副本,则是主从的OSD的ID)
  4. 将数据对象(object)的数据存储到对应的OSD上

部署Ceph集群

基于 ceph-deploy 部署

|---------|---------------|----------------|-----------------------------------------|
| 环境规划 ||||
| 主机名 | Public网络 | Cluster网络 | 角色 |
| admin | 192.168.64.10 | | admin(管理节点)、client |
| node01 | 192.168.64.20 | 192.168.100.11 | mon、mgr、osd(/dev/sdb、/dev/sdc、/dev/sdd) |
| node02 | 192.168.64.30 | 192.168.100.12 | mon、mgr、osd(/dev/sdb、/dev/sdc、/dev/sdd) |
| node03 | 192.168.64.40 | 192.168.100.13 | mon、osd(/dev/sdb、/dev/sdc、/dev/sdd) |
| client | 192.168.64.50 | | client |

环境准备

根据规划设置主机名

bash 复制代码
hostnamectl set-hostname admin
hostnamectl set-hostname node01
hostnamectl set-hostname node02
hostnamectl set-hostname node03
hostnamectl set-hostname client

配置 hosts 解析

bash 复制代码
cat >> /etc/hosts << EOF
192.168.64.10 admin
192.168.64.20 node01
192.168.64.30 node02
192.168.64.40 node03
192.168.64.50 client
EOF

安装常用软件和依赖包

bash 复制代码
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 免密登录所有节点

bash 复制代码
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
sshpass -p 'abc1234' ssh-copy-id -o StrictHostKeyChecking=no root@admin
sshpass -p 'abc1234' ssh-copy-id -o StrictHostKeyChecking=no root@node01
sshpass -p 'abc1234' ssh-copy-id -o StrictHostKeyChecking=no root@node02
sshpass -p 'abc1234' ssh-copy-id -o StrictHostKeyChecking=no root@node03

配置时间同步

bash 复制代码
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时间写入硬件时钟

重启依赖于系统时间的服务

bash 复制代码
​​​​​​​systemctl restart rsyslog 
systemctl restart crond

关闭无关服务

bash 复制代码
​​​​​​​systemctl disable --now postfix

配置 Ceph yum源

bash 复制代码
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

部署 Ceph 集群

为所有节点都创建一个 Ceph 工作目录,后续的工作都在该目录下进行

bash 复制代码
mkdir -p /etc/ceph

安装 ceph-deploy 部署工具

bash 复制代码
cd /etc/ceph
yum install -y ceph-deploy

ceph-deploy --version

在管理节点为其它节点安装 Ceph 软件包

bash 复制代码
cd /etc/ceph
ceph-deploy install --release nautilus node0{1..3} admin

#ceph-deploy 2.0.1 默认部署的是 mimic 版的 Ceph,若想安装其他版本的 Ceph,可以用 --release 手动指定版本

生成初始配置

bash 复制代码
cd /etc/ceph
ceph-deploy new --public-network 192.168.64.0/24 --cluster-network 192.168.100.0/24 node01 node02 node03

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

ceph-deploy --overwrite-conf mon create-initial		

#配置初始化 mon 节点,并向所有节点同步配置

在 mon 节点上查看自动开启的 mon 进程

bash 复制代码
ps aux | grep ceph

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

bash 复制代码
cd /etc/ceph
ceph -s

查看 mon 集群选举的情况

bash 复制代码
ceph quorum_status --format json-pretty | grep leader
相关推荐
AOwhisky2 天前
Ceph系列第三期:Ceph 集群核心配置与管理
linux·运维·数据库·笔记·ceph
AOwhisky2 天前
Ceph系列第五期:Ceph 对象存储(RADOS Gateway)精讲
linux·运维·笔记·ceph·gateway·对象存储
AOwhisky2 天前
Ceph系列第四期:Ceph块存储(RBD)精讲
linux·运维·笔记·ceph·云计算·rbd
三十..4 天前
Ceph分布式存储核心技术精要与运维实践指南
运维·分布式·ceph
一个行走的民4 天前
Ceph OSD NUMA 亲和性、Page Cache 跨 NUMA 访问与绑核实践
ceph
潮起鲸落入海4 天前
ceph集群组件管理 ceph orch 和ceph config命令
ceph
bukeyiwanshui4 天前
20260529 Ceph 分布式存储 认证和授权管理
ceph
bukeyiwanshui4 天前
20260528 Ceph 分布式存储 池管理
ceph
一个行走的民4 天前
CephX 认证机制深度解析
ceph
马立杰4 天前
Ceph 集群手动部署
ceph·分布式存储