Ceph 官网 https://ceph.com
Ceph 最新官网文档 https://docs.ceph.com/en/latest
Ceph GitHub源码地址 https://github.com/ceph/ceph
Ceph是一个开源的、自我修复和自我管理的统一分布式存储系统。目前最新版本为Quincy
ceph目前已得到众多云计算厂商的支持并被广泛应用。RedHat及OpenStack kubernetes都可与Ceph整合以支持虚拟机镜像的后端存储。Ceph是统一存储解决方案,根据场景划分可以将Ceph分为三大块,分别是对象存储(兼容swift s3协议)、块设备存储和文件系统服务。在虚拟化领域里,比较常用到的是Ceph的块设备存储,比如在OpenStack项目里,Ceph的块设备存储可以对接OpenStack的cinder后端存储、Glance的镜像存储和虚拟机的数据存储,比较直观的是Ceph集群可以提供一个raw格式的块存储来作为虚拟机实例的硬盘;SDS 能将存储软件与硬件分隔开的存储架构。
传统存储存在问题,存储处理能力不足、存储空间能力不足、单点问题。传统存储 DAS、NAS、SAN、RAID扩容问题不方便,将一堆磁盘,放在一个控制器里,纵向扩展scale up,扩容cpu、内存、硬盘可能更贵;分布式存储 (性能是不如传统存储,比如数据库) 无中心节点 普通服务器存储数据(硬盘,cpu,内存) ,但可以横向扩展 scale out 扩服务器,加节点 (节点可以横向扩展,无中心节点,偏向软件和人才要求 ) ,使用传统存储性价比很低,除非对特定性能有需求。
Ceph中数据以PG为单位进行组织,因此当数据池中加入新的存储单元(OSD)时,通过调整OSDMAP会带来数据重平衡。正如提到的,如果涉及到多个OSD的扩容是可能导致可用PG中OSD小于min_size,从而发生PG不可用、IO阻塞的情况。为了尽量避免这种情况的出现,只能将扩容粒度变小,比如每次只扩容一个OSD或者一个机器、一个机柜(主要取决于存储隔离策略),但是这样注定会带来极大的运维工作量,甚至连扩容速度可能都赶不上数据增长速度。
在频繁数据迁移过程中带来的IO争用问题。当集群规模变大后,硬盘损坏、PG数量扩充可能会变得常态化。
在解决了数据迁移过程中的PG可用性问题和IO争用问题后,提到的PG数量调整问题自然也就解决了。
存储成本问题主要是讲集群可用率问题,即Ceph集群规模增大后,伪随机算法导致了存储资源分布不均衡,磁盘利用率方差过大的问题。
Ceph本身是一个十分复杂的体系,要做到稳定运维非常看重团队的实力。
Ceph在实现统一存储,支持对象、块和文件存储。Ceph非常可靠,易于管理且免费。Ceph具有管理大量数据的能力和可伸缩性,支持数以千计的客户端访问pb到eb的数据。Ceph节点利用普通硬件和智能守护进程,Ceph存储集群容纳大量节点,这些节点相互通信以动态地复制和重分发数据。通过ceph面板或客户端登录到ceph集群后看到3个服务:RADOSGW、RBD、CEPH FS。
ceph存储集群,提供了一个基于RADOS的无限可扩展的Ceph存储集群,基于RADOS存储可扩展的,可靠的存储 pb级集群服务。Ceph存储集群由多种守护进程组成:
Ceph将数据作为对象存储在逻辑存储池中。Ceph使用CRUSH算法计算出哪个放置组(PG)应该包含该对象,哪个OSD应该存储该放置组。
CRUSH算法使Ceph存储集群能够动态地扩展、平衡和恢复。存储集群客户端和每个Ceph OSD Daemon使用CRUSH算法高效地计算数据位置信息,而不是依赖于一个中央查找表。
Ceph的高级特性包括一个通过librados与Ceph存储集群的本地接口,以及许多构建在librados之上的服务接口。
Ceph client和Ceph OSD Daemons都使用CRUSH算法来高效地计算对象位置信息,而不是依赖于一个中央查找表,提供了更好的数据管理机制,工作分配给集群中的所有客户端和OSD守护进程来实现大规模扩展;CRUSH使用智能数据复制来确保弹性更适合超规模存储。
Ceph依赖于Ceph客户端和Ceph OSD守护进程对集群拓扑的了解,包括5个地图,统称为“集群地图”:
每个映射维护其操作状态更改的迭代历史。Ceph Monitors维护集群映射的主副本,包括集群成员、状态、更改和Ceph存储集群的总体健康状况。
Ceph存储集群部署都要从设置每个Ceph节点、网络和Ceph存储集群开始。一个Ceph存储集群至少需要一个Ceph Monitor、Ceph Manager和Ceph OSD (Object Storage Daemon)。运行Ceph文件系统客户端时也需要Ceph元数据服务器。如果是在生产中使用Ceph,官方有提供硬件建议(CPU、RAM、内存、数据存储、网络、故障最低硬件建议)和操作系统建议(Ceph的依赖性、平台),详细可以查阅官方文档。比如推荐若干条件
Ceph官方发布版本号目前按照英文字母大写开头的单词编排,有三个组成部分,生产使用要选择x.2后面越大越好,代表解决问题越多越稳定。x.y.z. x表示发布周期(例如,13表示Mimic)。Y表示发布类型:
由于ceph组件较多,手工安装步骤较多,因此官方提供几种不同的快速安装Ceph的方法,推荐方法有如下两种
其他方法有,比较早使用或者目前已在使用大多数都应该使用的是Ceph-deploy方式:
cephadm不依赖于外部配置工具如Ansible、Rook和Salt。Cephadm管理Ceph集群的完整生命周期,cephadm先在单个节点上创建一个由一个监视器和一个管理器组成小型Ceph集群,后续cephadm使用业务流程接口扩展集群,添加所有主机并提供所有Ceph守护进程和服务。这些都通过Ceph命令行界面(CLI)或仪表板(GUI)来执行。
Python 3安装步骤如下
# 官网下载
wget https://www.python.org/ftp/python/3.10.6/Python-3.10.6.tgz
# 解压
tar -xvf Python-3.10.6.tgz
# 创建安装部署目录
mkdir python3
# 进入目录
cd Python-3.10.6
# 安装依赖包
yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel libffi-devel gcc make
# 如果需要openssl编译安装则选择下面步骤
wget https://www.openssl.org/source/openssl-1.1.1q.tar.gz --no-check-certificate
tar -xvf openssl-1.1.1q.tar.gz
mkdir /usr/local/openssl
cd openssl-1.1.1
./config --prefix=/usr/local/openssl
make
make installq
# 安装python3
mkdir -p /home/commons/python3
ln -s /usr/local/openssl/lib/libssl.so.1.1 /usr/lib64/libssl.so.1.1
ln -s /usr/local/openssl/lib/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1
# 修改
./configure --prefix=/home/commons/python3
make
make install
# 建立软链接
ln -s /home/commons/python3/bin/python3.10 /usr/local/bin/python3
ln -s /home/commons/python3/bin/python3.10 /usr/local/bin/pip3
ln -s /home/commons/python3/bin/python3.10 /usr/bin/python3
# 可以加入环境变量
vi ~/.bash_profile
export PYTHON_HOME=/home/commons/python3/
export PATH=$PYTHON_HOME/bin:$PATH
source ~/.bash_profile
# 查看版本
python3 --version
# 各自linux发行版的特定安装方法,一些Linux发行版可能已经包含了最新的Ceph包。在这种情况下,您可以直接安装cephadm。例如:
# Ubuntu:
apt install -y cephadm
# CentOS Stream
dnf search release-ceph
dnf install --assumeyes centos-release-ceph-quincy
dnf install --assumeyes cephadm
# Fedora:
dnf -y install cephadm
# openSUSE或SLES
zypper install -y cephadm
# 使用curl获取独立脚本的最新版本。
curl --silent --insecure --remote-name --location https://github.com/ceph/ceph/raw/quincy/src/cephadm/cephadm
# 由于官方获取不到,jsdelivr的地址
curl --silent --remote-name --location https://cdn.jsdelivr.net/gh/ceph/ceph@quincy/src/cephadm/cephadm
#安装cephadm,ceph需要python3和epel源;在执行安装步骤有时会报错无效的gpg密钥,可以将ceph.repo文件中gpgcheck参数改成0,表示不适用密钥验证
vi /etc/yum.repos.d/ceph.repo
# 使cephadm脚本可执行
chmod +x cephadm
# 在cephadm脚本import ssl后面加入下面语句
ssl._create_default_https_context = ssl._create_unverified_context
# 验证cephadm命令是否可用
./cephadm --help
# 其实到这一步,cephadm就已经能够部署集群了,但是没有安装全部功能,也没有把命令安装成操作系统命令,添加ceph指定版本的系统包镜像源,这里我们安装octopus版。本地apt或yum库中会多出一些镜像地址。
#使用cephadm脚本生成需要的yum源(可以替换为国内源提高下载速度) 可选
sed -i 's#download.ceph.com#mirrors.aliyun.com/ceph#' /etc/yum.repos.d/ceph.repo #可选
rpm --import 'https://download.ceph.com/keys/release.asc' #可选
# 添加仓库
./cephadm add-repo --release octopus
# cephadm 安装
./cephadm install
which cephadm
cephadm bootstrap --mon-ip 192.168.5.53
执行上面后在Pulling container image步骤会需要一段时间,出现下面的返回后表示安装成功,可看到仪表盘访问地址
bootstrap完成后服务器若干docker容器运行,prometheus+grafana作为监控系统,alertmanager提供告警功能(集群有异常会发送邮件或短信),node-exporter将主机暴露给ceph集群,让别的服务器直连访问OSD;ceph-mon容器提供Monitor守护进程,为集群提供集群运行图;ceph-mgr其实是ceph manager守护进程,为集群提供librados接口;ceph-crash是Crush算法容器;查看拉取镜像和启动的容器如下:
一个ceph集群算是创建出来了,ceph集群包括了Mon进程+librados接口;只要我们再安装OSD,一个完全的Ceph存储集群就创建好了;目前这个ceph没有存储的功能,仅仅是个管理器。访问https://ckserver2:8443/ ,输入用户密码后,先修改密码然后再登录
# (注)如果仪表盘(dashboard)密码忘了,可以使用以下命令重置密码
ceph dashboard ac-user-set-password admin redhat
# 使用ceph命令第一种方法:cephadm安装需要切换shell才可以使用ceph命令
cephadm shell
ceph -s
ceph -s
# 使用ceph命令第二种方法:要执行ceph命令,也可以运行如下命令:
cephadm shell -- ceph -s
# 使用ceph命令第三种方法:可以安装ceph-common包,其中包含所有ceph命令,包括ceph、rbd、mount。ceph(用于挂载cepphfs文件系统),等等:。也即是如果没有安装ceph工具包,那么需要先执行cephadm shell命令,再执行ceph操作
cephadm add-repo --release quincy
cephadm install ceph-common
# 检验ceph命令在主机上安装成功
ceph -v
# 检验主机上的ceph命令能成功连接集群,获取集群状态
ceph status
典型的Ceph集群在不同的主机上有3到5个监视器守护进程。如果集群中有5个或更多节点,建议部署5个监视器。
# 首先在新主机的根用户authorized_keys文件中安装集群的公共SSH密钥
ssh-copy-id -f -i /etc/ceph/ceph.pub root@node2
ssh-copy-id -f -i /etc/ceph/ceph.pub root@node3
本篇先到此,待续…
**本人博客网站 **IT小神 www.itxiaoshen.com