Proxmox VE + Ceph 超融合集群部署实录

发布于 2024-06-23  815 次阅读


这是本人第一次接触集群配置、交换机配置等内容,本文仅作为实况记录,如有误欢迎于评论给出,或通过主页联系方式直接联系本人。

前言

Proxmox VE 是用于企业虚拟化的开源服务器管理平台。借助基于 Web 的集成用户页面,可以轻松管理虚拟机与容器,并在服务器集群上便捷部署高可用方案与灾难恢复工具。

Ceph 是一个高效的分布式存储系统,它可以将多台服务器中的硬盘聚合为一个存储集群,对外提供块存储、文件存储、对象存储等服务。它采用多副本方式存储数据,可有效避免单点故障造成的业务中断与数据丢失。PVE 自带了 Ceph 的图形化安装与管理工具,可在 PVE 集群搭建完成后快速完成 Ceph 的安装与配置。

超融合 即“虚拟化计算+分布式存储”架构,将物理服务器集群中的计算资源与存储资源分离并统一管理。计算与存储资源由固定物理服务器硬件抽象至灵活虚拟资源,使得业务可凭借虚拟化计算集群与分布式存储集群的特性,提升可靠性、可扩展性与易管理性。

本例中我们使用 PVE 提供“虚拟化计算”,由 Ceph 提供“分布式存储”。

硬件环境

概要

  • Switch 1:H3C S6800-54QF-H3,万兆光口交换机。
  • Switch 2:H3C S5130S-52S-HI,千兆电口交换机。
  • Server 1~3:Dell R730XD 服务器,2U,配置相同,每台服务器提供 16 个 3.5 寸盘位,用于构建超融合集群。
  • Server 4:Dell R730 服务器,2U,旧服务器。

除 Server 4 以外所有设备均为新购入二手设备,未进行任何配置。Server 4 并不参与超融合配置,计划将于超融合集群配置完毕后迁移所有机内旧数据至集群,并废弃此服务器。

计算&存储资源

  • Server 1~3
    • CPU:E5-2680v4 14C28T 2.4~3.3GHz x2
    • Memory:16GB 2400T DDR4 x4
    • RAID Controller: H730 mini
    • NVMe SSD:Intel P4510 2T
    • SATA SSD:Intel S3610 800G x2
    • SAS HDD:Seagate 6T x4
  • Server 4
    • CPU:E5-2680v4 14C28T 2.4~3.3GHz x2
    • Memory:16GB 2133P DDR4 x6
    • RAID Controller: H730 mini
    • SAS HDD:WD 900G x8

网络资源

  • Switch 1:48 个 10Gbps 光口,6 个 40Gbps 光口。
  • Switch 2:48 个 1Gbps 电口,4 个 10Gbps 光口。
  • Server 1~3:2 个 1Gbps 电口(eno3, eno4),4 个 10Gbps 光口(eno1, eno2, enp130s0f0, enp130s0f1)。
  • Server 4:4 个 1Gbps 电口(eno1, eno2, eno3, eno4),2 个 10Gbps 光口(enp6s0f0, enp6s0f1)。

网络规划

Vlan ID 用途 网段 网关 Switch 1 Switch 2
vlan1 管理 10.1.0.0/16 10.1.255.0
vlan2 业务 192.168.1.0/24 192.168.1.1
vlan3 Ceph 前端 10.3.0.0/16 10.3.255.0
vlan4 Ceph 后端 10.4.0.0/16 10.4.255.0

网络配置

连接交换机

为交换机通电后,通过 console 线连接交换机,串口配置如下:

  • 波特率:9600
  • 数据位:8
  • 停止位:1
  • 奇偶校验:无
  • 流控制:无

由于两台交换机均为二手产品,先执行如下命令重置出场设置:

restore factory-default

Switch 2 设置

由于房间的外网接入网线为电缆,因此先配置电口交换机 Switch 2。

Switch 2 拥有 48 个 1Gbps 电口(GE1/0/1~GE1/0/48)与 4 个 10Gbps 光口(XGE1/0/49~XGE1/0/52)。

交换机间链路聚合

Switch 1 与 Switch 2 之间的连接通过 2 个 10Gbps 光口链路聚合,这里使用 XGE1/0/51XGE1/0/52 进行 LACP 动态链路聚合。

创建链路聚合口 BAGG1,设置为 trunk 并启用 LACP:

[switch2]interface Bridge-Aggregation 1
[switch2-Bridge-Aggregation1]port link-type trunk
[switch2-Bridge-Aggregation1]port trunk permit vlan all
[switch2-Bridge-Aggregation1]link-aggregation mode dynamic

将端口加入链路聚合口:

[switch2]interface XGE1/0/51
[switch2-Ten-GigabitEthernet1/0/51]port link-aggregation group 1 force
[switch2-Ten-GigabitEthernet1/0/51]interface XGE1/0/52
[switch2-Ten-GigabitEthernet1/0/52]port link-aggregation group 1 force

此时通过 display link-aggregation verbose 查看信息时应仅有一个端口处于选中(selected)状态,是由于 Switch 1 尚未在对应端口配置链路聚合。

vlan 划分

Vlan ID 用途 网段 网关 Switch 2 端口
vlan1 管理 10.1.0.0/16 10.1.255.0 GE1/0/1~GE1/0/24BAGG1
vlan2 业务 192.168.1.0/24 192.168.1.1 GE1/0/25~GE1/0/48, BAGG1
[switch2]vlan 1
[switch2-vlan1]port GE1/0/1 to GE1/0/16
Cannot assign ports to or remove ports from the default VLAN.
[switch2-vlan1]vlan 2
[switch2-vlan2]port GE1/0/25 to GE1/0/48

(添加入 vlan 1 时报错是因为 vlan 1 为默认 vlan。)

端口类型设置

GE1/0/1~GE1/0/48 类型设置为 access

[switch2]interface range GE1/0/1 to GE1/0/48
[switch2-if-range]port link-type access

在管理网络提供网关与 DHCP 服务

在 vlan1 创建虚拟接口并设置 IP 地址。

[switch2]interface vlan 1
[switch2-Vlan-interface1]ip address 10.1.255.0 255.255.0.0

开启 DHCP 服务,并将该接口设置为网关。

[switch2]dhcp enable
[switch2]dhcp server ip-pool 1
[switch2-dhcp-pool-1]network 10.1.0.0 mask 255.255.0.0
[switch2-dhcp-pool-1]gateway-list 10.1.255.0
[switch2-dhcp-pool-1]dns-list 10.1.255.0

连接外网

为 vlan2 创建虚拟接口并设置 IP 地址。

[switch2]interface vlan 2
[switch2-Vlan-interface2]ip address 192.168.1.253 255.255.255.0

再添加静态路由指向上级运营商路由,并配置 DNS 服务器。

[switch2]ip route-static 0.0.0.0 0.0.0.0 192.168.1.1
[switch2]dns server 192.168.1.1
[switch2]dns proxy enable

Switch 1 设置

Switch 1 拥有 48 个 10Gbps 光口(XGE1/0/1~XGE1/0/48)与 6 个 40Gbps 光口(FGE1/0/49~FGE1/0/54)。

交换机间链路聚合

Switch 1 与 Switch 2 之间的连接通过 2 个 10Gbps 光口链路聚合,这里使用 XGE1/0/47XGE1/0/48 进行 LACP 动态链路聚合。

创建链路聚合口 BAGG1,设置为 trunk 并启用 LACP:

[switch1]interface Bridge-Aggregation 1
[switch1-Bridge-Aggregation1]port link-type trunk
[switch1-Bridge-Aggregation1]port trunk permit vlan all
[switch1-Bridge-Aggregation1]link-aggregation mode dynamic

将端口加入链路聚合口:

[switch1]interface XGE1/0/47
[switch1-Ten-GigabitEthernet1/0/47]port link-aggregation group 1 force
[switch1-Ten-GigabitEthernet1/0/47]interface XGE1/0/48
[switch1-Ten-GigabitEthernet1/0/48]port link-aggregation group 1 force

此时通过 display link-aggregation verbose 查看信息时两个端口应均处于选中(selected)状态,说明交换机间链路聚合正常工作。

vlan 划分

Vlan ID 用途 网段 网关 Switch 2 端口
vlan2 业务 192.168.1.0/24 192.168.1.1 XGE1/0/33~XGE1/0/46, BAGG1
vlan3 Ceph 前端 10.3.0.0/16 10.3.255.0 XGE1/0/17~XGE1/0/32BAGG1
vlan4 Ceph 后端 10.4.0.0/16 10.4.255.0 XGE1/0/1~XGE1/0/16BAGG1
[switch1]vlan 2
[switch1-vlan2]port XGE1/0/33 to XGE1/0/46
[switch1-vlan2]vlan 3
[switch1-vlan3]port XGE1/0/17 to XGE1/0/32
[switch1-vlan3]vlan 4
[switch1-vlan4]port XGE1/0/1 to XGE1/0/16

端口类型设置

XGE1/0/1~XGE1/0/46类型设置为access

[switch1]interface range XGE1/0/1 to XGE1/0/46
[switch1-if-range]port link-type access

在 Ceph 前后端网络提供网关与 DHCP 服务

创建虚拟接口并设置 IP 地址。

[switch1]interface vlan 3
[switch1-Vlan-interface3]ip address 10.3.255.0 255.255.0.0
[switch1-Vlan-interface3]interface vlan 4
[switch1-Vlan-interface3]ip address 10.4.255.0 255.255.0.0

开启 DHCP 服务,并将对应接口设置为网关。

[switch1]dhcp enable
[switch1]dhcp server ip-pool 3
[switch1-dhcp-pool-3]network 10.3.0.0 mask 255.255.0.0
[switch1-dhcp-pool-3]gateway-list 10.3.255.0
[switch1-dhcp-pool-3]dns-list 10.3.255.0
[switch1-dhcp-pool-3]dhcp server ip-pool 4
[switch1-dhcp-pool-4]network 10.4.0.0 mask 255.255.0.0
[switch1-dhcp-pool-4]gateway-list 10.4.255.0
[switch1-dhcp-pool-4]dns-list 10.4.255.0

连接外网

为 vlan2 创建虚拟接口并设置 IP 地址。

[switch1]interface vlan 2
[switch1-Vlan-interface2]ip address 192.168.1.254 255.255.255.0

再添加静态路由指向上级运营商路由,并配置 DNS 服务器。

[switch1]ip route-static 0.0.0.0 0.0.0.0 192.168.1.1
[switch1]dns server 192.168.1.1
[swtich1]dns proxy enable

Proxmox VE 配置

服务器初始化

使用网线直接连接服务器 idrac 端口,访问默认 IP 192.168.0.120 后将 idrac IP 改入管理网段,并将 idrac 接口连入 switch 2 管理接口。这里将四台服务器的 idrac IP 设置为 10.1.1.010.1.2.010.1.3.010.1.4.0

为方便管理,此处将四台服务器的 idrac 端口均改为 eno4,并连接到 switch 2 管理网段端口。

之后使用管理 IP 重新连接服务器 idrac 页面,使用虚拟控制台连接服务器画面。

第一次连接时先进入 BIOS 页面,对 H730 mini 阵列卡进行设置,将两块 SATA SSD 组成 RAID1 阵列作为系统盘,对 NVMe SSD 不作操作,对四块 SAS SSD 设置为直通模式。

安装 Proxmox VE 系统

下载 PVE 的系统镜像,为设备依次安装 PVE。

这里将系统安装在我们组为 RAID1 阵列的两块 SATA SSD 上。

PVE IP 设置为 10.1.1.110.1.2.110.1.3.110.1.4.1

为方便管理,此处将四台服务器的 PVE 端口也改为 eno4,与 idrac 共用同一端口接入 switch 2 管理网段。

组建 Proxmox VE 集群

为服务器安装完毕 PVE 系统后,将 server 1~3 通过管理网络(vlan1 10.1.0.0/16)互联构建 PVE 集群。server 4 由于已经拥有旧虚拟机,无法加入集群。

Proxmox VE 连接业务网络

默认情况网络配置应类似下图:

此时服务器内仅存在桥接 switch 2 的管理网络的虚拟网桥 vmbr0

为连接业务网络,并通过业务网络连接 Internet,我们创建新的虚拟网桥 vmbr1,桥接光口 enp130s0f0 并连接到 switch 1 的业务网络。为此我们如下配置:

网关 192.168.1.1 填入 vmbr1 设置是因为服务器默认网关应使用业务网络网关,以达成访问 Internet 目的。直接如上设置会遇到默认网关设置冲突问题(vmbr0 已设置默认网关),删除 vmbr0 网关配置即可。

最终配置如下:

此时服务器可直接连接 Internet,并可通过 vmbr0vmbr1 连接对应 vlan。

以同样的方法配置另外三台服务器即可。

更换软件源

此处使用 USTC Proxmox Mirror

运行如下命令:

# Debian 源
sed -i 's|^deb http://ftp.debian.org|deb https://mirrors.ustc.edu.cn|g' /etc/apt/sources.list
sed -i 's|^deb http://security.debian.org|deb https://mirrors.ustc.edu.cn/debian-security|g' /etc/apt/sources.list

# Proxmox VE 源
echo "deb https://mirrors.ustc.edu.cn/proxmox/debian/pve bookworm pve-no-subscription" > /etc/apt/sources.list.d/pve-no-subscription.list

# Ceph 源
if [ -f /etc/apt/sources.list.d/ceph.list ]; then
  CEPH_CODENAME=`ceph -v | grep ceph | awk '{print $(NF-1)}'`
  source /etc/os-release
  echo "deb https://mirrors.ustc.edu.cn/proxmox/debian/ceph-$CEPH_CODENAME $VERSION_CODENAME no-subscription" > /etc/apt/sources.list.d/ceph.list
fi

# Proxmox VE 的 CT Templates 源
sed -i.bak 's|http://download.proxmox.com|https://mirrors.ustc.edu.cn/proxmox|g' /usr/share/perl5/PVE/APLInfo.pm
service pvedaemon restart

# 有需要可删除 Proxmox VE Enterprise 源
rm /etc/apt/sources.list.d/pve-enterprise.list

NTP 服务同步时间

apt install ntpdate -y

使用阿里云 NTP 服务同步时间。

crontab -e

写入:

0 0 * * 0 ntpdate ntp1.aliyun.com

Ceph 配置

由于 server 4 不参与集群配置,配置 Ceph 的大部分过程仅讨论 server 1~3。

安装 Ceph

通过 GUI 安装 Ceph 时 Ceph 源将被强制换为 Proxmox 官方源,下载速度较慢。

可以直接依次在每台服务器中输入直接安装 Ceph:

apt install ceph -y

Ceph 节点简介

  • Ceph MON:Ceph 监视器(Monitor),负责维护集群状态映射,帮助协调 Ceph 守护进程,并负责管理守护进程与客户端之间的身份验证。通常需要至少三个 MON 节点。
  • Ceph MGR:Ceph 管理器守护进程(Manager Daemon),负责跟踪运行时指标和 Ceph 当前运行状态,并负责管理和公开 Ceph 集群信息。通常需要至少两个 MAN 节点。
  • Ceph OSD:Ceph 对象存储守护进程(Object Storage Daemon),负责存储数据、处理数据复制、恢复、重新平衡,并通过检查其他 OSD 心跳向 Ceph 监视器和管理器提供监视信息。通常需要至少三个 OSD 节点。
  • Ceph MDS:Ceph 元数据服务器(Metadata Server),负责存储元数据,并允许 CephFS 用户运行基本命令,而不为 Ceph 存储集群带来负担。

Ceph 网络简介

  • Public Network:公共(前端)网络主要用于客户端与 Ceph 集群之间的通信,负责处理客户端流量以及 Ceph MON 通信。
  • Cluster Network:集群(后端)网络主要用于 Ceph 集群内部通信,负责处理 OSD 心跳、复制、回填和恢复流量。

由于后端网络处理的流量(数据复制、数据恢复、负载均衡等)明显高于前端网络处理的流量(用户访问数据),此处令每台服务器使用双 10Gbps 光口连入后端网络,单 10Gbps 光口连入前端网络。

后端网络配置

服务器配置

此处计划将光口 eno1eno2 链路聚合后接入 switch 1 交换机 Ceph 后端网络。

先创建绑定 bond0 使用 LACP 绑定端口 eno1eno2

(Hash 策略的选择我并不理解,可以参考:LACP Hash policy : r/Proxmox (reddit.com),认为 layer2+3 是一种更兼容且对交换机压力更小的哈希方式)

之后再创建网桥 vmbr2 桥接 bond0 即可:

对另外两台服务器进行相同的操作。三台服务器的网桥 IP 为 10.4.1.010.4.2.010.4.3.0

交换机配置

连接 switch 1。

  1. server 1 的 eno1eno2 口分别连接至 XGE1/0/1XGE1/0/2
  2. server 2 的 eno1eno2 口分别连接至 XGE1/0/3XGE1/0/4
  3. server 3 的 eno1eno2 口分别连接至 XGE1/0/5XGE1/0/6

创建链路聚合端口 BAGG2BAGG3BAGG4

[switch1]interface Bridge-Aggregation 2
[switch1-Bridge-Aggregation2]port link-type access
[switch1-Bridge-Aggregation2]port access vlan 4
[switch1-Bridge-Aggregation2]link-aggregation mode dynamic
[switch1-Bridge-Aggregation2]interface Bridge-Aggregation 3
[switch1-Bridge-Aggregation3]port link-type access
[switch1-Bridge-Aggregation3]port access vlan 4
[switch1-Bridge-Aggregation3]link-aggregation mode dynamic
[switch1-Bridge-Aggregation3]interface Bridge-Aggregation 4
[switch1-Bridge-Aggregation4]port link-type access
[switch1-Bridge-Aggregation4]port access vlan 4
[switch1-Bridge-Aggregation4]link-aggregation mode dynamic

将对应端口加入链路聚合端口:

[switch1]interface range XGE1/0/1 to XGE1/0/2
[switch1-if-range]port link-aggregation group 2
[switch1-if-range]interface range XGE1/0/3 to XGE1/0/4
[switch1-if-range]port link-aggregation group 3
[switch1-if-range]interface range XGE1/0/5 to XGE1/0/6
[switch1-if-range]port link-aggregation group 4

前端网络配置

服务器配置

server 1~3 使用 enp130s0f1,server 4 使用 enp6s0f1 接入 switch 1 交换机 Ceph 前端网络。

直接创建网桥 vmbr3 即可:

对另外三台服务器进行相同操作,配置网桥 IP 为 10.3.1.010.3.2.010.3.3.010.3.4.0

交换机配置

交换机无需额外配置。

Ceph 初始化

选择一个节点,点击 GUI 上“Ceph 初始化”按钮,按照先前的网络配置填写:

点击下一步后即结束 Ceph 初始化配置。可发现整个集群已均完成初始化。

创建 MON 和 MGR 节点

随便选择一台服务器,进入 Ceph>监视器 页面。

在监视器栏下点击“创建”,选中尚未创建 MON 的节点,创建节点。

创建节点后稍等片刻,即可发现节点加入,最终情况如下:

再以同样的方法创建 MGR 节点,最终情况如下:

MGR 节点因为同时只能存在一个,所以这里的三个 MGR 节点互为主备,当主 MGR 出现故障时自动切换到备 MGR,以实现高可用性。

添加 OSD

依次为每台服务器执行下述操作。进入 Ceph>OSD 页面,点击“创建 OSD”。这里我将依次为四块 SAS HDD 创建为 OSD,并将 DB 和 WAL 设备均指向 NVMe SSD。这里为每个 OSD 分配了 200GB 的 DB 大小。

配置完毕后可于列表中看到全部十二个 OSD。

创建 Ceph Pool

选择一台服务器,进入 Ceph>资源池,点击“创建”。

此处“大小”指每个对象的副本数,保留默认值“3”即可。

通过 RBD 使用 Ceph 块存储

进入 数据中心>存储,可发现已自动添加 RBD 存储。

创建虚拟机或容器时将磁盘设置于此块设备即可。

通过 CephFS 使用 Ceph 文件系统

选择一台服务器,于 Ceph>CephFS 页面的“元数据服务器栏”选择“创建”,在每一台服务器上建立 MDS 节点。

然后点击上方 “创建CephFS”即可:

创建虚拟机备份、ISO镜像或者容器模板时使用 CephFS 存储即可。

结语

至此,Proxmox VE + Ceph 的部署已完成,之后即可配置 HA 等应用,已经超出本文讨论范围,且由于本文过长,进一步的使用将于之后的文章中继续记录。

参考

  1. H3C 官方文档
  2. Proxmox VE 中文文档
  3. Ceph 官方文档
  4. Proxmox VE(PVE)+ceph+物理网络规划-超融合生产环境安装部署案例_pve ceph-CSDN博客
  5. VLAN及Trunk,重要!看瑞哥如何讲的明明白白!-腾讯云开发者社区-腾讯云 (tencent.com)
  6. 【H3C模拟器】基于端口VLAN的交换机配置实验(同一vlan互通和不同vlan互通)_h3c同一交换机vlan互通-CSDN博客
  7. 两台3层交换机配置VLAN之间互联 - 知了社区 (h3c.com)
  8. 华三交换机配置链路聚合_华三端口聚合配置命令-CSDN博客
  9. linux - How to have two different gateways on two different bridges in Proxmox VE - Unix & Linux Stack Exchange
  10. proxmox+ceph集群完整方案/完整方案 - 知乎 (zhihu.com)
  11. What size for OSD DB and WAL? : r/ceph (reddit.com)
  12. RBD or Ceph FS for VMs? : r/ceph (reddit.com)

我缓慢吐出一串啊吧啊吧并不再想说话