ceph 一、概念与安装

大番茄 2020年03月05日 2,121次浏览

version:
ceph-deploy: 2.0.1
ceph: 14.2.8

文档:
英文版: https://docs.ceph.com/docs/master/
中文社区: http://ceph.org.cn/category/docs/
中文版: http://docs.ceph.org.cn/

中文版已经很长时间没有更新了, 里面的版本时间表还是i版本,但是软件都更新到o版本了。


最近在学习ceph,在这里做下记录。 因为自己不是做存储的,所以好多东西也不是很懂,暂时也不会花时间深入研究,仅供参考吧。
概念部分还不懂,大部分是照搬课件上的。


一、概念以及组件

Ceph是当前非常流行的开源分布式存储系统,具有高扩展性、高性能、高可靠性等优点。可以同时提供块存储(rbd),对象存储(rgw),文件系统存储(cephfs)。去中心化设计。

块存储: 就是如磁盘一样挂载。
对象存储: 通过api接口访问。
文件系统存储: 可以通过mount挂载。

核心概念

http://docs.ceph.org.cn/architecture/

RADOS

全称Reliable Autonomic Distributed Object Store,即可靠的、自动化的、分布式对象存储系统。RADOS是Ceph集群的精华,用户实现数据分配、故障转移等集群操作。

Librados

Rados提供库,因为RADOS是协议很难直接访问,因此上层的RBD、RGW和CephFS都是通过librados访问的,目前提供PHP、Ruby、Java、Python、C和C++支持。

Crush

http://docs.ceph.org.cn/architecture/#crush

Crush算法是Ceph的两大创新之一,通过Crush算法的寻址操作,Ceph得以摒弃了传统的集中式存储元数据寻址方案。而Crush算法在一致性哈希基础上很好的考虑了容灾域的隔离,使得Ceph能够实现各类负载的副本放置规则,例如跨机房、机架感知等。同时,Crush算法有相当强大的扩展性,理论上可以支持数千个存储节点,这为Ceph在大规模云环境中的应用提供了先天的便利。

存储集群的客户端和各个 Ceph OSD 守护进程使用 CRUSH 算法高效地计算数据位置,而不是依赖于一个中心化的查询表。

Pool

Pool是存储对象的逻辑分区,它规定了数据冗余的类型和对应的副本分布策略,支持两种类型:副本(replicated)和 纠删码( Erasure Code);

可以配置最大最小副本数,配额,pg数量,crush规则等。

我理解的是:
数据存储会通过pool的副本配置,crush规则等决定数据如何存储。
数据读取也会通过pool的相关配置,决定是否可以读取。如,在有多少副本坏了的情况下就不允许读取了。
因为读取都是通过pool, 就实现了数据逻辑分区。

PG

PG( placement group)是一个放置策略组,它是对象的集合,该集合里的所有对象都具有相同的放置策略,简单点说就是相同PG内的对象都会放到相同的硬盘上,PG是 ceph的逻辑概念,服务端数据均衡和恢复的最小粒度就是PG,一个PG包含多个OSD。引入PG这一层其实是为了更好的分配数据和定位数据;

Object

简单来说块存储读写快,不利于共享,文件存储读写慢,利于共享。能否弄一个读写快,利于共享的出来呢。于是就有了对象存储。最底层的存储单元,包含元数据和原始数据。

一个文件会被切割成多个Object分别存储。

Ceph核心组件

集群运行需要 Monitor,OSD,Mgr组件。
其中Monitor是集群的中心,数据库, 需要第一个启动,其他组件启动会注册信息到Monitor里。OSD负责存储。 Mgr提供集群监控以及管理接口。
另外如果需要对象存储加上RGW,需要文件系统存储加上MDS

OSD

OSD是负责物理存储的进程,一般配置成和磁盘一一对应,一块磁盘启动一个OSD进程。主要功能是存储数据、复制数据、平衡数据、恢复数据,以及与其它OSD间进行心跳检查,负责响应客户端请求返回具体数据的进程等;

Monitor

一个Ceph集群需要多个Monitor组成小集群,它们通过Paxos同步数据,用来保存OSD的元数据。负责坚实整个Ceph集群运行的Map视图(如OSD Map、Monitor Map、PG Map和CRUSH Map),维护集群的健康状态,维护展示集群状态的各种图表,管理集群客户端认证与授权信息。
管理关键的群集状态,例如群集成员身份和身份验证信息。

MDS

MDS全称Ceph Metadata Server,是CephFS服务依赖的元数据服务。负责保存文件系统的元数据,管理目录结构。对象存储和块设备存储不需要元数据服务;
如果不使用文件系统存储,可以不安装。

Mgr

ceph 官方开发了 ceph-mgr(ceph-manager),主要目标实现 ceph 集群的管理,为外界提供统一的入口。例如cephmetrics、zabbix、calamari、promethus

RGW

RGW全称RADOS gateway,是Ceph对外提供的对象存储服务,接口与Amazon S3和OpenStack Swift 兼容。

Admin

Ceph常用管理接口通常都是命令行工具,如rados、ceph、rbd等命令,另外Ceph还有可以有一个专用的管理节点,在此节点上面部署专用的管理工具来实现近乎集群的一些管理工作,如集群部署,集群组件管理等。

一些图片

网上的图
image.png
image.png
客户端获取数据的流程:
image.png

其他

Cluster Map

http://docs.ceph.org.cn/architecture/#index-2
https://docs.ceph.com/docs/master/architecture/#cluster-map

版本介绍

一般生产环境用的多的可能是'Luminous'版本。

版本介绍

https://docs.ceph.com/docs/master/releases/general/

版本名称版本号发布时间
Argonaut0.48版本(LTS)2012年6月3日
Bobtail0.56版本(LTS)2013年5月7日
Cuttlefish0.61版本2013年1月1日
Dumpling0.67版本(LTS)2013年8月14日
Emperor0.72版本2013年11月9
Firefly0.80版本(LTS)2014年5月
GiantGiantOctober 2014 - April 2015
HammerHammerApril 2015 - November 2016
InfernalisInfernalisNovember 2015 - June 2016
Jewel10.2.92016年4月
Kraken11.2.12017年10月
Luminous12.2.122017年10月
mimic13.2.72018年5月
nautilus14.2.52019年2月

x.0.z - 开发版
x.1.z - 候选版
x.2.z - 稳定、修正版

Luminous新版本特性

  • Bluestore
    • ceph-osd的新后端存储BlueStore已经稳定,是新创建的OSD的默认设置。
      BlueStore通过直接管理物理HDD或SSD而不使用诸如XFS的中间文件系统,来管理每个OSD存储的数据,这提供了更大的性能和功能。支持裸盘了。https://docs.ceph.com/docs/master/rados/configuration/storage-devices/#bluestore
    • BlueStore支持Ceph存储的所有的完整的数据和元数据校验。
    • BlueStore内嵌支持使用zlib,snappy或LZ4进行压缩。(Ceph还支持zstd进行RGW压缩,但由于性能原因,不为BlueStore推荐使用zstd)
  • 集群的总体可扩展性有所提高。我们已经成功测试了多达10,000个OSD的集群。
  • ceph-mgr
    • ceph-mgr是一个新的后台进程,这是任何Ceph部署的必须部分。虽然当ceph-mgr停止时,IO可以继续,但是度量不会刷新,并且某些与度量相关的请求(例如,ceph df)可能会被阻止。我们建议您多部署ceph-mgr的几个实例来实现可靠性。
    • ceph-mgr守护进程daemon包括基于REST的API管理。注:API仍然是实验性质的,目前有一些限制,但未来会成为API管理的基础。
    • ceph-mgr还包括一个Prometheus插件。
    • ceph-mgr现在有一个Zabbix插件。使用zabbix_sender,它可以将集群故障事件发送到Zabbix Server主机。这样可以方便地监视Ceph群集的状态,并在发生故障时发送通知。

二、安装

使用ceph-deploy工具安装。
https://docs.ceph.com/docs/master/start/

环境

硬件建议: https://docs.ceph.com/docs/master/start/hardware-recommendations/
系统建议: https://docs.ceph.com/docs/master/start/os-recommendations/

这里的测试环境:
系统: CentOS 7.6.1810

节点ip配置
cephnode1172.100.102.912c4G,2块16G裸盘
cephnode2172.100.102.922c4G,2块16G裸盘
cephnode3172.100.102.932c4G,2块16G裸盘

磁盘情况,两块可用盘,sdb,sdc:

[root@cephnode1 ~]# lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0  150G  0 disk
├─sda1   8:1    0    4G  0 part [SWAP]
└─sda2   8:2    0  146G  0 part /
sdb      8:16   0   16G  0 disk
sdc      8:32   0   16G  0 disk

准备

所有节点

1、关闭防火墙与selinux

systemctl disable firewalld && systemctl stop firewalld

selinux:
修改/etc/selinux/config, 设置 SELINUX=disabled

执行: setenforce 0 # 都设置完以后最好重启一下,也就不需要这条了。

2、时间同步与时区

centos7使用chronyd作为时间服务器,能保持系统时间与时间服务器(NTP)同步。

systemctl restart chronyd.service && systemctl enable chronyd.service

可以修改/etc/chrony.conf添加内网使用的ntp服务器。

时区:

timedatectl set-timezone Asia/Shanghai

3、关闭NetworkManager

linux上有两套管理网络的工具:network, NetworkManager。
因为NetworkManager会自动的做一些网络相关配置,比如在网络中断以后清理路由。一般桌面环境才会使用这个工具。所以为了防止莫名其妙的网络问题,一般都会把NetworkManager关闭。

systemctl disable NetworkManager && systemctl stop NetworkManager

4、主机名解析

确保可以ping通短主机名,根据需要解决主机名解析问题。这里直接加/etc/hosts
比如我这里:

cat >> /etc/hosts << EOF
172.100.102.91 cephnode1
172.100.102.92 cephnode2
172.100.102.93 cephnode3
EOF

5、优化配置以及内核参数

1、文件描述符
cat >> /etc/security/limits.conf << EOF
* soft nofile 65535
* hard nofile 65535
EOF

有一些默认配置,/etc/security/limits.d/20-nproc.conf 这个文件看情况修改或删除。

2、内核

设置系统全局进程数量,以及尽量不使用swap。

cat >> /etc/sysctl.conf << EOF
kernel.pid_max = 4194303
vm.swappiness = 0
EOF

sysctl -p

磁盘性能
提高数据预读的大小:

echo "8192" > /sys/block/sda/queue/read_ahead_kb
cat >> /etc/rc.d/rc.local << EOF
echo "8192" > /sys/block/sda/queue/read_ahead_kb
EOF

/etc/rc.d/rc.local 默认情况下没有执行权限,需要添加执行权限。
chmod +x /etc/rc.d/rc.local

修改磁盘I/O调度策略:
ssd盘改成noop, sata/sas改成deadline
比如我这里是sata,并且有两块硬盘可以用于ceph。

echo "deadline" > /sys/block/sdb/queue/scheduler
echo "deadline" > /sys/block/sdc/queue/scheduler

cat >> /etc/rc.d/rc.local << EOF
echo "deadline" > /sys/block/sdb/queue/scheduler
echo "deadline" > /sys/block/sdc/queue/scheduler
EOF
[root@cephnode1 ~]# cat /sys/block/sdb/queue/scheduler
noop [deadline] cfq
[root@cephnode1 ~]# cat /sys/block/sdc/queue/scheduler
noop [deadline] cfq

6、免密登录

执行ceph-deploy命令的节点需要免密ssh登录其他节点。
默认可能没有ssh登录用的key,需要执行ssh-keygen生成。

ssh-keygen
ssh-copy-id root@172.100.102.92
ssh-copy-id root@172.100.102.93

添加yum源

添加epel源
需要从epel下载依赖。我这里使用阿里的epel源。

wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

添加ceph-deploy的yum源。使用国内的源,阿里,163都有。

vim /etc/yum.repos.d/ceph.repo
[ceph]
name=Ceph packages for $basearch
baseurl=https://mirrors.aliyun.com/ceph/rpm-nautilus/el7/$basearch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc


[ceph-noarch]
name=Ceph noarch packages
baseurl=https://mirrors.aliyun.com/ceph/rpm-nautilus/el7/noarch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc

[ceph-source]
name=Ceph source packages
baseurl=https://mirrors.aliyun.com/ceph/rpm-nautilus/el7/SRPMS
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc

ceph-noarch里是一些管理工具以及ceph-deploy,主要的ceph软件在ceph里。

安装ceph-deploy

yum install -y ceph-deploy

如果执行ceph-deploy命令报错:

[root@cephnode1 yum.repos.d]# ceph-deploy
Traceback (most recent call last):
  File "/usr/bin/ceph-deploy", line 18, in <module>
    from ceph_deploy.cli import main
  File "/usr/lib/python2.7/site-packages/ceph_deploy/cli.py", line 1, in <module>
    import pkg_resources
ImportError: No module named pkg_resources

需要安装python-setuptools:

yum install python-setuptools -y

ceph-deploy

执行ceph-deploy命令的过程中,会生成集群的配置文件与秘钥。
所以需要创建一个目录,确保是在目录里执行命令。

0、从头开始

在安装过程中如果想重新开始,执行:

ceph-deploy purge {ceph-node} [{ceph-node}]
ceph-deploy purgedata {ceph-node} [{ceph-node}]
ceph-deploy forgetkeys
rm ceph.*

删除软件,删除配置数据,删除key, 最后的rm是删除执行命令的目录里的东西。

1、创建一个集群

需要安装ceph monitor组件的节点。
ceph-deploy new <initial-monitor-node>
这一步是确定ceph monitor组件的节点,我这里先设置两个节点,完了以后再扩展。 monitor组件本身需要实现高可用,所以也是N/2+1的规则,最好是奇数。

ceph-deploy new cephnode1 cephnode2

看一下执行过程,其实就是确定目标节点ip,确认monitor节点,生成monitor key.
目录中生成了这几个文件:

ceph.conf  ceph-deploy-ceph.log  ceph.mon.keyring

ceph.conf: 生成的配置文件
ceph.mon.keyring: 生成的monitor秘钥。
如果服务器是多网卡,并且划分了集群内部网络,外部访问网络。
可以修改ceph.conf, 参考:
https://docs.ceph.com/docs/master/rados/configuration/network-config-ref/

2、安装ceph软件包

所有ceph节点。

yum install ceph -y

也可以使用ceph-deploy工具安装,只是它会下载官方的源,导致安装的很慢。
安装完成以后,发现自动启动了一个进程:
/usr/bin/python2.7 /usr/bin/ceph-crash
暂时不确定这个进程的作用

3、部署monitor组件以及收集各种key

ceph-deploy mon create-initial

执行成功以后,ps查看进程会发现上面设置的节点已经运行了monitor组件:

/usr/bin/ceph-mon -f --cluster ceph --id cephnode2 --setuser ceph --setgroup ceph

目录里会多出来很多key:

[root@cephnode1 mycluster]# ls
ceph.bootstrap-mds.keyring  ceph.bootstrap-osd.keyring  ceph.client.admin.keyring  ceph-deploy-ceph.log
ceph.bootstrap-mgr.keyring  ceph.bootstrap-rgw.keyring  ceph.conf                  ceph.mon.keyring

查看刚才命令的执行过程,也会发现ceph.conf配置文件已经复制到了/etc/ceph下面。

4、发送ceph配置文件与管理秘钥到各节点

只是为了执行一些ceph cli命令时不需要再指定monitor节点地址与admin key文件。比如:ceph、rbd等命令就是需要使用/etc/ceph/ceph.client.admin.keyring来连接集群。

ceph-deploy admin cephnode1 cephnode2 cephnode3
[ceph_deploy.conf][DEBUG ] found configuration file at: /root/.cephdeploy.conf
[ceph_deploy.cli][INFO  ] Invoked (2.0.1): /usr/bin/ceph-deploy admin cephnode1 cephnode2 cephnode3
[ceph_deploy.cli][INFO  ] ceph-deploy options:
[ceph_deploy.cli][INFO  ]  username                      : None
[ceph_deploy.cli][INFO  ]  verbose                       : False
[ceph_deploy.cli][INFO  ]  overwrite_conf                : False
[ceph_deploy.cli][INFO  ]  quiet                         : False
[ceph_deploy.cli][INFO  ]  cd_conf                       : <ceph_deploy.conf.cephdeploy.Conf instance at 0x7fda7001f128>
[ceph_deploy.cli][INFO  ]  cluster                       : ceph
[ceph_deploy.cli][INFO  ]  client                        : ['cephnode1', 'cephnode2', 'cephnode3']
[ceph_deploy.cli][INFO  ]  func                          : <function admin at 0x7fda70b30230>
[ceph_deploy.cli][INFO  ]  ceph_conf                     : None
[ceph_deploy.cli][INFO  ]  default_release               : False
[ceph_deploy.admin][DEBUG ] Pushing admin keys and conf to cephnode1
[cephnode1][DEBUG ] connected to host: cephnode1
[cephnode1][DEBUG ] detect platform information from remote host
[cephnode1][DEBUG ] detect machine type
[cephnode1][DEBUG ] write cluster configuration to /etc/ceph/{cluster}.conf
[ceph_deploy.admin][DEBUG ] Pushing admin keys and conf to cephnode2
[cephnode2][DEBUG ] connected to host: cephnode2
[cephnode2][DEBUG ] detect platform information from remote host
[cephnode2][DEBUG ] detect machine type
[cephnode2][DEBUG ] write cluster configuration to /etc/ceph/{cluster}.conf
[ceph_deploy.admin][DEBUG ] Pushing admin keys and conf to cephnode3
[cephnode3][DEBUG ] connected to host: cephnode3
[cephnode3][DEBUG ] detect platform information from remote host
[cephnode3][DEBUG ] detect machine type
[cephnode3][DEBUG ] write cluster configuration to /etc/ceph/{cluster}.conf

执行完毕会在/etc/ceph下面多一个ceph.client.admin.keyring文件

5、安装ceph-manager

只有 luminous+, i.e >= 12.x的版本需要安装, 只有大于等于12.x的版本需要。
manager daemonmonitor daemon一起为外部监控和管理系统提供额外的监控和接口。

从12.x版本开始,ceph的正常运行需要mgr,在11.x的版本还是可选组件。
如果没有运行mgr,会有一些运行状态警告,并且ceph status命令输出的某些信息会缺失 或者是旧的信息。
看来一些查看状态的命令也是从这个组件获取的信息。就跟k8s的metrics server一样。
默认情况下,mgr不需要其他配置就可以正常运行.
mgrmonitor放到同一节点不是强制的,但几乎总是合理的。

ceph-deploy mgr create cephnode1 cephnode2 cephnode3

执行完毕多了一个进程:

/usr/bin/ceph-mgr -f --cluster ceph --id cephnode1 --setuser ceph --setgroup ceph

6、部署rgw

可选
提供对象存储,如果不使用对象存储,也就不用安装了。
需要安装ceph-radosgw软件,使用ceph-deploy应该也可以安装,ceph-deploy install里面有对应的参数。

在需要提供rgw的节点执行。

yum install -y ceph-radosgw

使用ceph-deploy添加到集群, 我这里只添加一个节点了。

ceph-deploy rgw create cephnode1

同样的执行完以后,也会多出来一个对应组件的进程。

/usr/bin/radosgw -f --cluster ceph --name client.rgw.cephnode1 --setuser ceph --setgroup ceph

7、部署MDS

可选
提供元数据服务,文件系统存储使用。如果不使用,也就不用安装。

ceph-deploy mds create cephnode1 cephnode2 cephnode3 

执行完毕多了mds组件的进程:

/usr/bin/ceph-mds -f --cluster ceph --id cephnode2 --setuser ceph --setgroup ceph

8、添加osd

使用未格式化的裸盘。硬盘随时可以加进集群。

ceph-deploy osd create --data {device} {ceph-node}
ceph-deploy osd create --data /dev/sdb cephnode1
ceph-deploy osd create --data /dev/sdc cephnode1
ceph-deploy osd create --data /dev/sdb cephnode2
ceph-deploy osd create --data /dev/sdc cephnode2
ceph-deploy osd create --data /dev/sdb cephnode3
ceph-deploy osd create --data /dev/sdc cephnode3

执行完毕以后,其中节点的磁盘:

[root@cephnode1 mycluster]# lsblk
NAME                                                                                              MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda                                                                                                 8:0    0  150G  0 disk
├─sda1                                                                                              8:1    0    4G  0 part [SWAP]
└─sda2                                                                                              8:2    0  146G  0 part /
sdb                                                                                                 8:16   0   16G  0 disk
└─ceph--eb2f44fb--e007--4ad5--babe--5c345d5ad5af-osd--block--a6f53c4b--5655--42f5--9535--b766a42bade1
                                                                                                  253:0    0   16G  0 lvm
sdc                                                                                                 8:32   0   16G  0 disk
└─ceph--a6c47052--80e2--4908--a029--4be553eafdec-osd--block--bb67de24--5525--4ab4--ba1c--9c6ae5c70901
                                                                                                  253:1    0   16G  0 lvm
sr0                                                                                                11:0    1 1024M  0 rom
[root@cephnode1 mycluster]#

进程,每个osd进程对应一块磁盘,这个节点两块盘,也就两个osd进程。注意里面的id, 是全局唯一的,所有节点唯一的。

/usr/bin/ceph-osd -f --cluster ceph --id 0 --setuser ceph --setgroup ceph
/usr/bin/ceph-osd -f --cluster ceph --id 1 --setuser ceph --setgroup ceph

节点3 osd进程的id:

/usr/bin/ceph-osd -f --cluster ceph --id 4 --setuser ceph --setgroup ceph
/usr/bin/ceph-osd -f --cluster ceph --id 5 --setuser ceph --setgroup ceph

9、检查集群状态

[root@cephnode1 mycluster]# ceph health
HEALTH_OK

应该显示HEALTH_OK

显示更详细的信息

[root@cephnode1 mycluster]# ceph status
  cluster:
    id:     d5f060f7-3b0e-468e-857b-7cc592d3a94c
    health: HEALTH_OK

  services:
    mon: 2 daemons, quorum cephnode1,cephnode2 (age 87m)
    mgr: cephnode1(active, since 31m), standbys: cephnode2, cephnode3
    mds:  3 up:standby
    osd: 6 osds: 6 up (since 4m), 6 in (since 4m)
    rgw: 1 daemon active (cephnode1)

  data:
    pools:   4 pools, 128 pgs
    objects: 187 objects, 1.2 KiB
    usage:   6.0 GiB used, 90 GiB / 96 GiB avail
    pgs:     128 active+clean

monitor 组件两个节点,cephnode1,cephnode2
mgr: 3个节点,cephnode1活动,其他两个备用。
mds: 3 up:standby , 3个up并且备用节点,因为还没有创建cephfs文件系统,所以没有节点是活动状态。

10、如何重启

操作集群:
https://docs.ceph.com/docs/master/rados/operations/operating/

启动:systemctl start ceph.target
关闭: systemctl stop ceph\*.service ceph\*.target

按类型启动:

systemctl start ceph-osd.target
systemctl start ceph-mon.target
systemctl start ceph-mds.target

按类型关闭:

systemctl stop ceph-mon\*.service ceph-mon.target
systemctl stop ceph-osd\*.service ceph-osd.target
systemctl stop ceph-mds\*.service ceph-mds.target

三、扩展集群

添加monitor

ceph-deploy mon add {ceph-nodes}

添加cephnode3节点

ceph-deploy mon add  cephnode3

报错了:

[cephnode3][INFO  ] Running command: systemctl enable ceph.target
[cephnode3][INFO  ] Running command: systemctl enable ceph-mon@cephnode3
[cephnode3][INFO  ] Running command: systemctl start ceph-mon@cephnode3
[cephnode3][INFO  ] Running command: ceph --cluster=ceph --admin-daemon /var/run/ceph/ceph-mon.cephnode3.asok mon_status
[cephnode3][ERROR ] admin_socket: exception getting command descriptions: [Errno 2] No such file or directory
[cephnode3][WARNIN] cephnode3 is not defined in `mon initial members`
[cephnode3][WARNIN] monitor cephnode3 does not exist in monmap
[cephnode3][WARNIN] neither `public_addr` nor `public_network` keys are defined for monitors
[cephnode3][WARNIN] monitors may not be able to form quorum
[cephnode3][INFO  ] Running command: ceph --cluster=ceph --admin-daemon /var/run/ceph/ceph-mon.cephnode3.asok mon_status
[cephnode3][ERROR ] admin_socket: exception getting command descriptions: [Errno 2] No such file or directory
[cephnode3][WARNIN] monitor: mon.cephnode3, might not be running yet

mon进程启动失败,在对应节点查看信息:

[root@cephnode3 ~]# tail -f /var/log/messages
Mar  5 18:54:43 cephnode3 ceph-mon: 2020-03-05 18:54:43.996 7f6b34f88040 -1 no public_addr or public_network specified, and mon.cephnode3 not present in monmap or ceph.conf
Mar  5 18:54:44 cephnode3 systemd: ceph-mon@cephnode3.service: main process exited, code=exited, status=1/FAILURE
Mar  5 18:54:44 cephnode3 systemd: Unit ceph-mon@cephnode3.service entered failed state.
Mar  5 18:54:44 cephnode3 systemd: ceph-mon@cephnode3.service failed.
Mar  5 18:54:54 cephnode3 systemd: ceph-mon@cephnode3.service holdoff time over, scheduling restart.

提示需要设置public_addr or public_network
尝试过直接修改对应节点上的/etc/ceph/ceph.conf, 但是发现ceph-deploy命令还会对比目录里的ceph.conf文件,会报错。所以按下面的步骤来。

编辑执行ceph-deploy命令的目录里的ceph.conf文件.
添加public network = 172.100.102.0/24,我这里的网卡网段。
执行:

ceph-deploy --overwrite-conf mon add cephnode3

就可以了。
创建集群的时候可能都是在ceph-deploy new之后就配置好配置文件。

添加新的节点以后,Ceph将开始同步监视器并形成仲裁。可以通过执行以下操作检查仲裁状态。

ceph quorum_status --format json-pretty

添加manager

跟部署的流程一样

ceph-deploy mgr create cephnode3

添加rgw

跟部署的流程一样。

yum install -y ceph-radosgw
ceph-deploy --overwrite-conf rgw create cephnode2 cephnode3

这里加--overwrite-conf因为添加monitor的时候改了目录里的配置文件。

四、一些查看集群状态的命令合集

集群总状态
ceph status
ceph -s
monitor统计
ceph mon stat
monitor基本信息
ceph mon dump
monitor状态
ceph mon_status
mgr信息
ceph mgr dump
pg统计
ceph pg stat
pg详细信息
ceph pg ls