在Linux系统中配置高可用虚拟化存储时,Ceph是常用的分布式存储解决方案,它支持对象存储、块存储和文件系统存储,能够满足虚拟化场景下的多类型存储需求,且具备自动容错、动态扩容等特性,可有效避免存储单点故障问题。

环境准备
部署Ceph集群前需要先完成基础环境配置,确保所有节点满足运行要求。
节点规划
建议至少准备3个节点,分别承担不同角色,具体规划如下:
| 节点角色 | 数量 | 配置要求 |
|---|---|---|
| MON节点(监控节点) | 3个(奇数个避免脑裂) | 2核4G内存,20G系统盘,单独数据盘 |
| OSD节点(存储节点) | 3个及以上 | 2核8G内存,20G系统盘,至少2块数据盘 |
| 客户端节点 | 按需配置 | 2核4G内存,用于验证存储可用性 |
基础环境配置
所有节点都需要执行以下基础配置操作:
- 安装相同版本的Linux系统,推荐使用CentOS 7或Ubuntu 20.04 LTS
- 配置静态IP,确保所有节点之间网络互通
- 关闭防火墙和SELinux,避免端口拦截
- 配置节点间SSH免密登录,方便后续集群管理
- 配置NTP时间同步,保证所有节点时间一致
以下是关闭防火墙和SELinux的示例命令:
# 关闭防火墙 systemctl stop firewalld systemctl disable firewalld # 关闭SELinux setenforce 0 sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
Ceph集群部署
这里使用Ceph官方提供的ceph-deploy工具进行集群部署,操作更简便。
安装ceph-deploy工具
在管理节点上执行以下命令安装部署工具:
# CentOS系统安装 yum install -y ceph-deploy # Ubuntu系统安装 apt-get update apt-get install -y ceph-deploy
创建集群并部署MON节点
在管理节点创建工作目录,然后初始化MON节点:
# 创建工作目录 mkdir ceph-cluster cd ceph-cluster # 初始化MON节点,替换为实际的MON节点主机名 ceph-deploy new node1 node2 node3 # 安装Ceph软件包到所有节点 ceph-deploy install --release luminous node1 node2 node3 # 部署初始MON节点和生成密钥 ceph-deploy mon create-initial
部署OSD节点
为OSD节点添加数据盘,这里以node1的/dev/sdb盘为例,所有OSD节点重复该操作:
# 擦除磁盘数据 ceph-deploy disk zap node1 /dev/sdb # 创建OSD ceph-deploy osd create node1 --data /dev/sdb
分发配置文件和密钥
将集群配置文件和管理密钥分发到所有节点,方便后续操作:
ceph-deploy admin node1 node2 node3
高可用配置优化
默认配置下Ceph已经具备基础的高可用能力,可通过以下配置进一步提升可用性。
配置副本数
Ceph默认副本数为3,可根据节点数量调整,确保数据分布在不同的节点上,避免单节点故障导致数据丢失。修改ceph.conf文件添加以下配置:
[global] # 设置副本数为3,至少保留2个副本可用 osd_pool_default_size = 3 # 最小可用副本数 osd_pool_default_min_size = 2
修改完成后将配置文件同步到所有节点并重启服务:
ceph-deploy --overwrite-conf config push node1 node2 node3 systemctl restart ceph-mon.target systemctl restart ceph-osd.target
配置MON节点仲裁
确保MON节点数量为奇数,避免脑裂问题,同时配置MON节点自动故障转移,当某个MON节点故障时,其他节点可自动接管监控职责。
开启OSD自动故障恢复
默认情况下OSD故障后会自动触发数据恢复,可通过以下命令调整恢复速度,避免影响正常业务:
# 调整恢复并发数 ceph osd set nodown ceph tell osd.* injectargs '--osd_recovery_max_active 3' ceph tell osd.* injectargs '--osd_recovery_max_single_start 1' ceph osd unset nodown
可用性验证
部署完成后需要验证存储的高可用特性,确保配置生效。
查看集群状态
执行以下命令查看集群健康状态:
ceph -s
当输出中health字段为HEALTH_OK,且mon和osd数量与规划一致时,说明集群运行正常。
模拟节点故障测试
手动停止某个OSD节点的服务,观察集群状态:
# 在OSD节点执行,停止osd.0服务 systemctl stop ceph-osd@0
此时查看集群状态,会显示有OSD处于down状态,但集群仍为HEALTH_OK,数据可正常读写,说明高可用配置生效。恢复节点服务后,数据会自动同步恢复。
创建存储池测试
创建块存储池并映射到客户端,验证存储读写正常:
# 创建存储池 ceph osd pool create test_pool 128 # 初始化存储池为RBD池 rbd pool init test_pool # 创建块设备镜像 rbd create test_image --size 1024 --pool test_pool # 客户端映射镜像 rbd map test_pool/test_image --name client.admin # 格式化并挂载 mkfs.ext4 /dev/rbd0 mkdir /mnt/ceph_test mount /dev/rbd0 /mnt/ceph_test
在挂载目录中创建测试文件,停止某个OSD节点后文件仍可正常读写,证明存储高可用配置生效。