如何在Ubuntu Linux 16.04 LTS上使用复制的高可用性存储卷安装GlusterFS
如何在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 /目录。