当前位置: 首页 > news >正文

虚拟机环境部署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-mon1192.168.10.10Monitor1, Manager1, Deploy2vCPU/4GB RAM
ceph-mon2192.168.10.11Monitor2, Manager22vCPU/4GB RAM
ceph-mon3192.168.10.12Monitor32vCPU/4GB RAM
ceph-osd1192.168.10.21OSD节点(3磁盘)4vCPU/8GB RAM
ceph-osd2192.168.10.22OSD节点(3磁盘)4vCPU/8GB RAM
ceph-osd3192.168.10.23OSD节点(3磁盘)4vCPU/8GB RAM

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

主机名IP地址角色建议配置
ceph-mon1192.168.10.10Monitor1, Manager1, Deploy2vCPU/4GB RAM
ceph-osd1192.168.10.21OSD节点(3磁盘)4vCPU/8GB RAM
ceph-osd2192.168.10.22OSD节点(3磁盘)4vCPU/8GB RAM

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

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

1.2.1 设置主机名和hosts解析
# 命令说明:设置永久主机名并更新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和防火墙
# 命令说明:关闭安全增强功能(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时间同步
# 命令说明:确保所有节点时间同步,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 创建专用部署用户
# 命令说明:创建专用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免密登录

# 命令说明:生成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; dossh-copy-id ceph@$node  # 需要输入各节点ceph用户密码# 测试连接ssh ceph@$node "hostname"  # 确认能免密登录
done

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

[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: 1Now 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部署工具

# 命令说明:配置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 初始化集群配置

# 命令说明:创建集群配置目录并生成初始配置文件
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软件包

# 命令说明:在所有节点安装指定版本的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集群

# 命令说明:初始化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}; dossh ceph@ceph-$node "sudo chmod +r /etc/ceph/ceph.client.admin.keyring"
done

3.4 部署Manager守护进程

# 命令说明:Manager负责收集集群指标和提供管理接口
ceph-deploy mgr create ceph-mon1 ceph-mon2  # 创建两个mgr实现高可用# 验证mgr状态
ceph -s | grep mgr  # 应显示一个active,一个standby

3.5 添加OSD存储

# 先查看各节点磁盘情况(确认/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,如果没有可用的盘,可通过给虚拟机添加额外磁盘

# 命令说明:准备磁盘并创建OSD(每个OSD节点2块数据盘为例)
# 清理磁盘(会销毁磁盘所有数据!)
for node in {osd1,osd2,osd3}; dofor disk in {b,c}; doceph-deploy disk zap ceph-$node /dev/sd$diskdone
done# 创建OSD(使用--bluestore存储引擎)
for node in {osd1,osd2,osd3}; dofor disk in {b,c}; doceph-deploy osd create --data /dev/sd$disk --bluestore ceph-$nodedone
done# 验证OSD状态
ceph osd tree  # 应显示所有OSD为up状态,结果如下
[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模块

# 命令说明:启用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访问

# 命令说明:检查dashboard服务状态并获取访问URL
ceph mgr services  # 查看服务地址(应显示dashboard地址)# 输出示例:
# {
#   "dashboard": "http://ceph-mon1:7000/"
# }

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

五、部署Prometheus监控

5.1 启用Prometheus模块

# 命令说明:配置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服务器

# 在管理节点或专用监控节点上安装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: 15sevaluation_interval: 15sscrape_configs:- job_name: "ceph"static_configs:- targets: - "ceph-mon1:9283"- "ceph-mon2:9283"- "ceph-mon3:9283"honor_labels: truemetrics_path: /metrics
EOF'# 启动服务
sudo systemctl daemon-reload
sudo systemctl enable prometheus
sudo systemctl start prometheus

5.3 安装Grafana可视化(可选)

# 安装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 检查集群状态

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

6.2 创建测试存储池

# 创建测试池
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. 备份策略:定期备份集群关键数据:
    ceph mon getmap -o monmap.backup
    ceph osd getcrushmap -o crushmap.backup
    ceph auth export -o auth.backup
    

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

http://www.dtcms.com/a/328022.html

相关文章:

  • 「让AI大脑直连Windows桌面」:深度解析Windows-MCP,开启操作系统下一代智能交互
  • Hi3DEval:以分层有效性推进三维(3D)生成评估
  • 【树状数组】Range Update Queries
  • 《Leetcode》-面试题-hot100-栈
  • Apache SeaTunnel 新定位!迈向多模态数据集成的统一工具
  • 亚马逊与UPS规则双调整:从视觉营销革新到物流成本重构的运营战略升级
  • linux下安装php
  • Linux内核编译ARM架构 linux-6.16
  • Node.js 和 npm 的关系详解
  • 能刷java题的网站
  • FPGA即插即用Verilog驱动系列——按键消抖
  • 【JavaEE】多线程之线程安全(中)
  • 第5章 AB实验的随机分流
  • 圆柱电池自动分选机:新能源时代的“质量卫士”
  • 各版本IDEA体验
  • Next.js 中间件:自定义请求处理
  • LeetCode 分割回文串
  • 终端互动媒体业务VS终端小艺业务
  • 本地部署开源媒体中心软件 Kodi 并实现外部访问( Windows 版本)
  • Perl——文件操作
  • 工业相机终极指南:驱动现代智能制造的核心“慧眼”
  • 云原生作业(tomcat)
  • 优选算法 力扣 18. 四数之和 双指针算法的进化 优化时间复杂度 C++ 题解 每日一题
  • Perl——$_
  • Bevy渲染引擎核心技术深度解析:架构、体积雾与Meshlet渲染
  • UE5.3 C++ 动态多播实战总结
  • AtCoder Beginner Contest 418 C-E 题解
  • 数据分析小白训练营:基于python编程语言的Numpy库介绍(第三方库)(上篇)
  • python3 undefined symbol: _Py_LegacyLocaleDetected
  • C语言结构体与内存分配:构建复杂数据结构的基石