0%

Proxmox VE + Ceph 集群搭建

Proxmox Virtual Environment,简称 PVE,是一个基于 Debian 的服务器虚拟化环境,虚拟化方案是 QEMU/KVM,同时支持 LXC 容器。
此次搭建使用的镜像是:proxmox-ve_8.0-2.iso

PVE 搭建步骤概览:

  • 下载 ISO 镜像,按照步骤安装,选择磁盘,关闭 SWAP,设置 FQDN 和固定 IP
  • 安装完成,使用 https://ip:8006 登录管理界面
  • 修改网络配置,修改 hosts,添加所有节点的 IP 地址
  • 修改软件源,安装更新,安装 Ceph
  • 创建集群,加入集群
  • 配置 ACME 生成 HTTPS 证书(可选)
  • 初始化 Ceph,按照磁盘添加 OSD,为每台主机添加 mon 和 mgr,创建存储池
  • 创建 mds,配置 CephFS
  • 上传系统安装镜像,安装虚拟机,放置磁盘到 Ceph 存储池
  • 配置 HA

下面是详细的操作记录。

环境规划

为了搭建高可用集群,官方的推荐是至少 3 节点,这里使用 3 台虚拟机进行测试,后续也可以继续添加新的节点到集群。
经过测试,在使用 2 节点搭建集群也可以部署 Ceph 集群,执行虚拟机迁移也正常。但是如果有节点离线,Ceph 直接不可用
实验节点配置如下:
节点配置信息

  • 硬盘分配

32G 的盘用于安装操作系统,在实际的环境中,应该使用两块 SSD 做成 RAID1 以确保数据安全。
512G 的盘作为数据存储,可以按照实际需求添加。
如果打算使用 Ceph 分布式存储,这些存储盘不应该做 RAID,而是直通到系统,由 Ceph 统一管理(类似 VMware vSAN)。

  • 网络规划

管理网络:192.168.1.0/24
集群网络:192.168.10.0/24
存储网络:192.168.20.0/24
集群和存储网络尽可能使用 10Gbps 及以上速率的网卡,也可以使用多网卡做端口聚合。

如果使用虚拟机测试,需要修改下网络设置。
打开虚拟机 vmx 配置文件,找到 ethernet0.virtualDev = "e1000" 这样的内容,ethernet0 是网卡序号,修改对应集群和存储的网卡设置,将 e1000 改成 vmxnet3,可以实现虚拟机之间的 10Gbps 网络速率。

系统配置

系统安装步骤很简单,和普通的 Linux 安装步骤差不多。
选择正确的磁盘进行安装,如果内存足够,可以在选择磁盘时将 swapsize 设为 0 关闭 swap 虚拟内存。
配置静态 IP,写上 FQDN:
网络设置

系统安装完成,使用控制台提供的地址登录:https://ip:8006,用户名 root,接下来需要完成一些初始配置。

修改软件源

参考:Proxmox 源使用帮助
命令如下:

1
2
3
4
5
6
7
8
9
# 修改 Debian 源
sed -i 's|http://ftp.debian.org|https://mirrors.ustc.edu.cn|g' /etc/apt/sources.list
sed -i 's|http://security.debian.org|https://mirrors.ustc.edu.cn/debian-security|g' /etc/apt/sources.list
# 修改 PVE 源
sed -i 's|enterprise.proxmox.com|mirrors.ustc.edu.cn/proxmox|g' /etc/apt/sources.list.d/pve-enterprise.list
# 修改 Ceph 源
sed -i 's|enterprise.proxmox.com|mirrors.ustc.edu.cn/proxmox|g' /etc/apt/sources.list.d/ceph.list
# 修改 PVE 和 Ceph 为非订阅源
sed -i 's|enterprise|no-subscription|g' /etc/apt/sources.list.d/{pve-enterprise,ceph}.list

修改完成后,执行一次更新:
apt update && apt full-upgrade -y

去除未订阅提示

1
2
sed -i.bak "s/data.status.toLowerCase() !== 'active'/false/g" /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js
systemctl restart pveproxy.service

参考来源:pvetools

修改网络配置

在网页选到对应的节点,系统->网络菜单,创建 Linux Bridge
Linux Bridge 创建
根据规划,修改完成如下:
网络概要
点击应用配置后更改生效。

然后在系统->主机菜单中修改 hosts:

1
2
3
4
5
6
7
8
9
10
11
12
# 管理
192.168.1.220 pve20.moenew.us pve20
192.168.1.230 pve30.moenew.us pve30
192.168.1.240 pve40.moenew.us pve40
# 集群
192.168.10.220 pve20.moenew.us pve20
192.168.10.230 pve30.moenew.us pve30
192.168.10.240 pve40.moenew.us pve40
# 存储
192.168.20.220 pve20.moenew.us pve20
192.168.20.230 pve30.moenew.us pve30
192.168.20.240 pve40.moenew.us pve40

集群配置

各节点按照上面的步骤配置完成后,可以开始配置集群。
因为 PVE 的集群是去中心化的,可以在任意节点创建集群,然后其他节点加入,完成后可以在任意节点管理整个集群。

登录到网页,在数据中心->集群中点击创建集群
创建集群
选择合适的集群网络,在实际生产环境中,可以添加多个网络确保高可用。

创建完成后,点击加入信息,复制加入信息,登录其他节点,在数据中心->集群中点击加入集群,粘贴刚才复制的内容后,按照提示填入密码,选择正确的集群网络:
加入集群
加入完成后,在任意节点的网页都可以看到所有节点,各个节点会配置 ssh 密钥互相免密码登录,集群和虚拟机的配置文件 /etc/pve 会自动同步。
集群内节点要求时间同步一致,默认已经安装了 Chrony 服务,可以用 chronyc makestep 命令手动同步时间。

HTTPS 证书配置

这个步骤不是必须的。
数据中心->ACME->账户中点击添加,按照要求填入注册信息。
ACME 注册
因为是测试环境所以就随便填了,注意 ACME 目录不要选到 Let’s Encrypt V2 Staging 了。

然后在下方的质询插件中,根据域名服务商填写好对应的信息。
选到对应的节点,系统->凭证->ACME,中点击添加,填好对应的信息:
ACME 添加
在上方选择之前添加的账户,然后点击立即预定凭证,等待证书申请完成后,使用对应的域名访问,可以发现 HTTPS 证书已经生效了。

Ceph 分布式存储

Ceph 是一个分布式的软件定义存储,类似于 VMware vSphere 的 vSAN,可以将数据的多个副本存储在多个节点,确保数据高可用。
默认没有安装 Ceph,需要先安装。如果在网页点击安装,将会把 Ceph 软件源改为官方地址,所以这里在各节点用命令安装:
apt install ceph -y

安装完成后,在数据中心->Ceph 中点击配置 Ceph
配置 Ceph
选好正确的网络,如有需要,Cluster Network 和 Public Network 可以分开。
参考:Initial Ceph Installation & Configuration

在节点的 Ceph->监视器,为其他节点也添加 MonitorManager至少 3 个就够了
配置监视器

在节点的 Ceph->OSD 菜单中,为每个磁盘创建 OSD
配置 OSD
如果 OSD 创建后被错误的识别为 HDD,可以在创建时指定 设备类型
在每个节点都创建完 OSD 后如图:
OSD 概要

OSD 配置完成后,需要配置资源池才可以使用 OSD 的容量。在节点的 Ceph->资源池 菜单中,为每个磁盘创建 OSD
创建资源池
资源池创建完成后,在数据中心->存储和每台主机下都可以看到新建的存储 vm_pool,虚拟机的磁盘也可以放置到 vm_pool 上了。

不过这个存储只能用于存储虚拟机磁盘文件,如果是需要存储 ISO 镜像或备份文件,则需要创建 CephFS
在节点的 Ceph->CephFS->元数据服务器,为每台主机创建,然后创建 CephFS
创建资源池

最终的效果如下:
集群概要
存储概要
Ceph 概要
Ceph 资源池

HA 测试

集群和共享存储配置完成后,可以开始测试 HA 高可用环境了。
创建虚拟机,磁盘需要放到共享存储上,如果不是,需要先迁移。

数据中心->HA->资源添加虚拟机:
HA 配置
等待状态变成 started 后,HA 就会启用。
和 VMware vSphere 的 HA 功能一样,如果检测到虚拟机所在的节点异常,则会在另外的节点重启虚拟机。
虚拟机启用 HA 的状态:
虚拟机迁移前状态

这里为了测试,在虚拟机安装了 Nginx,使用 tcping 检测 80 端口的连接情况,然后强行关闭虚拟机所在的节点 pve20
节点断开后的状态:
集群状态
Ceph 状态

等待一段时间后,集群发现 pve20 已离线,在 pve30 重新启动了虚拟机。
虚拟机重启后的情况:
虚拟机迁移后状态

tcping 检测命令:
tcping --color -t -w 1 -i 0.1 -p 80 192.168.1.102
检测情况:
tcping 检测

使用总结

之前有搭建过 VMware vSphere ESXi 集群,这次搭建 PVE 集群发现了很多和 vSphere 不一样的地方。

  • 系统

vCSA 的系统服务挺多,之前部署的时候就因为缺少 DNS 解析而安装失败,也有因为修改 IP 等导致服务无法启动,无法成功启动集群管理界面,只能备份后重装。
PVE 的系统,基本上就是加了网页管理界面的 Debian,对 Debian/Ubuntu 的使用经验完全适用,如果节点发现连不上集群,会自动重启。
vSphere ESXi 主要是面向企业,有一个 vSAN 硬件兼容性检查列表,如果是未被认证的硬件,会在管理界面警告;PVE 和普通的 Linux 一样,在家用机也能正常安装使用。

  • 管理

vSphere 每个节点有单独的管理页面,要做集群统一管理必须安装 VMware vCenter Server Appliance(vCSA)进行管理。
如果 vCSA 没做好高可用,放置 vCSA 的节点出现故障的话,将会直接无法管理整个集群。
PVE 是去中心化管理,不需要安装额外的软件或系统,做成集群后,可以通过任意节点的管理页面管理集群内所有节点。

  • 存储

vSphere vSAN 有 缓存层容量层这样的方便的设置,而 PVE 中的 Ceph 在管理页面中无论是 SSD 还是 HDD,都是直接添加到容量池使用,如果需要区分,需要手动调整策略
Ceph 分布式存储也是去中心化的设计,存储的数据会按照设定的副本数存储在多个节点,可以添加多个 MonitorManager 服务,同时运行的 Manager 只有一个,检测到故障会切换,在有节点出现故障时,只要还有正常工作的 MonitorManager 服务,虚拟机的 HA 和迁移功能仍然可用。

  • 网络

vSphere 可以用分布式交换机 DSwitch 批量管理多个节点的网络,虚拟机在节点间迁移时也可以选择迁移到哪个网络,如果各个节点的网络设置不相同,这个功能会很方便。
在 PVE 暂时没发现这个功能。

  • 高可用

VMware vSphere 有 HA 和 FT 两种高可用方式,其中 FT 是虚拟机同时在多个节点运行,通过网络同步内存状态,如果其中一个虚拟机所在的节点出现异常,可以马上切换到备用的,不会丢失运行时状态。
PVE 只有 HA,和 VMware vSphere 一样,都是检测到异常后在另外一个节点重新启动虚拟机,会丢失运行时状态,磁盘数据正常保留。

  • 虚拟机
    PVE 的 Windows 虚拟机,如果使用 VirtIO 的磁盘或网卡,会因为缺少驱动无法使用,需要在安装系统时加载 VirtIO 驱动盘 安装对应的驱动。