虚拟机环境部署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解析
# 命令说明:设置永久主机名并更新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
七、生产环境建议
- 节点分离:生产环境建议将monitor节点与OSD节点分离
- 网络优化:使用10G网络,分离public/cluster网络
- 监控增强:配置告警规则和长期存储
- 定期维护:设置cron作业定期执行
ceph osd deep-scrub
- 备份策略:定期备份集群关键数据:
ceph mon getmap -o monmap.backup ceph osd getcrushmap -o crushmap.backup ceph auth export -o auth.backup
通过以上完整流程,您已成功在虚拟机环境部署了包含Dashboard和Prometheus监控的Ceph集群。可以根据实际需求调整配置参数和节点规模。