虚拟机环境部署Ceph集群的详细指南

虚拟机环境部署Ceph集群的详细指南(含Dashboard和Prometheus)

一、环境规划与准备

1.0 虚拟机配置要求

节点数量:至少3台虚拟机(1管理节点+2OSD节点)

操作系统:CentOS 7/8或Ubuntu 18.04/20.04(推荐CentOS 7.9)

硬件配置:

每节点至少2vCPU(推荐4vCPU)

每节点至少4GB内存(推荐8GB)

管理节点:系统盘(20GB)+1数据盘(10GB,用于Monitor)

OSD节点:系统盘(20GB)+2-3数据盘(每盘10GB,用于OSD)

网络:所有节点在同一子网,建议配置主机名解析

1.1 虚拟机节点规划(扩展版)

主机名 IP地址 角色 建议配置
ceph-mon1 192.168.10.10 Monitor1, Manager1, Deploy 2vCPU/4GB RAM
ceph-mon2 192.168.10.11 Monitor2, Manager2 2vCPU/4GB RAM
ceph-mon3 192.168.10.12 Monitor3 2vCPU/4GB RAM
ceph-osd1 192.168.10.21 OSD节点(3磁盘) 4vCPU/8GB RAM
ceph-osd2 192.168.10.22 OSD节点(3磁盘) 4vCPU/8GB RAM
ceph-osd3 192.168.10.23 OSD节点(3磁盘) 4vCPU/8GB RAM

部署ceph集群可以最少需要三个虚拟机,如本机配置较低,可规划如下:

主机名 IP地址 角色 建议配置
ceph-mon1 192.168.10.10 Monitor1, Manager1, Deploy 2vCPU/4GB RAM
ceph-osd1 192.168.10.21 OSD节点(3磁盘) 4vCPU/8GB RAM
ceph-osd2 192.168.10.22 OSD节点(3磁盘) 4vCPU/8GB RAM

1.2 基础环境配置(所有节点)

注意:可以先创建一台虚拟机,把hosts文件域名和ip映射加好,NTP时间同步软件装好,防火墙设置和ceph用户创建好,然后通过虚拟机克隆,其中作为osd节点的虚拟机器可能还涉及添加磁盘的情况【参考 3.5 添加OSD存储】,克隆osd节点的时候先配置好其中一台然后以此台为基准克隆另外两个osd节点,如果你还没安装虚拟机,我这有一份尚硅谷出品的虚拟机安装材料

1.2.1 设置主机名和hosts解析
bash 复制代码
# 命令说明:设置永久主机名并更新hosts文件,确保集群节点能互相解析
# 在各节点分别执行(以ceph-mon1为例)
sudo hostnamectl set-hostname ceph-mon1

# 在所有节点统一编辑/etc/hosts文件
# 使用<<EOF(Here Document)方式避免手动编辑错误
sudo bash -c 'cat <<EOF >> /etc/hosts
192.168.10.10 ceph-mon1
192.168.10.11 ceph-mon2
192.168.10.12 ceph-mon3
192.168.10.21 ceph-osd1
192.168.10.22 ceph-osd2
192.168.10.23 ceph-osd3
EOF'
1.2.2 关闭SELinux和防火墙
bash 复制代码
# 命令说明:关闭安全增强功能(SELinux)和防火墙,避免Ceph通信被拦截
# CentOS/RHEL系统
sudo setenforce 0  # 临时关闭SELinux
sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config  # 永久关闭
sudo systemctl stop firewalld  # 停止防火墙
sudo systemctl disable firewalld  # 禁用开机启动

# Ubuntu系统
sudo ufw disable  # 禁用Uncomplicated Firewall
1.2.3 配置NTP时间同步
bash 复制代码
# 命令说明:确保所有节点时间同步,Ceph对时钟同步要求严格(差异不能超过0.05秒)
# CentOS/RHEL
sudo yum install -y chrony  # 安装chrony时间服务
sudo systemctl enable chronyd  # 设置开机启动
sudo systemctl start chronyd  # 启动服务
sudo chronyc sources  # 查看时间源状态

# Ubuntu
sudo apt install -y chrony
sudo systemctl enable chrony
sudo systemctl start chrony
1.2.4 创建专用部署用户
bash 复制代码
# 命令说明:创建专用ceph用户并配置sudo权限,避免直接使用root
sudo useradd -m -d /home/ceph -s /bin/bash ceph  # 创建用户
echo "ceph:ceph123" | sudo chpasswd  # 设置密码(生产环境请用更强密码)
echo "ceph ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/ceph  # 配置sudo权限
sudo chmod 0440 /etc/sudoers.d/ceph  # 设置正确权限

# 执行命令后检查结果
# 检查用户是否存在
id ceph
# 测试 sudo 权限(应无需密码)
sudo -u ceph sudo -l
# 检查文件权限
ls -l /etc/sudoers.d/ceph

二、管理节点专项配置

2.1 配置SSH免密登录

bash 复制代码
# 命令说明:生成SSH密钥对并分发到所有节点,实现免密登录
su - ceph  # 切换到ceph用户
ssh-keygen -t rsa -N "" -f ~/.ssh/id_rsa  # 生成密钥对(空密码)

# 循环分发公钥到所有节点
for node in ceph-mon1 ceph-mon2 ceph-mon3 ceph-osd1 ceph-osd2 ceph-osd3; do
  ssh-copy-id ceph@$node  # 需要输入各节点ceph用户密码
  # 测试连接
  ssh ceph@$node "hostname"  # 确认能免密登录
done

将上面的命令复制到shell脚本执行,或者复制到命令窗口执行也可以,结果如下图

bash 复制代码
[ceph@ceph-mon1 ~]$ for node in ceph-mon1 ceph-mon3 ceph-osd1 ceph-osd2 ceph-osd3; do
>   ssh-copy-id ceph@$node  # 需要输入各节点ceph用户密码
>   # 测试连接
>   ssh ceph@$node "hostname"  # 确认能免密登录
> done
/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/ceph/.ssh/id_rsa.pub"
The authenticity of host 'ceph-mon1 (192.168.10.131)' can't be established.
ECDSA key fingerprint is SHA256:LqdogNX4DsHicUaFwQvSbPKi+DTJUWc0qNmsZxUuw14.
ECDSA key fingerprint is MD5:4a:16:29:8c:33:4f:18:0b:f8:14:ca:f4:e4:63:c4:4e.
Are you sure you want to continue connecting (yes/no)? yest^H
/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
ceph@ceph-mon1's password: 

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'ceph@ceph-mon1'"
and check to make sure that only the key(s) you wanted were added.

ceph-mon1
....省略相似内容....

2.2 安装Ceph部署工具

bash 复制代码
# 命令说明:配置Ceph官方仓库并安装部署工具
# CentOS 7
sudo yum install -y yum-utils epel-release  # 安装必要工具
# 我们使用的是ceph-deploy来安装和管理集群,但官网已经停止了运维
# 这是官网的建议https://docs.ceph.com/en/latest/install/
# 但是咱们头铁啊,搭建这个集群就是为了学习,接着干,咱们先安装python2
curl https://bootstrap.pypa.io/pip/2.7/get-pip.py -o get-pip.py
sudo python2 get-pip.py
# 然后通过python2去安装ceph-deploy
sudo python2 -m pip install ceph-deploy
# 验证,看到输出版本号就成功了
ceph-deploy --version

三、Ceph集群部署流程

3.1 初始化集群配置

bash 复制代码
# 命令说明:创建集群配置目录并生成初始配置文件
mkdir -p ~/ceph-cluster  # 创建工作目录
cd ~/ceph-cluster

# 生成初始配置(指定第一个monitor节点)
ceph-deploy new ceph-mon1 ceph-mon2 ceph-mon3  # 一次性指定所有mon节点

# 编辑ceph.conf添加自定义参数
cat <<EOF >> ceph.conf
# 网络配置
public network = 192.168.10.0/24
cluster network = 192.168.10.0/24

# 存储池默认设置
osd pool default size = 3  # 副本数=节点数
osd pool default min size = 2  # 最小可写副本数
osd pool default pg num = 128  # 初始PG数量
osd pool default pgp num = 128  # 初始PGP数量

# 性能调优
osd max write size = 256  # MB
osd client message size cap = 2147483648  # 2GB
osd deep scrub stride = 131072  # 128KB
osd op threads = 8  # OSD操作线程数

# 允许删除pool(测试环境)
mon allow pool delete = true
EOF

3.2 安装Ceph软件包

bash 复制代码
# 命令说明:在所有节点安装指定版本的Ceph组件
# --release指定版本(如octopus/pacific等),--nogpgcheck跳过GPG验证
ceph-deploy install --release luminous--nogpgcheck \
  --repo-url=https://mirrors.aliyun.com/ceph/rpm-luminous/el7 \
  ceph-mon1 ceph-mon2 ceph-mon3 \
  ceph-osd1 ceph-osd2 ceph-osd3

# 验证安装
ssh ceph@ceph-mon1 "ceph --version"  # 应显示类似"ceph version 15.2.13"

这里开始安装报错,报错基本都集中在安装过程要下载很多依赖,我最开始从https://download.ceph.com/官网下载的,但是网速太慢,下载一直失败,后面改到了阿里的库,--release后面跟的是版本号,我也是尝试了好多版本才成功,由于ceph-deploy工具底层是基于python脚本来安装的,脚本可以用find命令查找install.py,找到后可以大致看看这个脚本,这个所谓的ceph-deploy其实就是通过ssh+远程执行各种命令实现的。

3.3 部署Monitor集群

bash 复制代码
# 命令说明:初始化monitor集群并收集密钥
ceph-deploy mon create-initial  # 创建初始monitor
ceph-deploy admin ceph-mon1 ceph-mon2 ceph-mon3  # 分发admin密钥
ceph-deploy admin ceph-osd1 ceph-osd2 ceph-osd3  # 也分发给OSD节点

# 在所有节点设置密钥权限
for node in {mon1,mon2,mon3,osd1,osd2,osd3}; do
  ssh ceph@ceph-$node "sudo chmod +r /etc/ceph/ceph.client.admin.keyring"
done

3.4 部署Manager守护进程

bash 复制代码
# 命令说明:Manager负责收集集群指标和提供管理接口
ceph-deploy mgr create ceph-mon1 ceph-mon2  # 创建两个mgr实现高可用

# 验证mgr状态
ceph -s | grep mgr  # 应显示一个active,一个standby

3.5 添加OSD存储

bash 复制代码
# 先查看各节点磁盘情况(确认/dev/sdb,/dev/sdc,/dev/sdd为数据盘)
[root@ceph-osd1 dev]# lsblk -f
NAME            FSTYPE      LABEL           UUID                                   MOUNTPOINT
sda                                                                                
├─sda1          xfs                         41c54d03-97f6-4136-a90e-85de62a5f5b3   /boot
└─sda2          LVM2_member                 Hqckhq-BTIX-hglv-jUDI-D6Em-5ZIX-L6OuNu 
  ├─centos-root xfs                         860cd8d2-e1aa-4eec-aa6c-a81b6365d63e   /
  └─centos-swap swap                        39fef166-d11e-477c-8d61-a2c3600cff65   [SWAP]
sdb                                                                                
sdc                                                                                
sr0             iso9660     CentOS 7 x86_64 2018-05-03-20-55-23-00                 
[root@ceph-osd1 dev]# 

在Ceph部署中的关键判断点

识别未使用的磁盘:

FSTYPE 和 MOUNTPOINT 都为空的磁盘可用于 Ceph OSD

示例: 上例中的 sdc 和 sdd 是干净的磁盘

避免误操作:

已挂载(MOUNTPOINT 有值)或有文件系统(FSTYPE 有值)的磁盘不能直接用于 OSD

特殊标识:

LVM2_member: 表示该设备是 LVM 物理卷

swap: 交换分区,不应被 Ceph 使用

crypto_LUKS: 加密磁盘,需要先解密

上图中可以判断sdb、sdc可作为OSD,如果没有可用的盘,可通过给虚拟机添加额外磁盘

bash 复制代码
# 命令说明:准备磁盘并创建OSD(每个OSD节点2块数据盘为例)
# 清理磁盘(会销毁磁盘所有数据!)
for node in {osd1,osd2,osd3}; do
  for disk in {b,c}; do
    ceph-deploy disk zap ceph-$node /dev/sd$disk
  done
done

# 创建OSD(使用--bluestore存储引擎)
for node in {osd1,osd2,osd3}; do
  for disk in {b,c}; do
    ceph-deploy osd create --data /dev/sd$disk --bluestore ceph-$node
  done
done

# 验证OSD状态
ceph osd tree  # 应显示所有OSD为up状态,结果如下
bash 复制代码
[ceph@ceph-mon1 ceph-cluster]$ ceph osd tree
ID CLASS WEIGHT  TYPE NAME          STATUS REWEIGHT PRI-AFF 
-1       0.11691 root default                               
-3       0.03897     host ceph-osd1                         
 0   hdd 0.01949         osd.0          up  1.00000 1.00000 
 1   hdd 0.01949         osd.1          up  1.00000 1.00000 
-5       0.03897     host ceph-osd2                         
 2   hdd 0.01949         osd.2          up  1.00000 1.00000 
 3   hdd 0.01949         osd.3          up  1.00000 1.00000 
-7       0.03897     host ceph-osd3                         
 4   hdd 0.01949         osd.4          up  1.00000 1.00000 
 5   hdd 0.01949         osd.5          up  1.00000 1.00000 
[ceph@ceph-mon1 ceph-cluster]$ 

四、部署Ceph Dashboard

4.1 启用Dashboard模块

bash 复制代码
# 命令说明:启用mgr的dashboard模块并配置SSL
# 在管理节点执行
ceph mgr module enable dashboard  # 启用模块
# 我下载的版本较低,只有基础的看板功能,下面的命令并不能执行, 如果要用较多功能可以尝试使用nautilus版本, 我执行到这里已经来不及了。。这部分我先跳过了
ceph dashboard create-self-signed-cert  # 创建自签名证书
# 配置访问信息
ceph dashboard set-login-credentials admin admin123  # 设置用户名/密码
ceph config set mgr mgr/dashboard/server_addr 0.0.0.0  # 监听所有IP
ceph config set mgr mgr/dashboard/server_port 8443  # 设置端口

# 配置可访问的IP范围(根据需求调整)
ceph dashboard set-access-rule 192.168.10.0/24

4.2 验证Dashboard访问

bash 复制代码
# 命令说明:检查dashboard服务状态并获取访问URL
ceph mgr services  # 查看服务地址(应显示dashboard地址)

# 输出示例:
# {
#   "dashboard": "http://ceph-mon1:7000/"
# }

通过浏览器访问 https://<monitor-ip>:8443,使用设置的用户名密码登录。

五、部署Prometheus监控

5.1 启用Prometheus模块

bash 复制代码
# 命令说明:配置Ceph输出Prometheus格式的指标
ceph mgr module enable prometheus  # 启用prometheus模块

# 配置Prometheus监听端口(默认9283)
ceph config set mgr mgr/prometheus/server_port 9283
ceph config set mgr mgr/prometheus/server_addr 0.0.0.0

5.2 安装和配置Prometheus服务器

bash 复制代码
# 在管理节点或专用监控节点上安装Prometheus
sudo useradd -M -s /sbin/nologin prometheus
sudo mkdir /etc/prometheus /var/lib/prometheus
sudo chown prometheus:prometheus /var/lib/prometheus

# 下载并安装Prometheus(以2.30.3为例)
wget https://github.com/prometheus/prometheus/releases/download/v2.30.3/prometheus-2.30.3.linux-amd64.tar.gz
tar xvf prometheus-*.tar.gz
cd prometheus-*/

# 安装二进制文件
sudo cp prometheus promtool /usr/local/bin/
sudo cp -r consoles/ console_libraries/ /etc/prometheus/
sudo cp prometheus.yml /etc/prometheus/

# 创建服务文件
sudo bash -c 'cat <<EOF > /etc/systemd/system/prometheus.service
[Unit]
Description=Prometheus
Wants=network-online.target
After=network-online.target

[Service]
User=prometheus
Group=prometheus
Type=simple
ExecStart=/usr/local/bin/prometheus \
    --config.file=/etc/prometheus/prometheus.yml \
    --storage.tsdb.path=/var/lib/prometheus/ \
    --web.console.templates=/etc/prometheus/consoles \
    --web.console.libraries=/etc/prometheus/console_libraries

[Install]
WantedBy=multi-user.target
EOF'

# 配置Prometheus采集Ceph指标
sudo bash -c 'cat <<EOF > /etc/prometheus/prometheus.yml
global:
  scrape_interval: 15s
  evaluation_interval: 15s

scrape_configs:
  - job_name: "ceph"
    static_configs:
      - targets: 
          - "ceph-mon1:9283"
          - "ceph-mon2:9283"
          - "ceph-mon3:9283"
    honor_labels: true
    metrics_path: /metrics
EOF'

# 启动服务
sudo systemctl daemon-reload
sudo systemctl enable prometheus
sudo systemctl start prometheus

5.3 安装Grafana可视化(可选)

bash 复制代码
# 安装Grafana
sudo yum install -y https://dl.grafana.com/oss/release/grafana-8.1.5-1.x86_64.rpm
sudo systemctl enable grafana-server
sudo systemctl start grafana-server

# 配置Grafana数据源
# 1. 访问http://<server-ip>:3000
# 2. 添加Prometheus数据源(URL: http://localhost:9090)
# 3. 导入Ceph仪表板(ID: 2842)

六、验证与测试

6.1 检查集群状态

bash 复制代码
ceph -s  # 整体状态
ceph osd status  # OSD状态
ceph df  # 存储用量
ceph pg dump | grep ^[0-9] | awk '{print $1,$2,$15}'  # PG状态

6.2 创建测试存储池

bash 复制代码
# 创建测试池
ceph osd pool create test_pool 128 128
ceph osd pool application enable test_pool rbd

# 执行基准测试
rados bench -p test_pool 10 write --no-cleanup
rados bench -p test_pool 10 seq
rados bench -p test_pool 10 rand

七、生产环境建议

  1. 节点分离:生产环境建议将monitor节点与OSD节点分离

  2. 网络优化:使用10G网络,分离public/cluster网络

  3. 监控增强:配置告警规则和长期存储

  4. 定期维护 :设置cron作业定期执行ceph osd deep-scrub

  5. 备份策略 :定期备份集群关键数据:

    bash 复制代码
    ceph mon getmap -o monmap.backup
    ceph osd getcrushmap -o crushmap.backup
    ceph auth export -o auth.backup

通过以上完整流程,您已成功在虚拟机环境部署了包含Dashboard和Prometheus监控的Ceph集群。可以根据实际需求调整配置参数和节点规模。

相关推荐
三十..16 小时前
Ceph分布式存储核心技术精要与运维实践指南
运维·分布式·ceph
一个行走的民17 小时前
Ceph OSD NUMA 亲和性、Page Cache 跨 NUMA 访问与绑核实践
ceph
潮起鲸落入海18 小时前
ceph集群组件管理 ceph orch 和ceph config命令
ceph
bukeyiwanshui18 小时前
20260529 Ceph 分布式存储 认证和授权管理
ceph
bukeyiwanshui19 小时前
20260528 Ceph 分布式存储 池管理
ceph
一个行走的民19 小时前
CephX 认证机制深度解析
ceph
马立杰21 小时前
Ceph 集群手动部署
ceph·分布式存储
bukeyiwanshui21 小时前
20260528 Ceph 分布式存储 集群配置
分布式·ceph
qq_356408661 天前
Kubernetes Rook-Ceph 高可用存储部署文档
ceph·容器·kubernetes
潮起鲸落入海1 天前
ceph集群mon 以及池管理
ceph