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还有可以有一个专用的管理节点,在此节点上面部署专用的管理工具来实现近乎集群的一些管理工作,如集群部署,集群组件管理等。
一些图片
网上的图
客户端获取数据的流程:
其他
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/
版本名称 | 版本号 | 发布时间 |
---|---|---|
Argonaut | 0.48版本(LTS) | 2012年6月3日 |
Bobtail | 0.56版本(LTS) | 2013年5月7日 |
Cuttlefish | 0.61版本 | 2013年1月1日 |
Dumpling | 0.67版本(LTS) | 2013年8月14日 |
Emperor | 0.72版本 | 2013年11月9 |
Firefly | 0.80版本(LTS) | 2014年5月 |
Giant | Giant | October 2014 - April 2015 |
Hammer | Hammer | April 2015 - November 2016 |
Infernalis | Infernalis | November 2015 - June 2016 |
Jewel | 10.2.9 | 2016年4月 |
Kraken | 11.2.1 | 2017年10月 |
Luminous | 12.2.12 | 2017年10月 |
mimic | 13.2.7 | 2018年5月 |
nautilus | 14.2.5 | 2019年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)
- ceph-osd的新后端存储BlueStore已经稳定,是新创建的OSD的默认设置。
- 集群的总体可扩展性有所提高。我们已经成功测试了多达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 | 配置 |
---|---|---|
cephnode1 | 172.100.102.91 | 2c4G,2块16G裸盘 |
cephnode2 | 172.100.102.92 | 2c4G,2块16G裸盘 |
cephnode3 | 172.100.102.93 | 2c4G,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 daemon
与monitor daemon
一起为外部监控和管理系统提供额外的监控和接口。
从12.x版本开始,ceph的正常运行需要
mgr
,在11.x的版本还是可选组件。
如果没有运行mgr
,会有一些运行状态警告,并且ceph status
命令输出的某些信息会缺失 或者是旧的信息。
看来一些查看状态的命令也是从这个组件获取的信息。就跟k8s的metrics server
一样。
默认情况下,mgr
不需要其他配置就可以正常运行.
将mgr
与monitor
放到同一节点不是强制的,但几乎总是合理的。
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