GlusterFS的简单搭建、排障、扩容及思考

官网的实验链接如下:

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可靠性要好。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值