创建一个集群

创建一个集群,集群节点设置如下:

首先,我们按照图一所示创建一个 Ceph 存储集群,它有一个 Monitor 和两个 OSD 守护进程。一旦集群达到 active + clean 状态,再扩展它:增加第三个 OSD 、增加元数据服务器和两个 Ceph Monitors。为获得最佳体验,先在管理节点上创建一个目录,用于保存 ceph-deploy 生成的配置文件和密钥对。

[ceph@ceph01 ~]$ mkdir ceph-cluster
[ceph@ceph01 ~]$ cd ceph-cluster
#ceph-deploy –cluster {cluster-name} new {host [host], ...}  这个是集群的创建语法。
#Ceph 集群的默认名字为 ceph,我们在一套硬件上创建一个集群,可以省略–cluster {cluster-name}
#用 new 命令、并指定几个主机作为初始监视器法定人数,多个主机之间用逗号相隔,这里我们暂时只指定一台,即ceph01为监视器主机
[ceph@ceph01 ceph-cluster]$ ceph-deploy new ceph01   #有错误提示,安装python-pip解决
Traceback (most recent call last):
  File "/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
[ceph@ceph01 ceph-cluster]$ sudo yum -y install python-pip
#安装完成后查看一下目录下生成的文件
[ceph@ceph01 ceph-cluster]$ ll
total 12
-rw-rw-r--. 1 ceph ceph  196 Apr  8 03:44 ceph.conf
-rw-rw-r--. 1 ceph ceph 3031 Apr  8 03:44 ceph-deploy-ceph.log
-rw-------. 1 ceph ceph   73 Apr  8 03:44 ceph.mon.keyring
修改配置
[ceph@ceph01 ceph-cluster]$ cat ceph.conf      #在ceph.conf下添加下面内容
osd pool default size = 2           #[global] 段下把 Ceph 配置文件里的默认副本数从 3 改成 2 ,这样只有两个 OSD 也可以达到 active + clean 状态
public network = 192.168.37.0/24    #有多个网卡,可以把 public network 写入 Ceph 配置文件的 [global] 段下
cluster network = 192.168.56.0/24   #有多个网卡,可以把 cluster network 写入 Ceph 配置文件的 [global] 段下
安装ceph
#利用ceph-deploy在各节点上安装ceph
[ceph@ceph01 ceph-cluster]$ ceph-deploy install ceph01 ceph02 ceph03 ceph04 ceph05 ceph06

#在安装过程中碰到麻烦,想从头再来,可以用下列命令清除配置:
ceph-deploy purgedata {ceph-node} [{ceph-node}]
ceph-deploy forgetkeys
#用下列命令可以连 Ceph 安装包一起清除:
ceph-deploy purge {ceph-node} [{ceph-node}]
安装过程中出现错误
#错误
[ceph01][ERROR ] RuntimeError: command returned non-zero exit status: 1
#解决
[ceph_deploy][ERROR ] RuntimeError: Failed to execute command: yum -y install epel-release
[ceph@ceph01 ~]$ sudo rm -rf /etc/yum.repos.d/epel*

#错误
[ceph01][ERROR ] RuntimeError: command returned non-zero exit status: 1
[ceph_deploy][ERROR ] RuntimeError: Failed to execute command: yum -y install ceph ceph-radosgw
#解决
[ceph@ceph01 ~]$ sudo yum install -y libunwind-devel.x86_64

#TTY报错
[node1][DEBUG ] connection detected need for sudo
sudo: sorry, you must have a tty to run sudo
[node1][DEBUG ] connected to host: node1 
[ceph_deploy][ERROR ] RuntimeError: remoteconnection got closed, ensure ``requiretty`` is disabled for node1
#解决
# visudo
#Defaults    requiretty
Defaults:ceph !requiretty
配置初始 monitor(s)、并收集所有密钥
[ceph@ceph01 ceph-cluster]$ ceph-deploy mon create-initial
#完成上述命令后,当前目录里应该会出现这些密钥环:
{cluster-name}.client.admin.keyring
{cluster-name}.bootstrap-osd.keyring
{cluster-name}.bootstrap-mds.keyring
{cluster-name}.bootstrap-rgw.keyring
创建一个管理主机

以便您可以使用ceph CLI,而无需指定监视地址和 ceph.client.admin.keyring每次执行命令

[ceph@ceph01 ceph-cluster]$ ceph-deploy admin ceph01 ceph02 ceph03 ceph04 ceph05 ceph06

#到管理节点各节点上给上面文件执行的权限
sudo chmod +r /etc/ceph/ceph.client.admin.keyring
部暑配置文件

#要将Ceph配置文件的更新副本发送到群集中的主机,请使用命令: config push

ceph-deploy config push ceph{01,02,03,04,05,06}

#如果集群中其它主机的配置文件已经与ceph-deploy主机上的不一致了,需要加--overwrite-conf
ceph-deploy --overwrite-conf config push ceph{01,02,03,04,05,06}
部暑OSD节点
#列出节点上的磁盘,我这里是节点ceph04
ceph-deploy disk list ceph04

#ZAP磁盘(删除其分区表)以准备与Ceph一起使用
ceph-deploy disk zap ceph04 /dev/sdb

#添加osd
ceph-deploy osd create --data /dev/sdb ceph04
#添加成功后查看集群健康状态
[ceph@ceph04 ~]$ ceph health
HEALTH_WARN OSD count 1 < osd_pool_default_size 2       #原来ceph.conf文件中把默认的osd改为2个
#节点ceph05上继续添加osd
ceph-deploy osd create --data /dev/sdb ceph05
#再查看一下集群健康状态
[ceph@ceph04 ~]$ ceph health
HEALTH_OK
#节点ceph06再添加第三个osd
ceph-deploy osd create --data /dev/sdb ceph06

#注:一个节点上是可以添加多个osd的,一个osd对应一块磁盘,这里是为了实验分别在三台服务器上添加三个osd
添加osd过程中遇到的错误
#错误:提示RuntimeError: command returned non-zero exit status: 1
这个错误原因均为再重新安装Ceph的过程中并未将原有的osd进行重新设置,其中还保存有原有的conf信息,并且在集群conf中依旧保存的是原有信息

#解决:到各节点中删除ceph.keyring文件,然后添加osd时添加--overwrite-conf,重写conf
[ceph@ceph04 ~]$ sudo rm -rf /var/lib/ceph/bootstrap-osd/ceph.keyrin

[ceph@ceph01 ceph-cluster]$ ceph-deploy --overwrite-conf osd create --data /dev/sdb ceph05

扩展集群

#按照图二模型扩展集群

添加mgr节点:

注:Ceph Manager守护程序以活动/备用模式运行。部署其他管理器守护程序可确保如果一个守护程序或主机发生故障,另一守护程序或主机可以接管而不会中断服务。

[ceph@ceph01 ceph-cluster]$ ceph-deploy mgr create ceph02 ceph03
添加mon节点
[ceph@ceph01 ceph-cluster]$ ceph-deploy mon create ceph02 ceph03

#一旦添加了新的Ceph监视器,Ceph将开始同步监视器并形成仲裁。您可以通过执行以下操作检查仲裁状态:
[ceph@ceph01 ceph-cluster]$ ceph quorum_status --format json-pretty
添加mds节点
[ceph@ceph01 ceph-cluster]$ ceph-deploy mds create ceph01 ceph02
简单练习创建一个对象
#创建一个对象。使用命令行上的命令指定对象名称,包含一些对象数据的测试文件的路径以及池名称 
[ceph@ceph03 ~]$ ceph osd pool create mytest 128
pool 'mytest' created
[ceph@ceph03 ~]$ rados put test-object-1 testfile.txt --pool=mytest
#要验证Ceph存储集群是否存储了该对象,请执行以下操作:
[ceph@ceph03 ~]$ rados -p mytest ls
test-object-1
#确认对象的位置,下面输出的内容代表pool mytest中的test-object-1这个对象位于1.62这个pg中,并且位于osd2和osd0,osd1上(三个副本)。
[ceph@ceph03 ~]$ ceph osd map mytest test-object-1
osdmap e16 pool 'mytest' (1) object 'test-object-1' -> pg 1.74dc35e2 (1.62) -> up ([2,0,1], p2) acting ([2,0,1], p2)
#查看这个pool池的默认副本数
[ceph@ceph03 ~]$ ceph osd pool get mytest size
size: 3
#查看这个pool池的pg数
[ceph@ceph03 ~]$ ceph osd pool get mytest pg_num
pg_num: 128
#删除对象
[ceph@ceph03 ~]$ rados -p mytest rm test-object-1
集群检查的错误提示及解决
[ceph@ceph04 ~]$ ceph health
HEALTH_WARN application not enabled on 1 pool(s) 1 daemons have recently crashed
#解决application not enabled on 1 pool(s),未开启类型授权,pool 只能对一种类型进行 enable,另外两种类型是rbd(块存储),rgw(对象存储)
[ceph@ceph02 ~]$ ceph health detail
HEALTH_WARN application not enabled on 1 pool(s); 1 daemons have recently crashed
POOL_APP_NOT_ENABLED application not enabled on 1 pool(s)
    application not enabled on pool 'mytest'
    use 'ceph osd pool application enable <pool-name> <app-name>', where <app-name> is 'cephfs', 'rbd', 'rgw', or freeform for custom applications.
RECENT_CRASH 1 daemons have recently crashed
    mon.ceph01 crashed on host ceph01 at 2020-04-17 10:01:10.834305Z
[ceph@ceph02 ~]$ ceph osd pool application enable mytest cephfs
enabled application 'cephfs' on pool 'mytest'
#解决1 daemons have recently crashed
[ceph@ceph04 ~]$ ceph crash ls-new       #查看新的崩溃
ID                                                               ENTITY     NEW
2020-04-17_10:01:10.834305Z_3bc9867d-785c-43e1-bd01-7ef81f7ff43f mon.ceph01  *
[ceph@ceph04 ~]$ ceph crash archive 2020-04-17_10:01:10.834305Z_3bc9867d-785c-43e1-bd01-7ef81f7ff43f
#可以通过“存档”崩溃(可能是在管理员检查之后)来消除此警告,从而不会生成此警告!通过ceph crash ls仍然可以看到已存档的崩溃,但是ceph crash ls-new则看不到。
文档更新时间: 2020-05-07 15:58   作者:子木