Ceph Pacific版分布式存储集群完整搭建指南(含容器化部署)

Ceph Pacific版分布式存储集群完整搭建指南(含容器化部署)

概述

本指南将详细介绍Ceph Pacific版本的两种部署方式:传统方式和现代容器化方式。Ceph是一个开源的分布式存储系统,提供对象存储、块存储和文件系统存储三种接口。目前官方推荐使用容器化方式部署,但传统方式仍有其适用场景。

部署方式对比

部署方式 优点 缺点 适用场景
传统部署 直接控制底层,性能可调优 依赖复杂,升级困难 对性能要求极高,需要精细控制的环境
容器化部署 部署简单,易于升级,环境隔离 引入容器层开销 现代化数据中心,快速部署场景

容器化部署方式(推荐)

Cephadm部署方式

Cephadm是Ceph官方推荐的容器化部署工具,使用ceph-container镜像和ceph-ansible进行部署管理。

1. 环境准备

在所有节点上执行基础配置:

# 1. 更新系统
sudo apt update && sudo apt upgrade -y

# 2. 安装Docker
sudo apt install docker.io -y
sudo systemctl enable docker
sudo systemctl start docker

# 3. 添加当前用户到docker组
sudo usermod -aG docker $USER

# 4. 安装cephadm
curl --location --silent https://github.com/ceph/ceph/raw/main/src/cephadm/cephadm > ~/cephadm
chmod +x ~/cephadm

# 5. 设置主机名
sudo hostnamectl set-hostname ceph-mon1  # 在对应节点上替换为正确的主机名

# 6. 配置hosts文件
sudo tee -a /etc/hosts << EOF
192.168.1.20 ceph-mon1
192.168.1.21 ceph-mon2
192.168.1.22 ceph-mon3
192.168.1.23 ceph-osd1
192.168.1.24 ceph-osd2
192.168.1.25 ceph-osd3
EOF

2. 使用Cephadm引导集群

在主Monitor节点上引导集群:

# 创建Ceph工作目录
sudo mkdir -p /etc/ceph
sudo chown $USER:$USER /etc/ceph

# 引导Ceph集群(指定公网和集群网络)
sudo ./cephadm bootstrap \
    --mon-ip 192.168.1.20 \
    --cluster-network 172.16.1.0/24 \
    --docker \
    --initial-dashboard-user admin \
    --initial-dashboard-password admin123 \
    --skip-dashboard \
    --skip-firewalld

# 或者启用dashboard
sudo ./cephadm bootstrap \
    --mon-ip 192.168.1.20 \
    --cluster-network 172.16.1.0/24 \
    --docker \
    --initial-dashboard-user admin \
    --initial-dashboard-password admin123

3. 添加其他Monitor节点

将其他Monitor节点加入集群:

# 在主Monitor节点上生成SSH密钥
sudo cephadm shell -- ceph cephadm get-pub-key > /home/$USER/ceph.pub

# 将密钥复制到其他节点
ssh-copy-id -f -i /home/$USER/ceph.pub root@ceph-mon2
ssh-copy-id -f -i /home/$USER/ceph.pub root@ceph-mon3
ssh-copy-id -f -i /home/$USER/ceph.pub root@ceph-osd1
ssh-copy-id -f -i /home/$USER/ceph.pub root@ceph-osd2
ssh-copy-id -f -i /home/$USER/ceph.pub root@ceph-osd3

# 将其他Monitor加入集群
sudo ceph orch host add ceph-mon2 192.168.1.21
sudo ceph orch host add ceph-mon3 192.168.1.22
sudo ceph orch host add ceph-osd1 192.168.1.23
sudo ceph orch host add ceph-osd2 192.168.1.24
sudo ceph orch host add ceph-osd3 192.168.1.25

# 部署额外的Monitor
sudo ceph orch daemon add mon ceph-mon2
sudo ceph orch daemon add mon ceph-mon3

4. 配置OSD

使用orchestrator配置OSD:

# 扫描可用磁盘
sudo ceph orch daemon add osd ceph-osd1
sudo ceph orch daemon add osd ceph-osd2
sudo ceph orch daemon add osd ceph-osd3

# 或者使用inventory方式批量配置
sudo ceph orch disk list ceph-osd1
sudo ceph orch disk zap ceph-osd1 /dev/sdb --force
sudo ceph orch disk zap ceph-osd1 /dev/sdc --force

# 准备OSD(使用lvm的方式)
sudo ceph orch daemon add osd ceph-osd1 --config yaml="
service_type: osd
service_id: ceph-osd1
placement:
  host_pattern: 'ceph-osd1'
data_devices:
  paths: ['/dev/sdb', '/dev/sdc', '/dev/sdd', '/dev/sde']
"

# 批量配置所有OSD节点
sudo ceph orch apply osd --all-available-devices --dry-run
sudo ceph orch apply osd --all-available-devices

5. 部署其他服务

部署Manager、RGW、MDS等服务:

# 部署Manager服务
sudo ceph orch daemon add mgr ceph-mon2
sudo ceph orch daemon add mgr ceph-mon3

# 部署RGW(对象存储)
sudo ceph orch daemon add rgw ceph-osd1 --placement="ceph-osd1"

# 部署MDS(文件系统)
sudo ceph fs volume create cephfs
sudo ceph orch daemon add mds cephfs --placement="ceph-mon2 ceph-mon3"

传统部署方式(备选)

节点规划

节点类型 主机名 IP地址 主要服务 磁盘配置
Monitor节点 ceph-mon1 192.168.1.20 ceph-mon, ceph-mgr sda(系统盘), sdb,sdc(OSD)
Monitor节点 ceph-mon2 192.168.1.21 ceph-mon, ceph-mgr sda(系统盘), sdb,sdc(OSD)
Monitor节点 ceph-mon3 192.168.1.22 ceph-mon, ceph-mgr sda(系统盘), sdb,sdc(OSD)
OSD节点 ceph-osd1 192.168.1.23 ceph-osd sda(系统盘), sdb,sdc,sdd,sde(OSD)
OSD节点 ceph-osd2 192.168.1.24 ceph-osd sda(系统盘), sdb,sdc,sdd,sde(OSD)
OSD节点 ceph-osd3 192.168.1.25 ceph-osd sda(系统盘), sdb,sdc,sdd,sde(OSD)

1. 环境准备

在所有节点上执行以下基础配置:

# 1. 更新系统
sudo apt update && sudo apt upgrade -y

# 2. 设置主机名
sudo hostnamectl set-hostname ceph-mon1  # 在对应节点上替换为正确的主机名

# 3. 配置hosts文件
sudo tee -a /etc/hosts << EOF
192.168.1.20 ceph-mon1
192.168.1.21 ceph-mon2
192.168.1.22 ceph-mon3
192.168.1.23 ceph-osd1
192.168.1.24 ceph-osd2
192.168.1.25 ceph-osd3
EOF

# 4. 安装必要软件
sudo apt install ntp chrony vim wget curl net-tools parted lvm2 -y

# 5. 配置时间同步
sudo systemctl enable chronyd.service
sudo systemctl start chronyd.service

# 6. 禁用防火墙(生产环境请按需配置)
sudo ufw disable

2. Ceph仓库配置

在所有节点上配置Ceph Pacific仓库:

# Ubuntu 20.04
wget -q -O- 'https://download.ceph.com/keys/release.asc' | sudo apt-key add -
echo deb https://download.ceph.com/debian-pacific/ $(lsb_release -sc) main | sudo tee /etc/apt/sources.list.d/ceph.list
sudo apt update

# CentOS 8
sudo tee /etc/yum.repos.d/ceph.repo << 'EOF'
[Ceph]
name=Ceph packages for $basearch
baseurl=https://download.ceph.com/rpm-pacific/el8/$basearch
enabled=1
priority=2
gpgcheck=1
gpgkey=https://download.ceph.com/keys/release.asc

[Ceph-noarch]
name=Ceph noarch packages
baseurl=https://download.ceph.com/rpm-pacific/el8/noarch
enabled=1
priority=2
gpgcheck=1
gpgkey=https://download.ceph.com/keys/release.asc

[ceph-source]
name=Ceph source packages
baseurl=https://download.ceph.com/rpm-pacific/el8/SRPMS
enabled=0
priority=2
gpgcheck=1
gpgkey=https://download.ceph.com/keys/release.asc
EOF

3. Monitor节点安装配置

在Monitor节点上安装Ceph组件:

# Ubuntu
sudo apt install ceph ceph-mgr ceph-mon ceph-common ceph-fuse radosgw -y

# 创建初始配置文件
sudo tee /etc/ceph/ceph.conf << EOF
[global]
fsid = 06b7b532-7393-4a65-a836-73e529135c3c
mon_initial_members = ceph-mon1, ceph-mon2, ceph-mon3
mon_host = 192.168.1.20, 192.168.1.21, 192.168.1.22
public_network = 192.168.1.0/24
cluster_network = 172.16.1.0/24
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
osd_pool_default_size = 3
osd_pool_default_min_size = 2
osd_pool_default_pg_num = 128
osd_pool_default_pgp_num = 128
osd_crush_chooseleaf_type = 1
EOF

# 初始化Monitor服务
sudo ceph-authtool --create-keyring /tmp/ceph.mon.keyring --gen-key -n mon. --cap mon 'allow *'
sudo ceph-authtool --create-keyring /etc/ceph/ceph.client.admin.keyring --gen-key -n client.admin --cap mon 'allow *' --cap osd 'allow *' --cap mds 'allow *' --cap mgr 'allow *'
sudo ceph-authtool /tmp/ceph.mon.keyring --import-keyring /etc/ceph/ceph.client.admin.keyring
sudo -u ceph monmaptool --create --add ceph-mon1 192.168.1.20 --add ceph-mon2 192.168.1.21 --add ceph-mon3 192.168.1.22 --fsid 06b7b532-7393-4a65-a836-73e529135c3c /tmp/monmap
sudo -u ceph mkdir -p /var/lib/ceph/mon/ceph-ceph-mon1
sudo ceph-mon --mkfs -i ceph-mon1 --monmap /tmp/monmap --keyring /tmp/ceph.mon.keyring
sudo chown -R ceph:ceph /var/lib/ceph/mon/ceph-ceph-mon1/

# 启动Monitor服务
sudo systemctl enable ceph-mon@ceph-mon1
sudo systemctl start ceph-mon@ceph-mon1

4. OSD节点安装配置

在OSD节点上准备磁盘和安装OSD:

# 准备OSD磁盘
sudo ceph-volume lvm zap /dev/sdb --destroy
sudo ceph-volume lvm zap /dev/sdc --destroy
sudo ceph-volume lvm zap /dev/sdd --destroy
sudo ceph-volume lvm zap /dev/sde --destroy

# 使用ceph-volume创建OSD
sudo ceph-volume lvm batch --yes --prepare-initial-osds --osds-per-device 1 /dev/sdb /dev/sdc /dev/sdd /dev/sde

# 激活OSD
sudo ceph-volume lvm activate --all

# 启动OSD服务
sudo systemctl enable ceph-osd.target
sudo systemctl start ceph-osd.target

Rook部署方式(Kubernetes环境)

1. 环境要求

  • Kubernetes集群(v1.16+)
  • kubectl命令行工具
  • Helm 3(可选)

2. 部署Rook Operator

在Kubernetes集群中部署Rook Ceph Operator:

# 克隆Rook仓库
git clone --single-branch --branch release-1.10 https://github.com/rook/rook.git
cd rook/cluster/examples/kubernetes/ceph

# 创建命名空间
kubectl create namespace rook-ceph

# 部署Rook Operator
kubectl apply -f operator-openshift.yaml

# 等待Operator就绪
kubectl -n rook-ceph rollout status deployment rook-ceph-operator

3. 创建Ceph集群

使用Rook创建Ceph集群:

# 部署Ceph集群
kubectl apply -f cluster-on-pvc.yaml

# 或者使用裸机部署
kubectl apply -f cluster.yaml

# 检查集群状态
kubectl -n rook-ceph get cephcluster
kubectl -n rook-ceph get pods -l app=rook-ceph-mon
kubectl -n rook-ceph get pods -l app=rook-ceph-osd

4. 创建存储资源

创建CephFS、RBD和RGW存储资源:

# 创建CephFS
kubectl apply -f filesystem.yaml

# 创建RBD存储池
kubectl apply -f pool.yaml

# 创建RGW对象存储
kubectl apply -f object-openshift.yaml

# 创建StorageClass
kubectl apply -f storageclass.yaml

存储池配置

1. 创建存储池

使用cephadm命令创建存储池:

# 使用orchestrator创建存储池
sudo cephadm shell -- ceph osd pool create rbd-pool 128 128 replicated

# 设置存储池属性
sudo cephadm shell -- ceph osd pool set rbd-pool size 3
sudo cephadm shell -- ceph osd pool set rbd-pool min_size 2

# 查看存储池列表
sudo cephadm shell -- ceph osd lspools

2. RBD块存储配置

配置RBD块存储:

# 初始化RBD
sudo cephadm shell -- rbd pool init rbd-pool

# 创建RBD镜像
sudo cephadm shell -- rbd create rbd-pool/test-image --size 10G --image-format 2

# 映射RBD镜像到本地
sudo rbd map rbd-pool/test-image --id admin
sudo mkfs.ext4 /dev/rbd/rbd-pool/test-image
sudo mount /dev/rbd/rbd-pool/test-image /mnt/rbd-test

集群管理与维护

1. 监控集群状态

使用cephadm监控集群:

# 查看集群状态
sudo cephadm shell -- ceph -s

# 查看服务状态
sudo ceph orch ps

# 查看主机状态
sudo ceph orch host ls

# 查看存储池统计
sudo cephadm shell -- ceph df

2. 升级集群

使用cephadm升级集群:

# 检查可用的Ceph版本
sudo ceph orch upgrade check

# 开始升级到指定版本
sudo ceph orch upgrade start --image 16.2.11

# 监控升级进度
sudo ceph orch upgrade status

3. 故障排除

常见问题及解决方法:

# 检查集群健康状态
sudo cephadm shell -- ceph health detail

# 查看守护进程日志
sudo cephadm logs -f ceph-mon@ceph-mon1

# 重新平衡集群
sudo cephadm shell -- ceph osd reweight-by-utilization

# 检查网络连通性
sudo cephadm shell -- ceph tell osd.* bench

安全加固

1. 网络安全

配置网络安全策略:

# 配置防火墙规则(使用容器化部署时,需要开放容器端口)
sudo ufw allow from 192.168.1.0/24  # 内部网络
sudo ufw allow 6789/tcp             # Monitor端口
sudo ufw allow 6800:7300/tcp        # OSD端口
sudo ufw allow 8080/tcp             # RGW端口
sudo ufw allow 7000/tcp             # Dashboard端口

# 配置网络隔离
sudo cephadm shell -- ceph config set global cluster_network '172.16.1.0/24'

2. 认证与授权

加强认证和授权机制:

# 创建专用用户
sudo cephadm shell -- ceph auth get-or-create client.backup mon 'allow r' osd 'allow rwx pool=backups'
sudo cephadm shell -- ceph auth get-or-create client.monitor mon 'allow r' mds 'allow r' osd 'allow r'

性能监控

1. 集群性能指标

监控关键性能指标:

# I/O性能监控
sudo cephadm shell -- rados bench -p rbd-pool 10 write --no-cleanup
sudo cephadm shell -- rados bench -p rbd-pool 10 seq

# 实时监控
sudo cephadm shell -- ceph tell osd.* bench

# 使用Prometheus监控
# Rook内置了Prometheus监控
kubectl -n rook-ceph port-forward svc/rook-ceph-mgr-dashboard 7000:7000

总结

本指南详细介绍了Ceph Pacific版本的多种部署方式:容器化部署(cephadm)、传统部署和Kubernetes部署(Rook)。目前官方推荐使用容器化方式进行部署,因为它提供了更好的可管理性和升级便利性。

选择哪种部署方式取决于你的具体需求:

  • 容器化部署(cephadm):适合新建环境,推荐大多数场景使用
  • 传统部署:适合对性能要求极高,需要精细控制的环境
  • Rook部署:适合已在使用Kubernetes的环境

后续建议:

  • 优先考虑容器化部署方式
  • 配置自动化监控和告警系统
  • 建立定期备份策略
  • 持续关注Ceph社区更新

注意: 本指南基于Ubuntu 20.04和Ceph Pacific版本。在不同环境下部署时,可能需要进行相应调整。

发表回复

后才能评论