ceph安装配置详解

ceph简介

https://docs.ceph.com/en/reef/

常用的存储类型:

  • DAS(直连存储)ide线,sata线,sas线
  • NAS(网络附加存储)Samba,nfs,ftp 文件系统
  • SAN(存储区域网络)iscsi 块设备
  • SDS (软件定义存储) ceph,glusterfs ,hadoop,lustre,fastDFS

ext3,ext4,fat32,ntfs,xfs文件系统

Ceph是一个开源的分布式存储系统,具有多个显著的特点和优势,这些特点使其在云计算、大数据和容器等领域得到广泛应用。
ceph提供EB级别=1024PB=1024TB=1024GB

iscsi 块存储没有锁机制,共享要用文件系统ceph,支持锁机制。

Ceph的主要特点:

  1. 高可用性
  • Ceph采用分布式存储技术,将数据存储在多个节点上,并通过自动数据复制和恢复机制,确保数据的高可用性和持久性。
  • 即使部分节点出现故障或离线,Ceph也能自动从其他节点恢复数据,保证数据访问的连续性和可靠性。
  1. 可扩展性
  • Ceph支持横向扩展,通过添加新的存储节点来增加存储容量和吞吐量,而无需对现有系统进行大规模修改。
  • 这种扩展方式灵活且高效,能够轻松应对容量和性能的快速增长需求。
  1. 强一致性
  • Ceph采用一致性哈希算法来定位和分配数据,确保数据在集群中的均匀分布和强一致性。
  • 这意味着数据在集群中的多个副本之间保持一致,避免了数据重复或丢失的情况。
  1. 灵活性
  • Ceph可以存储任意大小的对象,无需预定义或固定格式,非常适合存储各种类型的数据,包括大型文件、多媒体内容和虚拟机镜像等。
  • 同时,Ceph支持多种存储接口,包括对象存储、块存储和文件系统存储,满足不同应用的需求。
  1. 高性能
  • Ceph通过并行处理和数据分片来提供高性能的数据访问。它可以在多个存储节点上同时访问和处理数据,从而提高读写性能。
  • 此外,Ceph的架构设计使其能够充分利用存储节点的计算能力,进一步提高整体性能。
  1. 经济高效
  • Ceph采用了分布式存储和智能数据管理策略,能够充分利用集群中的存储资源,避免资源浪费。
  • 同时,Ceph可以在商用硬件上运行,降低了成本,使得用户能够以较低的成本获得高性能和高可靠性的存储服务。
  1. 弹性和可靠性
  • Ceph具有弹性的特点,可以自动进行数据迁移和负载均衡,以适应节点负载的变化。
  • 此外,Ceph采用CRUSH算法进行数据的复制和分布,提高了数据的冗余度和可靠性。
  1. 易于管理
  • Ceph提供了丰富的管理工具和API,方便用户对集群进行监控、管理和配置。
  • 例如,CephDashboard是一个强大的Web管理界面,用户可以直观地查看集群的状态和性能数据,并进行必要的操作。

Ceph的核心组件及其功能概述:

  1. RADOS (Reliable Autonomic Distributed Object Store)
  • RADOS是Ceph的核心存储系统,负责数据的存储和复制。
  • 它将数据划分为对象(Object),并通过分布式存储和复制机制实现高可靠性和高性能的数据存储。
  • RADOS具有自动故障检测和自我修复等功能,确保数据的高可靠性。
  1. Ceph OSD (Object Storage Daemon)
  • Ceph OSD是Ceph的对象存储守护进程,负责处理数据的读写请求,以及数据的存储和复制。
  • 每个OSD负责存储和管理一部分数据,并提供数据的冗余备份。
  • OSD具有自我管理和自动容错机制,以确保系统的高可靠性和高性能。
  1. Ceph MON (Monitor)
  • Ceph MON是Ceph的监控器,负责集群的状态监控、元数据管理和节点发现。
  • 它维护集群的状态信息、存储拓扑结构和数据分布策略。
  • 为了高可用性,通常会有多个Monitor实例,它们之间通过Paxos算法保持状态一致。至少三台服务器,过半原则,坏有一半,服务就不可用。
  1. Ceph MDS (Metadata Server)
  • Ceph MDS是Ceph的元数据服务器,负责管理文件系统的元数据,包括目录结构、文件属性和访问权限等。
  • 它提供文件系统的元数据访问和命名空间管理功能,仅用于Ceph文件系统(CephFS)。
  1. Ceph RGW (RADOS Gateway)
  • Ceph RGW是Ceph的对象存储网关,提供对象存储服务的接口。
  • 它允许通过S3和Swift等标准协议访问Ceph存储集群。
  • RGW负责处理外部应用程序和Ceph集群之间的数据传输和访问。
  1. Ceph RBD (RADOS Block Device)
  • Ceph RBD是Ceph的块设备服务,提供分布式块存储的功能。
  • 它可以将Ceph存储集群作为块设备挂载到主机上使用,支持快照、克隆和thin-provisioning等功能。
  1. Ceph MGR (Manager)
  • Ceph MGR是一个相对较新的组件,在Ceph Luminous版本(即12.0版本)中首次被引入。
  • MGR提供了一个集中的服务,用于管理和监控Ceph集群的各个方面。
  • 它收集和存储集群的监控数据,提供报警和通知,管理服务,执行集群管理任务,生成集群报告,并提供一个REST API。

Ceph存储类型

  1. Ceph对象存储(RADOS Gateway)
    • 特点:基于HTTP/RESTful接口方式进行数据访问,可以存储和检索大规模非结构化数据。
    • 优势
      • 无限扩展性,能够管理海量的数据。
      • 提供高可用性和数据冗余机制。
      • 兼容S3和Swift接口,适用于云存储、大规模数据分析、多媒体应用等场景。
  2. Ceph块存储(RADOS Block Device, RBD)
    • 特点:提供块设备的抽象,类似于传统的磁盘设备,可以映射到使用块设备的应用程序(如操作系统的文件系统)。
    • 优势
      • 高性能和可扩展的存储能力。
      • 数据复制和故障恢复的能力,保证数据的可靠性和可用性。
      • 支持快照和克隆等高级功能,用于数据保护和测试。
      • 适用于共享存储、虚拟化和容器化等场景。
  3. Ceph文件系统(CephFS)
    • 特点:一个高性能和高可用性的分布式文件系统解决方案,与传统的POSIX文件系统兼容。
    • 优势
      • 提供了类似于传统文件系统的接口和语义。
      • 支持POSIX文件系统操作,提供了透明的命名空间和目录层次结构。
      • 弹性扩展,根据存储需求自动调整数据分布和负载均衡。
      • 适用于需要共享存储的应用,如HPC(高性能计算)、容器存储、共享文件存储等场景。

安装配置

环境准备

  1. 创建1台客户端虚拟机
  2. 创建3台存储集群虚拟机
  3. 配置主机名、IP地址、YUM源
  4. 修改所有主机的主机名
  5. 配置无密码SSH连接
  6. 配置NTP时间同步
  7. 创建虚拟机磁盘
主机 角色
nnode1 ceph-deploy、osd、mgr
dnode1 osd
dnode2 osd、mds
dnode3 client

新建ceph源

cat >/etc/yum.repos.d/ceph.repo<<EOF
[ceph]
name=ceph
baseurl=http://mirrors.aliyun.com/ceph/rpm-luminous/el7/x86_64/
gpgcheck=0
[ceph-noarch]
name=cephnoarch
baseurl=http://mirrors.aliyun.com/ceph/rpm-luminous/el7/noarch/
gpgcheck=0
EOF

安装部署脚本,自动部署ceph集群,需要主机名免密登录其他主机

yum install ceph-deploy
mkdir ceph-cluster
cd ceph-cluster/
ceph-deploy new nnode1 dnode1 dnode2
[root@nnode1 ceph-cluster]# ls
ceph.conf  ceph-deploy-ceph.log  ceph.log  ceph.mon.keyring
[root@nnode1 ceph-cluster]# cat ceph.conf
[global]
fsid = 2cf25983-13ef-4106-86be-5d7d44b831b3
mon_initial_members = nnode1, dnode1, dnode2
mon_host = 192.168.126.21,192.168.126.22,192.168.126.23
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx

mon有三个,分别列出了主机名和ip,cephx是密码占位符
for i in nnode1 dnode1 dnode2;do ssh $i yum -y install ceph-mon ceph-osd ceph-mds ceph-radosgw;done
拷贝配置文件到节点并启动mon服务
ceph-deploy mon create-initial
[root@dnode1 ~]# ls /etc/ceph
ceph.conf  rbdmap  tmpfR8xOu
[root@dnode1 ~]# systemctl status ceph-mon@dnode1.service
● ceph-mon@dnode1.service - Ceph cluster monitor daemon
   Loaded: loaded (/usr/lib/systemd/system/ceph-mon@.service; enabled; vendor preset: disabled)
   Active: active (running) since 日 2024-06-30 14:25:35 CST; 3min 25s ago
 Main PID: 2925 (ceph-mon)
   CGroup: /system.slice/system-ceph\x2dmon.slice/ceph-mon@dnode1.service
           └─2925 /usr/bin/ceph-mon -f --cluster ceph --id dnode1 --setuser ceph --setgroup ceph

6月 30 14:25:35 dnode1 systemd[1]: Started Ceph cluster monitor daemon.

[root@dnode2 ~]# systemctl status ceph-mon@dnode2.service
● ceph-mon@dnode2.service - Ceph cluster monitor daemon
   Loaded: loaded (/usr/lib/systemd/system/ceph-mon@.service; enabled; vendor preset: disabled)
   Active: active (running) since 日 2024-06-30 14:25:38 CST; 3min 53s ago
 Main PID: 11741 (ceph-mon)
   CGroup: /system.slice/system-ceph\x2dmon.slice/ceph-mon@dnode2.service
           └─11741 /usr/bin/ceph-mon -f --cluster ceph --id dnode2 --setuser ceph --setgroup ceph

6月 30 14:25:38 dnode2 systemd[1]: Started Ceph cluster monitor daemon.

此时执行ceph -s会出错,是由于缺少/etc/ceph/ceph.client.admin.keyring文件
执行

[root@nnode1 ceph-cluster]#ceph-deploy admin nnode1 dnode2 dnode1
[root@nnode1 ceph-cluster]# ls /etc/ceph/
ceph.client.admin.keyring  ceph.conf  rbdmap  tmpLYO4Qp
[root@nnode1 ceph-cluster]# ceph -s
  cluster:
    id:     2cf25983-13ef-4106-86be-5d7d44b831b3
    health: HEALTH_OK

  services:
    mon: 3 daemons, quorum nnode1,dnode1,dnode2
    mgr: no daemons active
    osd: 0 osds: 0 up, 0 in

  data:
    pools:   0 pools, 0 pgs
    objects: 0 objects, 0B
    usage:   0B used, 0B / 0B avail
    pgs:
解决ceph -s报错
health: HEALTH_WARN
            no active mgr

[root@nnode1 ceph-cluster]# ceph-deploy mgr create nnode1

块存储

osd分配,一个机器需要一个盘(ssd,加快访问速度),分两个分区缓存另外两个共享盘,两个共享盘

理想情况
for i in node1 node2 node3
do
ssh $i "parted /dev/vdb mklabel gpt"
ssh $i "parted /dev/vdb mkpart primary 1 50%"
ssh $i "parted /dev/vdb mkpart primary 50% 100%"
done

实验环境
for i in dnode2 dnode1
do
ssh $i "parted /dev/sdb mklabel gpt"
ssh $i "parted /dev/sdb mkpart primary 1 50%"
ssh $i "parted /dev/sdb mkpart primary 50% 100%"
done

ssh nnode1 "parted /dev/sde mklabel gpt"
ssh nnode1 "parted /dev/sde mkpart primary 1 50%"
ssh nnode1 "parted /dev/sde mkpart primary 50% 100%"

所有节点修改磁盘的权限,让ceph能操作磁盘,系统重启后消失

chown ceph.ceph /dev/sde1
chown ceph.ceph /dev/sde2
chown ceph.ceph /dev/sdb1
chown ceph.ceph /dev/sdb2

永久修改权限

vim /etc/udev/rules.d/71-ceph.rules

cat >/etc/udev/rules.d/71-ceph.rules<<EOF
ENV{DEVNAME}=="/dev/vdb1",OWNER="ceph",GROUP="ceph"
ENV{DEVNAME}=="/dev/vdb2",OWNER="ceph"GROUP="ceph"
EOF
cat >/etc/udev/rules.d/71-ceph.rules<<EOF
ENV{DEVNAME}=="/dev/vdb1",OWNER="ceph",GROUP="ceph"
ENV{DEVNAME}=="/dev/vdb2",OWNER="ceph"GROUP="ceph"
EOF

格式化清空磁盘

[root@nnode1 ceph-cluster]# ceph-deploy disk zap nnode1 /dev/sdf  /dev/sdg
[root@nnode1 ceph-cluster]# ceph-deploy disk zap dnode1 /dev/sdc /dev/sdd
[root@nnode1 ceph-cluster]# ceph-deploy disk zap dnode2 /dev/sde /dev/sdd

创建osd存储空间

ceph-deploy osd create --data /dev/sdf nnode1
ceph-deploy osd create --data /dev/sdg nnode1

ceph-deploy osd create --data /dev/sdd dnode2
ceph-deploy osd create --data /dev/sde dnode2

ceph-deploy osd create --data /dev/sdc dnode1
ceph-deploy osd create --data /dev/sdd dnode1
[root@nnode1 ceph-cluster]# ceph -s
  cluster:
    id:     2cf25983-13ef-4106-86be-5d7d44b831b3
    health: HEALTH_WARN
            no active mgr

  services:
    mon: 3 daemons, quorum nnode1,dnode1,dnode2
    mgr: no daemons active
    osd: 6 osds: 6 up, 6 in

  data:
    pools:   0 pools, 0 pgs
    objects: 0 objects, 0B
    usage:   0B used, 0B / 0B avail
    pgs:

创建池子并指定副本数量

[root@nnode1 ceph-cluster]# ceph osd pool create mypool 3
pool 'mypool' created
[root@nnode1 ceph-cluster]# ceph osd lspools
1 mypool,

创建镜像并查看镜像

[root@nnode1 ceph-cluster]# rbd create mypool/image --image-feature layering --size 2G
  • mypool是池子名字/image是镜像名字,默认池子是rbd时不必加池子名字

  • --image-feature layering 是一个选项,用于启用 RBD 镜像的分层特性(layering feature)(COW写时复制)。这个特性允许你创建一个 RBD 镜像,该镜像可以基于另一个 RBD 镜像(称为父镜像或基础镜像)进行分层。

[root@nnode1 ceph-cluster]# rbd info mypool/image
rbd image 'image':
        size 2GiB in 512 objects
        order 22 (4MiB objects)
        block_name_prefix: rbd_data.10a06b8b4567
        format: 2
        features: layering
        flags:
        create_timestamp: Sun Jun 30 16:13:21 2024
扩容
[root@nnode1 ceph-cluster]# rbd resize mypool/image --size 3G
Resizing image: 100% complete...done.
[root@nnode1 ceph-cluster]#  rbd info mypool/image
rbd image 'image':
        size 3GiB in 768 objects
        order 22 (4MiB objects)
        block_name_prefix: rbd_data.10a06b8b4567
        format: 2
        features: layering
        flags:
        create_timestamp: Sun Jun 30 16:13:21 2024
缩容
[root@nnode1 ceph-cluster]#  rbd resize mypool/image --size 1G --allow-shrink
Resizing image: 100% complete...done.
[root@nnode1 ceph-cluster]#  rbd info mypool/image
rbd image 'image':
        size 1GiB in 256 objects
        order 22 (4MiB objects)
        block_name_prefix: rbd_data.10a06b8b4567
        format: 2
        features: layering
        flags:
        create_timestamp: Sun Jun 30 16:13:21 2024

客户端

yum install ceph-common

拷贝配置文件给客户端

[root@nnode1 ceph-cluster]# cd /etc/ceph/
[root@nnode1 ceph]# scp ceph.conf dnode3:/etc/ceph/
[root@nnode1 ceph]# scp ceph.client.admin.keyring  dnode3:/etc/ceph/

客户端获取共享磁盘

[root@dnode3 ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   30G  0 disk
├─sda1            8:1    0    1G  0 part /boot
└─sda2            8:2    0   29G  0 part
  ├─centos-root 253:0    0   26G  0 lvm  /
  └─centos-swap 253:1    0    3G  0 lvm  [SWAP]
sdb               8:16   0   50G  0 disk
sr0              11:0    1  4.2G  0 rom

[root@dnode3 ~]# rbd map mypool/image
/dev/rbd0
[root@dnode3 ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   30G  0 disk
├─sda1            8:1    0    1G  0 part /boot
└─sda2            8:2    0   29G  0 part
  ├─centos-root 253:0    0   26G  0 lvm  /
  └─centos-swap 253:1    0    3G  0 lvm  [SWAP]
sdb               8:16   0   50G  0 disk
sr0              11:0    1  4.2G  0 rom
rbd0            252:0    0    1G  0 disk

多了rbd0的磁盘
ceph-deploy new 新建一个集群,新建一个配置文件,用户名和密码
ceph-deploy install node1 node2 安装mon osd,但是ceph是redhat的,centos用不了,只能手动装包

ceph-deploy mon add(加一台) node1/create node1 node2/create-initial 自动添加所有(ceph.conf配置文件中的mon_initial_members=node1 node2)

(30分支只能起三次,ceph-mon@service配置文件中写的)
systemctl restart ceph-mon@node1.service
ceph-deploy osd create node1:vdc:/dev/vdb1 
以上命令表示启动node上的服务systemctl start ceph-osd@0/1/2...
ceph osd tree

rbd create rbd/demo-image --image-feature layering --size 10G 
rbd resize --size 7G demo-image [--allow-shrink]
rdb info image

客户端
yum install reph-common
scp 192...:/etc/ceph/ceph.conf /etc/ceph/
scp 192...:/etc/ceph/ceph.client /etc/ceph
rbd map image
lsblk
rbd showmapped

mkfs.xfs /dev/rbd0
mount /dev/rbd0 /mnt/
echo "test" > /mnt/test.txt

副本、快照

[root@dnode3 ~]# mkfs.xfs /dev/rbd0
meta-data=/dev/rbd0              isize=512    agcount=8, agsize=32768 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=262144, imaxpct=25
         =                       sunit=1024   swidth=1024 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=8 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
[root@dnode3 ~]# umount /dev/rbd0 /mnt
[root@dnode3 ~]# mount /dev/rbd0 /mnt
[root@dnode3 ~]# echo "ceph"> /mnt/ceph
创建快照
[root@nnode1 ceph]# rbd snap create mypool/image --snap snap1
查看快照
[root@nnode1 ceph]# rbd snap ls mypool/image
SNAPID NAME  SIZE TIMESTAMP
     4 snap1 1GiB Sun Jun 30 17:45:17 2024

删除文件
[root@dnode3 ~]# rm -f /mnt/ceph
还原快照,不支持在线还原,卸载还原,重新挂载
[root@dnode3 ~]# umount /mnt

[root@nnode1 ceph]# rbd snap rollback mypool/image --snap snap1
Rolling back to snapshot: 100% complete...done.

看到删除的文件回来了
[root@dnode3 ~]# cat /mnt/ceph
ceph

删除快照
[root@nnode1 ceph]# rbd snap rm  mypool/image --snap snap1

创建共享镜像,用旧的镜像创建新的镜像

1、创建旧镜像,写数据
2、创建快照
3、用快照克隆新镜像(克隆之前保护快照)
4、镜像和快照是父子关系,不能删除原来的快照
5、flatten解绑父子关系
6、取消镜像保护
rbd snap ls  mypool/image
保护镜像,防止克隆时被人删除
rbd snap protect mypool/image --snap snap1

此时无法删除
[root@nnode1 ceph]# rbd snap rm mypool/image --snap snap1
Removing snap: 02024-06-30 18:06:15.887412 7fa7caff1d40 -1 librbd::Operations: snapshot is protected% complete...failed.
rbd: snapshot 'snap1' is protected from removal.

创建image-clone镜像
[root@nnode1 ceph]# rbd clone mypool/image --snap snap1 img-clone1 --image-feature layering
查看镜像
[root@nnode1 ceph]# rbd info img-clone1
rbd image 'img-clone1':
        size 1GiB in 256 objects
        order 22 (4MiB objects)
        block_name_prefix: rbd_data.10c56b8b4567
        format: 2
        features: layering
        flags:
        create_timestamp: Sun Jun 30 18:08:01 2024
        parent: mypool/image@snap1
        overlap: 1GiB


新的镜像基于旧的镜像,删除就镜像新镜像会崩溃,需要解绑快照的父子关系
[root@nnode1 ceph]# rbd flatten img-clone1
Image flatten: 100% complete...done.

取消镜像保护
rbd snap unprotect mypool/image --snap snap1

客户端绑定新的镜像
[root@dnode3 ~]# rbd map img-clone1
/dev/rbd1
[root@dnode3 ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   30G  0 disk
├─sda1            8:1    0    1G  0 part /boot
└─sda2            8:2    0   29G  0 part
  ├─centos-root 253:0    0   26G  0 lvm  /
  └─centos-swap 253:1    0    3G  0 lvm  [SWAP]
sdb               8:16   0   50G  0 disk
sr0              11:0    1  4.2G  0 rom
rbd0            252:0    0    1G  0 disk /mnt
rbd1            252:16   0    1G  0 disk

删除镜像

查看绑定情况
[root@dnode3 ~]# rbd showmapped
id pool   image      snap device
0  mypool image      -    /dev/rbd0
1  rbd    img-clone1 -    /dev/rbd1

解绑镜像
rbd unmap 镜像名/磁盘名
删除快照
rbd snap rm mypool/image --snap snap1

删除镜像
[root@nnode1 ceph]# rbd rm img-clone1
Removing image: 100% complete...done.
[root@nnode1 ceph-cluster]# rbd rm  mypool/image

虚拟机使用ceph

vim secret.xml  //新建临时文件
<secret ephemeral='no'private='no'>
    <usage type="ceph'>
        <name> client.admin secret</name>
    </usage>
</secret>
#使用XML配置文件创建secret
virsh secret-define secret.xml
733f0fd1-e3d6-4c25-a69f-6681fc19802b
//随机的UUID,这个UUID对应的有账户信息
virsh secret-list
850a0a99-2110-40b7-83cb-c60adebeb129 ceph client.admin secret

virsh secret-set-value \
--secret 850a0a99-2110-40b7-83cb-c60adebeb129 \
--base64 AQBs+oBmxg9oEhAADCr9P/CORPO95nlh4ihS0Q==
//这里secret后面是之前创建的secret的UUID
//base64后面是client.admin账户的密码
[root@nnode1 ceph]# cat /etc/ceph/ceph.client.admin.keyring
[client.admin]
        key = AQBs+oBmxg9oEhAADCr9P/CORPO95nlh4ihS0Q==
//现在secret中既有账户信息又有密钥信息
virsh edit vm1   

<disk type='network' device='disk'>
    <driver name='qemu" type='raw"/>
    <auth usemame="dmin'>
        <secret type='ceph' uuid='850a0a99-2110-40b7-83cb-c60adebeb129'
    </auth>
    <source protocol='rbd' name='rbd/vm1-image'> 
         <host name="192.168.126.21" port="6789"/>
    </source>
    <target dev='vdb' bus='virtio'/>
</disk>
修改uuid为secret的uuid
name改为镜像名称
host改为ceph的服务端主机

文件系统

创建mds

[root@nnode1 ceph-cluster]# systemctl start ceph-mds@dnode2
[root@nnode1 ceph-cluster]# systemctl status ceph-mds@dnode2
[root@dnode2 ~]#  systemctl status ceph-mds@dnode2
● ceph-mds@dnode2.service - Ceph metadata server daemon
   Loaded: loaded (/usr/lib/systemd/system/ceph-mds@.service; enabled; vendor preset: disabled)
   Active: active (running) since 日 2024-06-30 19:25:40 CST; 45s ago
 Main PID: 15981 (ceph-mds)
   CGroup: /system.slice/system-ceph\x2dmds.slice/ceph-mds@dnode2.service
           └─15981 /usr/bin/ceph-mds -f --cluster ceph --id dnode2 --setuser ceph --setgroup ceph

6月 30 19:25:40 dnode2 systemd[1]: Started Ceph metadata server daemon.
6月 30 19:25:40 dnode2 ceph-mds[15981]: starting mds.dnode2 at -


查看存储池
ceph osd lspools

文件系统由inode+block组成,下面两个pool分别充当这两个角色
建池子,存元数据和数据,128类似目录,分类存放数据,推荐64或者128(是2的幂)
ceph osd pool create pool_meta 128
ceph osd pool create pool_data 128
//默认一个集群只能创建1个文件系统(名称自建为misi),多余的会报错
//注意,先写medadata池,再写data池
ceph fs new misi pool_meta pool_data

查看文件系统
[root@nnode1 ceph-cluster]# ceph fs ls
name: misi, metadata pool: pool_meta, data pools: [pool_data ]
[root@dnode3 ceph]# mount -t ceph 192.168.126.23:6789:/ /ceph -o name=admin,secret=AQBs+oBmxg9oEhAADCr9P/CORPO95nlh4ihS0Q==

[root@dnode3 ceph]# cd /ceph
[root@dnode3 ceph]# dd if=/dev/zero of=a.txt bs=1M count=500

查看,挂的是整个集群的大小
[root@dnode3 ceph]# df -h
文件系统                 容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root   26G   22G  4.7G   83% /
devtmpfs                 735M     0  735M    0% /dev
tmpfs                    747M     0  747M    0% /dev/shm
tmpfs                    747M  9.6M  737M    2% /run
tmpfs                    747M     0  747M    0% /sys/fs/cgroup
/dev/sda1               1014M  142M  873M   14% /boot
tmpfs                    150M     0  150M    0% /run/user/0
/dev/rbd0               1014M   33M  982M    4% /mnt
192.168.126.23:6789:/    1.7G  500M  1.2G   30% /ceph

[root@nnode1 ceph-cluster]# ceph osd pool ls
mypool
rbd
pool_meta
pool_data

[root@nnode1 ceph-cluster]# ceph df
GLOBAL:
    SIZE        AVAIL       RAW USED     %RAW USED
    12.0GiB     5.92GiB      6.05GiB         50.55
POOLS:
    NAME          ID     USED        %USED     MAX AVAIL     OBJECTS
    mypool        1          19B         0       1.77GiB           2
    rbd           2          19B         0       1.77GiB           3
    pool_meta     3      47.7KiB         0       1.77GiB          22
    pool_data     4           0B         0       1.77GiB           0


查看副本策略
[root@nnode1 ceph-cluster]# ceph osd pool get pool_data size
size: 3

查看pool的所有信息
[root@nnode1 ceph-cluster]# ceph osd pool get rbd all
size: 3
min_size: 2
crash_replay_interval: 0
pg_num: 3
pgp_num: 3
crush_rule: replicated_rule
hashpspool: true
nodelete: false
nopgchange: false
nosizechange: false
write_fadvise_dontneed: false
noscrub: false
nodeep-scrub: false
use_gmt_hitset: 1
auid: 0
fast_read: 0

加入2G的osd,可以看到使用的和未使用的都增加了1G左右,说明ceph将一半的存储用来备份,不允许使用
[root@nnode1 ceph-cluster]# ceph df
GLOBAL:
    SIZE        AVAIL       RAW USED     %RAW USED
    14.0GiB     6.91GiB      7.07GiB         50.58
POOLS:
    NAME          ID     USED        %USED     MAX AVAIL     OBJECTS
    mypool        1          19B         0       2.07GiB           2
    rbd           2          19B         0       2.07GiB           3
    pool_meta     3      47.7KiB         0       2.07GiB          22
    pool_data     4           0B         0       2.07GiB           0

[root@dnode3 ceph]# dd if=/dev/zero of=a.txt bs=1M count=500
看到500M的文件实际使用440M磁盘,占用ceph存储了1.3G,差不多是440的3倍
[root@nnode1 ceph-cluster]# ceph df
GLOBAL:
    SIZE        AVAIL       RAW USED     %RAW USED
    14.0GiB     5.62GiB      8.36GiB         59.80
POOLS:
    NAME          ID     USED        %USED     MAX AVAIL     OBJECTS
    mypool        1          19B         0       1.47GiB           2
    rbd           2          19B         0       1.47GiB           3
    pool_meta     3      81.0KiB         0       1.47GiB          22
    pool_data     4       440MiB     22.65       1.47GiB         110

对象存储

ceph-deploy rgw create nnode1 (7480端口)

nnode1服务端修改端口
修改/etc/ceph/ceph.conf
[client.rgw.nnode1]
host nnode1
rgw_frontends "civetweb port=8000"
//nnode1为主机名
//civetweb是RGW内置的一个web服务

systemctl rstart ceph-radosgw@rgw.nnode1.service
端口就改为8000

使用第三方使用对象存储s3cmd

Amazon S3 Tools: Command Line S3 Client and S3 Backup for Windows, Linux: s3cmd, s3express

s3cmd put
s3cmd get
s3cmd ls

问题及解决

application not enabled on 2 pool(s)

 cluster:
    id:     2cf25983-13ef-4106-86be-5d7d44b831b3
    health: HEALTH_WARN
            application not enabled on 2 pool(s)

未指定pool的存储类型

RGW、RBD和CephFS在Ceph存储系统中各自扮演着不同的角色,它们分别代表了对象存储、块存储和文件级存储的接口,并且各自拥有其独特的存储池。指定pool的类型即可。

[root@nnode1 ceph-cluster]# ceph osd pool application enable rbd rbd
enabled application 'rbd' on pool 'rbd'
[root@nnode1 ceph-cluster]# ceph osd pool application enable mypool rbd
enabled application 'rbd' on pool 'mypool'
[root@nnode1 ceph-cluster]# ceph -s
  cluster:
    id:     2cf25983-13ef-4106-86be-5d7d44b831b3
    health: HEALTH_OK

  services:
    mon: 3 daemons, quorum nnode1,dnode1,dnode2
    mgr: nnode1(active)
    mds: misi-1/1/1 up  {0=dnode2=up:active}
    osd: 6 osds: 6 up, 6 in

  data:
    pools:   4 pools, 262 pgs
    objects: 177 objects, 516MiB
    usage:   7.56GiB used, 4.42GiB / 12.0GiB avail
    pgs:     262 active+clean
点赞

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注