问题:分布式复制 Gluster 卷仅有一半的容量。
我将 AWS EC2 实例设置为 Gluster 卷,并将第三个 EC2 实例设置为安装 Gluster 卷。
两台 Gluster 服务器各有两块 2G 的砖块。Gluster 卷的复制因子设置为 2,目的是让两台服务器保存 4G 相同的数据。以下是查询其中一台 Gluster 服务器的输出:
ubuntu@ip-172-31-10-167:~$ sudo gluster volume info
Volume Name: swarm
Type: Distributed-Replicate
Volume ID: 142a9406-f3c9-49c8-a38f-f55e85185d1a
Status: Started
Snapshot Count: 0
Number of Bricks: 2 x 2 = 4
Transport-type: tcp
Bricks:
Brick1: ip-172-31-10-167.eu-west-1.compute.internal:/data/gluster/swarm/brick0
Brick2: ip-172-31-28-55.eu-west-1.compute.internal:/data/gluster/swarm/brick0
Brick3: ip-172-31-10-167.eu-west-1.compute.internal:/data/gluster/swarm/brick1
Brick4: ip-172-31-28-55.eu-west-1.compute.internal:/data/gluster/swarm/brick1
Options Reconfigured:
auth.allow: *
transport.address-family: inet
nfs.disable: on
performance.client-io-threads: off
ubuntu@ip-172-31-10-167:~$ sudo gluster volume status
Status of volume: swarm
Gluster process TCP Port RDMA Port Online Pid
------------------------------------------------------------------------------
Brick ip-172-31-10-167.eu-west-1.compute.in
ternal:/data/gluster/swarm/brick0 49152 0 Y 15345
Brick ip-172-31-28-55.eu-west-1.compute.int
ernal:/data/gluster/swarm/brick0 49152 0 Y 14176
Brick ip-172-31-10-167.eu-west-1.compute.in
ternal:/data/gluster/swarm/brick1 49153 0 Y 15366
Brick ip-172-31-28-55.eu-west-1.compute.int
ernal:/data/gluster/swarm/brick1 49153 0 Y 14197
Self-heal Daemon on localhost N/A N/A Y 15388
Self-heal Daemon on ip-172-31-28-55.eu-west
-1.compute.internal N/A N/A Y 14219
Task Status of Volume swarm
------------------------------------------------------------------------------
There are no active volume tasks
ubuntu@ip-172-31-10-167:~$ sudo gluster volume status swarm detail
Status of volume: swarm
------------------------------------------------------------------------------
Brick : Brick ip-172-31-10-167.eu-west-1.compute.internal:/data/gluster/swarm/brick0
TCP Port : 49152
RDMA Port : 0
Online : Y
Pid : 15345
File System : xfs
Device : /dev/xvdb
Mount Options : rw,relatime,attr2,inode64,noquota
Inode Size : 512
Disk Space Free : 2.0GB
Total Disk Space : 2.0GB
Inode Count : 1048576
Free Inodes : 1048533
------------------------------------------------------------------------------
Brick : Brick ip-172-31-28-55.eu-west-1.compute.internal:/data/gluster/swarm/brick0
TCP Port : 49152
RDMA Port : 0
Online : Y
Pid : 14176
File System : xfs
Device : /dev/xvdb
Mount Options : rw,relatime,attr2,inode64,noquota
Inode Size : 512
Disk Space Free : 2.0GB
Total Disk Space : 2.0GB
Inode Count : 1048576
Free Inodes : 1048533
------------------------------------------------------------------------------
Brick : Brick ip-172-31-10-167.eu-west-1.compute.internal:/data/gluster/swarm/brick1
TCP Port : 49153
RDMA Port : 0
Online : Y
Pid : 15366
File System : xfs
Device : /dev/xvdb
Mount Options : rw,relatime,attr2,inode64,noquota
Inode Size : 512
Disk Space Free : 2.0GB
Total Disk Space : 2.0GB
Inode Count : 1048576
Free Inodes : 1048533
------------------------------------------------------------------------------
Brick : Brick ip-172-31-28-55.eu-west-1.compute.internal:/data/gluster/swarm/brick1
TCP Port : 49153
RDMA Port : 0
Online : Y
Pid : 14197
File System : xfs
Device : /dev/xvdb
Mount Options : rw,relatime,attr2,inode64,noquota
Inode Size : 512
Disk Space Free : 2.0GB
Total Disk Space : 2.0GB
Inode Count : 1048576
Free Inodes : 1048533
因此,从上面看来一切似乎都很好。但是当我在第三台服务器上安装该卷时,该卷显示其容量只有 2G,而不是 4G:
ubuntu@ip-172-31-13-169:~$ mount
ip-172-31-10-167.eu-west-1.compute.internal:/swarm on /swarm/volumes/mytest type fuse.glusterfs (rw,relatime,user_id=0,group_id=0,default_permissions,allow_other,max_read=131072,_netdev)
ubuntu@ip-172-31-13-169:~$ df -h
Filesystem Size Used Avail Use% Mounted on
ip-172-31-10-167.eu-west-1.compute.internal:/swarm 2.0G 53M 2.0G 3% /swarm/volumes/mytest
ubuntu@ip-172-31-13-169:~$
果然,如果我写入 2G,该卷就会被填满。
如果我一次创建一堆小文件,我可以看到它们分布在brick0
和之间brick1
。
所有 AWS EC2 实例均运行 Ubuntu LTS 16.04 AMD64 HVM EBS。尝试的 Gluster 版本为 3.12.7 和 4.0.1。
我错过了什么?
答案1
所有砖块都位于同一个“物理”磁盘设备上/dev/xvdb
。你的目标是2 x 复制。在每台服务器上,同一台服务器上的两个砖块都位于同一设备上。因为如果一台服务器上的磁盘/dev/xvdb
发生故障,全部该服务器上的砖块将发生故障。如果复制数为 2,则总卷大小将是您预期的一半。如果您希望卷大小为 4G,请在每台服务器上制作一个 4G 砖块。或者您可以将两个不同的 EBS 块设备分别附加到您的 EC2 实例。(例如 /dev/xvdb 和 /dev/xbdc)
题外话:此设置的另一个问题是,需要第三个服务器作为仲裁者,以防止裂脑。 例如薄弱的仲裁者可以在安装卷的第三个 EC2 实例上运行,并在出现问题时帮助防止脑裂。
答案2
当您执行 gluster 卷创建时,您是否列出了类似 server.167/brick0 server.167/brick1 server.55/brick0 server.55/brick1 的砖块
如果是第一种情况,副本集位于同一台服务器上,我敢打赌服务器上的存储空间会减少一半,而不是池中的存储空间,因为服务器无法复制超过 2GB 的数据。
如果是这样,重建卷但列出像 server.167/brick0 server.55/brick0 server.167/brick1 server.55/brick1 这样的砖块