官网的实验链接如下:
https://wiki.centos.org/SpecialInterestGroup/Storage/gluster-Quickstart
使用2台虚拟机即可,我安装的centos7.5的操作系统。本来使用centos6也可以,但是centos6的yum安装是centos-release-gluster41,而41的库里没有gluster-server,如果安装gluster-server,只能使用低版本的gluster,比如3.8。纠结了一下,还是用centos7吧。
1.安装glusterfs源。按官网的案例,2台主机使用hostnamectl set-hostname xxx分别命名为server1,server2。每台都需要留出1块硬盘给gluster,每台都需要安装glusterfs。
#yum install centos-release-gluster
这步在/etc/yum.repo.d文件下生成CentOS-Gluster-5.repo文件。感觉唯一的用途就是安装gluster-server。
2.给2台虚拟主机各新增一块硬盘,我给每台分了1G。依次fdisk分区,mkfs格式化,分别挂载到/bricks/brick1。
[root@server1 /]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 19G 0 part
├─centos-root 253:0 0 10G 0 lvm /
├─centos-swap 253:1 0 2G 0 lvm [SWAP]
└─centos-usr 253:2 0 24G 0 lvm /usr
sdb 8:16 0 17G 0 disk
├─sdb1 8:17 0 1K 0 part
└─sdb5 8:21 0 17G 0 part
└─centos-usr 253:2 0 24G 0 lvm /usr
sdc 8:32 0 1G 0 disk
├─sdc1 8:33 0 1K 0 part
└─sdc5 8:37 0 1022M 0 part /bricks/brick1
sr0 11:0 1 1024M 0 rom
[root@server2 mnt]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 15G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 14G 0 part
├─centos-root 253:0 0 12.5G 0 lvm /
└─centos-swap 253:1 0 1.5G 0 lvm [SWAP]
sdb 8:16 0 1G 0 disk
├─sdb1 8:17 0 1K 0 part
└─sdb5 8:21 0 1022M 0 part /bricks/brick1
sr0 11:0 1 4.2G 0 rom
3.安装并启动glusterfs。
#yum install glusterfs-server
# systemctl enable glusterd
注意一定要2台主机都安装并启动glusterfs,不然后面就会报这样的错误:
[root@server1 /]# gluster peer probe server2
peer probe: failed: Probe returned with Transport endpoint is not connected
4.配置文件共享池。假设防火墙都已经关闭。并且2台主机的/etc/hosts文件里已经写入对方的ip和主机名,比如server2的/etc/hosts文件中:
[root@server2 mnt]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.149.129 server1
然后在server1上使用命令:
# gluster peer probe server2
在server2上使用命令:
# gluster peer probe server1
[root@server1 /]# gluster peer probe server2
peer probe: success.
如果顺利,就可以查看到另外一台主机的状态:
[root@server1 gv0]# gluster peer status
Number of Peers: 1
Hostname: server2
Uuid: 81a52983-c55c-4f9b-908e-68c02cbcccde
State: Peer in Cluster (Connected)
5.创建逻辑卷。
2台主机上分别使用# mkdir /bricks/brick1/gv0 创建共享目录,然后在其中一台上使用:
# gluster volume create gv0 replica 2 server1:/bricks/brick1/gv0 server2:/bricks/brick1/gv0
# gluster volume start gv0
gluster会提醒你,2台主机做复制,容易产生“脑裂”。然后使用以下命令查询卷状态:
# gluster volume info
[root@server1 gv0]# gluster volume info
Volume Name: gv0
Type: Replicate
Volume ID: f83dd03c-03f9-42d5-9077-13f55a8174fa
Status: Started
Snapshot Count: 0
Number of Bricks: 1 x 2 = 2
Transport-type: tcp
Bricks:
Brick1: server1:/bricks/brick1/gv0
Brick2: server2:/bricks/brick1/gv0
Options Reconfigured:
transport.address-family: inet
nfs.disable: on
performance.client-io-threads: off
[root@server1 gv0]# gluster volume status
Status of volume: gv0
Gluster process TCP Port RDMA Port Online Pid
------------------------------------------------------------------------------
Brick server1:/bricks/brick1/gv0 49152 0 Y 3938
Brick server2:/bricks/brick1/gv0 49152 0 Y 55174
Self-heal Daemon on localhost N/A N/A Y 3961
Self-heal Daemon on server2 N/A N/A Y 55209
Task Status of Volume gv0
------------------------------------------------------------------------------
There are no active volume tasks
6.测试。在本例中,在其中1台主机上使用命令:
# mount -t glusterfs server1:/gv0 /mnt
# for i in `seq -w 1 100`; do cp -rp /var/log/messages /mnt/copy-test-$i; done
注意:只能在1台主机上使用mount命令。
这时,在/mnt下的文件,会同步到另一台主机的/bricks/brick1/gv0上。
以上的简单搭建实验就结束了。
7.简单排障。有的时候,安装完glusterfs-server的软件包,会发现启动失败,使用systemctl status glusterd.service -l 也没有详细信息。这时候,就需要去看日志了,一般日志都在/var/log/gluster/glusterd.log:
[2019-03-13 01:34:04.552645] E [socket.c:802:__socket_server_bind] 0-socket.management: binding to failed: Address already in use
[2019-03-13 01:34:04.552682] E [socket.c:805:__socket_server_bind] 0-socket.management: Port is already in use
[2019-03-13 01:34:04.552707] W [rpcsvc.c:1788:rpcsvc_create_listener] 0-rpc-service: listening on transport failed
[2019-03-13 01:34:04.552736] E [MSGID: 106244] [glusterd.c:1757:init] 0-management: creation of listener failed
[2019-03-13 01:34:04.552754] E [MSGID: 101019] [xlator.c:720:xlator_init] 0-management: Initialization of volume 'management' failed, review your volfile again
[2019-03-13 01:34:04.552768] E [MSGID: 101066] [graph.c:367:glusterfs_graph_init] 0-management: initializing translator failed
这里已经写的非常清楚了,端口被占用了。但是使用netstat -tunlp|grep 24007确没有任何返回值。
这时候,该使用lsof了。lsof -Pnl +M -i4 | grep 24007 结果显示php-fpm把这个端口占用了。果断重启php-fpm,结果glusterfs-server就可以正常启动了。
排查故障一定要看日志,从蛛丝马迹中查找原因。
8.扩容。几乎所有glusterfs的文章,都是说要有硬盘,要分区,格式化,挂载,才能用。事实上,不需要扩硬盘或者重新分区,在现有linux操作系统上就可以使用glusterfs。直接在语句后面加个force就可以了。
例:构建2台主机组成的glusterfs系统,然后扩容1台,成为3副本,实现3处备份。
gluster volume create gv0 replica 2 192.168.20.244:/mnt/GlusterfsMountPoint 192.168.20.160:/mnt/GlusterfsMountPoint force
上面这条命令就是将192.168.20.244和192.168.20.160下面的/mnt/GlusterfsMountPoint强制组成了一个卷,卷名为gv0,2个副本的内容是一模一样的。
gluster volume add-brick gv0 replica 3 192.168.20.3:/mnt/GlusterfsMountPoint force
上面这条命令就是将192.168.20.3的/mnt/GlusterfsMountPoint扩容进gv0。注意副本数也变成了3。
让我们查询一下结果,下图显示卷gv0里已经是3个bricks了。
[root@192 ~]# gluster volume info
Volume Name: gv0
Type: Replicate
Volume ID: 2bfc93ac-11b7-45e3-b351-a6561124ac80
Status: Started
Snapshot Count: 0
Number of Bricks: 1 x 3 = 3
Transport-type: tcp
Bricks:
Brick1: 192.168.20.244:/mnt/GlusterfsMountPoint
Brick2: 192.168.20.160:/mnt/GlusterfsMountPoint
Brick3: 192.168.20.3:/mnt/GlusterfsMountPoint
Options Reconfigured:
transport.address-family: inet
nfs.disable: on
performance.client-io-threads: off
9.挂载。关于挂载,man mount.glusterfs可以看到好几种挂载方法,但是在实际中,只有使用卷组名才能挂载成功,很遗憾:
[root@192 local]# mount -t glusterfs 192.168.20.3:2bfc93ac-11b7-45e3-b351-a6561124ac80 test/
Mount failed. Please check the log file for more details.
[root@192 local]# mount -t glusterfs 192.168.20.3:/mnt/GlusterfsMountPoint test/
Mount failed. Please check the log file for more details.
[root@192 local]# mount -t glusterfs 192.168.20.3:gv0 test/
[root@192 local]# ls
10.个人理解:glusterfs最大的优势就是多副本、故障切换如丝般顺滑。无需关心副本之间的同步;如果有3个副本,即使2个副本挂掉,依然不影响使用,比raid5要强大。对中小企业而言,比moosefs可靠性要好。