如何在Ubuntu Linux 16.04 LTS上使用复制的高可用性存储卷安装GlusterFS

时间:2020-01-09 10:40:17  来源:igfitidea点击:

如何在2个Apache Web服务器之间共享Web服务器DocumentRoot/var/www/html /。
我的两个Web服务器都位于Nginx支持的负载平衡反向代理之后。
如何在Ubuntu Linux 16.04 LTS服务器上设置和安装GlusterFS(分布式存储),它是可扩展的网络文件系统?

GlusterFS是一个免费的开源网络分布式存储文件系统。
网络分布式存储文件系统在高流量的网站,云计算服务器,流媒体服务,CDN(内容交付网络)等中非常流行。
本教程将向您展示如何在Ubuntu Linux 16.04 LTS服务器上安装GlusterFS以及如何为Web服务器配置2个节点的高可用性存储。

服务器配置:

我们用于/var/www/html的横向扩展网络追加存储文件系统由两个节点组成

单个云或裸机服务器将成为单点故障。
例如,/var/www/html /可能是单点故障。
因此,您部署了两个Apache Web服务器。
但是,如何确保/var/www/html /与两个Apache服务器都同步?
您不想将不同的镜像或数据存储到客户端。
为了使/var/www/html /保持同步,您需要集群存储。
即使一个节点发生故障,另一个节点也可以正常工作。
此外,当故障节点联机时,它应同步/var/www/html /中另一台服务器的丢失文件。

使用复制的高可用性存储设置GlusterFS时需要什么?

  • 至少两个单独的存储
  • 每个服务器都需要一个单独的分区或磁盘用于GlusterFS。出于演示目的,我使用/dev/vdb1作为砖块。
  • 服务器之间的专用网络(LAN/VLAN)
  • 两台服务器上的Ubuntu Linux 16.04 LTS

让我们开始在Ubuntu上安装和配置GlusterFS。

出于演示目的,我使用了两个节点。
但是您必须在生产中使用4个或更多节点,以避免出现脑裂问题。

步骤1设置/etc/hosts

首先设置/etc/hosts文件:

$ sudo vi /etc/hosts

按照
或您的设置设置正确的专用IP地址:

192.168.1.11	gfs01
192.168.1.12    gfs02

关闭并保存文件。
测试一下:

$ ping -c2 gfs01
$ ping -c2 gfs02

输出示例:

PING gfs01 (192.168.1.12) 56(84) bytes of data.
64 bytes from gfs01 (192.168.1.12): icmp_seq=1 ttl=64 time=0.033 ms
64 bytes from gfs01 (192.168.1.12): icmp_seq=2 ttl=64 time=0.036 ms

--- gfs01 ping statistics --
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.033/0.034/0.036/0.006 ms

步骤2将iptables配置为接受gfs01和gfs02之间的所有流量

gfs01上执行以下内容,以允许来自lan节点gfs02的所有流量:

$ sudo ufw allow proto any from 192.168.1.12 to 192.168.1.11

gfs02上执行以下内容以允许来自lan节点gfs01的所有流量:

$ sudo ufw allow proto any from 192.168.1.11 to 192.168.1.12

步骤3配置glusterfs稳定存储库

在gfs01和gfs02服务器上执行以下命令以安装最新的稳定glusterfs服务器:

$ sudo add-apt-repository ppa:gluster/glusterfs-3.11
$ sudo apt-get update

输出示例:
使用以下上面的代码安装最新的稳定软件包

步骤4安装glusterfs稳定软件包

在gfs01和gfs02服务器上执行以下apt-get命令/apt命令:

$ sudo apt-get install glusterfs-server

输出示例:
安装服务器和客户端组件

第4步出于安全原因进行glusterfs软件包升级

如果在运行glusterfs时对其进行了升级,则共享存储块可能会崩溃。
为了安全起见,最好过滤掉自动更新。
稍后您将学习如何升级glusterfs安全性。
在gfs01和gfs02服务器上执行以下命令:

$ sudo apt-mark hold glusterfs*

输出示例:

glusterfs-client set on hold.
glusterfs-common set on hold.
glusterfs-server set on hold.
glusterfs-dbg set on hold.

步骤5在每台服务器中设置和格式化磁盘

您需要在" gfs01服务器"上执行以下命令(在分区块设备时要小心设备名称):

$ sudo fdisk /dev/vdb
$ sudo mkfs.ext4 /dev/vdb1
$ sudo mkdir -p /nodirectwritedata/brick1
$ sudo echo '/dev/vdb1 /nodirectwritedata/brick1 ext4 defaults 1 2' >> /etc/fstab
$ mount -a
$ sudo mkdir /nodirectwritedata/brick1/gvol0
$ df -H

您需要在" gfs02服务器"上执行以下命令:

$ sudo fdisk /dev/vdb
$ sudo mkfs.ext4 /dev/vdb1
$ sudo mkdir -p /nodirectwritedata/brick2 
$ sudo echo '/dev/vdb1 /nodirectwritedata/brick2 ext4 defaults 1 2' >> /etc/fstab
$ mount -a
$ df -H
$ sudo mkdir /nodirectwritedata/brick2/gvol0

输出示例:
通过设置分区块设备并使用ext4文件系统进行格式化来准备块

警告:请勿在每个服务器上直接将文件编辑或写入文件/nodirectwritedata/brick1 /或/nodirectwritedata/brick2/Brick。
直接写入将损坏您的卷。

步骤6确认glusterfs服务已启动

执行以下命令:

$ sudo systemctl status glusterfs-server.service

输出示例:

? glusterfs-server.service - LSB: GlusterFS server
   Loaded: loaded (/etc/init.d/glusterfs-server; bad; vendor preset: enabled)
   Active: active (running) since Tue 2016-02-28 00:07:22 IST; 26min ago
     Docs: man:systemd-sysv-generator(8)
    Tasks: 7
   Memory: 16.3M
      CPU: 1.412s
   CGroup: /system.slice/glusterfs-server.service
           ??3429 /usr/sbin/glusterd -p /var/run/glusterd.pid

Feb 28 00:07:20 ubuntu-box2 systemd[1]: Starting LSB: GlusterFS server...
Feb 28 00:07:20 ubuntu-box2 glusterfs-server[3420]:  * Starting glusterd service glusterd
Feb 28 00:07:22 ubuntu-box2 glusterfs-server[3420]:    ...done.
Feb 28 00:07:22 ubuntu-box2 systemd[1]: Started LSB: GlusterFS server.

如果没有运行,请启动它:

$ sudo systemctl start glusterfs-server.service

在启动时启用glusterfs:

$ sudo systemctl enable glusterfs-server.service

输出示例:

glusterfs-server.service is not a native service, redirecting to systemd-sysv-install
Executing /lib/systemd/systemd-sysv-install enable glusterfs-server

步骤7配置可信池

gfs01服务器执行:

$ sudo gluster peer probe gfs02
`peer probe: success. Host gfs02 port 24007 already in peer list`

gfs02服务器执行:

$ sudo gluster peer probe gfs01
`peer probe: success. Host gfs01 port 24007 already in peer list`

步骤8设置GlusterFS卷

gfs01(或gfs02)服务器中执行:

# gluster volume create gvol0 replica 2 gfs01:/nodirectwritedata/brick1/gvol0 gfs02:/nodirectwritedata/brick2/gvol0

输出示例:

volume create: gvol0: success: please start the volume to access data
# gluster volume start gvol0

输出示例:

volume start: gvol0: success

要查看状态,请执行:

# gluster volume status
Status of volume: gvol0
Gluster process                             TCP Port  RDMA Port  Online  Pid
-----------------------------------------------------------------------------
Brick gfs01:/nodirectwritedata/brick1/gvol0 49152     0          Y       2621 
Brick gfs02:/nodirectwritedata/brick2/gvol0 49152     0          Y       3674 
Self-heal Daemon on localhost               N/A       N/A        Y       3694 
Self-heal Daemon on gfs01                   N/A       N/A        Y       2641 

Task Status of Volume gvol0
-----------------------------------------------------------------------------
There are no active volume tasks

要查看有关音量的信息,请执行:

# gluster volume info

输出示例:

Volume Name: gvol0
Type: Replicate
Volume ID: 5d871eed-182e-461f-9eb6-06798eeb2c04
Status: Started
Snapshot Count: 0
Number of Bricks: 1 x 2 = 2
Transport-type: tcp
Bricks:
Brick1: gfs01:/nodirectwritedata/brick1/gvol0
Brick2: gfs02:/nodirectwritedata/brick2/gvol0
Options Reconfigured:
transport.address-family: inet
performance.readdir-ahead: on
nfs.disable: on

步骤9客户端挂载

现在我们的集群已启动并正在运行。
现在是我们的客户可以挂载共享存储的时候了。
根据网络资源,您可以拥有1,2,3,4或任意数量的客户端。
您也可以将gfs01和gfs02配置为客户端本身。

客户端安装在gfs01/gfs02节点本身上

执行以下命令:

$ sudo mkdir /mnt/www/
$ sudo mount -t glusterfs gfs01:/gvol0 /mnt/www/

更新/etc/fstab文件:

echo 'gfs01:/gvol0 /mnt/www glusterfs defaults,_netdev 0 0' >> /etc/fstab

保存并关闭文件。
挂载它:

$ sudo mount -a
$ df -H

输出示例:

Filesystem                           Size  Used Avail Use% Mounted on
udev                                 981M     0  981M   0% /dev
tmpfs                                138M  2.5M  136M   2% /run
/dev/mapper/ubuntu--box--1--vg-root   37G  2.0G   33G   6% /
tmpfs                                489M     0  489M   0% /dev/shm
tmpfs                                5.0M     0  5.0M   0% /run/lock
tmpfs                                489M     0  489M   0% /sys/fs/cgroup
/dev/vda1                            472M  105M  343M  24% /boot
/dev/vdb1                            4.8G   11M  4.6G   1% /nodirectwritedata/brick1
tmpfs                                 98M     0   98M   0% /run/user/0
gfs02:/gvol0                         4.8G   11M  4.6G   1% /mnt/www

客户端安装在名为www1的其他服务器上

如果www1使用的是Debian/Ubuntu Linux操作系统,请执行:

$ sudo add-apt-repository ppa:gluster/glusterfs-3.11
$ sudo apt-get update
$ sudo apt-get install glusterfs-client
$ sudo mkdir -p /mnt/www/

编辑/etc/hosts文件并如下更新:

192.168.1.11	gfs01
192.168.1.12    gfs02

保存并关闭文件。
更新/etc/fstab文件以挂载共享存储:更新/etc/fstab文件:

echo 'gfs01:/gvol0 /mnt/www glusterfs defaults,_netdev 0 0' >> /etc/fstab

保存并关闭文件。
挂载它:

$ sudo mount -a
$ df -H

步骤10进行测试

cd/mnt/www /并在www1或gfs02上创建一些文件:

# cd /mnt/www
# mkdir test
# cd test
# cp /etc/*.conf .

您应该同时在gfs02,gfs01和www1上看到文件。

关于设置network.ping.timeout的说明

最后,在gfs02和gfs01上都运行以下命令,以将网络ping超时设置为默认值42的5秒:

$ sudo gluster volume set gvol0 network.ping-timeout "5"

验证一下

$ sudo gluster volume get gvol0 network.ping-timeout
Option                                  Value                                   
------                                  -----                                   
network.ping-timeout                    5

否则,当其他节点关闭42秒后,glusterfs客户端将挂出。
您只需将其减少到5秒。

关于Apache DocumentRoot的说明

您需要编辑httpd.conf并将DocumentRoot设置为指向/mnt/www /目录。