RHEL/CentOS 8配置glusterfs分布式复制卷
我们将学习Linux中的Gluster File System:
什么是GlusterFS?
GlusterFS支持的卷类型
使用RHEL/CentOS 8安装和配置GlusterFS分布式卷
使用RHEL/CentOS 8安装和配置GlusterFS复制卷
使用RHEL/CentOS 8安装和配置GlusterFS分布式复制卷
环境
配置 | 节点1 | 节点2 | 节点3 | 节点4 |
---|---|---|---|---|
主机名/FQDN | glusterfs-1. example.com | glusterfs-2. example.com | glusterfs-3. example.com | glusterfs-4. example.com |
操作系统 | CentOS 8 | CentOS 8 | CentOS 8 | |
IP地址 | 10.10.10.6 | 10.10.10.12 | 10.10.10.13 | 10.10.10.14 |
存储1(/dev/sda) | 20GB | 20GB | 20GB | 20GB |
存储2(/dev/sdb) | 10GB | 10GB | 10GB | 10GB |
名称解析
我们必须配置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 10.10.10.14 glusterfs-4 glusterfs-4.example.com
安装Gluster文件系统
在CentOS 8上安装GlusterFS
根据环境,我们可以从官方页面下载glusterfs的Repo文件。
要下载和更新repo文件,我们将需要wget
rpm,因此请先安装wget
rpm。
# 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-server
rpm安装Red Hat Gluster Storage
# yum install redhat-storage-server
启动集群服务
接下来,在创建GlusterFS分布式复制卷之前,在两个集群节点上启动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 ~]# lvcreate -L 2G -n brick5 rhel <-- Create logical volume named "brick1" with size 2GB using rhel VG [root@glusterfs-1 ~]# mkfs.xfs /dev/mapper/rhel-brick5 <-- Format the logical volume using XFS File System [root@glusterfs-1 ~]# mkdir /bricks/brick5 <-- Create a mount point
挂载新创建的逻辑卷
[root@glusterfs-1 ~]# mount /dev/mapper/rhel-brick5 /bricks/brick5/
验证相同
[root@glusterfs-1 ~]# df -Th /bricks/brick5/ Filesystem Type Size Used Avail Use% Mounted on /dev/mapper/rhel-brick5 xfs 2.0G 47M 2.0G 3% /bricks/brick5
类似地,我们将在gcluster-2上创建/dev/mapper/rhel-brick2
,在gcluster-3上创建
/dev/mapper/rhel-brick3并在
c上创建/dev/mapper/rhel-brick4 gcluster-4`
[root@glusterfs-2 ~]# df -Th /bricks/brick6/ Filesystem Type Size Used Avail Use% Mounted on /dev/mapper/rhel-brick6 xfs 2.0G 47M 2.0G 3% /bricks/brick6 [root@glusterfs-3 ~]# df -Th /bricks/brick7/ Filesystem Type Size Used Avail Use% Mounted on /dev/mapper/rhel-brick7 xfs 2.0G 47M 2.0G 3% /bricks/brick7 [root@glusterfs-4 ~]# df -Th /bricks/brick8 Filesystem Type Size Used Avail Use% Mounted on /dev/mapper/rhel-brick8 xfs 2.0G 47M 2.0G 3% /bricks/brick8
说明:
在相应的群集节点上更新这些逻辑卷的/etc/fstab
,以确保这些gluster文件系统在重新启动后挂载
配置防火墙
启用glusterd服务的端口以在两个群集节点上使用GlusterFS分布式复制卷
# firewall-cmd --permanent --add-service=glusterfs # firewall-cmd --reload
将节点添加到可信存储池(TSP)
让我们选择一台主机(与哪一台主机无关);我们将开始我们的集群。我们将在这台服务器上执行以下操作:
将对等方添加到我们的集群中
创建一个GlusterFS分布式复制卷
要将对等方添加到集群中,我们发出以下命令:
[root@glusterfs-1 ~]# gluster peer probe glusterfs-2.example.com peer probe: success. [root@glusterfs-1 ~]# gluster peer probe glusterfs-3.example.com peer probe: success. [root@glusterfs-1 ~]# gluster peer probe glusterfs-4.example.com peer probe: success.
检查连接的对等状态
[root@glusterfs-1 ~]# gluster peer status Number of Peers: 3 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) Hostname: glusterfs-4.example.com Uuid: 9d490e37-7884-4f32-9fd6-94638e9c7f4b State: Peer in Cluster (Connected)
设置GlusterFS分布式复制卷
以下是用于创建glusterfs分布式复制卷的语法
gluster volume create NEW-VOLNAME [replica COUNT] [transport [tcp | rdma | tcp,rdma]] NEW-BRICK...
例如,我在所有集群节点上创建了一个新的glusterfs分布式复制卷dis_rep_vol,即glusterfs-1
,glusterfs-2
,glusterfs-3
和glusterfs-4
。
它将在新目录" rep_vol"下的三个块上复制所有文件,该目录将由以下命令创建:
[root@glusterfs-1 ~]# gluster volume create dis_rep_vol replica 2 glusterfs-1:/bricks/brick5/rep_vol glusterfs-2:/bricks/brick6/rep_vol glusterfs-3:/bricks/brick7/rep_vol glusterfs-4:/bricks/brick8/rep_vol Replica 2 volumes are prone to split-brain. Use Arbiter or Replica 3 to avoid this. See: http://docs.gluster.org/en/latest/Administrator%20Guide/Split%20brain%20and%20ways%20to%20deal%20with%20it/. Do you still want to continue? (y/n) y volume create: dis_rep_vol: success: please start the volume to access data
什么是裂脑?
裂脑是在群集中至少有两个服务于同一应用程序的服务器不再相互看到,但它们仍然对客户端做出响应。在这种情况下,由于两台服务器继续提供服务和存储数据,但是彼此之间不再同步任何数据,因此数据完整性和一致性开始逐渐消失。
接下来启动我们创建的卷
[root@glusterfs-1 ~]# gluster volume start dis_rep_vol volume start: dis_rep_vol: success
获取有关dis_rep_vol的更多信息
[root@glusterfs-1 ~]# gluster volume info dis_rep_vol Volume Name: dis_rep_vol Type: Distributed-Replicate Volume ID: 0944d404-1845-4d26-822c-3dc9a6048532 Status: Started Snapshot Count: 0 Number of Bricks: 2 x 2 = 4 Transport-type: tcp Bricks: Brick1: glusterfs-1:/bricks/brick5/rep_vol Brick2: glusterfs-2:/bricks/brick6/rep_vol Brick3: glusterfs-3:/bricks/brick7/rep_vol Brick4: glusterfs-4:/bricks/brick8/rep_vol Options Reconfigured: transport.address-family: inet storage.fips-mode-rchecksum: on nfs.disable: on performance.client-io-threads: off
说明:
如果该卷未显示Started,则应检查/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-3 ~]# mkdir /dis_rep [root@glusterfs-3 ~]# mount -t glusterfs glusterfs-1.example.com:/dis_rep_vol /dis_rep [root@glusterfs-3 ~]# df -Th /dis_rep/ Filesystem Type Size Used Avail Use% Mounted on glusterfs-1.example.com:/dis_rep_vol fuse.glusterfs 4.0G 135M 3.9G 4% /dis_rep
在其他群集节点上重复相同的步骤
[root@glusterfs-3 ~]# mkdir /dis_rep; mount -t glusterfs glusterfs-1.example.com:/dis_rep_vol /dis_rep [root@glusterfs-4 ~]# mkdir /dis_rep; mount -t glusterfs glusterfs-1.example.com:/dis_rep_vol /dis_rep
接下来,我将在dis_rep_vol
上创建5个文件
[root@glusterfs-2 ~]# touch /dis_rep/file{1..5}
验证gluster节点上的文件列表。正如我们在glusterfs-1
和glusterfs-2
上看到的那样,文件已被复制
[root@glusterfs-2 ~]# ls -l /bricks/brick6/rep_vol/ total 0 -rw-r--r-- 2 root root 0 Jan 27 12:02 file3 -rw-r--r-- 2 root root 0 Jan 27 12:02 file4 [root@glusterfs-1 ~]# ls -l /bricks/brick5/rep_vol/ total 0 -rw-r--r-- 2 root root 0 Jan 27 12:02 file3 -rw-r--r-- 2 root root 0 Jan 27 12:02 file4
在glusterfs-3
和glusterfs-4
上分发文件
[root@glusterfs-3 ~]# ls -l /bricks/brick7/rep_vol/ total 0 -rw-r--r-- 2 root root 0 Jan 27 12:02 file1 -rw-r--r-- 2 root root 0 Jan 27 12:02 file2 -rw-r--r-- 2 root root 0 Jan 27 12:02 file5 [root@glusterfs-4 ~]# ls -l /bricks/brick8/rep_vol/ total 0 -rw-r--r-- 2 root root 0 Jan 27 12:02 file1 -rw-r--r-- 2 root root 0 Jan 27 12:02 file2 -rw-r--r-- 2 root root 0 Jan 27 12:02 file5
因此,在我们的GlusterFS分布式复制卷设置中,我们看到文件复制在glusterfs-1
和glusterfs-2
上,而文件则分布在glusterfs-3
和glusterfs-4