插件窝 干货文章 docker部署ceph怎么存储

docker部署ceph怎么存储

Ceph 存储 Docker 部署 159    来源:    2025-04-28

Docker部署Ceph存储方案

Ceph存储概述

Ceph是一个高度可扩展的分布式存储系统,提供对象存储、块存储和文件系统存储功能。使用Docker部署Ceph可以简化部署过程并提高可移植性。

推荐部署方案

1. 使用ceph/daemon官方镜像

Ceph官方提供了Docker镜像,可以用于部署各个Ceph组件:

# 拉取Ceph镜像
docker pull ceph/daemon:latest-octopus  # 或选择其他版本

2. 单节点部署(测试/开发环境)

对于测试或开发环境,可以使用单节点部署:

# 创建Ceph配置目录
mkdir -p /etc/ceph

# 启动MON容器
docker run -d --net=host \
  -v /etc/ceph:/etc/ceph \
  -v /var/lib/ceph/:/var/lib/ceph/ \
  -e MON_IP=YOUR_HOST_IP \
  -e CEPH_PUBLIC_NETWORK=YOUR_NETWORK_CIDR \
  ceph/daemon:latest-octopus mon

# 启动OSD容器(需要准备数据目录)
mkdir /var/lib/ceph/osd
docker run -d --net=host \
  --privileged=true \
  --pid=host \
  -v /etc/ceph:/etc/ceph \
  -v /var/lib/ceph/:/var/lib/ceph/ \
  -v /dev/:/dev/ \
  -e OSD_TYPE=disk \
  -e OSD_DEVICE=/dev/YOUR_DEVICE \
  ceph/daemon:latest-octopus osd

3. 多节点集群部署(生产环境)

对于生产环境,建议使用编排工具如Docker Compose或Kubernetes:

Docker Compose示例(3节点集群):

version: '3'
services:
  mon0:
    image: ceph/daemon:latest-octopus
    command: mon
    environment:
      - MON_IP=10.0.0.1
      - CEPH_PUBLIC_NETWORK=10.0.0.0/24
    volumes:
      - /etc/ceph:/etc/ceph
      - /var/lib/ceph/mon0:/var/lib/ceph/
    network_mode: host

  mon1:
    image: ceph/daemon:latest-octopus
    command: mon
    environment:
      - MON_IP=10.0.0.2
      - CEPH_PUBLIC_NETWORK=10.0.0.0/24
    volumes:
      - /etc/ceph:/etc/ceph
      - /var/lib/ceph/mon1:/var/lib/ceph/
    network_mode: host

  mon2:
    image: ceph/daemon:latest-octopus
    command: mon
    environment:
      - MON_IP=10.0.0.3
      - CEPH_PUBLIC_NETWORK=10.0.0.0/24
    volumes:
      - /etc/ceph:/etc/ceph
      - /var/lib/ceph/mon2:/var/lib/ceph/
    network_mode: host

  osd0:
    image: ceph/daemon:latest-octopus
    command: osd
    environment:
      - OSD_TYPE=disk
      - OSD_DEVICE=/dev/sdb
    volumes:
      - /etc/ceph:/etc/ceph
      - /var/lib/ceph/osd0:/var/lib/ceph/
      - /dev/:/dev/
    privileged: true
    pid: host
    network_mode: host

存储配置选项

1. 存储后端选择

  • FileStore (传统方式)
  • BlueStore (推荐, 性能更好)

2. 存储池配置

创建存储池示例:

docker exec <mon-container> ceph osd pool create mypool 128 128
docker exec <mon-container> ceph osd pool set mypool size 3

3. 存储类型

  1. RBD块存储:

    # 创建块设备
    docker exec <mon-container> rbd create myimage --size 1024 --pool mypool
    
  2. CephFS文件存储:

    # 创建文件系统
    docker exec <mon-container> ceph fs new myfs metadata_pool data_pool
    
  3. RGW对象存储:

    # 启动RGW容器
    docker run -d --net=host \
     -v /etc/ceph:/etc/ceph \
     -v /var/lib/ceph/:/var/lib/ceph/ \
     ceph/daemon:latest-octopus rgw
    

最佳实践

  1. 数据持久化:

    • 确保将/etc/ceph/var/lib/ceph挂载到宿主机
    • 考虑使用外部存储系统(如NFS)备份关键数据
  2. 性能优化:

    • 为OSD容器分配足够的内存
    • 使用SSD作为日志设备(如果使用FileStore)
    • 调整CRUSH map优化数据分布
  3. 监控:

    • 部署Ceph Dashboard或Prometheus监控
    • 设置告警阈值
  4. 安全性:

    • 使用CephX认证
    • 限制网络访问
    • 定期轮换密钥

常见问题解决

  1. 时钟同步问题:

    • 确保所有节点时间同步(使用NTP)
    • 时钟偏差会导致MON故障
  2. 空间不足:

    • 监控集群使用率
    • 设置noout标志防止OSD自动踢出
  3. 网络问题:

    • 确保公共网络和集群网络配置正确
    • 检查防火墙设置
  4. 容器重启问题:

    • 确保数据卷持久化
    • 检查容器日志排查具体错误

扩展阅读