一、Ceph 基础介绍
1.1 什么是Ceph
Ceph是一款开源的分布式存储系统,具备高可用、高扩展、无单点故障的特性,可统一提供块存储(RBD)、对象存储(RGW)、文件存储(CephFS)三种存储服务,广泛应用于云计算、大数据等场景。
1.2 Ceph核心组件
| 组件 | 作用 |
|---|---|
| MON(Monitor) | 集群监视器,维护集群状态、管理认证、决策集群拓扑 |
| OSD(Object Storage Daemon) | 存储数据的核心进程,负责数据的存储、复制、恢复、均衡 |
| MDS(Metadata Server) | 为CephFS提供元数据服务(仅文件存储需要) |
| RGW(Rados Gateway) | 提供S3/Swift兼容的对象存储接口 |
| MGR(Manager) | 集群管理进程,提供监控、REST API、集群优化等功能 |
二、部署前置准备
2.1 环境要求(示例)
| 角色 | 服务器配置 | 数量 | 系统版本 | 核心配置 |
|---|---|---|---|---|
| 部署节点(Ansible) | 2C/4G/50G | 1 | CentOS 7/8/Ubuntu 20.04 | 可访问所有节点 |
| MON/MGR | 2C/4G/50G | 3(推荐奇数) | 同上 | 千兆网卡、静态IP |
| OSD | 4C/8G/≥100G(数据盘) | ≥3 | 同上 | 至少1块独立数据盘(无分区、未挂载) |
2.2 基础环境配置(所有节点)
1. 关闭防火墙和SELinux
1# CentOS 7 2 systemctl stop firewalld && systemctl disable firewalld 3 setenforce 0 && sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config 4 5 # Ubuntu 6 ufw disable
2. 配置主机名和hosts解析
1# 示例:设置主机名(各节点按需修改) 2 hostnamectl set-hostname ceph-mon-01 3 4 # 配置hosts(所有节点一致) 5 cat >> /etc/hosts << EOF 6 192.168.1.10 ceph-ansible # 部署节点 7 192.168.1.11 ceph-mon-01 # MON/MGR节点1 8 192.168.1.12 ceph-mon-02 # MON/MGR节点2 9 192.168.1.13 ceph-mon-03 # MON/MGR节点3 10 192.168.1.21 ceph-osd-01 # OSD节点1 11 192.168.1.22 ceph-osd-02 # OSD节点2 12 192.168.1.23 ceph-osd-03 # OSD节点3 13 EOF
3. 部署节点安装Ansible
1# CentOS 7 2 yum install epel-release -y 3 yum install ansible -y 4 5 # Ubuntu 6 apt update && apt install ansible -y 7 8 # 验证安装 9 ansible --version # 推荐2.9+版本
4. 配置部署节点免密登录所有节点
1# 部署节点生成密钥对 2 ssh-keygen -t rsa -N '' -f ~/.ssh/id_rsa 3 4 # 分发公钥到所有节点(替换为实际节点IP/主机名) 5 for node in ceph-mon-01 ceph-mon-02 ceph-mon-03 ceph-osd-01 ceph-osd-02 ceph-osd-03; do 6 ssh-copy-id -i ~/.ssh/id_rsa.pub root@$node 7 done
三、基于Ansible部署Ceph集群
3.1 拉取官方Ceph-Ansible项目
Ceph官方提供了ceph-ansible项目(GitHub地址:https://github.com/ceph/ceph-ansible),是部署Ceph最成熟的Ansible剧本,步骤如下:
1# 部署节点克隆仓库(指定稳定版本,以nautilus为例,可替换为octopus/pacific) 2 git clone -b stable-4.0 https://github.com/ceph/ceph-ansible.git 3 cd ceph-ansible 4 5 # 安装依赖(Ansible角色依赖) 6 ansible-galaxy install -r requirements.yml
3.2 配置部署清单(inventory)
创建自定义inventory文件(示例:ceph-cluster.ini),定义集群节点角色:
1[all] 2 ceph-mon-01 ansible_host=192.168.1.11 3 ceph-mon-02 ansible_host=192.168.1.12 4 ceph-mon-03 ansible_host=192.168.1.13 5 ceph-osd-01 ansible_host=192.168.1.21 6 ceph-osd-02 ansible_host=192.168.1.22 7 ceph-osd-03 ansible_host=192.168.1.23 8 9 [mons] 10 ceph-mon-01 11 ceph-mon-02 12 ceph-mon-03 13 14 [mgrs] 15 ceph-mon-01 16 ceph-mon-02 17 ceph-mon-03 18 19 [osds] 20 ceph-osd-01 21 ceph-osd-02 22 ceph-osd-03 23 24 # 可选:如果需要对象存储/文件存储,添加对应角色 25 #[rgws] 26 #ceph-mon-01 27 #[mdss] 28 #ceph-mon-01
3.3 配置集群参数(group_vars)
修改group_vars/all.yml(核心配置,按需调整):
1# Ceph版本(与ceph-ansible分支匹配) 2 ceph_stable_release:nautilus 3 4 # 集群名称 5 cluster:ceph 6 7 # 认证方式(新手推荐cephx) 8 cephx:true 9 10 # OSD配置(指定数据盘,示例:所有OSD节点使用/dev/sdb作为数据盘) 11 osd_scenario:collocated# 单盘部署(数据+日志同盘) 12 devices: 13 -/dev/sdb 14 osd_auto_discovery:false# 关闭自动发现,手动指定磁盘 15 16 # 网络配置(指定集群通信网段) 17 public_network:192.168.1.0/24 18 cluster_network:192.168.1.0/24# 若无独立集群网,与public_network一致 19 20 # 禁用dashboard(如需启用,可设为true) 21 dashboard_enabled:false
3.4 执行部署剧本
1# 先执行连通性测试 2 ansible -i ceph-cluster.ini all -m ping 3 4 # 执行部署(耗时根据节点数量/网络情况而定,约10-30分钟) 5 ansible-playbook -i ceph-cluster.ini site.yml
3.5 验证部署结果
在任意MON节点执行以下命令验证集群状态:
1# 查看集群健康状态(健康为HEALTH_OK) 2 ceph -s 3 4 # 查看OSD状态 5 ceph osd tree 6 7 # 查看MON状态 8 ceph mon stat
四、Ceph核心运维命令
| 命令 | 作用 |
|---|---|
| ceph -s | 查看集群整体状态(健康度、PG状态、节点数量) |
| ceph osd tree | 查看OSD节点拓扑、权重、状态 |
| ceph mon stat | 查看MON节点状态 |
| ceph osd pool create <池名> <PG数> | 创建存储池(PG数需根据OSD数量计算,推荐公式:总PG数=OSD数×100) |
| ceph osd pool ls | 列出所有存储池 |
| ceph df | 查看集群存储使用情况 |
| ceph health detail | 查看集群健康详情(定位故障) |
| ceph osd out <osd-id> | 将指定OSD下线(维护前操作) |
| ceph osd in <osd-id> | 将指定OSD上线 |
| ceph auth list | 查看集群认证密钥 |
| rados df | 查看对象存储层级的存储使用情况 |
五、常见问题排查
- 部署时报“SSH连接失败”:检查免密登录是否配置成功,目标节点sshd服务是否正常。
- OSD启动失败:检查指定的磁盘是否已分区/挂载(需清空),磁盘权限是否正确。
- 集群状态HEALTH_WARN:执行
ceph health detail查看具体原因,常见为PG未均衡、OSD数量不足。
总结
- 部署核心:基于官方
ceph-ansible项目,通过配置inventory定义节点角色、group_vars配置集群参数,执行site.yml即可完成自动化部署。 - 关键验证:部署完成后通过
ceph -s确认集群健康状态为HEALTH_OK,通过ceph osd tree确认所有OSD正常上线。 - 核心命令:
ceph -s(集群状态)、ceph osd tree(OSD状态)、ceph osd pool create(创建存储池)是日常运维最常用的命令。
注意:生产环境部署需根据实际服务器配置调整磁盘、网络、Ceph版本等参数,建议先在测试环境验证部署流程。
《一键部署 Ceph 集群!Ansible 运维实战教程》 是转载文章,点击查看原文。
