ceph重要的核心组件分别是:Ceph OSD、Ceph Monitor和Ceph MDS。一个Ceph存储集群至少需要一个ceph monitor和至少两个Ceph OSD。运行Ceph文件系统的客户端时,Ceph的元数据服务(MDS)必不可少的。
Ceph OSD:全称是Object Storage Device,主要功能是**存储数据,处理数据的复制、恢复、回补、平衡数据分布,并将一些相关数据提供给Ceph Monitor,。**例如ceph OSD心跳等。一个Ceph的存储集群,至少两个Ceph OSD来实现 active + clean健康状态和有效的保存数据的双副本(默认情况下是双副本,可以调整)。注意:每一个Disk、分区都可以成为一个OSD。
Ceph Monitor: Ceph的监控器,主要功能是维护整个集群健康状态,提供一致性的决策,包含了Monitor map、OSD map、PG(Placement Group)map和CRUSH map。
Ceph MDS:全称是Ceph Metadata Server,主要保存的是Ceph文件系统(File System)的元数据(metadata)。注意:ceph块存储和ceph的对象存储都不需要Ceph MDS。Ceph MDS为基于POSIX文件系统的用户提供一些基础命令。例如:ls、find等命令。
Ceph的底层是RADOS, 它由两个组件组成:
一种是为数众多的、 负责完成数据存储和维护功能的OSD( Object Storage Device) 。
另一种则是若干个负责完成系统状态检测和维护的Monitor。
OSD和monitor之间相互传输节点状态信息, 共同得出系统的总体工作状态, 并形成一个全局系统状态记录数据结构, 即所谓的
cluster map。 这个数据结构与RADOS提供的特定算法相配合, 便实现了Ceph“无需查表, 算算就好” 的核心机制以及若干忧秀特性。
OSD的逻辑结构
OSD可以被抽象为两个组成部分, 即系统部分和守护进程( OSD deamon) 部分。
OSD的系统部分本质上就是一台安装了操作系统和文件系统的计算机, 其硬件部分至少包括一个单核的处理器、 一定数量的内存、 一块硬盘以及一张网卡。
在上述系统平台上, 每个OSD拥有一个自己的OSD deamon。 这个deamon负责完成OSD的所有逻辑功能, 包括与monitor和其他
OSD (事实上是其他OSD的deamon) 通信以维护更新系统状态,与其他OSD共同完成数据的存储和维护, 与client通信完成各种数
据对象操作等等。
当某个client需要向Ceph集群写入一个file时, 首先需要在本地完成寻址流程, 将file变为一个object, 然后找出存储该object的一组三个OSD。
找出三个OSDS, client将直接和Primary OSD通信, 发起写入操作(步驟1 ) 。 Primary OSD收到请求后, 合别向Secondary OSD和
Tertiary OSD发起写入操作(步驟2 、 3) 。 当Secondary OSD和Tertiary OSD各自完成写入操作后, 将分别向Primary OSD发送确认信息(步骤4、 5) 。 当Primary OSD确信其他两个OSD的写入完成后, 则自己也完成数据写入, 并向client确认object写入操作完成( 步骤6) 。
1.关闭防火墙,禁用Linux
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl disable firewalld
[root@localhost ~]# sed -i ‘/^SELINUX=/c SELINUX=disabled’ /etc/selinux/config
[root@localhost ~]# setenforce 0
2.配置主机名和密钥互信
[root@localhost ~]# hostnamectl set-hostname node1
[root@node1 ~]# ssh-keygen -f ~/.ssh/id_rsa -N ‘’ -q
[root@node1 ~]# for i in node1 node2 node3 client; do ssh-copy-id $i; done
[root@node1 ~]# for i in node1 node2 node3 client; do ssh $i hostname; done
3.配置时间同步
[root@node1 ~]# yum install chrony -y
修改配置文件 vim /etc/chrony.conf
添加 server ntp.aliyun.com iburst
启动chrony服务并设置开机自启动
[root@node1 ~]# systemctl enable chronyd --now
重启chrony服务并设置开机自启动
systemctl restart chronyd
systemctl enable chronyd
2.部署ceph集群
[root@node1 ~]# export CEPH_DEPLOY_REPO_URL=ftp://node1/ceph/
[root@node1 ceph-cluster]# yum install /var/ftp/ceph/noarch/ceph-deploy-2.0.1-0.noarch.rpm
[root@node1 ~]# mkdir /ceph-cluster
[root@node1 ~]# cd /ceph-cluster
[root@node1 ceph-cluster]# ceph-deploy new node1 node2 node3
Traceback (most recent call last):
File “/bin/ceph-deploy”, line 18, in
from ceph_deploy.cli import main
File “/usr/lib/python2.7/site-packages/ceph_deploy/cli.py”, line 1, in
import pkg_resources
ImportError: No module named pkg_resources
解决方法,pip install distribute
[root@node1 ceph-cluster]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
[root@node1 ceph-cluster]# yum install python2-pip -y
[root@node1 ceph-cluster]# pip install distribute -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
再次执行:ceph-deploy new node1 node2 node3
3.日志磁盘分区
[root@node1 ceph-cluster]# for i in node{1…3}
do
ssh $i parted /dev/sdb mklabel gpt
ssh $i parted /dev/sdb mkpart primary 1 50%
ssh $i parted /dev/sdb mkpart primart 50% 100%
done
[root@node1 ceph-cluster]# for i in node{1…3}
do
ssh $i chown ceph.ceph /dev/sdb1 /dev/sdb2
done
[root@node1 ceph-cluster]# vim /etc/udev/rules.d/70-sdb.rules
[root@node1 ceph-cluster]# for i in node{2…3}
do
4.创建osd
[root@node1 ceph-cluster]# for i in node{1…3}
do
ssh $i parted /dev/sdc mklabel gpt
ssh $i parted /dev/sdd mklabel gpt
done`
[root@node1 ceph-cluster]# for i in node{1…3}
do
ssh $i ceph-volume lvm zap /dev/sdc
ssh $i ceph-volume lvm zap /dev/sdd
done
5.启用dashboard
[root@node1 ceph-cluster]# for i in node{1…3}
do
ssh $i yum install -y ceph-mgr-dashboard
done
**启用dashboard**
[root@node1 ceph-cluster]# ceph mgr module enable dashboard --force
[root@node1 ceph-cluster]# ceph dashboard create-self-signed-cert
[root@node1 ceph-cluster]# ceph dashboard ac-user-create admin admin administrator
{“username”: “admin”, “lastUpdate”: 1616031372, “name”: null, “roles”: [“administrator”], “password”: “$2b$12$4wa4pCKkDf.pvDO9LFldZuwn1GRt.W6zDXvV9QHxnjovrmpA3inWS”, “email”: null}
[root@node1 ceph-cluster]# ceph mgr services
{
“dashboard”: “https://node1:8443/”
}
ceph osd pool create textpool 32 pool 'textpool' created
radosput testobject test.txt -p textpool
rados ls -p textpool
rbd create textpool/textimage.img --image-feature layering --size 100M
rbd map textpool/testimage.img --id admin /dev/rbd0
ceph osd pool delete textpool textpool --yes-i-really-really-mean-it