一、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

# CentOS 7
systemctl stop firewalld && systemctl disable firewalld
setenforce 0 && sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config

# Ubuntu
ufw disable

2. 配置主机名和hosts解析

# 示例:设置主机名(各节点按需修改)
hostnamectl set-hostname ceph-mon-01

# 配置hosts(所有节点一致)
cat >> /etc/hosts << EOF
192.168.1.10 ceph-ansible  # 部署节点
192.168.1.11 ceph-mon-01   # MON/MGR节点1
192.168.1.12 ceph-mon-02   # MON/MGR节点2
192.168.1.13 ceph-mon-03   # MON/MGR节点3
192.168.1.21 ceph-osd-01   # OSD节点1
192.168.1.22 ceph-osd-02   # OSD节点2
192.168.1.23 ceph-osd-03   # OSD节点3
EOF

3. 部署节点安装Ansible

# CentOS 7
yum install epel-release -y
yum install ansible -y

# Ubuntu
apt update && apt install ansible -y

# 验证安装
ansible --version  # 推荐2.9+版本

4. 配置部署节点免密登录所有节点

# 部署节点生成密钥对
ssh-keygen -t rsa -N '' -f ~/.ssh/id_rsa

# 分发公钥到所有节点(替换为实际节点IP/主机名)
for node in ceph-mon-01 ceph-mon-02 ceph-mon-03 ceph-osd-01 ceph-osd-02 ceph-osd-03; do
    ssh-copy-id -i ~/.ssh/id_rsa.pub root@$node
done

三、基于Ansible部署Ceph集群

3.1 拉取官方Ceph-Ansible项目

Ceph官方提供了ceph-ansible项目(GitHub地址:https://github.com/ceph/ceph-ansible),是部署Ceph最成熟的Ansible剧本,步骤如下:

# 部署节点克隆仓库(指定稳定版本,以nautilus为例,可替换为octopus/pacific)
git clone -b stable-4.0 https://github.com/ceph/ceph-ansible.git
cd ceph-ansible

# 安装依赖(Ansible角色依赖)
ansible-galaxy install -r requirements.yml

3.2 配置部署清单(inventory)

创建自定义inventory文件(示例:ceph-cluster.ini),定义集群节点角色:

[all]
ceph-mon-01 ansible_host=192.168.1.11
ceph-mon-02 ansible_host=192.168.1.12
ceph-mon-03 ansible_host=192.168.1.13
ceph-osd-01 ansible_host=192.168.1.21
ceph-osd-02 ansible_host=192.168.1.22
ceph-osd-03 ansible_host=192.168.1.23

[mons]
ceph-mon-01
ceph-mon-02
ceph-mon-03

[mgrs]
ceph-mon-01
ceph-mon-02
ceph-mon-03

[osds]
ceph-osd-01
ceph-osd-02
ceph-osd-03

# 可选:如果需要对象存储/文件存储,添加对应角色
#[rgws]
#ceph-mon-01
#[mdss]
#ceph-mon-01

3.3 配置集群参数(group_vars)

修改group_vars/all.yml(核心配置,按需调整):

# Ceph版本(与ceph-ansible分支匹配)
ceph_stable_release:nautilus

# 集群名称
cluster:ceph

# 认证方式(新手推荐cephx)
cephx:true

# OSD配置(指定数据盘,示例:所有OSD节点使用/dev/sdb作为数据盘)
osd_scenario:collocated# 单盘部署(数据+日志同盘)
devices:
-/dev/sdb
osd_auto_discovery:false# 关闭自动发现,手动指定磁盘

# 网络配置(指定集群通信网段)
public_network:192.168.1.0/24
cluster_network:192.168.1.0/24# 若无独立集群网,与public_network一致

# 禁用dashboard(如需启用,可设为true)
dashboard_enabled:false

3.4 执行部署剧本

# 先执行连通性测试
ansible -i ceph-cluster.ini all -m ping

# 执行部署(耗时根据节点数量/网络情况而定,约10-30分钟)
ansible-playbook -i ceph-cluster.ini site.yml

3.5 验证部署结果

在任意MON节点执行以下命令验证集群状态:

# 查看集群健康状态(健康为HEALTH_OK)
ceph -s

# 查看OSD状态
ceph osd tree

# 查看MON状态
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

查看对象存储层级的存储使用情况

五、常见问题排查

  1. 部署时报“SSH连接失败”:检查免密登录是否配置成功,目标节点sshd服务是否正常。

  2. OSD启动失败:检查指定的磁盘是否已分区/挂载(需清空),磁盘权限是否正确。

  3. 集群状态HEALTH_WARN:执行ceph health detail查看具体原因,常见为PG未均衡、OSD数量不足。

总结

  1. 部署核心:基于官方ceph-ansible项目,通过配置inventory定义节点角色、group_vars配置集群参数,执行site.yml即可完成自动化部署。

  2. 关键验证:部署完成后通过ceph -s确认集群健康状态为HEALTH_OK,通过ceph osd tree确认所有OSD正常上线。

  3. 核心命令ceph -s(集群状态)、ceph osd tree(OSD状态)、ceph osd pool create(创建存储池)是日常运维最常用的命令。

注意:生产环境部署需根据实际服务器配置调整磁盘、网络、Ceph版本等参数,建议先在测试环境验证部署流程。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐