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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章