Docker 部署 Ceph Nautilus 集群:3节点实战与 Dashboard 7800端口配置
Docker 部署 Ceph Nautilus 集群:3节点实战与 Dashboard 7800端口配置
在当今云原生和微服务架构盛行的时代,分布式存储系统已成为构建可扩展、高可用应用的基础设施关键组件。Ceph作为一款开源的统一分布式存储系统,因其卓越的性能、可靠性和灵活性,在业界获得了广泛应用。本文将详细介绍如何使用Docker容器化技术快速部署一个最小可用的Ceph Nautilus版本集群,特别关注3节点架构的实战配置以及Dashboard管理界面的定制化设置。
1. Ceph 集群架构与 Docker 部署优势
Ceph是一个高度可扩展的分布式存储解决方案,它在一个统一的系统中提供了对象存储、块存储和文件系统三种存储接口。其核心组件包括:
- MON (Monitor): 维护集群状态映射,确保元数据一致性
- MGR (Manager): 收集集群指标,提供Dashboard等管理功能
- OSD (Object Storage Daemon): 实际存储数据,处理数据复制和恢复
- MDS (Metadata Server): 为CephFS提供元数据服务(对象和块存储不需要)
- RGW (Rados Gateway): 提供RESTful对象存储接口
与传统部署方式相比,使用Docker部署Ceph集群具有以下显著优势:
- 环境一致性:容器化确保所有节点运行相同的软件版本和配置
- 快速部署:通过预构建的镜像和编排工具简化安装过程
- 资源隔离:各服务组件运行在独立容器中,避免相互干扰
- 易于扩展:通过修改编排文件即可快速调整集群规模
- 版本管理:方便测试不同Ceph版本,支持快速回滚
2. 环境准备与节点规划
在开始部署前,我们需要准备三台满足以下要求的Linux服务器:
硬件要求:
- 每节点至少4核CPU
- 8GB以上内存
- 100GB以上可用磁盘空间(用于OSD)
- 10Gbps网络连接(生产环境推荐)
软件要求:
- Docker 20.10+
- Docker Compose 2.0+
- 操作系统:CentOS 7+/Ubuntu 18.04+
节点规划示例:
| 主机名 | IP地址 | 运行服务 | 数据目录 |
|---|---|---|---|
| ceph-01 | 10.0.0.101 | mon, mgr, osd | /var/lib/ceph |
| ceph-02 | 10.0.0.102 | mon, osd | /var/lib/ceph |
| ceph-03 | 10.0.0.103 | mon, osd | /var/lib/ceph |
注意:生产环境建议mon和mgr部署在不同节点以实现高可用。本文为简化演示,在ceph-01上同时部署了mgr。
3. Docker Compose 编排文件详解
我们将使用Docker Compose来定义和编排整个Ceph集群的服务。以下是完整的docker-compose.yml文件:
关键配置说明:
- 网络模式:使用
host网络模式简化网络配置,确保容器能直接使用主机网络栈 - 数据持久化:将
/etc/ceph、/var/lib/ceph和/var/log/ceph目录挂载到宿主机 - OSD设备:通过
OSD_DEVICE环境变量指定用于存储的物理设备 - MON配置:
MON_IP列出所有monitor节点的IP,CEPH_PUBLIC_NETWORK定义集群通信网络
4. 集群部署与初始化
4.1 启动基础服务
在ceph-01节点上执行以下命令启动初始monitor和manager:
等待约30秒后,检查monitor状态:
预期输出应显示一个monitor已启动,但集群处于HEALTH_WARN状态(因为OSD尚未配置)。
4.2 配置OSD存储
在所有节点上准备OSD设备(假设使用/dev/sdb):
然后启动各节点的OSD服务:
4.3 验证集群状态
在任意monitor节点上运行:
健康状态应显示为HEALTH_OK,且能看到3个OSD已启动:
5. Ceph Dashboard 配置与定制
Ceph Dashboard是基于Web的管理界面,提供集群监控和管理功能。我们将配置Dashboard使用7800端口,并设置自签名证书和访问凭证。
5.1 启用Dashboard模块
在mgr容器中执行:
5.2 配置SSL证书
生成自签名证书:
生产环境建议使用正式CA签发的证书,可通过以下命令配置:
BASHdocker exec ceph-01-mgr ceph dashboard set-ssl-certificate /path/to/cert.pemdocker exec ceph-01-mgr ceph dashboard set-ssl-certificate-key /path/to/key.pem
5.3 设置访问凭证
创建管理员账户:
5.4 定制端口和访问设置
将Dashboard服务端口改为7800:
重启mgr服务使配置生效:
5.5 访问Dashboard
在浏览器中访问https://<ceph-01-ip>:7800,使用设置的用户名密码登录。你将看到类似如下的Dashboard界面:

6. 集群管理与维护
6.1 常用管理命令
检查集群状态:
创建存储池:
管理用户和权限:
6.2 监控与告警配置
Ceph Dashboard内置了Prometheus监控集成。要启用:
然后可以通过http://<mgr-ip>:9283/metrics获取监控指标,与现有Prometheus系统集成。
6.3 故障处理指南
OSD故障恢复:
Monitor恢复:
7. 性能优化与生产建议
7.1 硬件配置优化
生产环境推荐配置:
| 组件 | CPU | 内存 | 存储 | 网络 |
|---|---|---|---|---|
| MON | 4核 | 8GB | SSD 50GB | 10Gbps |
| MGR | 4核 | 8GB | SSD 50GB | 10Gbps |
| OSD | 8核+ | 16GB+ | NVMe/SSD 或 HDD阵列 | 25Gbps+ |
7.2 Ceph参数调优
osd配置优化(在mon节点上执行):
7.3 网络优化建议
-
分离公共和集群网络:
BASH# 在docker-compose中为每个服务添加environment:- CEPH_PUBLIC_NETWORK=10.0.0.0/24- CEPH_CLUSTER_NETWORK=10.1.0.0/24 -
启用网络加速:
BASH# 使用高性能网络协议ceph config set global ms_type=async+posix -
调整MTU值(适用于10Gbps+网络):
BASHifconfig eth0 mtu 9000
8. 扩展与集成
8.1 添加RGW对象存储网关
要在集群中添加对象存储功能,可以在docker-compose中添加RGW服务:
启动后可通过http://<ceph-01-ip>:7480访问S3兼容API。
8.2 与Kubernetes集成
通过RBD或CephFS为Kubernetes提供持久化存储:
-
创建StorageClass:
YAMLapiVersion: storage.k8s.io/v1kind: StorageClassmetadata:name: ceph-rbdprovisioner: rbd.csi.ceph.comparameters:clusterID: cephpool: kubernetesimageFormat: "2"imageFeatures: layeringcsi.storage.k8s.io/provisioner-secret-name: csi-rbd-secretcsi.storage.k8s.io/provisioner-secret-namespace: defaultreclaimPolicy: Delete -
创建PVC示例:
YAMLapiVersion: v1kind: PersistentVolumeClaimmetadata:name: ceph-rbd-pvcspec:accessModes:- ReadWriteOnceresources:requests:storage: 10GistorageClassName: ceph-rbd
8.3 备份与灾难恢复
定期备份集群关键数据:
-
备份monitor map:
BASHceph mon getmap -o /backup/ceph-mon-map -
备份OSD CRUSH map:
BASHceph osd getcrushmap -o /backup/ceph-crush-map -
使用rbd-mirror实现异地备份:
BASH# 在secondary集群上创建mirror peerrbd mirror pool enable <pool-name> imagerbd mirror pool peer add <pool-name> client.mirror@<primary-cluster>
9. 安全加固措施
9.1 访问控制
-
限制Dashboard访问:
BASHceph dashboard set-url-prefix /ceph-dashboardceph dashboard set-ssl-certificate /path/to/cert.pem -
配置防火墙规则:
BASH# 只允许特定IP访问Dashboardiptables -A INPUT -p tcp --dport 7800 -s 10.0.0.100 -j ACCEPTiptables -A INPUT -p tcp --dport 7800 -j DROP
9.2 加密配置
-
启用RBD加密:
BASHrbd encryption format mypool/myimage luks1 /path/to/keyfile -
配置Ceph集群通信加密:
BASHceph config set mon auth_cluster_required cephxceph config set mon auth_service_required cephxceph config set mon auth_client_required cephx
9.3 审计日志
启用Ceph审计日志记录所有管理操作: