准备工作
每个节点都需要做的
配置hosts解析
cat >> /etc/hosts << EOF
192.168.200.101 ceph-mon1
192.168.200.102 ceph-mon2
192.168.200.103 ceph-mon3
192.168.200.104 ceph-osd4
EOF
安装docker 或者 podman
cephadm基于容器运行所有ceph组件,所有节点需要安装docker或podman,这里以安装docker为例。
安装时间服务器
sudo apt install -y chrony && sudo systemctl enable --now chronyd
允许root用户登录
$ sudo sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/g' /etc/ssh/sshd_config
# 重启ssh服务
$ systemctl restart ssh
# 设置root用户密码,执行命令后输入两次自定义密码
$ sudo passwd
安装cephadm (起始的主机或主节点)
$ sudo apt install -y cephadm
引导新群集(起始的主机或主节点)
$ mkdir -p /etc/ceph
$ cephadm bootstrap --mon-ip 192.168.0.151
mon-ip 就是第一个monitor daemon的IP地址
该命令执行以下操作:
- 在本地主机上为新集群创建monitor 和 manager daemon守护程序。
- 为Ceph集群生成一个新的SSH密钥,并将其添加到root用户的/root/.ssh/authorized_keys文件中。
- 将public key的副本写入/etc/ceph/ceph.pub。
- 将与新群集进行通信所需的最小配置文件保存到/etc/ceph/ceph.conf。
- 向/etc/ceph/ceph.client.admin.keyring写入client.admin可特权管理secret key的副本。
注意: 此步骤执行成功会生成密码,需提前保存,方便后面访问dashboard。建议先按照提示登录修改密码。
此时当前已经运行了以下组件
- ceph-mgr ceph管理程序
- ceph-monitor ceph监视器
- ceph-crash 崩溃数据收集模块
- prometheus prometheus监控组件
- grafana 监控数据展示dashboard
- alertmanager prometheus告警组件
- node_exporter prometheus节点数据收集组件
启用CEPH命令
# 进入命令状态
$ sudo cephadm shell
# 查看所有组件运行状态
$ ceph orch ps
# 查看某个组件运行状态
$ ceph orch ps --daemon-type mon
$ ceph orch ps --daemon-type mgr
$ ceph orch ps --daemon-type mds
# 集群状态
$ ceph status
$ ceph -v
ceph version 15.2.13 (c44bc49e7a57a87d84dfff2a077a2058aa2172e2) octopus (stable)
将主机添加到集群中
# 在新节点的root用户的authorized_keys文件中安装集群的公共SSH密钥:
$ cd /etc/ceph/
$ ssh-copy-id -f -i ceph.pub root@ceph-mon2
$ ssh-copy-id -f -i ceph.pub root@ceph-mon3
$ ssh-copy-id -f -i ceph.pub root@ceph-osd4
# 添加节点,一个典型的Ceph集群有3到5个monitor daemon。如果超过5个节点,官网建议使用5个monitor
# 禁用自动部署mon节点,如果不做这一步,cephadm会自动在已添加的host上去部署mon和mgr进程。
$ cephadm shell -- ceph orch apply mon --unmanaged
# 添加节点,有多少节点添加几次
$ cephadm shell -- ceph orch host add ceph-mon2
# 查看节点
ceph orch host ls
部署mon 服务
# 第一种方式: 给需要部署mon进程的节点打上标签
$ cephadm shell -- ceph orch host label add ceph-mon1 mon
$ cephadm shell -- ceph orch host label add ceph-mon2 mon
$ cephadm shell -- ceph orch host label add ceph-mon3 mon
# 根据标签部署monitor
$ cephadm shell -- ceph orch apply mon label:mon
# 第二种方式:将monitor部署在一组特定的主机上
$ ceph orch apply mon <host1,host2,host3,...>
注意: 需确保在列表中包括第一台(引导)主机
添加完成后ceph会自动扩展monitor和manager到其他节点
# 验证:可以看到 mgr RUNNING 数量为2
$ ceph orch ls
NAME PORTS RUNNING REFRESHED AGE PLACEMENT
alertmanager ?:9093,9094 1/1 4m ago 0h count:1
crash 4/4 4m ago 0h *
grafana ?:3000 1/1 4m ago 0h count:1
mgr 2/2 4m ago 0h count:2
mon 3/3 4m ago 0h label:mon
node-exporter ?:9100 4/4 4m ago 0h *
prometheus ?:9095 1/1 4m ago 0h count:1
部署osd
如果满足以下所有条件,则认为存储设备可用:
- 设备必须没有分区。
- 设备不得具有任何LVM状态。
- 设备不能被mounted。
- 该设备不得包含文件系统。
- 该设备不得包含Ceph BlueStore OSD。
- 设备必须大于5 GB。
如果有已经用过的磁盘或清理之前ceph使用的磁盘可使用一下脚本(官方文档引用)
#!/bin/bash
DISK="/dev/sdb"
# Zap the disk to a fresh, usable state (zap-all is important, b/c MBR has to be clean)
sgdisk --zap-all $DISK
# Wipe a large portion of the beginning of the disk to remove more LVM metadata that may be present
dd if=/dev/zero of="$DISK" bs=1M count=100 oflag=direct,dsync
# SSDs may be better cleaned with blkdiscard instead of dd
blkdiscard $DISK
# Inform the OS of partition table changes
partprobe $DISK
# 列出节点上的所有可用设备
$ ceph orch device ls
# 创建osd
# 方法1:从特定主机上的特定设备创建OSD
# 在无法自动正确识别但能够确定使用特定设备时也可用此方法。
$ ceph orch daemon add osd ceph-mon1:/dev/sdb
$ ceph orch daemon add osd ceph-mon1:/dev/sdc
#方法2:添加任何可用和未使用的存储设备
$ ceph orch apply osd --all-available-devices
# 查看当前存储设备情况
$ ceph orch device ls
HOST PATH TYPE DEVICE ID SIZE AVAILABLE REFRESHED REJECT REASONS
ceph01 /dev/sdb hdd QEMU_HARDDISK_drive-scsi1 536G 18s ago Insufficient space (<10 extents) on vgs, LVM detected, locked
ceph02 /dev/sdb hdd QEMU_HARDDISK_drive-scsi1 536G 18s ago Insufficient space (<10 extents) on vgs, LVM detected, locked
ceph03 /dev/sdb ssd QEMU_HARDDISK_drive-scsi1 536G 18s ago Insufficient space (<10 extents) on vgs, LVM detected, locked
ceph04 /dev/sdb ssd QEMU_HARDDISK_drive-scsi1 536G 18s ago Insufficient space (<10 extents) on vgs, LVM detected, locked
至此,ceph的基本环境已搭建完成,其他操作待续。
其他问题处理
ceph 删除操作
# 先开启允许删除
ceph config set mon mon_allow_pool_delete true
## 删除 cn-hangzho.rgw.buckets.non-ec(此名称需重复两次)存储 pool
ceph osd pool rm cn-hangzho.rgw.buckets.non-ec cn-hangzho.rgw.buckets.non-ec --yes-i-really-really-mean-it
ceph 告警处理
# 默认值 0.05,监视器允许监测到各个 node 节点的时间偏差在 0.05 秒内
ceph config set mon mon_clock_drift_allowed 3
# 如果监测到时间偏差连续 10 次超过上面设置的时长,则会在 ceph -s 输出告警信息
ceph config set mon mon_clock_drift_warn_backoff 10
# 在所有 mon 节点执行重启 ceph-mon 服务操作
ceph orch restart mon