本页内容
- 准备工作
- 配置主机名与 FQDN
- 设置磁盘分区
- 配置分区自动挂载
- 安装 GlusterFS 服务端
- 初始化存储池
- 创建复制卷
- 在客户端挂载 GlusterFS 卷
- 测试复制与高可用性
- 结束语
GlusterFS(Gluster File System)是由 RedHat 开发的免费开源分布式文件系统。GlusterFS 是一种可扩展的文件系统,由多台服务器整合为一个统一的实体文件系统,允许用户连接并挂载 GlusterFS 卷。
GlusterFS 是一款可以处理 PB 级数据的现代文件系统。同时,它也易于安装和维护,并且可以轻松扩展文件系统规模。
在本教程中,你将在 Debian 11 服务器上安装 GlusterFS(分布式、可扩展的网络文件系统)。你将配置能够自动把数据复制到多台服务器的 GlusterFS 卷,并搭建高可用文件系统。此外,你还将学习如何使用 Linux 分区工具 'parted' 在 Debian 服务器上添加额外磁盘。最后,你将验证多台 Debian 服务器之间 GlusterFS 的数据复制情况,并验证其高可用性。
准备工作
要完成本教程,你需要满足以下要求:
- 两台或三台 Debian 11 服务器。
- 一个具备 sudo/管理员 root 权限的非 root 用户。
本示例使用了三台 Debian 11 服务器,具体信息如下:
Hostname IP Address -------------------------- node1 192.168.5.50 node2 192.168.5.56 node3 192.168.5.57
准备就绪。如果这些条件都已满足,就可以开始安装 GlusterFS 了。
配置主机名与 FQDN
你必须做的第一步是为所有将被 GlusterFS 使用的 Debian 服务器配置主机名和 fqdn。你可以通过 ' hostnamectl ' 命令设置主机名,并通过 ' /etc/hosts ' 文件设置 FQDN(完全限定域名)。
要设置主机名,请在每台服务器上执行以下命令。
# run on node1
sudo hostnamectl set-hostname node1.home.lan
# run on node2
sudo hostnamectl set-hostname node2.home.lan
# run on node3
sudo hostnamectl set-hostname node3.home.lan
接下来,使用你喜欢的编辑器打开每台服务器上的 ' /etc/hosts ' 文件。在本教程中,你将使用 nano 编辑器。
sudo nano /etc/hosts
将以下几行添加到文件中。当某个 IP 地址对应多个主机名时,请将其替换为以下几行。
192.168.5.50 node1.home.lan node1 192.168.5.56 node2.home.lan node2 192.168.5.57 node3.home.lan node3
按 Ctrl+x 退出,输入 y 确认,然后按 ENTER 继续。
最后,通过执行以下命令验证每台服务器上的 fqdn。
hostname -f
cat /etc/hosts
你会看到类似以下的输出——在 node1 上,fqdn 应为 node1.home.lan;在 node2 上为 node2.home.lan;在 node3 上应为 node3.home.lan。

设置磁盘分区
建议为 GlusterFS 部署使用专用驱动器/磁盘。在本示例中,每台 Debian 服务器都有一块额外的磁盘 '/dev/vdb',将用于 GlusterFS 安装。在本步骤中,你将学习如何通过终端和 'fdisk' 命令在 Linux 系统上配置新磁盘。
首先,执行以下 ' fdisk ' 命令来查看 Debian 服务器上可用的磁盘列表。
sudo fdisk -l
你会看到类似以下的输出——' node1 ' 上有两块磁盘:安装了操作系统的 ' /dev/vda ',以及尚未配置的 ' /dev/vdb '。

要开始对 '/dev/vdb ' 磁盘进行分区,请执行以下 fdisk 命令。你将进入 fdisk 工具的新提示符,并连接到 ' /dev/vdb ' 磁盘。
sudo fdisk /dev/vdb
- 要创建新分区,请输入 ' n ' 命令。
- 选择要创建的分区类型。' p ' 为主分区,' e ' 为扩展分区。本例将创建主分区,因此输入 ' p '。
- 在 '/dev/vdb ' 磁盘中,要创建多少个分区?本例仅创建一个分区,因此输入 ' 1 '。
- 选择新分区的起始扇区。可保留默认值,直接按 ENTER 继续。
- 最后一个扇区用于定义分区大小。本例约为 5GB,因此输入 ' +5GB '。
- 最后,输入 ' w ' 确认并应用你对 '/dev/vdb ' 磁盘所做的更改。
出现 ' The partition table has been altered '(分区表已更改)的输出,表明更改已应用到磁盘。

至此,新分区已创建,但仍不可用。因为你需要将新分区格式化为特定的文件系统格式。你可以执行以下 fdisk 命令来确认 '/dev/vdb' 磁盘上的新分区已创建。
sudo fdiks -l
你会看到类似以下的输出——在 '/dev/vdb ' 部分,你会看到新分区 ' /dev/vdb1 ' 已创建,大小为 ' 4.7GB '。

接下来,执行以下命令格式化新分区 ' /dev/vdb1 '。在本示例中,你将把该分区格式化为 ext4 文件系统格式。
sudo mkfs -t ext4 /dev/vdb1
随后你会看到类似以下的输出——新分区 '/dev/vda1 ' 已格式化为 ext4 文件系统。

配置分区自动挂载
在本步骤中,你将通过 ' /etc/fstab ' 文件设置新分区 '/dev/vdb1 ' 的自动挂载。你还将创建一个新目录,用于存储 GlusterFS 中的数据。
首先,创建一个新目标目录,用于挂载新分区 ' /dev/vdb1 '。
# run on node1
mkdir -p /data/node1
# run on node2
mkdir -p /data/node2
# run on node3
mkdir -p /data/node3
使用以下 nano 编辑器命令打开配置文件 ' /etc/fstab '。
sudo nano /etc/fstab
将以下行添加到文件中。这样,新分区 ' /dev/vdb1' 将在系统启动时自动挂载。
# for node1 /dev/vdb1 /data/node1 ext4 defaults 0 1 # for node2 /dev/vdb1 /data/node2 ext4 defaults 0 1 # for node3 /dev/vdb1 /data/node3 ext4 defaults 0 1
接下来,运行以下命令挂载你通过 '/etc/fstab' 文件配置的新分区。如果没有报错,即可继续。
sudo mount -a
最后,运行以下命令为每台服务器在刚挂载的分区上创建一个新目录 'brick0'。
# run on node1
mkdir -p /data/node1/brick0
# run on node2
mkdir -p /data/node2/brick0
# run on node3
mkdir -p /data/node3/brick0
安装 GlusterFS 服务端
在本步骤中,你将在将用于 GlusterFS 集群的 Debian 服务器上安装 GlusterFS 软件包。因此,请务必在 node1、node2 和 node3 服务器上执行以下命令。
运行以下 apt 命令在你的系统上安装基础依赖。当提示时输入 y 并按 ENTER 继续。
sudo apt install gnupg2 apt-transport-https software-properties-common
输出:

通过 curl 命令下载 GlusterFS 仓库的 GPG 密钥。然后,将新密钥转换为文件 ' /usr/share/keyrings/glusterfs-archive-keyring.gpg '。
curl https://download.gluster.org/pub/gluster/glusterfs/10/rsa.pub | gpg --dearmor > /usr/share/keyrings/glusterfs-archive-keyring.gpg
接下来,运行以下命令创建新的环境变量,并将 GlusterFS 仓库添加到你的系统中。
DEBID=$(grep 'VERSION_ID=' /etc/os-release | cut -d '=' -f 2 | tr -d '"')
DEBVER=$(grep 'VERSION=' /etc/os-release | grep -Eo '[a-z]+')
DEBARCH=$(dpkg --print-architecture)
echo "deb [signed-by=/usr/share/keyrings/glusterfs-archive-keyring.gpg] https://download.gluster.org/pub/gluster/glusterfs/LATEST/Debian/${DEBID}/${DEBARCH}/apt ${DEBVER} main" | sudo tee /etc/apt/sources.list.d/gluster.list
输出:

添加 GPG 密钥和仓库后,运行以下 apt 命令更新并刷新你的软件包索引。
sudo apt update
输出:

现在通过以下命令安装 GLusterFS 服务端软件包。当提示确认时,输入 y 并按 ENTER。
sudo apt install glusterfs-server
输出:

GlusterFS 安装完成后,运行以下 systemctl 命令启动并启用 GLusterFS 服务。这样,GlusterFS 应该在所有服务器上运行,并且现已启用,意味着 GlusterFS 服务将在系统启动时自动启动。
sudo systemctl start glusterd
sudo systemctl enable glusterd
最后,运行以下 systemctl 命令验证 GlusterFS 服务,确保该服务正在运行且已启用。
sudo systemctl status glusterd
如果成功,你会看到类似以下的输出——'active (running)' 的输出表明 GlusterFS 正在运行,' ...; enabled; ' 的输出表明 GlusterFS 已启用,并将在系统启动时自动启动。

至此,你已经准备好新的磁盘/分区并安装了 GLusterFS 服务端。接下来,你将开始创建并初始化 GLusterFS 集群。
初始化存储池
在本步骤中,你将使用三台 Debian 服务器(node1、node2 和 node3)搭建 GlusterFS 集群。你将先从 ' node1 ' 初始化 GlusterFS 集群,再将其他节点 ' node2 ' 和 ' node3 ' 加入集群。
在开始之前,请确保每台服务器都可以通过主机名或 fqdn 访问。你可以对每个服务器执行 ping 命令来验证。
ping node2.home.lan
ping node3.home.lan
在 'node1' 终端上,运行以下 gluster 命令,以集群成员 node2 和 node3 初始化 GlusterFS 集群。
sudo gluster peer probe node2.home.lan
sudo gluster peer probe node3.home.lan
' peer probe: success '(节点探测成功)的输出表明 GlusterFS 集群初始化成功。

接下来,切换到 ' node2 ' 终端,执行以下命令验证 GlusterFS 集群状态。
sudo gluster peer status
你会看到类似以下的输出——在 ' node2 ' 上,你可以看到包含 node1 和 node3 两个对等节点的 GlusterFS 集群,状态为已连接。

现在切换到 ' node3 ' 终端,运行以下命令验证 GLusterFS 集群状态。
sudo gluster peer status
输出——在 ' node3 ' 上,你可以看到包含 node1 和 node2 两个对等节点的 GlusterFS 集群,状态为已连接。

此外,你还可以通过下面的命令验证 GlusterFS 集群上的存储池列表。你可以在 node1、node2 或 node3 服务器上运行此命令。
sudo gluster pool list
至此,你已经成功使用三台 Debian 服务器初始化了 GlusterFS 集群。在下一步中,你将学习如何在 GlusterFS 上创建卷,以及如何从客户端机器挂载 GlusterFS 卷。
创建复制卷
在 GlusterFS 上,有多种类型的卷可供创建,包括分布式卷(Distributed volume)、复制卷(Replicated volume)、分布式复制卷(Distributed Replicated volume)、离散卷(Dispersed volume)和分布式离散卷(Distributed Dispersed volume)。请查阅 GlusterFS 官方文档以了解每种卷类型的详细信息。
在本步骤中,你将使用三台不同的 GlusterFS 服务器创建一个类型为复制卷(Replicated)的新 GlusterFS 卷。这样,你的数据会在存储池和 GlusterFS 集群内的服务器之间自动复制。
运行以下 gluster 命令在 GlusterFS 上创建一个新的复制卷。在本示例中,你将在 node1、node2 和 node3 三台服务器之间创建一个名为 ' testVolume '、类型为 Replicated 的新卷。
sudo gluster volume create testVolume replica 3 node1.home.lan:/data/node1/brick0 node2.home.lan:/data/node2/brick0 node3.home.lan:/data/node3/brick0
' volume create: testVolume: success: ... ' 的输出表明新卷 ' testVolume ' 已创建。
接下来,在使用之前,你必须通过执行以下命令启动 ' testVolume '。
sudo gluster volume start testVolume
' volume start: testVolume: success ' 的输出表明 ' testVolume ' 已启动就绪。
输出:

最后,你可以通过下面的 gluster 命令查看 ' testVolume ' 的详细信息。
sudo gluster volume info
你会看到类似以下的输出——' testVolume ' 类型为 ' Replicated ',默认传输协议为 ' tcp ',包含 node1、node2 和 node3 三台不同的服务器。
输出:

至此,你已经使用三台不同的服务器初始化了 GlusterFS 集群,并在其上创建了一个复制卷 'testVolume'。在下一步中,你将学习如何配置客户端机器并挂载 GLusterFS 卷。
在客户端挂载 GlusterFS 卷
在本步骤中,你将学习如何在客户端机器上挂载 GlusterFS 卷。本示例使用一台主机名为 ' client ' 的基于 Ubuntu/Debian 的机器。现在,你将把 GlusterFS 卷 ' testVolume ' 挂载到客户端机器,并通过 '/etc/fstab' 文件配置自动挂载。
首先,使用以下 nano 编辑器命令打开 ' /etc/hosts ' 文件。
sudo nano /etc/hosts
将以下几行输入到文件中,并务必将 IP 地址和主机名替换为 GLusterFS 服务器的实际信息。
192.168.5.50 node1.home.lan node1 192.168.5.56 node2.home.lan node2 192.168.5.57 node3.home.lan node3
完成后保存文件并退出编辑器。
接下来,运行以下 apt 命令安装 'glusterfs-client' 软件包。要挂载 GlusterFS 卷,你必须在客户端机器上安装 ' glusterfs-client' 软件包。
sudo apt install glusterfs-client
当提示时输入 y 并按 ENTER 继续。

glusterfs-client 安装完成后,创建一个新目录 '/data',用作 GlusterFS 卷的目标挂载目录。
mkdir /data
通过以下 mount 命令将 GlusterFS 卷 ' testVolume ' 挂载到 ' /data' 目录。
sudo mount.glusterfs node1.home.lan:/testVolume /data
通过以下 df 命令验证系统中已挂载的磁盘列表。
sudo df -h
如果成功,你应该会看到 GlusterFS 卷 'testVolume' 已挂载到 '/data' 目录。
输出:

接下来,你将通过 '/ect/fstab ' 文件配置 GlusterFS 卷的自动挂载。
使用以下 nano 编辑器命令打开 '/etc/fstab ' 文件。
sudo nano /etc/fstab
将以下几行添加到文件中。这样,GlusterFS 卷 ' testVolume ' 将在系统启动时自动挂载。
node1.home.lan:/testVolume /data glusterfs defaults,_netdev 0 0
完成后保存并退出文件。
现在你已经完成了用于挂载 GlusterFS 卷的客户端配置,并通过 '/etc/fstab' 文件配置了 GlusterFS 卷的自动挂载。在下一步中,你将验证 GLusterFS 集群的复制和高可用性。
测试复制与高可用性
在客户端机器上,将工作目录切换到 '/data' 并使用以下命令创建新文件。这将创建新文件 ' 1-15.md '。
cd /data
touch file{1..15}.md
执行 ls 命令查看当前目录中的文件列表。
ls
输出:

接下来,切换到 ' node1 ' 终端,进入目录 ' /data/node1/brick0 '。然后执行 ls 命令查看文件和目录列表。
cd /data/node1/brick0
ls
你应该可以看到 node1 上存在文件 ' 1-15.md '。
输出:

切换到 ' node2 ' 终端,进入目录 ' /data/node2/brick0 '。然后执行 ls 命令查看文件和目录列表。
cd /data/node2/brick0
ls
你应该可以看到 node2 上存在文件 ' 1-15.md '。
输出:

切换到 ' node3 ' 终端,进入目录 '/data/node3/brick0 '。然后执行 ls 命令查看文件和目录列表。
cd /data/node3/brick0
ls
你应该可以看到 node3 上存在文件 ' 1-15.md '。
输出:

至此,你从客户端机器创建的数据已复制到 GlusterFS 服务端的多台服务器上。
接下来,为了测试 GLusterFS 的高可用性,你可以关闭或停机 ' node1 ',并验证客户端机器是否仍连接到 GlusterFS 集群。
切换到 ' node1 ' 终端,运行以下命令关闭服务器。
sudo poweroff
接下来,切换到 ' node2 ' 终端,运行以下命令查看 GLusterFS 集群状态。
sudo gluster peer status
你会看到类似以下的输出——node1 的状态为 ' Disconnected '(已断开连接)。

切换到客户端终端,运行以下命令确认你仍连接到 GlusterFS 集群。
cd /data
ls
输出:

至此,GlusterFS 集群的高可用性已正常工作。
结束语
在本教程中,你已使用三台 Debian 11 服务器安装了 GlusterFS 集群。你还通过 fdisk 在 Linux 上配置了新磁盘/分区,并通过 /etc/fstab 文件配置了 Linux 磁盘/分区的自动挂载。此外,你还学习了如何在 GlusterFS 上创建复制卷,并配置基于 Debian/Ubuntu 的客户端机器来挂载 GlusterFS 卷。
有了这些基础,你现在可以通过添加更多磁盘和服务器来扩展你的 GlusterFS 集群,从而构建一个可从你的网络访问的高可用网络文件系统。你可以从 GlusterFS 官方文档中了解更多关于 GlusterFS 管理的内容。