金钱(警告)
** 状态:** 被贬值
如果您目前正在运行运行 Ubuntu 12.04 的服务器,我们强烈建议升级或迁移到支持的 Ubuntu 版本:
** 原因:** Ubuntu 12.04 已于 2017 年 4 月 28 日到期(EOL)并且不再收到安全补丁或更新。
** 相反,请参阅:** 此指南可能仍然有用作为参考,但可能不会在其他Ubuntu版本上工作. 如果可用,我们强烈建议使用为您正在使用的Ubuntu版本编写的指南。
介绍
冗余性和高可用性对于非常广泛的服务器活动是必不可少的,在数据存储方面有一个单一的故障点对于任何关键数据来说都是非常危险的配置。
虽然许多数据库和其他软件允许您在单个应用程序的背景下扩散数据,但其他系统可以在文件系统级别运行,以确保数据在写入磁盘时被复制到另一个位置。
在本指南中,我们将在两个 64 位 Ubuntu 12.04 VPS 实例之间设置一个冗余的 GlusterFS 集群,这将类似于具有镜像 RAID 的 NAS 服务器。
一般概念
一个聚合的环境允许您聚合资源(通常是计算或存储),以便您可以将各种计算机作为一个更强大的单元处理。
GlusterFS 允许您创建不同类型的存储配置,其中许多在功能上类似于 RAID 级别,例如,您可以将数据在集群中的不同节点上划分,或者您可以实现冗余性以获得更好的数据可用性。
在本指南中,我们将创建一个多余的集群存储阵列,也称为分布式文件系统. 基本上,这将允许我们在网络上具有类似的功能,镜像 RAID 配置. 每个独立服务器将包含自己的数据副本,允许我们的应用程序访问任何副本,这将有助于分配我们的阅读负载。
每個 VPS 上要採取的步驟
我们将需要在每个主机之间配置 DNS 分辨率,并设置我们将使用的软件源来安装 GlusterFS 包。
配置 DNS 分辨率
为了使我们的不同组件能够轻松互相通信,最好在每个计算机之间设置某种类型的主机名分辨率。
如果您有一个域名,您希望将其配置为指向每个系统,您可以按照本指南设置 DigitalOcean 域名。
如果您没有备用域名,或者只是想快速轻松地设置一些东西,您可以在每个计算机上更改主机文件。
在您的第一台计算机上打开此文件的 root 特权:
1sudo nano /etc/hosts
你应该看到一些看起来像这样的东西:
1127.0.0.1 localhost gluster2
2
3# The following lines are desirable for IPv6 capable hosts
4::1 ip6-localhost ip6-loopback
5fe00::0 ip6-localnet
6ff00::0 ip6-mcastprefix
7ff02::1 ip6-allnodes
8ff02::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.com
和 gluster0
线的部分可以更改为您想要使用的任何名称来访问每个 dropplet。
当你完成时,复制你添加的行,并将它们添加到你其他VPS实例上的/etc/hosts
文件中。
保存并关闭每一个文件,当你完成。
设置软件源
虽然Ubuntu 12.04 包含 GlusterFS 包,但它们相当过时,所以我们将使用 GlusterFS 项目的最新稳定版本(版本 3.4)。
我们将在所有计算机上设置软件源,这些计算机将作为我们集群内的节点,以及客户端计算机。
我们实际上将添加一个PPA(个人包档案),该项目建议Ubuntu用户,这将使我们能够使用与其他系统软件相同的工具来管理我们的包。
首先,我们需要安装python-software-properties
包,这将使我们能够通过apt轻松地管理PPA:
1sudo apt-get update
2sudo apt-get install python-software-properties
一旦安装了 PPA 工具,我们可以通过键入添加 GlusterFS 包的 PPA:
1sudo add-apt-repository ppa:semiosis/ubuntu-glusterfs-3.4
随着PPA的添加,我们需要更新我们的本地包数据库,以便我们的系统知道PPA可用的新包:
1sudo apt-get update
在您正在使用此指南的所有 VPS 实例上重复这些步骤。
安装服务器组件
在本指南中,我们将将两个机器指定为集群成员,第三个作为客户。
我们将将我们标记为gluster0
和gluster1
的计算机配置为集群组件,我们将使用gluster2
作为客户端。
在我们的集群成员机器(gluster0 和 gluster1)上,我们可以通过键入以下方式安装 GlusterFS 服务器包:
1sudo apt-get install glusterfs-server
一旦这在两个节点上安装,我们就可以开始设置我们的存储量。
在其中一个主机上,我们需要与第二个主机同行. 无论您使用哪个服务器,但我们将从我们的gluster0服务器中预定义这些命令,以便简化:
1sudo gluster peer probe gluster1.droplet.com
1peer probe: success
这意味着 peering 取得了成功,我们可以通过键入来检查节点是否在任何时候进行通信:
1sudo gluster peer status
1Number of Peers: 1
2
3Hostname: gluster1.droplet.com
4Port: 24007
5Uuid: 7bcba506-3a7a-4c5e-94fa-1aaf83f5729b
6State: Peer in Cluster (Connected)
此时,我们的两个服务器正在通信,他们可以一起设置存储量。
创建一个存储量
现在我们有我们的服务器池可用,我们可以制作我们的第一个卷。
由于我们对冗余感兴趣,我们将设置一个具有复制功能的卷,这将使我们能够保留数据的多个副本,使我们免受一个单一的故障。
由于我们希望在每个服务器上有一个数据副本,我们会将复制选项设置为2
,这是我们所拥有的服务器数量。
sudo gluster volume create volume_name replica num_of_servers transport tcp domain1.com:/path/to/data/directory domain2.com:/path/to/data/directory ... force
我们将执行的准确命令是这样的:
1sudo gluster volume create volume1 replica 2 transport tcp gluster0.droplet.com:/gluster-storage gluster1.droplet.com:/gluster-storage force
1volume create: volume1: success: please start the volume to access data
这将创建一个名为volume1
的卷,将该卷的数据存储在每个主机的/gluster-storage
中的目录中,如果这个目录不存在,它将被创建。
在此时,我们的音量被创建,但不活跃. 我们可以开始音量并通过键入使其可用:
1sudo gluster volume start volume1
1volume start: volume1: success
我们的量应该现在在线。
安装和配置客户端组件
现在我们已经配置了我们的体积,它可以被我们的客户端机器使用。
然而,在我们开始之前,我们需要从我们之前设置的PPA实际上安装相关的包。
在您的客户端机器上(这个示例中的gluster2),键入:
1sudo apt-get install glusterfs-client
这将安装客户端应用程序,并安装必要的 fuse 文件系统工具,以便在内核之外提供文件系统功能。
我们将将我们的远程存储量安装在我们的客户端计算机上。 为了做到这一点,我们需要创建一个安装点。 传统上,这是在/mnt
目录中,但可以随时随地使用。
我们将创建一个目录在 /storage-pool
:
1sudo mkdir /storage-pool
有了这个步骤,我们可以安装远程音量. 要做到这一点,我们只需要使用以下语法:
sudo mount -t glusterfs domain1.com:volume_name path_to_mount_point
请注意,我们在安装命令中使用卷名。GlusterFS抽象了每个主机上的实际存储目录.我们不是想安装 /gluster-storage
目录,而是要安装 volume1
卷。
另外,请注意,我们只需要指定一个存储集群的成员。
我们要执行的实际命令是这样的:
1sudo mount -t glusterfs gluster0.droplet.com:/volume1 /storage-pool
如果我们使用df
命令,你会看到我们在正确的位置安装了我们的GlusterFS。
测试解雇功能
现在我们已经设置了我们的客户端来使用我们的存储池,让我们测试其功能。
在我们的客户端机器(gluster2)上,我们可以输入以下字段,将一些文件添加到我们的存储库目录中:
1cd /storage-pool
2sudo touch file{1..20}
这将创建20个文件在我们的存储池。
如果我们在每个存储主机上查看我们的/gluster-storage
目录,我们会看到所有这些文件都存在于每个系统:
1# on gluster0.droplet.com and gluster1.droplet.com
2cd /gluster-storage
3ls
1file1 file10 file11 file12 file13 file14 file15 file16 file17 file18 file19 file2 file20 file3 file4 file5 file6 file7 file8 file9
正如您所看到的,这将客户端的数据写入我们的两个节点。
如果有任何一个点,其中一个节点在您的存储集群落下,并对文件系统进行更改。在节点回归后,在客户端安装点上进行读取操作应该提醒它获取任何缺失的文件:
1ls /storage-pool
限制对卷的访问
现在我们已经验证了我们的存储池可以安装并复制数据到集群中的两个机器,我们应该锁定我们的池。
目前,任何计算机都可以在不受限制的情况下连接到我们的存储容量,我们可以通过设置一个选项来改变这一点。
在您的存储节点中,键入:
sudo gluster volume set volume1 auth.allow gluster_client_IP_addr
在此命令中,您将不得不更换您的集群客户端(gluster2)的IP地址。目前,至少在/etc/hosts
配置中,域名限制不会正常工作。
如果您需要在任何时候删除限制,您可以键入:
1sudo gluster volume set volume1 auth.allow *
这将允许从任何机器再次连接,这是不安全的,但可能对调试问题有用。
如果您有多个客户端,您可以同时指定他们的 IP 地址,分开以子:
sudo gluster volume set volume1 auth.allow gluster_client1_ip,gluster_client2_ip
使用 GlusterFS 命令获取信息
当您开始更改 GlusterFS 存储中的某些设置时,您可能会对您可用的选项、哪些卷是活跃的以及哪些节点与每个卷相关联感到困惑。
在您的节点上可使用多种不同的命令来获取这些数据并与您的存储池进行交互。
如果您想要有关每个卷的信息,请输入:
1sudo gluster volume info
1Volume Name: volume1
2Type: Replicate
3Volume ID: 3634df4a-90cd-4ef8-9179-3bfa43cca867
4Status: Started
5Number of Bricks: 1 x 2 = 2
6Transport-type: tcp
7Bricks:
8Brick1: gluster0.droplet.com:/gluster-storage
9Brick2: gluster1.droplet.com:/gluster-storage
10Options Reconfigured:
11auth.allow: 111.111.1.11
同样,要获取有关该节点连接的同行信息,您可以键入:
1sudo gluster peer status
1Number of Peers: 1
2
3Hostname: gluster0.droplet.com
4Port: 24007
5Uuid: 6f30f38e-b47d-4df1-b106-f33dfd18b265
6State: Peer in Cluster (Connected)
如果您想要有关每个节点的表现的详细信息,您可以通过键入一个卷的配置:
sudo gluster volume profile volume_name start
当该命令完成时,您可以通过键入获取所收集的信息:
sudo gluster volume profile volume_name 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 相关组件的列表,您可以键入:
1sudo gluster volume status
1Status of volume: volume1
2Gluster process Port Online Pid
3------------------------------------------------------------------------------
4Brick gluster0.droplet.com:/gluster-storage 49152 Y 2808
5Brick gluster1.droplet.com:/gluster-storage 49152 Y 2741
6NFS Server on localhost 2049 Y 3271
7Self-heal Daemon on localhost N/A Y 2758
8NFS Server on gluster0.droplet.com 2049 Y 3211
9Self-heal Daemon on gluster0.droplet.com N/A Y 2825
10
11There are no active volume tasks
如果你要管理你的 GlusterFS 存储量,它可能是一个好主意,落入 GlusterFS 控制台. 这将允许你与你的 GlusterFS 环境进行交互,而无需先键入sudo gluster
:
1sudo gluster
这会给你一个提示,在那里你可以输入你的命令. 这是一个好,以获得自己导向:
1help
当你完成时,出门如下:
1exit
结论
在这一点上,你应该有一个多余的存储系统,这将使我们能够同时写到两个独立的服务器,这可以对大量的应用程序有用,并可以确保我们的数据即使在一个服务器失效时也可用。