官網的實驗鏈接如下:
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可靠性要好。