ceph的组件和功能以及部署三个节点的ceph集群

目录

  • 1.ceph的组件和功能
  • 2.ceph的数据读写流程
  • 3.部署三个节点的ceph集群
  • 4.创建一个存储池,存储池的名称为testpool
  • 5.上传一个对象到testpool存储池,对象的名称为testobject
  • 6.创建一个RBD的image,image名称为testimage,大小为100M
  • 7.将testimage映射为块设备
  • 8.删除testpool存储池

1.ceph的组件和功能

ceph的组件和功能以及部署三个节点的ceph集群_第1张图片
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通信完成各种数
据对象操作等等。

2.ceph的数据读写流程

ceph的组件和功能以及部署三个节点的ceph集群_第2张图片
当某个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) 。

3.部署三个节点的ceph集群

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/”
}

4.创建一个存储池,存储池的名称为testpool

ceph osd pool create textpool 32 pool 'textpool' created

5.上传一个对象到testpool存储池,对象的名称为testobject

radosput testobject test.txt -p textpool

rados ls -p textpool

6.创建一个RBD的image,image名称为testimage,大小为100M

rbd create textpool/textimage.img --image-feature layering --size 100M

7.将testimage映射为块设备

rbd map textpool/testimage.img --id admin /dev/rbd0

8.删除testpool存储池

ceph osd pool delete textpool textpool --yes-i-really-really-mean-it

你可能感兴趣的:(运维,ceph,java,开发语言)