RADOS简介

从Ceph官方文档摘录的架构图如下。RADOS是Ceph中最关键的部分,RADOS是一个支持海量对象的分布式对象存储。

ceph-architecture

RADOS主要由两部分组成:

  • Monitor节点集群:由少量的Monitor组成的小规模集群,负责管理的Map。Cluster Map是整个RADOS系统的关键数据结构,包含集群中全部成员、关系、属性等信息以及管理数据的分发。
  • OSD节点集群:由大规模的OSD(Object Storage Device)组成的集群,负责存储所有的对象数据。

在物理结构上RADOS是由大量的存储节点组成,每个节点拥有自己的CPU、内存、硬盘、网络等硬件资源,并运行着操作系统和文件系统,OSD集群就是这些存储节点。、 而节点管理和数据分发策略都由Monitor负责,并为Client提供存储接口。

Ceph Monitor Map

本篇我们一起来学习一下Ceph Monitor。前面提到了Monitor负责管理Cluster Map,那么在Ceph集群中包含哪些Cluster Map呢? 借助我们之前部署的Ceph集群来看一下这些Cluster Map。

 1ceph -s
 2    cluster 4873f3c0-2a5b-4868-b30e-f0c6f93b800a
 3     health HEALTH_OK
 4     monmap e1: 1 mons at {c1=192.168.61.31:6789/0}
 5            election epoch 6, quorum 0 c1
 6     osdmap e61: 2 osds: 2 up, 2 in
 7            flags sortbitwise,require_jewel_osds
 8      pgmap v2719: 192 pgs, 2 pools, 76900 kB data, 35 objects
 9            12754 MB used, 182 GB / 195 GB avail
10                 192 active+clean

Monitor Map

Monitor Map包含所有Monitor节点的信息,包括集群ID,主机名,IP和端口等。

1ceph mon dump
2
3dumped monmap epoch 1
4epoch 1
5fsid 4873f3c0-2a5b-4868-b30e-f0c6f93b800a
6last_changed 2017-01-17 20:24:52.361450
7created 2017-01-02 17:24:52.361450
80: 192.168.61.31:6789/0 mon.c1

可以看出当前集群中只有一个MON节点。

OSD Map

OSD Map包含Ceph Pool的pool ID,名称,类型,副本以及PGP信息;另外包含OSD的数量、状态、最细清理间隔、OSD所在主机信息。

 1ceph osd dump
 2epoch 61
 3fsid 4873f3c0-2a5b-4868-b30e-f0c6f93b800a
 4created 2017-01-17 20:24:52.728134
 5modified 2017-01-19 14:48:48.730141
 6flags sortbitwise,require_jewel_osds
 7pool 0 'rbd' replicated size 2 min_size 1 crush_ruleset 0 object_hash rjenkins pg_num 64 pgp_num 64 last_c                                                                                                                                                                                hange 1 flags hashpspool stripe_width 0
 8pool 2 'kube' replicated size 2 min_size 1 crush_ruleset 0 object_hash rjenkins pg_num 128 pgp_num 128 las                                                                                                                                                                                t_change 31 flags hashpspool stripe_width 0
 9        removed_snaps [1~3]
10max_osd 2
11osd.0 up   in  weight 1 up_from 45 up_thru 48 down_at 44 last_clean_interval [34,43) 192.168.61.32:6800/33                                                                                                                                                                                66 192.168.61.32:6801/3366 192.168.61.32:6802/3366 192.168.61.32:6803/3366 exists,up 1fd0e8ad-aaca-4c6a-a9                                                                                                                                                                                97-28adf3833508
12osd.1 up   in  weight 1 up_from 47 up_thru 48 down_at 42 last_clean_interval [36,41) 192.168.61.33:6800/33                                                                                                                                                                                45 192.168.61.33:6801/3345 192.168.61.33:6802/3345 192.168.61.33:6803/3345 exists,up 0df0a29a-c14e-4f1f-9d                                                                                                                                                                                8f-9d121a72975f

PG Map

PG Map包含当前的PG版本、时间戳、空间使用比例以及每个PG的基本信息。

 1ceph pg dump
 2
 3dumped all in format plain
 4version 2720
 5stamp 2017-02-03 19:36:06.646630
 6last_osdmap_epoch 61
 7last_pg_scan 61
 8full_ratio 0.95
 9nearfull_ratio 0.85
10......

CRUSH Map

包含集群存储设备信息,故障层次结构以及存储数据时失败域规则信息。

1ceph osd crush dump

Ceph Monitor

Ceph Monitor运行为一个轻量级的进程,一般情况下只会消耗很少的系统资源。大多数场景下可以选择入门级的CPU、千兆网卡即可,但是需要有足够大的磁盘空间来保存集群日志。 Ceph Monitor集群通过Paxos分布式协调算法来进行leader的选举。因为是通过法定人数选举的,所以当Ceph集群中有多个Monitor时,Monitor的数量应该是一个奇数,一般线上环境应该至少有3个。

前面在试验环境中初始化的Ceph集群只有一个MON。

1192.168.61.30 c0 - admin-node, deploy-node
2192.168.61.31 c1 - mon1
3192.168.61.32 c2 - osd.1
4192.168.61.33 c3 - osd.2

接下来我们添加两个MON,即把c2,c3也作为MON节点。

修改ceph.conf,在global章节加入:

1mon_initial_members = c1,c2,c3
2mon_host = 192.168.61.31,192.168.61.32,192.168.61.33
3public network = 192.168.61.0/24

在admin-node上将配置文件推送到各个节点:

1ceph-deploy --overwrite-conf config push c1 c2 c3

添加MON节点:

1ceph-deploy mon create c2 c3
 1ceph -s
 2    cluster 4873f3c0-2a5b-4868-b30e-f0c6f93b800a
 3     health HEALTH_OK
 4     monmap e11: 3 mons at {c1=192.168.61.31:6789/0,c2=192.168.61.32:6789/0,c3=192.168.61.33:6789/0}
 5            election epoch 26, quorum 0,1,2 c1,c2,c3
 6     osdmap e66: 2 osds: 2 up, 2 in
 7            flags sortbitwise,require_jewel_osds
 8      pgmap v2924: 192 pgs, 2 pools, 76900 kB data, 35 objects
 9            12844 MB used, 182 GB / 195 GB avail
10                 192 active+clean

移除MON节点:

1ceph-deploy mon destroy c2 c3

参考