如何在 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: 1Hostname: 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: 1Hostname: 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     RELEASE0.00       0.00 us       0.00 us       0.00 us              6  RELEASEDIR10.80     113.00 us     113.00 us     113.00 us              1    GETXATTR28.68     150.00 us     139.00 us     161.00 us              2      STATFS60.52     158.25 us     117.00 us     226.00 us              4      LOOKUPDuration: 8629 secondsData 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       2825There are no active volume tasks

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

sudo gluster

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

help

完成后,像这样退出:

exit

结论


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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SQL:NOT IN与NOT EXISTS不等价

在对SQL语句进行性能优化时&#xff0c;经常用到一个技巧是将IN改写成EXISTS&#xff0c;这是等价改写&#xff0c;并没有什么问题。问题在于&#xff0c;将NOT IN改写成NOT EXISTS时&#xff0c;结果未必一样。 目录 一、举例验证二、三值逻辑简述三、附录&#xff1a;用到的S…

微信小程序:14.什么是wxs,wxs的使用

wxs是小程序独有的一套脚本语言&#xff0c;结合wxml&#xff0c;可以构建出页面的结构 wxs的应用场景 wxml中无法调用在页面的js中定义的函数&#xff0c;但是wxml可以调用wxs中定义的函数。因此小程序中wxs的典型应用场景就是过滤器 wxs和js的关系 wxs有自己的数据类型 …

【Flask 系统教程 5】视图进阶

类视图 在 Flask 中&#xff0c;除了使用函数视图外&#xff0c;你还可以使用类视图来处理请求。类视图提供了一种更为结构化和面向对象的方式来编写视图函数&#xff0c;使得代码组织更清晰&#xff0c;并且提供了更多的灵活性和可扩展性。 创建类视图 要创建一个类视图&am…

SVM直观理解

https://tangshusen.me/2018/10/27/SVM/ https://www.bilibili.com/video/BV16T4y1y7qj/?spm_id_from333.337.search-card.all.click&vd_source8272bd48fee17396a4a1746c256ab0ae SVM是什么? 先来看看维基百科上对SVM的定义: 支持向量机&#xff08;英语&#xff1a;su…

使用Python实现二维码生成工具

二维码的本质是什么&#xff1f; 二维码本质上&#xff0c;就是一段字符串。 我们可以把任意的字符串&#xff0c;制作成一个二维码图片。 生活中使用的二维码&#xff0c;更多的是一个 URL 网址。 需要用到的模块 先看一下Python标准库&#xff0c;貌似没有实现这个功能的…

一文了解python机器学习Sklearn

1.3 安装和配置Sklearn 要使用Sklearn库&#xff0c;首先需要安装Python和相应的库。在本教程中&#xff0c;我们将使用Python 3.x版本。可以使用以下命令安装Sklearn库&#xff1a; pip install scikit-learn安装完成后&#xff0c;可以在Python代码中导入Sklearn库&#xf…

code-server容器webpack的ws无法连接解决方法

TLDR 通过指定client的wsrul去连接ws devServer.client.webSocketURL ‘wss://<Forwarded uri>/ws’ 拓扑 1、code-server: 用于编写代码、启动webpack dev-server 服务&#xff1b;[https://<domain>:8001] 2、webpack: 用于浏览dev-server服务&#xff1b;[ht…

在视频中使用时间卷积和半监督训练进行三维人体姿态估计

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 摘要Abstract文献阅读&#xff1a;在视频中使用时间卷积和半监督训练进行三维人体姿态估计1、文献摘要2、提出方法2.1、时间扩张卷积模型2.2、半监督方法2.3、与传统…

UE4 Widget制作搜索框

效果&#xff1a; 一、控件层级结构 1.父控件层级结构 2.子控件层级结构 二、蓝图 1.先清除掉创建子项&#xff08;注意&#xff1a;这里使用的是reverse循环&#xff01;&#xff09; 2.判断是否含有关键字&#xff0c;创建子控件

【Android学习】日期和时间选择对话框

实现功能 实现日期和时间选择的对话框&#xff0c;具体效果可看下图(以日期为例) 具体代码 1 日期对话框 1.1 xml <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android&quo…

AGI要闻:斯坦福李飞飞首次创业,瞄准“空间智能”;OpenAI下周发布搜索产品挑战谷歌;新的开源 AI 眼镜来了|钛媒体AGI | 最新快讯

多方消息证实&#xff0c;OpenAI将会在北京时间5月10日&#xff08;周五&#xff09;凌晨2点公布搜索引擎新产品消息。 斯坦福大学首位红杉讲席教授 李飞飞 通用人工智能&#xff08;AGI&#xff09;领域又公布了一系列重磅消息。 5月4日凌晨&#xff0c;据路透社&#xff0c…

【深度学习】位置编码

一、引言 Self-Attention并行的计算方式未考虑输入特征间的位置关系&#xff0c;这对NLP来说是不可接受的&#xff0c;毕竟一个句子中每个单词都有着明显的顺序关系。Transformer没有RNN、LSTM那样的顺序结构&#xff0c;所以Transformer在提出Self-Attention的同时提出了Posi…

H.265 与 H.264 的主要区别

H.265 与 H.264 的主要区别 H.265 与 H.264 的主要区别各模块技术差异汇总宏块划分帧内预测模式帧间预测模式去块滤波ALF自适应环路滤波采样点自适应偏移&#xff08;Sample Adaptive Offset&#xff09;滤波并行化设计TileEntropy sliceDependent SliceWPP&#xff08;Wavefro…

【C语言】命令行参数

执行程序时&#xff0c;可以从命令行传值给C程序。这些值被称为命令行参数。它们对程序很重要&#xff0c;特别是您想从外部控制程序&#xff0c;而不是在代码内对这些值进行硬编码时&#xff0c;就显得尤为重要了。 命令行参数是使用main()函数参数来处理的&#xff0c;其中&…

双fifo流水线操作——verilog练习与设计

文章目录 一、案例分析二、fifo_ctrl模块设计2.1 波形设计&#xff1a;2.2 代码实现2.2.1 fifo_ctrl2.2.2 顶层文件top_fifo_ctrl&#xff08;rx和tx模块省略&#xff09;2.2.3 仿真文件tb_fifo_ctrl 2.3波形仿真 一、案例分析 案例要求&#xff1a;写一个 fifo 控制器&#x…

SPARC VScode EIDE GDB 使用配置

前言 搞了多年的SPARC 最近接触了VSCODE插件感觉好用。想想看不是能方便调试和编译SPARC&#xff0c;决定使用开源的SPARC仿真环境和编译器来试试。感觉的却不错&#xff0c;借此献给使用SPARC的朋友们。安装 1.找微软官方的下载VSCODE. 2.电机左边的方块形状的图标&#xff0…

【强训笔记】day8

NO.3 思路&#xff1a;相乘除以最大公约数等于最小公倍数。最小公倍数等于gcd&#xff08;a&#xff0c;a%b&#xff09;递归直到b等于0。 代码实现&#xff1a; #include <iostream> using namespace std;int gcd(int a,int b) {if(b0) return a;return gcd(b,a%b); }…

【代码随想录】day48

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、198打家劫舍二、213打家劫舍II三、337打家劫舍III 一、198打家劫舍 class Solution { public:int rob(vector<int>& nums) {vector<int> dp(n…

二叉树的迭代遍历 | LeetCode 144. 二叉树的前序遍历、LeetCode 94. 二叉树的中序遍历、LeetCode 145. 二叉树的后序遍历

二叉树的前序遍历&#xff08;迭代法&#xff09; 1、题目 题目链接&#xff1a;144. 二叉树的前序遍历 给你二叉树的根节点 root &#xff0c;返回它节点值的 前序 遍历。 示例 1&#xff1a; 输入&#xff1a;root [1,null,2,3] 输出&#xff1a;[1,2,3]示例 2&#x…

JG/T 464-2014 集成材木门窗检测

集成材是指将木材的纤维方向基本平行的板材、小方材等在长度、宽度和厚度方向上集成胶合而成的材料&#xff0c;以集成材为主要受力构件制作的门窗&#xff0c;称为集成材木门窗。 JG/T 464-2014集成材木门窗检测项目 测试项目 测试标准 外观及表面质量 LY/T 1787 GB/T 928…