Ceph OSD 核心原理与实战运维讲解视频地址:https://www.borimooc.com/course/1759.htm
在分布式存储领域,红帽 Ceph 存储(RHCS)凭借高可用、可扩展的特性,成为企业级存储方案的常用选择。但手动部署 Ceph 集群步骤繁琐且易出错,而Ansible 自动化部署能大幅简化流程,实现 “配置即代码” 的高效运维。本文基于实际操作场景,详细讲解红帽 Ceph 存储的 Ansible 部署全流程,包括环境准备、配置调试、集群验证及后续扩容,适合运维工程师和存储管理员参考。
在启动 Ansible 部署前,需先完成基础环境配置,核心是节点间 SSH 免密登录和Ansible 环境初始化,避免后续执行剧本时因权限或连通性问题中断。
- 节点规划:至少准备 1 台控制节点(如servera,安装 Ansible)和 3 台集群节点(如serverc/serverd/servere,部署 Ceph 的 mon/mgr/osd 等角色),操作系统建议为 RHEL 7/8(需兼容红帽 Ceph RHCS 3 版本);
- 软件依赖:控制节点需安装ansible(推荐 2.9 + 版本),集群节点需提前配置红帽官方 yum 源(用于拉取 Ceph 组件);
- 硬件要求:每个 OSD 节点至少挂载 1 块独立磁盘(如/dev/vdb,用于存储 Ceph 数据),内存≥4GB,CPU≥2 核。
Ansible 通过 SSH 远程执行命令,需在控制节点(servera)生成 SSH 密钥,并复制到所有集群节点,实现免密登录:
ssh-keygen -t rsa for i in c d e; do ssh-copy-id student@server$i done for i in c d e; do ssh-copy-id ceph@server$i done
执行后可通过ssh student@serverc测试,无需输入密码即表示配置成功。
红帽 Ceph 的 Ansible 部署核心是 “配置文件定义规则 + 剧本自动执行”,主要分为「Ansible 主配置调整」「清单文件定义角色」「变量文件设置参数」三步,最后执行剧本完成部署。
Ansible 的核心配置文件位于/usr/share/ceph-ansible/ansible.cfg,需调整参数避免警告和适配 Ceph 部署:
sudo vim /usr/share/ceph-ansible/ansible.cfg deprecation_warnings=false remote_user=student host_key_checking=false
此配置确保 Ansible 执行时不被冗余警告打断,且能顺利连接远程节点。
清单文件(/etc/ansible/hosts)的作用是明确哪些 Ceph 角色部署在哪些节点上,是 Ansible 分配任务的核心依据。根据实际节点规划编写,示例如下:
[mon] serverc
serverd
servere [mgrs] serverc
serverd
servere [osds] serverc
serverd
servere [clients] servera [mdss] servera [rgws] servera
注意:角色与节点的映射需根据实际集群规模调整,小规模集群可复用节点(如 mon/mgr/osd 部署在同一批节点),大规模集群建议角色分离。
Ansible 部署 Ceph 需两类关键文件:入口剧本(site.yml) 定义调用哪些角色,变量文件(all.yml/osds.yml 等) 定义部署参数(如网络、磁盘、版本)。
入口剧本是部署的 “总开关”,需从样本文件复制并调整关键参数:
cd /usr/share/ceph-ansible/ cp site.yml.sample site.yml sudo vim site.yml
在site.yml中找到OSDS相关配置,补充或修改以下关键参数(确保与实际环境匹配):
- name: Deploy Ceph OSDs hosts: osds serial: 1 roles: - role: ceph-osd vars: fetch_directory: ~/ceph-ansible-keys ntp_service_enabled: false ceph_origin: repository ceph_repository: rhcs ceph_rhcs_version: "3" ceph_repository_type: cdn rbd_cache: "true" rbd_cache_writethrough_until_flush: "false" monitor_interface: eth0 journal_size: 1024 public_network: 172.25.250.0/24 cluster_network: "{{ public_network }}" radosgw_civetweb_port: 80 radosgw_interface: eth0 ceph_conf_overrides: global: mon_osd_allow_primary_affinity: 1 mon_clock_drift_allowed: 0.5 osd_pool_default_size: 2 osd_pool_default_min_size: 1 mon_pg_warn_min_per_osd: 0 mon_pg_warn_max_per_osd: 0 client: rbd_default_features: 1 client.rgw.servera: rgw_dns_name: servera
变量文件用于细化各角色的配置,需从样本文件复制并修改关键参数:
sudo vim all.yml cp group_vars/osds.yml.sample group_vars/osds.yml sudo vim group_vars/osds.yml device:
- /dev/vdb
osd_scenario: collocated cp group_vars/mdss.yml.sample group_vars/mdss.yml cp group_vars/rgws.yml.sample group_vars/rgws.yml sudo vim group_vars/rgws.yml copy_admin_key: true
所有配置完成后,执行 Ansible 剧本,等待部署完成(耗时视节点数量而定,通常 10-30 分钟):
cd /usr/share/ceph-ansible/
ansible-playbook site.yml
部署过程检查:若出现 “failed” 任务,需先排查原因(如磁盘未格式化、yum 源不可用、SSH 权限不足),解决后重新执行剧本即可(Ansible 支持幂等性,重复执行不会导致冲突)。
部署完成后,需通过一系列 Ceph 命令验证集群状态,确保各组件正常运行。所有命令可在控制节点(servera)或任意集群节点执行。
- 正常状态示例:health: HEALTH_OK,mon: 3 daemons up,osd: 3 osds up。
ceph osd status ceph osd stat ceph osd tree ceph osd dump
- 关键指标:up表示 OSD 服务正常,in表示 OSD 加入集群可用。
ceph mon_status ceph mon stat ceph mon versions ceph mon dump
- 关键指标:quorum列表包含所有正常的 MON 节点(如quorum 0,1,2 (serverc,serverd,servere))。
- MDS(元数据服务):
ceph mds stat ceph mds dump
- RGW(对象存储网关):
sudo systemctl status ceph-radosgw@rgw.servera.service
- PG(Placement Group):
当业务数据增长时,需对 Ceph 集群进行扩容,主要分为 “增加 OSD 节点” 和 “增加单个节点磁盘” 两种场景,操作同样通过 Ansible 实现。
若现有 OSD 节点有额外磁盘(如serverc新增/dev/vdc//dev/vdd),需修改 OSD 变量文件并重新执行剧本:
sudo vim /usr/share/ceph-ansible/group_vars/osds.yml device:
- /dev/vdb
- /dev/vdc
- /dev/vdd cd /usr/share/ceph-ansible/
ansible-playbook site.yml
若需新增 OSD 节点(如serverf/serverg),需先配置新节点的 SSH 免密登录,再修改清单文件和变量文件:
for i in f g; do ssh-copy-id student@server$i ssh-copy-id ceph@server$i done sudo vim /etc/ansible/hosts [osds] serverc
serverd
servere
serverf serverg sudo vim /usr/share/ceph-ansible/group_vars/osds.yml cd /usr/share/ceph-ansible/
ansible-playbook site.yml
扩容完成后,通过以下命令确认新 OSD 已加入集群:
ceph osd tree ceph osd stat ceph health
- 环境准备是基础:SSH 免密登录和 yum 源配置必须提前搞定,避免部署中因权限或依赖问题中断;
- 清单文件要精准:角色与节点的映射直接影响集群架构,小规模复用节点、大规模角色分离;
- 参数配置需匹配:public_network、device、osd_pool_default_size等参数需结合实际环境调整,尤其是副本数(需≤OSD 节点数);
- 验证与扩容要及时:部署后通过ceph -s和组件命令确认状态,扩容后检查新资源是否正常加入。
通过 Ansible 自动化部署红帽 Ceph,不仅能减少手动操作的失误,还能实现集群配置的标准化管理。后续可基于此基础,进一步配置 Ceph FS 文件系统或 RGW 对象存储服务,满足企业不同的存储需求。