Ceph手动安装步骤及安装过程中遇到的问题

本文主要介绍Ceph的手动安装步骤,以及在安装过程遇到的问题和解决办法。
文中使用的机器个数是三台机器,每台机器四块盘,一共12个OSD,3个ceph-mon。
注:本文操作步骤的实践环境操作系统为debian

Ceph手动安装步骤

手动安装部署参考文档:https://docs.ceph.com/en/latest/install/manual-deployment/

第一个mon节点

准备要素

1
2
3
4
5
6
unique identifier:fsid作为集群的唯一标识
cluster name:集群名字
monitor name:mon节点hostname
mon map:初始的mon-map需要fsid,集群名字,以及最少一个节点
mon keyring:mon节点keyring,为之后的bootstrap做准备
admin keyring:作为ceph-admin的用户的keyring,管理员权限,安装部署以及ceph cli都需要使用到

部署步骤

  1. 配置文件准备
    (1)检查目录/etc/ceph
    (2)在该目录下创建配置文件ceph.conf
    (3)配置文件示例,参照如下,osd部分暂时不需要用到:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    [global]
    fsid = {cluster-id} #generate with uuidgen
    mon initial members = {hostname}[, {hostname}]
    mon host = {ip-address}[, {ip-address}]
    public network = {network}[, {network}]
    cluster network = {network}[, {network}]
    auth cluster required = cephx
    auth service required = cephx
    auth client required = cephx
  2. 生成mon的keyring

    1
    ceph-authtool --create-keyring /tmp/ceph.mon.keyring --gen-key -n mon. --cap mon 'allow *'
  3. 生成admin的keyring,client.admin
    1
    sudo ceph-authtool --create-keyring /etc/ceph/ceph.client.admin.keyring --gen-key -n client.admin --cap mon 'allow *' --cap osd 'allow *' --cap mds 'allow *' --cap mgr 'allow *'
  4. 生成bootstrap-osd的keyring,client.bootstrap-osd
    1
    sudo ceph-authtool --create-keyring /var/lib/ceph/bootstrap-osd/ceph.keyring --gen-key -n client.bootstrap-osd --cap mon 'profile bootstrap-osd' --cap mgr 'allow r'
  5. 将刚刚生成的keyring添加到ceph.mon.keyring
    1
    2
    sudo ceph-authtool /tmp/ceph.mon.keyring --import-keyring /etc/ceph/ceph.client.admin.keyring
    sudo ceph-authtool /tmp/ceph.mon.keyring --import-keyring /var/lib/ceph/bootstrap-osd/ceph.keyring
  6. 更改用户
    1
    sudo chown ceph:ceph /tmp/ceph.mon.keyring
  7. 使用hostname,host ip,以及fsid,生成mon_map
    1
    2
    monmaptool --create --add {hostname} {ip-address} --fsid {uuid} /tmp/monmap
    monmaptool --create --add cld-mon1-10088 10.248.32.15 --fsid 0bba3be9-0a1c-41db-a619-26ffea20161e /tmp/monmap
  8. 生成mon默认存放目录
    1
    sudo -u ceph mkdir /var/lib/ceph/mon/ceph-mon-node1
  9. 使用更改生成的mon_map以及keyring来为mon daemon生成文件
    1
    2
    sudo -u ceph ceph-mon [--cluster {cluster-name}] --mkfs -i {hostname} --monmap /tmp/monmap --keyring /tmp/ceph.mon.keyring
    sudo -u ceph ceph-mon --mkfs -i cld-mon1-10088 --monmap /tmp/monmap --keyring /tmp/ceph.mon.keyring
  10. 确认配置文件无误,并存放在/etc/ceph/目录下
  11. 启动monitor
    1
    sudo systemctl start ceph-mon@mon-node1
  12. 检查确认
    1
    sudo ceph -s

添加OSD, 使用blustore

Create the OSD.

1
2
ssh {node-name}
sudo ceph-volume lvm create --data {data-path}

For example:
1
2
ssh node1
sudo ceph-volume lvm create --data /dev/vdc2

注意:在使用NVMe盘时,其盘符为/dev/nvme0n1之类的,别忘了前面的/dev
添加OSD用上面的命令操作就行,也可以分下面两步来做:
Prepare the OSD.
1
2
ssh {node-name}
sudo ceph-volume lvm prepare --data {data-path} {data-path}

For example:
1
2
ssh node1
sudo ceph-volume lvm prepare --data /dev/vdc2

Once prepared, the ID and FSID of the prepared OSD are required for activation. These can be obtained by listing OSDs in the current server:
sudo ceph-volume lvm list
Activate the OSD:
1
sudo ceph-volume lvm activate {ID} {FSID}

For example:
1
sudo ceph-volume lvm activate 0 a7f64266-0894-4f1e-a635-d0aeaca0e993

添加OSD, 使用filestore

注意:添加OSD时bluestore与filestore二选一就可以了
创建osd

1
sudo ceph-volume lvm create --filestore --data {data-path} --journal {journal-path}

prepare osd
1
2
3
sudo ceph-volume lvm prepare --filestore --data {data-path} --journal {journal-path}
#prepare完成后,可以查看到他的id以及osd的fsid
sudo ceph-volume lvm list

activate osd
1
2
sudo ceph-volume lvm activate --filestore {ID} {FSID}
#sudo ceph-volume lvm activate --filestore 0 a7f64266-0894-4f1e-a635-d0aeaca0e993

添加mgr

  1. 添加密钥
    1
    ceph auth get-or-create mgr.$name mon 'allow profile mgr' osd 'allow *' mds 'allow *'
  2. 创建mgr目录并把密钥写入keyring文件中

    1
    2
    3
    mkdir /var/lib/ceph/mgr/ceph-$name
    #写入刚刚创建的keyring
    vim /var/lib/ceph/mgr/ceph-$name/keyring
  3. 启动mgr

    1
    ceph-mgr -i $name

安装dashboard

  1. 安装ceph-mgr-dashboard包,14版本要单独装这个包

    1
    apt-get install ceph-mgr-dashboard  
  2. mgr enable dashboad

    1
    ceph mgr module enable dashboard
  3. 开启self证书

    1
    ceph dashboard create-self-signed-cert
  4. 设置用户名登录密码

    1
    ceph dashboard set-login-credentials admin admin
  5. 生成ssl证书

    1
    2
    3
    openssl req -new -nodes -x509   -subj "/O=IT/CN=ceph-mgr-dashboard" -days 3650   -keyout dashboard.key -out dashboard.crt -extensions v3_ca
    ceph dashboard set-ssl-certificate -i dashboard.crt
    ceph dashboard set-ssl-certificate-key -i dashboard.key
  6. 重启dashboard

    1
    2
    ceph mgr module disable dashboard
    ceph mgr module enable dashboard

Ceph安装过程中遇到的问题

本节主要介绍手动搭建Ceph集群过程中遇到的问题及其解决办法。
注:本文操作步骤的实践环境操作系统为debian

1. 三台机器安装成功后的Ceph版本不一致

原因:source源的问题
解决办法:更新source源之后,apt-get update后,再重新安装

2. 有两台机器Ceph无法安装成功,需要其他依赖组件,具体错误见下图


描述:三台机器source源设置一样
原因:另外两台机器上ceph相关的组件没有卸载干净,通过命令dpkg -l | grep rados可以看到
解决办法:将没有卸载干净的组件都卸载掉(apt-get autoremove –purge librados2),然后apt-get install ceph即可。

3. ceph-mon: error opening mon data directory at ‘/var/lib/ceph/mon/ceph-cld-mon1-12002’: (13) Permission denied

出错原因:没有权限,在上一步操作创建目录时,使用“sudo mkdir /var/lib/ceph/mon/{cluster-name}-{hostname}”
改为使用“sudo -u ceph mkdir /var/lib/ceph/mon/{cluster-name}-{hostname}”即可。注意:hostname根据实际需要进行修改。

4. 三个机器的ceph-mon进程启动以后,使用ceph -s命令无响应(卡住)

查看/var/log/ceph/ceph-mon目录下的日志,可以看到“BADAUTHORIZER”之类的错误,查看各节点上的keyring信息,发现果然keyring不一致。
错误原因:在同一个集群使用了不同的keyring导致认证不通过
解决办法:同一个集群使用统一的keyring信息,也就是在安装的时候,不用每个节点都去用

1
sudo ceph-authtool --create-keyring /etc/ceph/ceph.client.admin.keyring --gen-key -n client.admin --cap mon 'allow *' --cap osd 'allow *' --cap mds 'allow *' --cap mgr 'allow *'

去生成client.admin.keyring,只用在一个节点上生成一次,其他节点也使用该keyring就可以了。
统一keyring后,问题得到解决,解决后的图:

关于认证部分,可以看文档https://docs.ceph.com/en/pacific/architecture/的“HIGH AVAILABILITY AUTHENTICATION”高可用认证部分。

5. ceph -s出现3 monitors have not enabled msgr2

解决办法:执行ceph mon enable-msgr2
msgr2是什么?msgr2是指 msgr2协议,The messenger v2 protocol, or msgr2, is the second major revision on Ceph’s on-wire protocol.老的 Ceph 底层协议是用 SimpleMessenger 实现的,这个协议是它的修订版,解决了性能和安全问题。
参考文档:https://docs.ceph.com/en/latest/rados/configuration/msgr2/
注意把msgr2和mgr区分开,mgr是Ceph的一个新的模块组件。

6. Error ENOENT: all mgr daemons do not support module ‘dashboard’, pass –force to force enablement

现象:节点上已经安装了ceph-mgr-dashboard,使用“ceph mgr module enable dashboard”报上面的错误
解决办法:所有mgr节点都需要安装, 参考文章:CEPH 开启MGR监控模块

如果所有节点都已经装了ceph-mgr-dashboard,那就再把–force加上

7. 使用ceph -s命令报错:Error initializing cluster client: ObjectNotFound(‘error calling conf_read_file’,)

解决办法:把其他节点上的ceph的配置拷贝到该节点(目录:/etc/ceph/ceph.conf)

8. 使用ceph -s命令报错:[errno 2] error connecting to the cluster

解决办法:在其他可以执行该命令的节点上找到ceph.client.admin.keyring
find / -name ceph.client.admin.keyring
把该文件拷贝一份到报错节点即可。

9. Error ENOENT: all mgr daemons do not support module ‘dashboard’, pass –force to force enablement

解决办法:没有安装ceph-mgr-dashboard,在所有的mgr的节点上安装
如果安装上了还不行,就加“–force”。

参考资料

Ceph手动安装
https://docs.ceph.com/en/latest/rados/configuration/msgr2/
msgr2协议
CEPH 开启MGR监控模块
ceph-mgr 管理员指南

如果你觉得本文对你有帮助,欢迎打赏