安装和配置glusterfs复制卷RHEL/CentOS 8

时间:2020-01-09 10:38:45  来源:igfitidea点击:

我们将学习Linux中的Gluster File System:

  • 什么是GlusterFS?

  • GlusterFS支持的卷类型

  • 使用RHEL/CentOS 8安装和配置GlusterFS分布式卷

  • 使用RHEL/CentOS 8安装和配置GlusterFS复制卷

  • 使用RHEL/CentOS 8安装和配置GlusterFS分布式复制卷

环境

我已经使用安装在Linux服务器上的Oracle VirtualBox创建了两个虚拟机。

配置节点1节点2节点3
主机名/FQDNglusterfs-1. example.comglusterfs-2. example.comglusterfs-3. example.com
操作系统CentOS 8CentOS 8CentOS 8
IP地址10.10.10.610.10.10.1210.10.10.13
存储1(/dev/sda)20GB20GB20GB
存储2(/dev/sdb)10GB10GB10GB

名称解析

我们必须配置DNS来解析主机名,或者使用/etc/hosts文件。

我已经用我的GlusterFS节点的IP更新了/etc/hosts文件。

# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
10.10.10.6   glusterfs-1     glusterfs-1.example.com
10.10.10.12   glusterfs-2     glusterfs-2.example.com
10.10.10.13   glusterfs-3     glusterfs-3.example.com

安装Gluster文件系统

在CentOS 8上安装GlusterFS

根据环境,我们可以从官方页面下载glusterfs的Repo文件。

我在CentOS 8虚拟机上使用内部网络,因此我的VM中没有互联网连接,这就是为什么我在RHEL 8节点之一上下载了glusterfs存储库,然后通过下载整个存储库创建了一个离线存储库

要下载和更新repo文件,我们将需要wgetrpm,因此请先安装wgetrpm。

# yum -y install wget

接下来在`/etc/yum下下载Repo文件。

repos.d`在两个群集节点上安装GlusterFS

[root@glusterfs-1 ~]# wget -P /etc/yum.repos.d  https://download.gluster.org/pub/gluster/glusterfs/LATEST/CentOS/glusterfs-rhel8.repo

启用PowerTools存储库

我们还必须启用PowerToolsRepo,否则在安装glusterfs-server时会出现以下错误。

python3-pyxattr is needed by glusterfs-srver which is provded by powertools repo from centOS 8 so this also needs to be enabled

要启用powertools,我们可以使用/etc/yum.repos.d/CentOS-PowerTools.repo中的enabled = 1参数来手动启用存储库,也可以先安装yum-utils

[root@glusterfs-1 ~]# yum -y install yum-utils

然后使用yum-config-manager,我们可以启用PowerTools存储库

[root@glusterfs-1 ~]# yum-config-manager --enable PowerTools

列出可用的存储库

[root@glusterfs-1 ~]# yum repolist
CentOS-8 - AppStream                                             5.1 kB/s | 4.3 kB     00:00
CentOS-8 - Base                                                  6.1 kB/s | 3.8 kB     00:00
CentOS-8 - Extras                                                256  B/s | 1.5 kB     00:06
CentOS-8 - PowerTools                                            815 kB/s | 2.0 MB     00:02
Extra Packages for Enterprise Linux 8 - x86_64                   6.1 kB/s | 7.7 kB     00:01
GlusterFS clustered file-system                                  2.9 MB/s | 3.0 kB     00:00
repo id                   repo name                                                   status
AppStream                 CentOS-8 - AppStream                                         5,001
BaseOS                    CentOS-8 - Base                                              1,784
PowerTools                CentOS-8 - PowerTools                                        1,499
epel                      Extra Packages for Enterprise Linux 8 - x86_64               4,541
extras                    CentOS-8 - Extras                                                3
glusterfs-rhel8           GlusterFS clustered file-system                                 29

接下来安装glusterfs-server以安装GlusterFS

[root@glusterfs-1 ~]# yum install -y glusterfs-server

在Red Hat 8(RHEL 8)上安装GlusterFS

有多种在RHEL 8中安装GlusterFS的源和方法

  • 使用ISO安装Red Hat Gluster Storage 3.4

  • 使用Subscription Manager安装Red Hat Gluster Storage 3.4

提示:

使用此方法之前,必须为Red Hat Storage启用Red Hat订阅。

接下来使用redhat-storage-serverrpm安装Red Hat Gluster Storage

# yum install redhat-storage-server

启动集群服务

接下来,在两个群集节点上启动glusterd服务

[root@glusterfs-1 ~]# systemctl start glusterd

验证服务的状态,并确保它处于活动运行状态:

[root@glusterfs-1 ~]# systemctl status glusterd
● glusterd.service - GlusterFS, a clustered file-system server
   Loaded: loaded (/usr/lib/systemd/system/glusterd.service; disabled; vendor preset: disabled)
   Active: active (running) since Sun 2017-01-26 02:19:31 IST; 4s ago
     Docs: man:glusterd(8)
  Process: 2855 ExecStart=/usr/sbin/glusterd -p /var/run/glusterd.pid --log-level $LOG_LEVEL $GLUSTERD_OPTIONS (code=exited, status=0/SUCCESS)
 Main PID: 2856 (glusterd)
    Tasks: 9 (limit: 26213)
   Memory: 3.9M
   CGroup: /system.slice/glusterd.service
           └─2856 /usr/sbin/glusterd -p /var/run/glusterd.pid --log-level INFO
Jan 26 02:19:31 glusterfs-1.example.com systemd[1]: Starting GlusterFS, a clustered file-system server...
Jan 26 02:19:31 glusterfs-1.example.com systemd[1]: Started GlusterFS, a clustered file-system server.

启用服务,以便该服务自动启动

[root@glusterfs-1 ~]# systemctl enable glusterd

创建分区

如果我们已经具有用于Gluster File System的添加逻辑卷,则可以忽略这些步骤。我们将在两个CentOS 8节点上创建一个新的逻辑卷,以创建一个GlusterFS复制卷。现在,由于我已经解释了创建分区所需的步骤,因此在此不再赘述这些命令。

[root@glusterfs-1 ~]# pvcreate /dev/sdb  <-- To create physical volume
[root@glusterfs-1 ~]# vgextend rhel /dev/sdb  <-- Extend my existing volume group
[root@glusterfs-1 ~]# lvcreate -L 2G -n brick1 rhel  <-- Create logical volume named "brick1" with size 2GB using rhel VG
[root@glusterfs-1 ~]# mkfs.xfs /dev/mapper/rhel-brick1  <-- Format the logical volume using XFS File System

为此新逻辑卷创建安装点

[root@glusterfs-3 ~]# mkdir -p /bricks/brick1

将逻辑卷挂载到该挂载点

[root@glusterfs-3 ~]# mount /dev/mapper/rhel-brick1 /bricks/brick1

验证相同

[root@glusterfs-1 ~]# df -Th /bricks/brick1
Filesystem              Type  Size  Used Avail Use% Mounted on
/dev/mapper/rhel-brick1 xfs   2.0G   47M  2.0G   3% /bricks/brick1

同样,我们将在gcluster-2上创建/dev/mapper/rhel-brick2和在gcluster-3节点上创建/dev/mapper/rhel-brick3

[root@glusterfs-2 ~]# df -Th /bricks/brick2
Filesystem              Type  Size  Used Avail Use% Mounted on
/dev/mapper/rhel-brick2 xfs   2.0G   47M  2.0G   3% /bricks/brick2
[root@glusterfs-3 ~]# df -Th /bricks/brick3
Filesystem              Type  Size  Used Avail Use% Mounted on
/dev/mapper/rhel-brick3 xfs   2.0G   47M  2.0G   3% /bricks/brick3

说明:

在相应的群集节点上更新这些逻辑卷的/etc/fstab,以确保这些gluster文件系统在重新启动后挂载

配置防火墙

启用glusterd服务的端口以在两个群集节点上使用GlusterFS复制卷

# firewall-cmd --permanent --add-service=glusterfs
# firewall-cmd --reload

将节点添加到可信存储池(TSP)

让我们选择一台主机(与哪一台主机无关);我们将开始我们的集群。我们将在这台服务器上执行以下操作:

  • 将对等方添加到我们的集群中

  • 创建一个GlusterFS复制卷

要将对等方添加到集群中,我们发出以下命令:

[root@glusterfs-1 ~]# gluster peer probe glusterfs-3.example.com
peer probe: success.
[root@glusterfs-1 ~]# gluster peer probe glusterfs-2.example.com
peer probe: success.

检查连接的对等状态

[root@glusterfs-1 ~]# gluster peer status
Number of Peers: 2
Hostname: glusterfs-3.example.com
Uuid: 9692eb2e-4655-4922-b0a3-cbbda3aa1a3e
State: Peer in Cluster (Connected)
Hostname: glusterfs-2.example.com
Uuid: 17dd8f27-c595-462b-b62c-71bbebce66ce
State: Peer in Cluster (Connected)

设置GlusterFS复制卷

以下是用于创建glusterfs复制卷的语法

# gluster volume create NEW-VOLNAME [replica COUNT] [transport [tcp |rdma | tcp,rdma]] NEW-BRICK...

例如其中我要在我所有的群集节点上创建一个新的glusterfs复制卷plicated_volume,即glusterfs-1glusterfs-2glusterfs-3

它将在新目录" rep_vol"下的三个块上复制所有文件,该目录将由以下命令创建:

[root@glusterfs-1 ~]# gluster volume create replicated_volume replica 3 glusterfs-1:/bricks/brick1/rep_vol glusterfs-2:/bricks/brick2/rep_vol glusterfs-3:/bricks/brick3/rep_vol
volume create: replicated_volume: success: please start the volume to access data

什么是裂脑?

裂脑是在群集中至少有两个服务于同一应用程序的服务器不再相互看到,但它们仍然对客户端做出响应。在这种情况下,由于两台服务器继续提供服务和存储数据,但是彼此之间不再同步任何数据,因此数据完整性和一致性开始逐渐消失。

重要的提示:

如果我们选择使用副本2,则可能会收到以下"警告"消息。块数必须是副本数的倍数。
副本2卷容易出现裂脑现象。使用仲裁程序或者副本3避免这种情况。请参阅:http://docs.gluster.org/en/latest/Administrator%20Guide/Split%20brain%20and%20ways%20to%20deal%20with%20it/。

接下来启动我们创建的卷

[root@glusterfs-1 ~]# gluster volume start replicated_volume
volume start: replicated_volume: success

要获取有关replicated_volume的更多信息

[root@glusterfs-1 ~]# gluster volume info replicated_volume
Volume Name: replicated_volume
Type: Replicate
Volume ID: a9740dad-0102-4131-8a08-74f3b2ec6103
Status: Started
Snapshot Count: 0
Number of Bricks: 1 x 3 = 3
Transport-type: tcp
Bricks:
Brick1: glusterfs-1:/bricks/brick1/rep_vol
Brick2: glusterfs-2:/bricks/brick2/rep_vol
Brick3: glusterfs-3:/bricks/brick3/rep_vol
Options Reconfigured:
features.shard: enable
performance.client-io-threads: off
nfs.disable: on
storage.fips-mode-rchecksum: on
transport.address-family: inet

说明:

如果该卷未显示"已启动",则应检查" /var/log/glusterfs/glusterd.log"下的文件以进行调试和诊断。可以在一台或者所有配置的服务器上查看这些日志。

测试GlusterFS复制卷

在此步骤中,我们将使用其中一台服务器来装载该卷。通常,我们可以从称为client的外部计算机上执行此操作。由于使用此方法需要在客户端计算机上安装其他软件包,因此我们将使用其中一台服务器作为首先进行测试的简单位置,就好像它是该客户端一样。

在客户端的gluster-fuse上,必须手动安装rpm

# yum -y install glusterfs-fuse

由于我使用的是gluster节点之一,因此此处已安装了客户端软件包

[root@glusterfs-1 ~]# rpm -q glusterfs-fuse
glusterfs-fuse-7.2-1.el8.x86_64

创建一个挂载点

[root@glusterfs-1 ~]# mkdir /my_repvol

如下所示安装Gluster复制卷:

[root@glusterfs-1 ~]# mount -t glusterfs glusterfs-1.example.com:/replicated_volume /my_repvol
[root@glusterfs-1 ~]# df -Th /my_repvol
Filesystem                                 Type            Size  Used Avail Use% Mounted on
glusterfs-1.example.com:/replicated_volume fuse.glusterfs  2.0G   68M  2.0G   4% /my_repvol

在每个gluster节点上重复该步骤

[root@glusterfs-2 ~]# mkdir /my_repvol
[root@glusterfs-2 ~]# mount -t glusterfs glusterfs-1.example.com:/replicated_volume /my_repvol
[root@glusterfs-2 ~]# df -Th /my_repvol
Filesystem                                 Type            Size  Used Avail Use% Mounted on
glusterfs-1.example.com:/replicated_volume fuse.glusterfs  2.0G   68M  2.0G   4% /my_repvol
[root@glusterfs-3 ~]# mkdir /my_repvol
[root@glusterfs-3 ~]# mount -t glusterfs glusterfs-1.example.com:/replicated_volume /my_repvol
[root@glusterfs-3 ~]# df -Th /my_repvol
Filesystem                                 Type            Size  Used Avail Use% Mounted on
glusterfs-1.example.com:/replicated_volume fuse.glusterfs  2.0G   68M  2.0G   4% /my_repvol

接下来,我将在replicated_volume上创建5个文件

[root@glusterfs-1 ~]# touch /my_repvol/file{1..5}

验证gluster节点上的文件列表:

[root@glusterfs-1 ~]# ls -l /bricks/brick1/rep_vol/
total 0
-rw-r--r-- 2 root root 0 Jan 27 11:37 file1
-rw-r--r-- 2 root root 0 Jan 27 11:37 file2
-rw-r--r-- 2 root root 0 Jan 27 11:37 file3
-rw-r--r-- 2 root root 0 Jan 27 11:37 file4
-rw-r--r-- 2 root root 0 Jan 27 11:37 file5
[root@glusterfs-2 ~]# ls -l /bricks/brick2/rep_vol/
total 0
-rw-r--r-- 2 root root 0 Jan 27 11:37 file1
-rw-r--r-- 2 root root 0 Jan 27 11:37 file2
-rw-r--r-- 2 root root 0 Jan 27 11:37 file3
-rw-r--r-- 2 root root 0 Jan 27 11:37 file4
-rw-r--r-- 2 root root 0 Jan 27 11:37 file5
[root@glusterfs-3 ~]# ls -l /bricks/brick3/rep_vol/
total 0
-rw-r--r-- 2 root root 0 Jan 27 11:37 file1
-rw-r--r-- 2 root root 0 Jan 27 11:37 file2
-rw-r--r-- 2 root root 0 Jan 27 11:37 file3
-rw-r--r-- 2 root root 0 Jan 27 11:37 file4
-rw-r--r-- 2 root root 0 Jan 27 11:37 file5

因此,正如预期的那样,文件跨gluster节点进行了复制。