Ceph是一款开源的分布式存储系统,支持对象存储、块存储和文件存储三种接口,能够在普通x86服务器上构建高可用、可扩展的存储集群,在Linux环境中应用十分广泛。其核心技术是CRUSH算法,能够自动计算数据存储位置,无需中心元数据服务器,大幅提升了集群的可靠性和扩展性。

Ceph核心组件介绍
在Linux中管理Ceph分布式存储,首先需要了解其核心组件的作用:
- OSD(Object Storage Daemon):负责存储实际数据,处理数据复制、恢复、回填等操作,每个磁盘通常对应一个OSD进程。
- MON(Monitor):维护集群的状态映射,包括OSD映射、MON映射、PG映射等,保证集群状态的一致性,通常需要部署奇数个MON节点实现高可用。
- MDS(Metadata Server):仅为CephFS文件存储提供元数据服务,如果使用对象存储或块存储可以不部署该组件。
- RADOS Gateway(RGW):提供对象存储接口,兼容S3和Swift协议,用于对外提供对象存储服务。
Linux环境准备
在部署Ceph集群前,需要完成以下Linux环境配置:
节点规划
建议至少准备3个Linux节点(CentOS 7及以上或Ubuntu 18.04及以上版本),分别作为MON节点和OSD节点,节点之间网络互通,并且配置静态IP。以下是示例节点规划:
| 节点名称 | IP地址 | 部署组件 |
|---|---|---|
| ceph-node1 | 192.168.0.10 | MON, OSD |
| ceph-node2 | 192.168.0.11 | MON, OSD |
| ceph-node3 | 192.168.0.12 | MON, OSD |
基础配置
所有节点执行以下操作:
- 关闭防火墙和SELinux:
# 关闭防火墙 systemctl stop firewalld systemctl disable firewalld # 关闭SELinux setenforce 0 sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
- 配置主机名解析,在所有节点的
/etc/hosts文件中添加节点信息:
192.168.0.10 ceph-node1 192.168.0.11 ceph-node2 192.168.0.12 ceph-node3
- 配置节点间SSH免密登录,方便后续集群管理操作。
Ceph集群部署流程
这里使用Ceph官方推荐的ceph-deploy工具进行集群部署,操作在管理节点(可以是任意一个集群节点)执行。
安装ceph-deploy工具
首先配置Ceph的yum源,然后安装ceph-deploy:
# 添加Ceph源,以CentOS 7为例,nautilus版本 cat > /etc/yum.repos.d/ceph.repo << EOF [ceph] name=Ceph packages for x86_64 baseurl=https://download.ceph.com/rpm-nautilus/el7/x86_64 enabled=1 gpgcheck=0 [ceph-noarch] name=Ceph noarch packages baseurl=https://download.ceph.com/rpm-nautilus/el7/noarch enabled=1 gpgcheck=0 EOF # 安装ceph-deploy yum install -y ceph-deploy
初始化集群
创建集群配置目录,初始化MON节点:
# 创建目录 mkdir ceph-cluster cd ceph-cluster # 初始化MON节点,指定MON节点主机名 ceph-deploy new ceph-node1 ceph-node2 ceph-node3
初始化完成后会生成ceph.conf配置文件和ceph.mon.keyring密钥环文件,可根据需要修改ceph.conf中的配置,比如设置公共网络和集群网络。
安装Ceph软件包
在所有节点上安装Ceph软件包:
ceph-deploy install ceph-node1 ceph-node2 ceph-node3
部署MON节点
初始化并启动MON服务:
ceph-deploy mon create-initial
执行完成后,当前目录会生成多个密钥文件,包括client.admin.keyring等,将这些密钥同步到所有节点的/etc/ceph/目录下:
ceph-deploy admin ceph-node1 ceph-node2 ceph-node3
部署OSD节点
为每个节点上的磁盘创建OSD,假设每个节点有一个空闲磁盘/dev/sdb:
# 擦除磁盘 ceph-deploy disk zap ceph-node1 /dev/sdb ceph-deploy disk zap ceph-node2 /dev/sdb ceph-deploy disk zap ceph-node3 /dev/sdb # 创建OSD ceph-deploy osd create ceph-node1 --data /dev/sdb ceph-deploy osd create ceph-node2 --data /dev/sdb ceph-deploy osd create ceph-node3 --data /dev/sdb
验证集群状态
执行以下命令查看集群状态:
ceph -s
如果输出中health字段为HEALTH_OK,说明集群部署成功。
Ceph存储管理常用操作
存储池管理
存储池是Ceph存储的逻辑划分,创建存储池的命令如下:
# 创建名为test_pool的存储池,pg_num设置为128 ceph osd pool create test_pool 128 # 查看所有存储池 ceph osd pool ls # 删除存储池,需要先开启允许删除配置 ceph osd pool set test_pool nodelete false ceph osd pool delete test_pool test_pool --yes-i-really-really-mean-it
块存储管理
Ceph块存储可以映射为Linux系统的块设备使用,操作步骤如下:
# 创建块设备镜像,大小10G rbd create test_image --size 10240 --pool test_pool # 映射到本地块设备 rbd map test_image --pool test_pool # 查看映射的块设备 rbd showmapped # 格式化块设备并挂载 mkfs.ext4 /dev/rbd0 mkdir /mnt/rbd mount /dev/rbd0 /mnt/rbd
文件存储管理
如果需要使用CephFS文件存储,需要先部署MDS组件:
# 部署MDS ceph-deploy mds create ceph-node1 ceph-node2 ceph-node3 # 创建CephFS,需要两个存储池,一个存数据一个存元数据 ceph osd pool create cephfs_data 128 ceph osd pool create cephfs_metadata 64 ceph fs new cephfs cephfs_metadata cephfs_data # 客户端挂载CephFS mkdir /mnt/cephfs mount -t ceph 192.168.0.10:6789,192.168.0.11:6789,192.168.0.12:6789:/ /mnt/cephfs -o name=admin,secret=AQXXXXXXXXX==(替换为client.admin的密钥)
日常运维注意事项
- 定期执行
ceph -s查看集群健康状态,出现HEALTH_WARN或HEALTH_ERR时及时处理。 - OSD节点磁盘使用率建议不超过85%,避免数据写入失败。
- MON节点需要保持奇数个,新增或移除MON节点时需要同步更新集群配置。
- 数据迁移或恢复期间避免进行大规模配置变更,防止集群状态异常。
Ceph的CRUSH算法会根据集群拓扑自动分配数据,因此新增OSD节点后,集群会自动进行数据均衡,无需手动干预。