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版本。在不同环境下部署时,可能需要进行相应调整。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
