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
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Linux 磁盘扩容是一项非常重要的任务,可以帮助我们扩展存储容量,满足应用程序和数据的需求。下面是一个关于Linux磁盘扩容的综合指南。 首先,我们需要了解磁盘的基本概念和术语。在Linux中,磁盘被分为多个分区,每个分区都有自己的文件系统。我们需要考虑的主要问题是如何扩展已有分区的大小或添加新的磁盘。 对于已有分区的扩容,我们可以使用文件系统工具如resize2fs来增加分区的大小。首先,我们需要确保分区上没有挂载任何文件系统,然后运行resize2fs命令指定新的大小。这样,我们就可以在不丢失任何数据的情况下扩展分区的大小。 如果想要添加新的磁盘,我们需要对磁盘进行分区、格式化和挂载。首先,我们使用fdisk或parted等工具来分区。接下来,我们使用mkfs命令来格式化分区为所需的文件系统类型。最后,我们可以使用mount命令将新的分区挂载到目标目录下,使其能够被访问。 另外,我们还可以通过逻辑卷管理器(LVM)来管理磁盘。LVM可以将多个物理磁盘划分为一个逻辑卷组,并在其上创建逻辑卷。通过调整逻辑卷组和逻辑卷的大小,我们可以实现磁盘的扩容和管理。 除了硬盘扩容,我们还可以使用网络文件系统(NFS)或分布式文件系统(如GlusterFS或Ceph)来实现磁盘的扩容和共享。这些文件系统可以将多个磁盘上的空间合并为一个逻辑存储空间,并提供给多个计算机共享使用。 在进行磁盘扩容操作之前,我们需要备份重要数据,并确保系统和应用程序的正常运行。此外,我们还应该仔细阅读相关文档和教程,并根据实际情况选择最适合的扩容方案。 总之,Linux磁盘扩容是一项重要的技术任务,需要仔细规划和执行。通过合理使用文件系统工具、LVM和网络文件系统,我们可以有效地扩展和管理磁盘空间,满足系统和应用程序的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值