如何在 Ubuntu 服务器上使用 GlusterFS 创建冗余存储池

简介


冗余和高可用性对于各种服务器活动都是必要的。在数据存储方面存在单点故障对于任何关键数据来说都是非常危险的配置。

虽然许多数据库和其他软件允许您在单个应用程序的上下文中分散数据,但其他系统可以在文件系统级别操作,以确保数据在写入磁盘时被复制到另一个位置。像 GlusterFS 这样的集群存储解决方案提供了这种功能。

在本指南中,我们将在两个 64 位 Ubuntu 12.04 VPS 实例之间设置冗余的 GlusterFS 集群。这将类似于具有镜像 RAID 的 NAS 服务器。然后,我们将从第三个 64 位 Ubuntu 12.04 VPS 访问该集群。

一般概念


集群环境允许您汇集资源(通常是计算或存储),以便您将各种计算机视为单个、更强大的单元。使用 GlusterFS,我们能够汇集各种 VPS 实例的存储并将它们视为单个服务器。

GlusterFS 允许您创建不同类型的存储配置,其中许多在功能上类似于 RAID 级别。例如,您可以在集群中的不同节点之间进行数据条带化,或者您可以实现冗余以获得更好的数据可用性。

在本指南中,我们将创建一个冗余的集群存储阵列,也称为分布式文件系统。基本上,这将允许我们具有类似于网络上的镜像 RAID 配置的功能。每个独立的服务器将包含其自己的数据副本,从而允许我们的应用程序访问任一副本,这将有助于分发我们的读取负载。

在每个 VPS 上需要执行的步骤


在本指南中,我们将在每个 VPS 实例上执行一些步骤。我们需要在每个主机上配置 DNS 解析,并设置我们将用于安装 GlusterFS 软件包的软件源。

配置 DNS 解析


为了使我们的不同组件能够轻松地相互通信,最好在每台计算机之间设置某种主机名解析。

如果您有一个要配置为指向每个系统的域名,您可以按照此指南设置使用 DigitalOcean 的域名。

如果您没有多余的域名,或者如果您只想快速简单地设置一些内容,您可以在每台计算机上编辑 hosts 文件。

使用 root 权限在您的第一台计算机上打开此文件:

sudo nano /etc/hosts

您应该看到类似于以下内容:

127.0.0.1       localhost gluster2

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

在本地主机定义下面,您应该添加每个 VPS 的 IP 地址,然后是您希望用于引用它的长名称和短名称。

完成后,它应该看起来像这样:

127.0.0.1       localhost hostname
first_ip gluster0.droplet.com gluster0
second_ip gluster1.droplet.com gluster1
third_ip gluster2.droplet.com gluster2

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

gluster0.droplet.comgluster0 部分的行可以更改为您希望用于访问每个 droplet 的任何名称。我们将在本指南中使用这些设置。

完成后,将您添加的行复制并将它们添加到其他 VPS 实例的 /etc/hosts 文件中。每个 /etc/hosts 文件应包含将您的 IP 链接到您选择的名称的行。

完成后保存并关闭每个文件。

设置软件源


尽管 Ubuntu 12.04 包含 GlusterFS 软件包,但它们相当过时,因此我们将使用 GlusterFS 项目的最新稳定版本(截至撰写本文时为版本 3.4)。

我们将在所有将作为我们集群节点的计算机以及客户端计算机上设置软件源。

实际上,我们将添加项目推荐给 Ubuntu 用户的 PPA(个人软件包存档)。这将允许我们使用与其他系统软件相同的工具来管理我们的软件包。

首先,我们需要安装 python-software-properties 软件包,它将允许我们使用 apt 轻松管理 PPA:

sudo apt-get update
sudo apt-get install python-software-properties

安装了 PPA 工具后,我们可以通过输入以下命令添加 GlusterFS 软件包的 PPA:

sudo add-apt-repository ppa:semiosis/ubuntu-glusterfs-3.4

添加了 PPA 后,我们需要刷新本地软件包数据库,以便我们的系统知道来自 PPA 的新软件包:

sudo apt-get update

在您用于本指南的所有 VPS 实例上重复这些步骤。

安装服务器组件


在本指南中,我们将把两台机器指定为集群成员,第三台机器作为客户端。

我们将配置标记为 gluster0gluster1 的计算机作为集群组件。我们将使用 gluster2 作为客户端。

在我们的集群成员机器(gluster0 和 gluster1)上,可以通过以下命令安装 GlusterFS 服务器软件包:

sudo apt-get install glusterfs-server

一旦在两个节点上都安装了这个软件包,我们就可以开始设置存储卷。

在其中一台主机上,我们需要与第二台主机进行对等连接。使用哪台服务器并不重要,但出于简单起见,我们将从我们的 gluster0 服务器执行以下命令:

sudo gluster peer probe gluster1.droplet.com
peer probe: success

这意味着对等连接成功。我们可以随时通过输入以下命令来检查节点是否在通信:

sudo gluster peer status
Number of Peers: 1

Hostname: gluster1.droplet.com
Port: 24007
Uuid: 7bcba506-3a7a-4c5e-94fa-1aaf83f5729b
State: Peer in Cluster (Connected)

此时,我们的两台服务器正在通信,它们可以一起设置存储卷。

创建存储卷


现在我们有了可用的服务器池,我们可以创建我们的第一个存储卷。

因为我们对冗余性感兴趣,我们将设置一个具有复制功能的卷。这将允许我们保留数据的多个副本,避免单点故障。

由于我们希望在每台服务器上都有一份数据副本,我们将把复制选项设置为 “2”,这是我们拥有的服务器数量。我们将使用以下一般语法来创建卷:

sudo gluster volume create <span class="highlight">volume_name</span> replica <span class="highlight">num_of_servers</span> transport tcp <span class="highlight">domain1.com:/path/to/data/directory domain2.com:/path/to/data/directory ...</span> force

我们将运行的确切命令是:

sudo gluster volume create volume1 replica 2 transport tcp gluster0.droplet.com:/gluster-storage gluster1.droplet.com:/gluster-storage force
volume create: volume1: success: please start the volume to access data

这将创建一个名为 volume1 的卷。它将在每个主机的 /gluster-storage 目录中存储该卷的数据。如果此目录不存在,它将被创建。

此时,我们的卷已创建,但处于非活动状态。我们可以通过输入以下命令来启动卷并使其可供使用:

sudo gluster volume start volume1
volume start: volume1: success

我们的卷目前应该是在线的。

安装和配置客户端组件


现在我们已经配置好了我们的卷,可以在我们的客户端机器上使用它。

但在开始之前,我们需要从之前设置的 PPA 中实际安装相关软件包。

在您的客户端机器(例如本例中的 gluster2)上,输入以下命令:

sudo apt-get install glusterfs-client

这将安装客户端应用程序,并安装必要的 fuse 文件系统工具,以在内核之外提供文件系统功能。

我们将在客户端计算机上挂载远程存储卷。为此,我们需要创建一个挂载点。传统上,这是在 /mnt 目录中,但可以使用任何方便的位置。

我们将在 /storage-pool 目录下创建一个目录:

sudo mkdir /storage-pool

完成这一步后,我们可以挂载远程卷。为此,我们只需使用以下语法:

sudo mount -t glusterfs <span class="highlight">domain1.com</span>:<span class="highlight">volume_name</span> <span class="highlight">path_to_mount_point</span>

请注意,在挂载命令中我们使用了卷名。GlusterFS 对每个主机的实际存储目录进行了抽象。我们要挂载的不是 /gluster-storage 目录,而是 volume1 卷。

还要注意,我们只需要指定存储集群的一个成员。

我们将运行的实际命令是:

sudo mount -t glusterfs gluster0.droplet.com:/volume1 /storage-pool

这应该会挂载我们的卷。如果使用 df 命令,您将看到我们的 GlusterFS 已经挂载到了正确的位置。

测试冗余功能

现在我们已经设置好了客户端来使用我们的存储池,让我们来测试功能。

在我们的客户端机器(gluster2)上,我们可以输入以下命令将一些文件添加到我们的存储池目录:

cd /storage-pool
sudo touch file{1..20}

这将在我们的存储池中创建 20 个文件。

如果我们查看每个存储主机上的 /gluster-storage 目录,我们会发现所有这些文件都存在于每个系统上:

# 在 gluster0.droplet.com 和 gluster1.droplet.com 上
cd /gluster-storage
ls
file1  file10  file11  file12  file13  file14  file15  file16  file17  file18  file19  file2  file20  file3  file4  file5  file6  file7  file8  file9

如您所见,这将客户端的数据写入了我们的两个节点。

如果存储集群中的某个节点宕机并对文件系统进行更改,那么在节点恢复在线后,在客户端挂载点上执行读取操作应该会提示获取任何丢失的文件:

ls /storage-pool

限制对卷的访问

现在我们已经验证了我们的存储池可以挂载并将数据复制到集群中的两台机器,我们应该锁定我们的存储池。

目前,任何计算机都可以连接到我们的存储卷而不受任何限制。我们可以通过在卷上设置选项来更改这一点。

在您的存储节点中的一台上,输入以下命令:

sudo gluster volume set volume1 auth.allow <span class="highlight">gluster_client_IP_addr</span>

您需要在此命令中替换集群客户端(gluster2)的 IP 地址。目前,至少在 /etc/hosts 配置中,域名限制无法正常工作。如果以这种方式设置限制,它将阻止所有流量。您必须改用 IP 地址。

如果需要在任何时候删除限制,可以输入:

sudo gluster volume set volume1 auth.allow *

这将再次允许来自任何计算机的连接。这是不安全的,但可能对调试问题有用。

如果您有多个客户端,可以同时指定它们的 IP 地址,用逗号分隔:

sudo gluster volume set volume1 auth.allow <span class="highlight">gluster_client1_ip</span>,<span class="highlight">gluster_client2_ip</span>

使用 GlusterFS 命令获取信息

当您开始更改一些 GlusterFS 存储的设置时,您可能会对您可以使用的选项、哪些卷是活动的以及每个卷关联的节点感到困惑。

在您的节点上有许多不同的命令可用于检索这些数据并与您的存储池交互。

如果您想要关于每个卷的信息,可以输入:

sudo gluster volume info
Volume Name: volume1
Type: Replicate
Volume ID: 3634df4a-90cd-4ef8-9179-3bfa43cca867
Status: Started
Number of Bricks: 1 x 2 = 2
Transport-type: tcp
Bricks:
Brick1: gluster0.droplet.com:/gluster-storage
Brick2: gluster1.droplet.com:/gluster-storage
Options Reconfigured:
auth.allow: 111.111.1.11

类似地,要获取有关此节点连接的对等体的信息,可以输入:

sudo gluster peer status
Number of Peers: 1

Hostname: gluster0.droplet.com
Port: 24007
Uuid: 6f30f38e-b47d-4df1-b106-f33dfd18b265
State: Peer in Cluster (Connected)

如果您想要关于每个节点的性能的详细信息,可以通过输入以下命令对卷进行分析:

sudo gluster volume profile <span class="highlight">volume_name</span> start

当此命令完成时,您可以通过输入以下命令获取收集的信息:

sudo gluster volume profile <span class="highlight">volume_name</span> info
Brick: gluster1.droplet.com:/gluster-storage
--------------------------------------------
Cumulative Stats:
 %-latency   Avg-latency   Min-Latency   Max-Latency   No. of calls         Fop
 ---------   -----------   -----------   -----------   ------------        ----
      0.00       0.00 us       0.00 us       0.00 us             20     RELEASE
      0.00       0.00 us       0.00 us       0.00 us              6  RELEASEDIR
     10.80     113.00 us     113.00 us     113.00 us              1    GETXATTR
     28.68     150.00 us     139.00 us     161.00 us              2      STATFS
     60.52     158.25 us     117.00 us     226.00 us              4      LOOKUP
 
    Duration: 8629 seconds
   Data Read: 0 bytes
Data Written: 0 bytes
. . .

通过此命令,您将获得有关每个节点的大量信息。

要获取每个节点上运行的所有与 GlusterFS 相关的组件的列表,可以输入:

sudo gluster volume status
Status of volume: volume1
Gluster process                                         Port    Online  Pid
------------------------------------------------------------------------------
Brick gluster0.droplet.com:/gluster-storage             49152   Y       2808
Brick gluster1.droplet.com:/gluster-storage             49152   Y       2741
NFS Server on localhost                                 2049    Y       3271
Self-heal Daemon on localhost                           N/A     Y       2758
NFS Server on gluster0.droplet.com                      2049    Y       3211
Self-heal Daemon on gluster0.droplet.com                N/A     Y       2825
 
There are no active volume tasks

如果您将要管理您的 GlusterFS 存储卷,可能最好进入 GlusterFS 控制台。这将允许您与您的 GlusterFS 环境进行交互,而无需在每个命令前输入 sudo gluster

sudo gluster

这将为您提供一个提示符,您可以在其中输入命令。这是一个很好的命令,可以帮助您定位自己:

help

完成后,像这样退出:

exit

结论


到这一步,你应该已经拥有了一个冗余存储系统,可以让我们同时向两台独立的服务器写入数据。这对于许多应用程序来说非常有用,并且可以确保我们的数据在一台服务器宕机时仍然可用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/592643.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

STM32微秒级别延时--F407--TIM1

基本配置&#xff1a; TIM1挂载在APB2总线上&#xff0c;150MHz经过15分频&#xff0c;得到10MHz计数频率&#xff0c;由于disable了自动重装载&#xff0c;所以只需要看下一次计数值是多少即可。 void TIM1_Delay_us(uint16_t us) //使用阻塞方式进行延时&#xff0c;ARR值不…

记录vue报错问题 in ./node_modules/axios/lib/platform/index.js

今天这个问题困扰了我许久 报错内容如下&#xff1a; 最初一直以为是我没装axios&#xff0c;又重新装了一次&#xff0c;后面才发现是axios版本原因&#xff0c;真的总是被版本的原因困住真的很烦 解决方法如下&#xff1a; 将axios的版本改为1.5.0 1、打开项目的文件夹“…

Linux命令--查找占磁盘空间最大的文件

原文网址&#xff1a;Linux命令--查找占磁盘空间最大的文件-CSDN博客 简介 本文介绍Linux怎样查找占磁盘空间最大的文件。 1.找到占空间最大的分区 命令 df -h 结果 2.查找分区里最大的文件 法1&#xff1a;直接查找最大的文件 sudo find my_folder -type f -exec du -…

LangChain-RAG学习之 LangChain框架入门

什么是LangChain LangChain是一个强大的框架&#xff0c;旨在帮助开发人员使用语言模型构建端到端的应用程序。它提供了一套工具、组件和接口&#xff0c;可简化创建由大型语言模型 (LLM) 和聊天模型提供支持的应用程序的过程。LangChain 可以轻松管理与语言模型的交互&#x…

使用FastGPT+OneAPI在本地使用Llama3

FastGPT 是一个基于 LLM 大语言模型的知识库问答系统&#xff0c;提供开箱即用的数据处理、模型调用等能力。同时可以通过 Flow 可视化进行工作流编排&#xff0c;从而实现复杂的问答场景&#xff01;他的重要特点就是工作流编排。 工作流编排&#xff1a;基于 Flow 模块的工作…

OneNote导出白色背景文件时将笔记墨迹转换颜色

今天用OneNote导出笔记时发现在文件上做的黑色墨迹笔记全部转成了白色。推测是因为onenote会根据背景色自动转换黑色和白色的墨迹&#xff0c;但是其他颜色好像导出的时候不会转换。 于是&#xff0c;我们首先要转换背景&#xff0c;将黑色背景转成白色背景&#xff0c; 然后将…

国内各种免费AI聊天机器人(ChatGPT)推荐(中)

作者主页&#xff1a;点击&#xff01; 国内免费AI推荐(ChatGPT)专栏&#xff1a;点击&#xff01; 创作时间&#xff1a;2024年4月29日15点20分 随着人工智能技术的不断发展&#xff0c;AI聊天机器人已经逐渐融入我们的日常生活。它们可以提供各种服务&#xff0c;例如聊天、…

【数据结构】链表专题2

前言 本篇博客继续探讨有关链表的专题&#xff0c;这片博客的题&#xff0c;提前打个预防针&#xff0c;有点意思哦&#xff0c;哈哈哈&#xff0c;话不多说&#xff0c;进入正文 &#x1f493; 个人主页&#xff1a;小张同学zkf ⏩ 文章专栏&#xff1a;数据结构 若有问题 评论…

【C语言】分支和循环(上)

【C语言】分支和循环&#xff08;上&#xff09; 1、if语句1.2 else1.3分支中包含多条语句1.4嵌套if1.5悬空else问题 2、关系操作符3、条件操作符4、逻辑操作符&#xff1a;与、或、非&#xff08;取反&#xff09;&#xff08;&&&#xff0c;||&#xff0c;&#xff0…

小程序引入 Vant Weapp 极简教程

一切以 Vant Weapp 官方文档 为准 Vant Weapp 官方文档 - 快速入手 1. 安装nodejs 前往官网下载安装即可 nodejs官网 安装好后 在命令行&#xff08;winr&#xff0c;输入cmd&#xff09;输入 node -v若显示版本信息&#xff0c;即为安装成功 2. 在 小程序根目录 命令行/终端…

mac nvm install node<version> error 404

mac m2芯片遇到的问题&#xff0c;估计m系列的应该也有这个问题&#xff0c;在这里记录一下 解决方案&#xff1a; ## 需要先处理一下兼容就OK了arch -x86_64 zsh nvm install returns curl: (22) The requested URL returned error: 404 Issue #2667 nvm-sh/nvm GitHub

关于YOLO8学习(五)安卓部署ncnn模型--视频检测

前文 关于YOLO8学习(一)环境搭建,官方检测模型部署到手机 关于YOLO8学习(二)数据集收集,处理 关于YOLO8学习(三)训练自定义的数据集 关于YOLO8学习(四)模型转换为ncnn 简介 本文将会讲解: (1)使用前文生成的ncnn模型,部署到安卓端,并且实现视频中,人脸的检测…

FileBird Pro插件下载:革新您的WordPress媒体库管理

WordPress媒体库是您网站的重要组成部分&#xff0c;它存储了所有的图片、视频、文档等文件。但随着网站的扩展&#xff0c;媒体库的管理变得越来越复杂。FileBird Pro插件&#xff0c;作为一款专为WordPress用户设计的媒体库管理工具&#xff0c;以其直观的界面和强大的功能&a…

【PowerJob】从源码编译到k8s部署

前言 虽然PowerJob官方说支持JPA各种数据源&#xff0c;但在PG数据库的兼容性上&#xff0c;确实存在小问题&#xff0c;issue也有相关原理描述&#xff0c;官方采用的优雅方式并未真正解决问题&#xff0c;因为只解决了从Lob字段读取的时候&#xff0c;自动建表的时候还是会生…

去哪儿网机票服务请求头pre逆向

作者声明&#xff1a;文章仅供学习交流与参考&#xff01;严禁用于任何商业与非法用途&#xff01;否则由此产生的一切后果均与作者无关&#xff01;如有侵权&#xff0c;请联系作者本人进行删除&#xff01; url&#xff1a;aHR0cHM6Ly9tLmZsaWdodC5xdW5hci5jb20v 一、加密位…

噪声嵌入提升语言模型微调性能

在自然语言处理&#xff08;NLP&#xff09;的快速发展中&#xff0c;大模型&#xff08;LLMs&#xff09;的微调技术一直是研究的热点。最近&#xff0c;一篇名为《NEFTUNE: NOISY EMBEDDINGS IMPROVE INSTRUCTION FINETUNING》的论文提出了一种新颖的方法&#xff0c;通过在训…

网络基础-网络设备介绍

本系列文章主要介绍思科、华为、华三三大厂商的网络设备 网络设备 网络设备是指用于构建和管理计算机网络的各种硬件设备和设备组件。以下是常见的网络设备类型&#xff1a; 路由器&#xff08;Router&#xff09;&#xff1a;用于连接不同网络并在它们之间转发数据包的设备…

Unity 编辑器工具 - 资源引用查找器

在Unity项目开发过程中&#xff0c;管理和维护资源之间的引用关系是至关重要的。当然我们项目也是需要这个功能 毕竟项目大了之后查找资源引用还是交给 资源引用查找器 比较好。 功能概述 资源引用查找器允许开发者选择一个目标资源&#xff0c;并在整个项目中查找引用了该资…

docker-compose启动mysql5.7报错

描述一下问题经过&#xff1a; 使用docker compose 部署mysql5.7 文件如下: services:mysql:restart: alwaysimage: mysql:5.7container_name: mysql-devports:- 3306:3306environment:- MYSQL_DATABASEdev- MYSQL_ROOT_PASSWORD123456healthcheck:test: ["CMD", &q…

VMware虚拟机中ubuntu使用记录(5)—— 如何在ubuntu中安装USB相机ros驱动并获取usb摄像头数据

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、ROS下USB相机驱动1.准备工作(1) 下载驱动(2) 创建ROS工作空间 2. 安装usb_cam驱动(1) 安装usb_cam驱动包(2) 编译代码 3. 修改usb_cam驱动的配置文件(1) 查看US…
最新文章