Hướng dẫn này chỉ cách thiết lập một kho lưu trữ có tính khả dụng cao với hai máy chủ lưu trữ (CentOS 7.2) sử dụng GlusterFS. Mỗi máy chủ lưu trữ sẽ là bản sao của máy chủ lưu trữ kia và các tệp sẽ được tự động sao chép trên cả hai máy chủ lưu trữ. Hệ thống máy khách (cũng như CentOS 7.2) sẽ có thể truy cập kho lưu trữ như thể đó là một hệ thống tệp cục bộ. GlusterFS là một hệ thống tệp cụm có khả năng mở rộng lên đến vài peta-byte. Nó tổng hợp nhiều khối lưu trữ khác nhau qua kết nối Infiniband RDMA hoặc TCP/IP thành một hệ thống tệp mạng song song lớn. Gạch lưu trữ có thể được tạo thành từ bất kỳ phần cứng thông dụng nào như máy chủ x86_64 với SATA-II RAID và Infiniband HBA.
(Bạn cũng có thể sử dụng địa chỉ IP thay vì tên máy chủ trong thiết lập sau. Nếu bạn thích sử dụng địa chỉ IP, bạn không cần quan tâm đến việc tên máy chủ có thể được giải quyết hay không.)
Đầu tiên, chúng tôi nhập khóa GPG cho các gói phần mềm:
Sau đó, chúng tôi kích hoạt kho lưu trữ EPEL 7 trên hệ thống CentOS của mình:
Chỉnh sửa /etc/yum.repos.d/epel.repo...
... và thêm dòng priority=10 vào phần [epel]:
Sau đó, chúng tôi cập nhật các gói hiện có trên hệ thống:
GlusterFS có sẵn trong kho lưu trữ của nhóm quan tâm đặc biệt về lưu trữ CentOS. Cài đặt kho lưu trữ bằng lệnh này:
Sau đó cài đặt máy chủ GlusterFS như sau:
Tạo liên kết khởi động hệ thống cho daemon Gluster và khởi động nó:
Lệnh
bây giờ sẽ hiển thị phiên bản GlusterFS mà bạn vừa cài đặt (3.7.12 trong trường hợp này):
Nếu bạn sử dụng tường lửa, hãy đảm bảo rằng các cổng TCP 111, 24007, 24008, 24009-(24009 + số brick trên tất cả các ổ đĩa) được mở trên server1.example.com và server2.example.com.
Tiếp theo, chúng ta phải thêm server2.example.com vào nhóm lưu trữ đáng tin cậy (vui lòng lưu ý rằng tôi đang chạy tất cả các lệnh cấu hình GlusterFS từ server1.example.com, nhưng bạn cũng có thể chạy chúng từ server2.example.com vì cấu hình được sao chép giữa các nút GlusterFS - chỉ cần đảm bảo bạn sử dụng đúng tên máy chủ hoặc địa chỉ IP):
server1.example.com:
Trên server1.example.com, hãy chạy
Trạng thái của nhóm lưu trữ đáng tin cậy bây giờ sẽ tương tự như sau:
Tiếp theo, chúng ta tạo share có tên testvol với hai bản sao (vui lòng lưu ý rằng số lượng bản sao bằng với số lượng máy chủ trong trường hợp này vì chúng ta muốn thiết lập phản chiếu) trên server1.example.com và server2.example.com trong thư mục /data (thư mục này sẽ được tạo nếu chưa tồn tại):
Khởi động volume:
Kết quả sẽ là:
Có thể lệnh trên cho bạn biết rằng hành động không thành công:
Trong trường hợp này, bạn nên kiểm tra đầu ra của...
server1.example.com/server2.example.com:
trên cả hai máy chủ.
Nếu bạn nhận được đầu ra như thế này...
... mọi thứ đều ổn, nhưng nếu bạn không nhận được bất kỳ kết quả đầu ra nào...
... khởi động lại daemon GlusterFS trên máy chủ tương ứng (server2.example.com trong trường hợp này):
server2.example.com:
Sau đó kiểm tra đầu ra của...
... một lần nữa trên máy chủ đó - bây giờ nó sẽ trông như thế này:
Bây giờ quay lại server1.example.com:
server1.example.com:
Bạn có thể kiểm tra trạng thái của ổ đĩa bằng lệnh
[root@server1 ~]# gluster volume info
Theo mặc định, tất cả máy khách đều có thể kết nối với ổ đĩa. Nếu bạn chỉ muốn cấp quyền truy cập cho client1.example.com (= 192.168.1.102), hãy chạy:
Xin lưu ý rằng có thể sử dụng ký tự đại diện cho các địa chỉ IP (như 192.168.*) và bạn có thể chỉ định nhiều địa chỉ IP được phân tách bằng dấu phẩy (ví dụ: 192.168.1.102,192.168.1.103).
Thông tin về ổ đĩa hiện sẽ hiển thị trạng thái đã cập nhật:
Trên máy khách, chúng ta có thể cài đặt Máy khách GlusterFS như sau:
Sau đó, chúng ta tạo thư mục sau:
Vậy là xong! Bây giờ chúng ta có thể gắn hệ thống tệp GlusterFS vào /mnt/glusterfs bằng lệnh sau:
(Thay vì server1.example.com, bạn cũng có thể sử dụng server2.example.com trong lệnh trên!)
Bây giờ bạn sẽ thấy chia sẻ mới trong đầu ra của...
... và...
Thay vì gắn kết chia sẻ GlusterFS theo cách thủ công trên máy khách, bạn thêm lệnh mount vào tệp /etc/rc.local. Tôi sẽ không thêm nó vào /etc/fstab vì rc.local luôn được thực thi sau khi mạng được thiết lập, điều này là bắt buộc đối với hệ thống tệp mạng
Mở /etc/rc.localvà thêm dòng sau:
(Một lần nữa, thay vì server1.example.com, bạn cũng có thể sử dụng server2.example.com!)
Để kiểm tra xem /etc/rc.local đã sửa đổi của bạn có hoạt động không, hãy khởi động lại máy khách:
Sau khi khởi động lại, bạn sẽ thấy chia sẻ trong đầu ra của...
... và...
client1.example.com:
Bây giờ chúng ta hãy kiểm tra thư mục /data trên server1.example.com và server2.example.com. Các tệp test1 và test2 phải có trên mỗi nút:
server1.example.com/server2.example.com:
Bây giờ chúng ta tắt server1.example.com và thêm/xóa một số tệp trên chia sẻ GlusterFS trên client1.example.com.
server1.example.com:
client1.example.com:
Các lệnh có thể mất một thời gian để thực thi vì Glusterfs chuyển sang server2 sau khi không thể kết nối với server1 nữa. Chúng ta có thể thấy khả năng chịu lỗi của hệ thống ở đây vì chúng ta vẫn có thể làm việc trên chia sẻ lưu trữ dữ liệu của mình khi server1 ngoại tuyến. Những thay đổi sẽ hiển thị trong thư mục /data trên server2.example.com:
server2.example.com:
Hãy khởi động lại server1.example.com và xem thư mục /data:
server1.example.com:
Như bạn thấy, server1.example.comđã tự động đồng bộ hóa những thay đổi. Trong trường hợp thay đổi vẫn chưa được đồng bộ hóa, thì điều này rất dễ sửa, tất cả những gì chúng ta cần làm là gọi lệnh đọc trên chia sẻ GlusterFS trên client1.example.com, ví dụ:
client1.example.com:
Bây giờ hãy xem lại thư mục /data trên server1.example.com và bạn sẽ thấy rằng các thay đổi đã được sao chép vào nút đó:
server1.example.com:
1 Lưu ý sơ bộ
Trong hướng dẫn này, tôi sử dụng ba hệ thống, hai máy chủ và một máy khách:- server1.example.com: Địa chỉ IP 192.168.0.100 (máy chủ)
- server2.example.com: Địa chỉ IP 192.168.0.101 (máy chủ)
- client1.example.com: Địa chỉ IP 192.168.0.102 (máy khách)
Mã:
nano /etc/hosts
Mã:
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4192.168.0.100 server1.example.com server1192.168.0.101 server2.example.com server2192.168.0.102 client1.example.com client1::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
2 Kích hoạt các kho lưu trữ bổ sung
server1.example.com/server2.example.com/client1.example.com:Đầu tiên, chúng tôi nhập khóa GPG cho các gói phần mềm:
Mã:
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY*
Mã:
yum -y install epel-release
Mã:
yum -y install yum-priorities
Mã:
nano /etc/yum.repos.d/epel.repo
Mã:
[epel]name=Gói bổ sung cho Enterprise Linux 7 - $basearch#baseurl=http://download.fedoraproject.org/pub/epel/7/$basearchmirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-7&arch=$basearchfailovermethod=priorityenabled=1priority=10gpgcheck=1gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7[...]
Mã:
yum -y update
3 Thiết lập Máy chủ GlusterFS
server1.example.com/server2.example.com:GlusterFS có sẵn trong kho lưu trữ của nhóm quan tâm đặc biệt về lưu trữ CentOS. Cài đặt kho lưu trữ bằng lệnh này:
Mã:
yum -y install centos-release-gluster
Mã:
yum -y install glusterfs-server
Mã:
systemctl enable glusterd.service
systemctl startglusterd.service
Mã:
glusterfsd --version
Mã:
[root@server1 ~]# glusterfsd --version
glusterfs 3.7.12 được xây dựng vào ngày 24 tháng 6 năm 2016 lúc 14:11:19
Phiên bản kho lưu trữ: git://git.gluster.com/glusterfs.git
Bản quyền (c) 2006-2013 Red Hat, Inc.
GlusterFS HOÀN TOÀN KHÔNG CÓ BẢO HÀNH.
Bạn được cấp phép theo Giấy phép Công cộng GNU Ít hơn, phiên bản 3 hoặc bất kỳ phiên bản nào sau đó (LGPLv3
hoặc mới hơn), hoặc Giấy phép Công cộng GNU, phiên bản 2 (GPLv2),
trong mọi trường hợp do Free Software Foundation công bố.
Tiếp theo, chúng ta phải thêm server2.example.com vào nhóm lưu trữ đáng tin cậy (vui lòng lưu ý rằng tôi đang chạy tất cả các lệnh cấu hình GlusterFS từ server1.example.com, nhưng bạn cũng có thể chạy chúng từ server2.example.com vì cấu hình được sao chép giữa các nút GlusterFS - chỉ cần đảm bảo bạn sử dụng đúng tên máy chủ hoặc địa chỉ IP):
server1.example.com:
Trên server1.example.com, hãy chạy
Mã:
gluster peer probe server2.example.com
Mã:
[root@server1 ~]# gluster peer probe server2.example.com
peer probe: success.
Mã:
gluster peer status
Mã:
[root@server1 ~]# gluster peer status
Mã:
Số lượng Peers: 1
Mã:
Hostname: server2.example.com
Uuid: 582e10da-aa1b-40b8-908c-213f16f57fe5
State: Peer in Cluster (Connected)
Mã:
gluster volume create testvol replica 2 transport tcp server1.example.com:/data server2.example.com:/data force
Mã:
[root@server1 ~]# gluster volume create testvol replica 2 transport tcp server1.example.com:/data server2.example.com:/data force
volume create: testvol: success: please start the volume to access data
[root@server1 ~]#
Mã:
gluster volume start testvol
Mã:
[root@server1 ~]# gluster volume start testvol
volume start: testvol: success
[root@server1 ~]#
Mã:
[root@server1 ~]# gluster volume start testvol
Khởi động volume testvol không thành công
[root@server1 ~]#
server1.example.com/server2.example.com:
Mã:
netstat -tap | grep glusterfsd
Nếu bạn nhận được đầu ra như thế này...
Mã:
[root@server1 ~]# netstat -tap | grep glusterfsd
tcp 0 0 0.0.0.0:49152 0.0.0.0:* NGHE 22880/glusterfsd
tcp 0 0 server1.example.c:49152 server2.example.c:49148 ĐÃ THIẾT LẬP 22880/glusterfsd
tcp 0 0 server1.example.c:49152 server1.example.c:49148 ĐÃ THIẾT LẬP 22880/glusterfsd
tcp 0 0 server1.example.c:49150 server1.example.c:24007 ĐÃ THIẾT LẬP 22880/glusterfsd
tcp 0 0 server1.example.c:49152 server2.example.c:49142 ĐÃ THÀNH LẬP 22880/glusterfsd
tcp 0 0 server1.example.c:49152 server1.example.c:49149 ĐÃ THÀNH LẬP 22880/glusterfsd
[root@server1 ~]#
Mã:
[root@server2~]# netstat -tap | grep glusterfsd
[root@server2~]#
server2.example.com:
Mã:
systemctl restartglusterd.service
Mã:
netstat -tap | grep glusterfsd
Mã:
[root@server2 ~]# netstat -tap | grep glusterfsd
tcp 0 0 0.0.0.0:49152 0.0.0.0:* NGHE 10971/glusterfsd
tcp 0 0 server2.example.c:49152 server1.example.c:49140 ĐÃ THIẾT LẬP 10971/glusterfsd
tcp 0 0 server2.example.c:49152 server2.example.c:49149 ĐÃ THIẾT LẬP 10971/glusterfsd
tcp 0 0 server2.example.c:49152 server2.example.c:49143 ĐÃ THIẾT LẬP 10971/glusterfsd
tcp 0 0 server2.example.c:49152 server1.example.c:49142 ĐÃ THÀNH LẬP 10971/glusterfsd
tcp 0 0 server2.example.c:49150 server2.example.c:24007 ĐÃ THÀNH LẬP 10971/glusterfsd
[root@server2 ~]#
server1.example.com:
Bạn có thể kiểm tra trạng thái của ổ đĩa bằng lệnh
Mã:
gluster volume info
Mã:
Tên ổ đĩa: testvol
Loại: Sao chép
ID ổ đĩa: e1f825ca-c9d9-4eeb-b6c5-d62c4aa02376
Trạng thái: Đã bắt đầu
Số lượng Bricks: 1 x 2 = 2
Kiểu vận chuyển: tcp
Bricks:
Brick1: server1.example.com:/data
Brick2: server2.example.com:/data
Tùy chọn được cấu hình lại:
performance.readdir-ahead: on
[root@server1 ~]#
Mã:
gluster volume set testvol auth.allow 192.168.1.102
Thông tin về ổ đĩa hiện sẽ hiển thị trạng thái đã cập nhật:
Mã:
gluster volume info
Mã:
[root@server1 ~]# gluster volume info
Mã:
Volume Tên: testvol
Loại: Sao chép
ID ổ đĩa: e1f825ca-c9d9-4eeb-b6c5-d62c4aa02376
Trạng thái: Đã bắt đầu
Số Brick: 1 x 2 = 2
Kiểu vận chuyển: tcp
Bricks:
Brick1: server1.example.com:/data
Brick2: server2.example.com:/data
Tùy chọn được định cấu hình lại:
auth.allow: 192.168.1.102
performance.readdir-ahead: on
[root@server1 ~]#
4 Thiết lập máy khách GlusterFS
client1.example.com:Trên máy khách, chúng ta có thể cài đặt Máy khách GlusterFS như sau:
Mã:
yum -y install glusterfs-client
Mã:
mkdir /mnt/glusterfs
Mã:
mount.glusterfs server1.example.com:/testvol /mnt/glusterfs
Bây giờ bạn sẽ thấy chia sẻ mới trong đầu ra của...
Mã:
mount
Mã:
[root@client1 ~]# mount
sysfs trên /sys loại sysfs (rw,nosuid,nodev,noexec,relatime,seclabel)
proc trên /proc loại proc (rw,nosuid,nodev,noexec,relatime)
devtmpfs trên /dev loại devtmpfs (rw, nosuid, seclabel, size=930336k, nr_inodes=232584, mode=755)
securityfs trên /sys/kernel/security loại securityfs (rw, nosuid, nodev, noexec, relatime)
tmpfs trên /dev/shm loại tmpfs (rw, nosuid, nodev, seclabel)
devpts trên /dev/pts loại devpts (rw, nosuid, noexec, relatime, seclabel, gid=5, mode=620, ptmxmode=000)
tmpfs trên /run loại tmpfs (rw, nosuid, nodev, seclabel, mode=755)
tmpfs trên /sys/fs/cgroup loại tmpfs (ro,nosuid,nodev,noexec,seclabel,mode=755)
cgroup trên /sys/fs/cgroup/systemd loại cgroup (rw,nosuid,nodev,noexec,relatime,xattr,release_agent=/usr/lib/systemd/systemd-cgroups-agent,name=systemd)
pstore trên /sys/fs/pstore loại pstore (rw,nosuid,nodev,noexec,relatime)
cgroup trên /sys/fs/cgroup/cpuset loại cgroup (rw,nosuid,nodev,noexec,relatime,cpuset)
cgroup trên /sys/fs/cgroup/hugetlb loại cgroup (rw,nosuid,nodev,noexec,relatime,hugetlb)
cgroup trên /sys/fs/cgroup/devices loại cgroup (rw,nosuid,nodev,noexec,relatime,devices)
cgroup trên /sys/fs/cgroup/cpu,cpuacct loại cgroup (rw,nosuid,nodev,noexec,relatime,cpuacct,cpu)
cgroup trên /sys/fs/cgroup/blkio loại cgroup (rw,nosuid,nodev,noexec,relatime,blkio)
cgroup trên /sys/fs/cgroup/memory loại cgroup (rw,nosuid,nodev,noexec,relatime,memory)
cgroup trên /sys/fs/cgroup/perf_event loại cgroup (rw,nosuid,nodev,noexec,relatime,perf_event)
cgroup trên /sys/fs/cgroup/freezer loại cgroup (rw,nosuid,nodev,noexec,relatime,freezer)
cgroup trên /sys/fs/cgroup/net_cls loại cgroup (rw,nosuid,nodev,noexec,relatime,net_cls)
configfs trên /sys/kernel/config loại configfs (rw,relatime)
/dev/mapper/centos-root trên / loại xfs (rw,relatime,seclabel,attr2,inode64,noquota)
selinuxfs trên /sys/fs/selinux loại selinuxfs (rw,relatime)
systemd-1 trên /proc/sys/fs/binfmt_misc loại autofs (rw,relatime,fd=34,pgrp=1,timeout=300,minproto=5,maxproto=5,direct)
debugfs trên /sys/kernel/debug loại debugfs (rw,relatime)
mqueue trên /dev/mqueue loại mqueue (rw,relatime,seclabel)
hugetlbfs trên /dev/hugepages loại hugetlbfs (rw,relatime,seclabel)
/dev/sda1 trên /boot loại xfs (rw,relatime,seclabel,attr2,inode64,noquota)
tmpfs trên /run/user/0 loại tmpfs (rw,nosuid,nodev,relatime,seclabel,size=188060k,mode=700)
server1.example.com:/testvol trên /mnt/glusterfs loại fuse.glusterfs (rw,relatime,user_id=0,group_id=0,default_permissions,allow_other,max_read=131072)
fusectl trên /sys/fs/fuse/connections gõ fusectl (rw,relatime)
[root@client1 ~]#
Mã:
df -h
Mã:
[root@client1 ~]# df -h
Kích thước hệ thống tập tin được sử dụng Có sẵn Sử dụng% Được gắn kết trên
/dev/mapper/centos-root 28G 1,3G 27G 5% /
devtmpfs 909M 0 909M 0% /dev
tmpfs 919M 0 919M 0% /dev/shm
tmpfs 919M 8,6M 910M 1% /run
tmpfs 919M 0 919M 0% /sys/fs/cgroup
/dev/sda1 497M 192M 306M 39% /boot
tmpfs 184M 0 184M 0% /run/user/0
server1.example.com:/testvol 28G 12G 17G 41% /mnt/glusterfs
[root@client1 ~]#
Mở /etc/rc.localvà thêm dòng sau:
Mã:
nano /etc/rc.local
Mã:
[...]/usr/sbin/mount.glusterfs server1.example.com:/testvol /mnt/glusterfs
Để kiểm tra xem /etc/rc.local đã sửa đổi của bạn có hoạt động không, hãy khởi động lại máy khách:
Mã:
khởi động lại
Mã:
df -h
Mã:
mount
5 Kiểm tra
Bây giờ chúng ta hãy tạo một số tệp kiểm tra trên chia sẻ GlusterFS:client1.example.com:
Mã:
touch /mnt/glusterfs/test1
touch /mnt/glusterfs/test2
server1.example.com/server2.example.com:
Mã:
ls -l /data
Mã:
[root@server1 ~]# ls -l /data
tổng cộng 0
-rw-r--r--. 2 root root 0 1 tháng 7 năm 2016 test1
-rw-r--r--. 2 root root 0 1 tháng 7 năm 2016 test2
[root@server1 ~]
server1.example.com:
Mã:
shutdown -h now
Mã:
touch /mnt/glusterfs/test3
touch /mnt/glusterfs/test4
rm -f /mnt/glusterfs/test2
server2.example.com:
Mã:
ls -l /data
Mã:
[root@server2 ~]# ls -l /data
tổng cộng 8
-rw-r--r--. 2 root root 0 1 tháng 7 15:17 test1
-rw-r--r--. 2 root root 0 1 tháng 7 15:19 test3
-rw-r--r--. 2 root root 0 1 tháng 7 15:19 test4
server1.example.com:
Mã:
ls -l /data
Mã:
[root@server1 ~]# ls -l /data
tổng cộng 8
-rw-r--r--. 2 root root 0 1 tháng 7 15:17 test1
-rw-r--r--. 2 root root 0 1 tháng 7 15:19 test2
[root@server1 ~]#
client1.example.com:
Mã:
ls -l /mnt/glusterfs/
Mã:
[root@client1 ~]# ls -l /data
tổng cộng 8
-rw-r--r--. 2 root root 0 1 tháng 7 15:17 test1
-rw-r--r--. 2 root root 0 1 tháng 7 15:19 test3
-rw-r--r--. 2 root root 0 1 tháng 7 15:19 test4
[root@server1 ~]#
server1.example.com:
Mã:
ls -l /data
Mã:
[root@server1 ~]# ls -l /data
tổng cộng 8
-rw-r--r--. 2 root root 0 1 tháng 7 15:17 test1
-rw-r--r--. 2 root root 0 1 tháng 7 15:19 test3
-rw-r--r--. 2 root root 0 1 tháng 7 15:19 test4
[root@server1 ~]#
6 Liên kết
- GlusterFS: http://www.gluster.org/
- Tài liệu về GlusterFS 3.2: http://download.gluster.com/pub/gluster/glusterfs/3.2/Documentation/AG/html/index.html
- CentOS: http://www.centos.org/