当开发者第一次接触Ceph时,往往会被其复杂的分布式架构和繁琐的配置步骤吓退。但Cephadm的出现彻底改变了这一局面——这个官方推荐的部署工具让单节点Ceph集群的搭建变得前所未有的简单。本文将带你用最新Cephadm 17.2.0在Ubuntu 22.04上快速构建一个功能完整的单节点Ceph集群,不仅适用于开发测试,还能满足小型生产环境的需求。
在开始Ceph之旅前,我们需要确保基础环境达到最佳状态。不同于简单的测试环境,生产级部署需要考虑更多细节。
首先更新系统并安装必要工具:
bash复制sudo apt update && sudo apt upgrade -y
sudo apt install -y curl wget git lvm2 chrony
关键配置项:
bash复制sudo timedatectl set-ntp true
sudo systemctl restart chronyd
bash复制echo "vm.swappiness = 10" | sudo tee -a /etc/sysctl.conf
echo "vm.vfs_cache_pressure = 50" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
单节点部署中,磁盘配置直接影响集群性能。建议至少准备:
使用lsblk确认磁盘情况:
bash复制lsblk -o NAME,SIZE,TYPE,MOUNTPOINT,FSTYPE
Cephadm默认使用Docker,但也可选择Podman:
bash复制sudo apt remove docker docker-engine docker.io containerd runc
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update && sudo apt install -y docker-ce docker-ce-cli containerd.io
配置Docker镜像加速:
json复制{
"registry-mirrors": ["https://registry.docker-cn.com"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
}
}
Ubuntu 22.04已收录Cephadm 17.2.0:
bash复制sudo apt install -y cephadm
验证安装:
bash复制cephadm --version
执行bootstrap时,这些参数至关重要:
bash复制sudo cephadm bootstrap \
--mon-ip 192.168.1.100 \
--cluster-network 192.168.1.0/24 \
--single-host-defaults \
--allow-fqdn-hostname \
--skip-monitoring-stack
参数解析:
| 参数 | 作用 | 推荐值 |
|---|---|---|
| --mon-ip | 监控节点IP | 主机实际IP |
| --cluster-network | 集群通信网络 | 根据实际网络配置 |
| --single-host-defaults | 单节点优化配置 | 必选 |
| --allow-fqdn-hostname | 允许FQDN主机名 | 解决主机名问题 |
| --skip-monitoring-stack | 跳过监控组件 | 测试环境可选 |
问题1:No module named 'cephadm'
bash复制sudo python3 -m pip install cephadm
问题2:Docker权限不足
bash复制sudo usermod -aG docker $USER
newgrp docker
问题3:时间不同步
bash复制sudo chronyc makestep
sudo chronyc tracking
生产环境建议保留必要监控:
bash复制ceph orch apply prometheus 1
ceph orch apply grafana 1
ceph orch apply alertmanager 1
查看服务状态:
bash复制ceph orch ls
自动发现并部署所有可用磁盘:
bash复制ceph orch apply osd --all-available-devices
手动指定特定磁盘(更安全):
bash复制ceph orch daemon add osd host01:/dev/sdb
ceph orch daemon add osd host01:/dev/sdc
验证OSD状态:
bash复制ceph osd tree
创建生产级存储池:
bash复制ceph osd pool create mypool 128 128
ceph osd pool set mypool size 2
ceph osd pool set mypool min_size 1
重要参数对比:
| 参数 | 单节点建议值 | 生产环境建议值 |
|---|---|---|
| pg_num | 64-128 | 根据数据量计算 |
| size | 2 | 3 |
| min_size | 1 | 2 |
调整CRUSH map实现单节点优化:
bash复制ceph osd crush tunables optimal
ceph osd crush reweight-all
监控集群性能:
bash复制ceph osd perf
ceph df detail
安全添加/移除OSD:
bash复制# 安全移除OSD
ceph osd out osd.0
ceph osd crush remove osd.0
ceph auth del osd.0
ceph osd rm osd.0
# 重新部署OSD
ceph orch daemon add osd host01:/dev/sdd
集群健康检查:
bash复制ceph health detail
ceph -s
ceph osd stat
完整集群重置(慎用):
bash复制fsid=$(ceph fsid)
cephadm rm-cluster --force --zap-osds --fsid $fsid
保留配置的重置:
bash复制ceph orch pause
ceph osd down `ceph osd ls`
ceph osd out `ceph osd ls`
ceph orch rm osd --all
创建高性能RBD镜像:
bash复制rbd create mypool/myimage --size 10G --image-feature layering,exclusive-lock
rbd map mypool/myimage
mkfs.xfs /dev/rbd0
mount /dev/rbd0 /mnt
创建CephFS:
bash复制ceph fs volume create myfs
ceph fs ls
挂载使用:
bash复制sudo mount -t ceph :/ /mnt -o name=admin,secretfile=/etc/ceph/admin.secret
部署RGW服务:
bash复制ceph orch apply rgw myrealm myzone --placement="1"
创建S3用户:
bash复制radosgw-admin user create --uid="testuser" --display-name="Test User"
在实际项目中,单节点Ceph集群虽然不能发挥Ceph的全部分布式优势,但对于开发测试和小型生产环境已经足够。记得定期检查ceph -s输出,当看到"HEALTH_OK"时,你就拥有了一个稳定可靠的存储系统。