一键部署 Ceph 集群!Ansible 运维实战教程
一键部署 Ceph 集群!Ansible 运维实战教程
一、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 |
查看对象存储层级的存储使用情况 |
五、常见问题排查
-
部署时报“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版本等参数,建议先在测试环境验证部署流程。
更多推荐
所有评论(0)