Ceph介绍及部署

时间:2022-07-22
本文章向大家介绍Ceph介绍及部署,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

Ceph介绍

ceph是一个分布式存储系统,提供对象存储,块存储,文件存储,Ceph集群至少需要一个ceph monitor和两个OSD守护进程,而运行ceph文件系统客户端时,则必须要有元数据服务器MDS

  • OSDS ceph OSD守护进程的功能是存储数据,处理数据的复制、恢复、回填、再均衡,并通过检查其他OSD守护进程的心跳来向Ceph Monitors提供一些监控信息,当 Ceph 存储集群设定为有2个副本时,至少需要2个 OSD 守护进程,集群才能达到 active+clean 状态( Ceph 默认有3个副本,但你可以调整副本数)。
  • Monitors: Ceph Monitor(集群监视器)维护着展示集群状态的各种图表,包括监视器图、 OSD 图、归置组( PG )图、和 CRUSH 图。 Ceph 保存着发生在Monitors 、 OSD 和 PG上的每一次状态变更的历史信息(称为 epoch )。
  • MDSs: Ceph 元数据服务器( MDS )为 Ceph 文件系统存储元数据(也就是说,Ceph 块设备和 Ceph 对象存储不使用MDS )。元数据服务器使得 POSIX 文件系统的用户们,可以在不对 Ceph 存储集群造成负担的前提下,执行诸如 ls、find 等基本命令。

我们看到的文件,由一系列的对象构成。每个对象在自己的归置组(Placement Group)中,通过归置组,分解到具体的OSD中。一个数据对象,存在一个主OSD和至少一个副OSD。当主OSD出错后,副OSD马上自动升级为主OSD,通过这样的方式,来解决容错的问题。 CRUSH算法 (Controlled Replication Under Scalable Hashing)是ceph中最重要的算法, 目的是利用可用资源优化分配数据,当存储设备添加或删除时高效地重组数据,以及灵活地约束对象副本放置,当数据同步或者相关硬件故障的时候最大化保证数据安全。

Ceph 把客户端数据保存为存储池内的对象。通过使用 CRUSH 算法, Ceph 可以计算出哪个归置组(PG)应该持有指定的对象(Object),然后进一步计算出哪个 OSD 守护进程持有该归置组。 CRUSH 算法使得 Ceph 存储集群能够动态地伸缩、再均衡和修复。

Ceph部署

这里使用的是jewel版本,这里简要介绍下版本命名:

ceph的版本,不断演进中,每个主版本,都有自己的名字。
            名称       主版本号    版本中的最高次版本
            giant         0.8             0.87.2
            hammer        0.9             0.94.10
            infernalis     9                9.2.1
            jewel          10             10.2.7
            kraken        11             11.2.0
           luminous       12              12.0.1

环境准备

[table id=3 /]

说明:client端可以先不管,最后去部署,部署过程中需保证ceph集群中的每一台机器的仓库源是统一的,且时间要保持一致,另外ceph-admin到其它节点要做好免密工作。

修改主机名及映射

每台机器都要设置好主机名:
hostnamectl set-hostname ceph-admin
hostnamectl set-hostname ceph-node1
hostnamectl set-hostname ceph-node2
hostnamectl set-hostname ceph-node3
修改/etc/hosts文件,做好主机名映射
192.168.152.153 ceph-admin
192.168.152.154 ceph-node1
192.168.152.155 ceph-node2
192.168.152.156 ceph-node3

设置免密

ssh-keygen

ssh-copy-id -i ~/.ssh/id_rsa.pub ceph-node1
ssh-copy-id -i ~/.ssh/id_rsa.pub ceph-node2
ssh-copy-id -i ~/.ssh/id_rsa.pub ceph-node3

禁用SELINUX

sed -i 's/SELINUX=.*/SELINUX=disable/g' /etc/selinux/config
ssh ceph-node1 "sed -i 's/SELINUX=.*/SELINUX=disable/g' /etc/selinux/config"
ssh ceph-node2 "sed -i 's/SELINUX=.*/SELINUX=disable/g' /etc/selinux/config"
ssh ceph-node3 "sed -i 's/SELINUX=.*/SELINUX=disable/g' /etc/selinux/config"

设置仓库源

创建备份目录并删除旧的仓库源
mkdir /data/bak -p && mv /etc/yum.repos.d/ /data/bak/ && rm -rf /etc/yum.repos.d/*
下载新的仓库源
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
添加ceph的仓库源
cat > /etc/yum.repos.d/ceph.repo < EOF
[ceph]
name=ceph
baseurl=http://mirrors.aliyun.com/ceph/rpm-jewel/el7/x86_64/
gpgcheck=0
priority =1
[ceph-noarch]
name=cephnoarch
baseurl=http://mirrors.aliyun.com/ceph/rpm-jewel/el7/noarch/
gpgcheck=0
priority =1
[ceph-source]
name=Ceph source packages
baseurl=http://mirrors.aliyun.com/ceph/rpm-jewel/el7/SRPMS
gpgcheck=0
priority=1
EOF
其他节点做设置ceph仓库源
for i in `seq 1 3`;do ssh ceph-node$i "mkdir /data/bak -p && mv /etc/yum.repos.d/ /data/bak/ && rm -rf /etc/yum.repos.d/*"
for i in `seq 1 3`;do scp /etc/yum.repo.d/ceph.repo ceph-node$i:/etc/yum.repos.d/ ;done 
for i in `seq 1 3`;do ssh ceph-node$i "yum makecache";done

创建用户

useradd cephuser && echo '123456' | passwd cephuser --stdin && usermod -aG wheel cephuser
for in in `seq 1 3`;do ssh ceph-node$i "useradd cephuser && echo '123456' | passwd cephuser --stdin && usermod -aG wheel cephuser";done
执行完以上命令后,还需要修改每台机器上的/etc/sudoers文件,将wheel组的成员都设置成免密提sudo权限的,设置成如下配置:
%wheel  ALL=(ALL)       NOPASSWD: ALL

切到cephuser用户,并为其他节点设置免密认证

切换用户:
su cephuser
生成公钥:
ssh-keygen
下发公钥
ssh-copy-id -i ~/.ssh/id_rsa.pub cephuser@192.168.152.154
ssh-copy-id -i ~/.ssh/id_rsa.pub cephuser@192.168.152.155
ssh-copy-id -i ~/.ssh/id_rsa.pub cephuser@192.168.152.156

以上操作,除了设置cephuser的免密切sudo之外,其他所有操作均是在ceph-admin机器上完成。

挂载磁盘

关闭虚机,添加一块大小为20G的磁盘,完成后格式化磁盘

sudo parted -s /dev/sdb mklabel gpt mkpart primary xfs 0% 100%
sudo mkfs.xfs /dev/sdb -f

安装ceph

sudo yum makecache
sudo yum install ceph-deploy

部署集群

创建目录
mkdir /cluster
cd /cluster

创建集群
ceph-deploy new ceph-admin

在当前目录下修改ceph.conf文件
vim ceph.conf
public network = 192.168.152.153/24
osd pool default size = 3

安装ceph
ceph-deploy install ceph-admin ceph-node1 ceph-node2 ceph-node3

初始化monitor监控节点,收集所有密钥
ceph-deploy mon create-initial
ceph-deploy gatherkeys ceph-admin

添加OSD到集群
检查OSD节点上所有可用的磁盘
ceph-deploy disk list ceph-node1 ceph-node2 ceph-node3

使用zap删除所有OSD节点上的分区
ceph-deploy disk zap ceph-node1:/dev/sdb ceph-node2:/dev/sdb ceph-node3:/dev/sdb

准备OSD
ceph-deploy osd prepare ceph-node1:/dev/sdb ceph-node2:/dev/sdb ceph-node3:/dev/sdb

激活OSD
ceph-deploy osd activate ceph-node1:/dev/sdb1 ceph-node2:/dev/sdb1 ceph-node3:/dev/sdb1

验证分区是否挂载,去节点上使用命令查看
df -h 或 lsblk
/dev/sdb1                 15G  108M   15G   1% /var/lib/ceph/osd/ceph-0
出现这个表示挂载成功。

查看OSD
ceph-deploy disk list ceph-node1 ceph-node2 ceph-node3

把配置文件和admin密钥拷贝到管理节点和Ceph节点,这样每次执行Ceph命令时就无需指定Monitor节点地址和ceph.client.admin.keying了
ceph-deploy admin ceph-admin ceph-node1 ceph-node2 ceph-node3

修改密钥权限
sudo chmod 644 /etc/ceph/ceph.client.admin.keyring

检查ceph状态
sudo ceph health
sudo ceph -s

查看ceph osd运行状态
ceph osd stat

查看osd的目录树
ceph osd tree

查看Monitor监控节点的服务情况
sudo systemctl status ceph-mon@ceph-admin

查看每个节点上的osd运行情况
sudo systemctl status ceph-osd@0.service
sudo systemctl status ceph-osd@1.service
sudo systemctl status ceph-osd@2.service

配置文件参考:ceph.conf

创建文件系统

查看管理节点状态,默认没有,需要创建
ceph mds stat

创建管理节点
ceph-deploy mds create ceph-admin

再次查看管理节点状态
ceph mds stat
sudo systemctl status ceph-mds@ceph-admin
ps -ef | grep cluster | grep ceph-mds

创建pool,pool是ceph存储数据时的逻辑分区,起到namespace的作用,默认只有一个rdb-pool
ceph osd lspools

创建pool
ceph osd pool create cephfs_data 10   #10代表PG的数量
ceph osd pool create cephfs_metadata 10   #创建pool的元数据
ceph fs new myceph cephfs_metadata cephfs_data

查看pool状态
ceph osd lspools
0 rbd,1 cephfs_data,2 cephfs_metadata,

检查mds管理节点状态
ceph mds stat
e7: 1/1/1 up {0=ceph-admin=up:active}

查看集群端口
sudo lsof -i:6789

客户端使用ceph存储

安装ceph-fuse

安装方式同样采用yum方式,准备好仓库源(上面使用的仓库源即可)

# cat /etc/yum.repos.d/ceph.repo 
[ceph]
name=ceph
baseurl=http://mirrors.aliyun.com/ceph/rpm-jewel/el7/x86_64/
gpgcheck=0
priority =1
[ceph-noarch]
name=cephnoarch
baseurl=http://mirrors.aliyun.com/ceph/rpm-jewel/el7/noarch/
gpgcheck=0
priority =1
[ceph-source]
name=Ceph source packages
baseurl=http://mirrors.aliyun.com/ceph/rpm-jewel/el7/SRPMS
gpgcheck=0
priority=1

yum makecache 
yum install -y ceph-fuse
创建挂载目录
mkdir /cephfs
复制配置文件
将ceph配置文件ceph.conf从管理节点复制到客户端上
rsync -e "ssh -p22" -avpgolr root@192.168.152.153:/etc/ceph/ceph.conf /etc/ceph/
复制密钥
rsync -e "ssh -p22" -avpgolr root@192.168.152.153:/etc/ceph/ceph.client.admin.keyring /etc/ceph/
将ceph集群存储挂载到客户端的/cephfs目录下
ceph-fuse -m 192.168.152.153:6789 /cephfs
取消挂载
umount /cephfs

参考文档:

https://www.cnblogs.com/kevingrace/p/9141432.html

http://docs.ceph.org.cn/start/intro/