Lưu trữ có tính khả dụng cao với GlusterFS trên Debian 8 - Sao chép trên hai máy chủ lưu trữ

theanh

Administrator
Nhân viên
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ữ (Debian Jessie) 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 nút lưu trữ. Hệ thống máy khách (cũng như Debian 8) 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.


1 Lưu ý sơ bộ​

Trong hướng dẫn này, tôi sẽ 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.1.100 (máy chủ)
  • server2.example.com: Địa chỉ IP 192.168.1.101 (máy chủ)
  • client1.example.com: Địa chỉ IP 192.168.1.102 (máy khách)
Cả ba hệ thống đều có thể phân giải tên máy chủ của các hệ thống khác. Nếu không thể thực hiện điều này thông qua DNS, bạn nên chỉnh sửa tệp /etc/hosts để nó trông như sau trên cả ba hệ thống:
Mã:
nano /etc/hosts
Mã:
127.0.0.1 localhost
192.168.1.100 server1.example.com server1
192.168.1.101 server2.example.com server2
192.168.1.102 client1.example.com client1


# Các dòng sau là mong muốn đối với các máy chủ có khả năng IPv6
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
(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.)


2 Thiết lập Máy chủ GlusterFS​

server1.example.com/server2.example.com:

Phiên bản GlusterFS mới nhất có sẵn dưới dạng gói Debian từ gluster.org. Chúng ta có thể cài đặt như sau:

Chúng ta thêm khóa công khai của kho lưu trữ Debian gluster.org trên cả hai máy chủ.
Mã:
wget -O - http://download.gluster.org/pub/gluster/glusterfs/3.7/3.7.9/rsa.pub | apt-key add -
Sau đó thêm kho lưu trữ GlusterFS (lệnh chỉ có một dòng!)
Mã:
echo deb http://download.gluster.org/pub/gluster/glusterfs/3.7/3.7.9/Debian/jessie/apt jessie main > /etc/apt/sources.list.d/gluster.list
và cập nhật danh sách kho lưu trữ.
Mã:
apt-get update
Bây giờ chúng ta có thể cài đặt phần mềm máy chủ GlusterFS bằng apt.
Mã:
apt-get -y install glusterfs-server
Lệnh
Mã:
glusterfsd --version
bây giờ sẽ hiển thị phiên bản GlusterFS mà bạn vừa cài đặt (3.7.9 trong trường hợp này):
Mã:
root@server1:/# glusterfsd --version
glusterfs 3.7.9 được xây dựng vào ngày 23 tháng 3 năm 2016 lúc 05:24:49
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ố.
root@server1:/#
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.

Glusterfs sẽ lưu trữ dữ liệu của mình trong thư mục /data trên các máy chủ. Vị trí này có thể là một thư mục bình thường nếu bạn có một cài đặt nhỏ hơn hoặc bạn sử dụng một phân vùng ổ cứng riêng và gắn nó dưới dạng /data.

Chạy trên cả hai máy chủ:
Mã:
mkdir /data
để tạo thư mục dữ liệu.

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.
root@server1:/#
Trạng thái của nhóm lưu trữ đáng tin cậy hiện sẽ tương tự như sau:
Mã:
gluster peer status
Mã:
root@server1:/# gluster peer status
Số lượng đối tác: 1
Mã:
Tên máy chủ: server2.example.com
Uuid: 0f7ee46c-6a71-4a31-91d9-6076707eff95
Trạng thái: Đối tác trong cụm (Đã kết nối)
root@server1:/#
Tiếp theo, chúng ta tạo chia sẻ 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 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/testvol (thư mục này sẽ được tạo nếu chưa tồn tại):
Mã:
gluster volume create testvol replica 2 transport tcp server1.example.com:/data/testvol server2.example.com:/data/testvol force
Mã:
root@server1:/# gluster volume create testvol replica 2 transport tcp server1.example.com:/data/testvol server2.example.com:/data/testvol force
volume create: testvol: success: please start the volume to access data
root@server1:/#
Start the volume:
Mã:
gluster volume start testvol
Mã:
root@server1:/# gluster volume start testvol
volume start: testvol: success
root@server1:/#
Ổ đĩa thử nghiệm của chúng tôi đã được khởi động thành công.

Có thể lệnh trên cho bạn biết rằng hành động không thành công:
Mã:
root@server1:~# gluster volume start testvol
Khởi động ổ đĩa testvol không thành công
root@server1:~#
Trong trường hợp này, bạn nên kiểm tra đầu ra của...

server1.example.com/server2.example.com:
Mã:
netstat -tap | grep glusterfsd
trên cả hai máy chủ.

Nếu bạn nhận được đầu ra như thế này...
Mã:
root@server1:/# netstat -tap | grep glusterfsd
tcp 0 0 *:49152 *:* NGHE 8007/glusterfsd
tcp 0 0 server1.example.c:65533 server1.example.c:24007 ĐÃ THIẾT LẬP 8007/glusterfsd
tcp 0 0 server1.example.c:49152 server2.example.c:65531 ĐÃ THIẾT LẬP 8007/glusterfsd
tcp 0 0 server1.example.c:49152 server1.example.c:65532 ĐÃ THIẾT LẬP 8007/glusterfsd
tcp 0 0 server1.example.c:49152 server1.example.c:65531 ĐÃ THIẾT LẬP 8007/glusterfsd
tcp 0 0 server1.example.c:49152 server2.example.c:65526 ESTABLISHED 8007/glusterfsd
root@server1:/#
... mọi thứ đều ổn, nhưng nếu bạn không nhận được bất kỳ đầu ra nào...
Mã:
root@server2:~# netstat -tap | grep glusterfsd
root@server2:~#
... khởi động lại daemon GlusterFS trên máy chủ tương ứng (server1.example.com trong trường hợp này):

server2.example.com:
Mã:
service glusterfs-server restart
Sau đó kiểm tra đầu ra của...
Mã:
netstat -tap | grep glusterfsd
... một lần nữa trên máy chủ đó - bây giờ nó sẽ trông như thế này:
Mã:
root@server2:/# netstat -tap | grep glusterfsd
tcp 0 0 *:49152 *:* NGHE 7852/glusterfsd
tcp 0 0 server2.example.c:49152 server2.example.c:65532 ĐÃ THIẾT LẬP 7852/glusterfsd
tcp 0 0 server2.example.c:49152 server1.example.c:65526 ĐÃ THIẾT LẬP 7852/glusterfsd
tcp 0 0 server2.example.c:49152 server2.example.c:65525 ĐÃ THIẾT LẬP 7852/glusterfsd
tcp 0 0 server2.example.c:65533 server2.example.c:24007 ĐÃ THIẾT LẬP 7852/glusterfsd
tcp 0 0 server2.example.c:49152 server1.example.c:65524 ESTABLISHED 7852/glusterfsd
root@server2:/#
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
Mã:
gluster volume info
Mã:
root@server1:/# gluster volume info
Mã:
Tên ổ đĩa: testvol
Loại: Sao chép
ID ổ đĩa: 3fc9af57-ca56-4a72-ad54-3d2ea03e5883
Trạng thái: Đã bắt đầu
Số lượng Brick: 1 x 2 = 2
Loại vận chuyển: tcp
Bricks:
Brick1: server1.example.com:/data/testvol
Brick2: server2.example.com:/data/testvol
Options Reconfigured:
performance.readdir-ahead: on
root@server1:/#
Theo mặc định, tất cả các máy khách 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:
Mã:
gluster volume set testvol auth.allow 192.168.1.102
Mã:
root@server1:/# gluster volume set testvol auth.allow 192.168.1.102
volume set: success
root@server1:/#
Xin lưu ý rằng bạn 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 ổ đĩa bây giờ sẽ hiển thị trạng thái đã cập nhật:
Mã:
gluster volume info
root@server1:/# gluster volume info
Mã:
Tên ổ đĩa: testvol
Loại: Sao chép
ID ổ đĩa: 3fc9af57-ca56-4a72-ad54-3d2ea03e5883
Trạng thái: Đã bắt đầu
Số lượng Brick: 1 x 2 = 2
Loại vận chuyển: tcp
Bricks:
Brick1: server1.example.com:/data/testvol
Brick2: server2.example.com:/data/testvol
Tùy chọn được cấu hình lại:
auth.allow: 192.168.1.102
performance.readdir-ahead: on
root@server1:/#

3 Thiết lập GlusterFS Client​

client1.example.com:

Trên hệ thống máy khách, trước tiên chúng tôi thêm khóa công khai của kho lưu trữ Debian gluster.org.
Mã:
wget -O - http://download.gluster.org/pub/gluster/glusterfs/3.7/3.7.9/rsa.pub | apt-key add -
Sau đó thêm kho lưu trữ GlusterFS (lệnh chỉ có một dòng!)
Mã:
echo deb http://download.gluster.org/pub/gluster/glusterfs/3.7/3.7.9/Debian/jessie/apt jessie main > /etc/apt/sources.list.d/gluster.list
và cập nhật danh sách kho lưu trữ.
Mã:
apt-get update
Bây giờ chúng ta có thể cài đặt máy khách GlusterFS như sau.
Mã:
apt-get -y install glusterfs-client
Sau đó, chúng ta tạo thư mục sau:
Mã:
mkdir /mnt/glusterfs
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:
Mã:
mount.glusterfs server1.example.com:/testvol /mnt/glusterfs
(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...
Mã:
mount
Mã:
root@client1:/# mount
sysfs trên /sys loại sysfs (rw,nosuid,nodev,noexec,relatime)
proc trên /proc loại proc (rw,nosuid,nodev,noexec,relatime)
udev trên /dev loại devtmpfs (rw,relatime,size=10240k,nr_inodes=125556,mode=755)
devpts trên /dev/pts loại devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)
tmpfs trên /run loại tmpfs (rw,nosuid,relatime,size=204220k,mode=755)
/dev/sda1 trên / loại ext4 (rw,relatime,errors=remount-ro,data=ordered)
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)
tmpfs trên /run/lock loại tmpfs (rw, nosuid, nodev, noexec, relatime, size=5120k)
tmpfs trên /sys/fs/cgroup loại tmpfs (ro, nosuid, nodev, noexec, mode=755)
cgroup trên /sys/fs/cgroup/systemd loại cgroup (rw, nosuid, nodev, noexec, relatime, xattr, release_agent=/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/cpu, cpuacct loại cgroup (rw,nosuid,nodev,noexec,relatime,cpu,cpuacct)
cgroup trên /sys/fs/cgroup/devices loại cgroup (rw,nosuid,nodev,noexec,relatime,devices)
cgroup trên /sys/fs/cgroup/freezer loại cgroup (rw,nosuid,nodev,noexec,relatime,freezer)
cgroup trên /sys/fs/cgroup/net_cls,net_prio loại cgroup (rw,nosuid,nodev,noexec,relatime,net_cls,net_prio)
cgroup trên /sys/fs/cgroup/blkio loại cgroup (rw,nosuid,nodev,noexec,relatime,blkio)
cgroup trên /sys/fs/cgroup/perf_event loại cgroup (rw,nosuid,nodev,noexec,relatime,perf_event)
systemd-1 trên /proc/sys/fs/binfmt_misc kiểu autofs (rw,relatime,fd=23,pgrp=1,timeout=300,minproto=5,maxproto=5,direct)
mqueue trên /dev/mqueue kiểu mqueue (rw,relatime)
debugfs trên /sys/kernel/debug kiểu debugfs (rw,relatime)
hugetlbfs trên /dev/hugepages kiểu hugetlbfs (rw,relatime)
rpc_pipefs trên /run/rpc_pipefs kiểu rpc_pipefs (rw,relatime)
fusectl trên /sys/fs/fuse/connections kiểu fusectl (rw,relatime)
server1.example.com:/testvol trên /mnt/glusterfs gõ fuse.glusterfs (rw,relatime,user_id=0,group_id=0,default_permissions,allow_other,max_read=131072)
root@client1:/#
... và...
Mã:
df -h
Mã:
root@client1:/# df -h
Kích thước hệ thống tệp Đã sử dụng Có sẵn Sử dụng% Đã gắn kết trên
/dev/sda1 57G 1,1G 53G 2% /
udev 10M 0 10M 0% /dev
tmpfs 200M 4,6M 195M 3% /run
tmpfs 499M 0 499M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 499M 0 499M 0% /sys/fs/cgroup
server1.example.com:/testvol 57G 21G 34G 39% /mnt/glusterfs
root@client1:/#
Thay vì gắn kết chia sẻ GlusterFS theo cách thủ công trên máy khách, bạn có thể sửa đổi /etc/fstab để chia sẻ được gắn kết tự động khi máy khách khởi động.

Mở /etc/fstab và thêm dòng sau:
Mã:
nano /etc/fstab
Mã:
[...]server1.example.com:/testvol /mnt/glusterfs glusterfs defaults,_netdev 0 0
(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/fstab đã 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ã:
reboot
Sau khi khởi động lại, bạn sẽ thấy chia sẻ trong đầu ra của...
Mã:
df -h
... và...
Mã:
mount

4 Kiểm tra bản sao GlusterFS​

Bây giờ chúng ta hãy tạo một số tệp thử nghiệm trên chia sẻ GlusterFS:

client1.example.com:
Mã:
touch /mnt/glusterfs/test1
touch /mnt/glusterfs/test2
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:
Mã:
ls -l /data/testvol
Mã:
root@server1:/# ls -l /data/testvol/
tổng số 0
-rw-r--r-- 2 root root 0 Ngày 23 tháng 3 năm 2016 test1
-rw-r--r-- 2 root root 0 Ngày 23 tháng 3 năm 2016 test2
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:
Mã:
shutdown -h now
client1.example.com:
Mã:
touch /mnt/glusterfs/test3
touch /mnt/glusterfs/test4
rm -f /mnt/glusterfs/test2
Những thay đổi sẽ hiển thị trong thư mục /data/testvol trên server2.example.com:

server2.example.com:
Mã:
ls -l /data/testvol
Mã:
root@server2:/# ls -l /data/testvol
tổng cộng 8
-rw-r--r-- 2 root root 0 23 tháng 3 08:06 test1
-rw-r--r-- 2 root root 0 23-03 08:09 test3
-rw-r--r-- 2 root root 0 23-03 08:09 test4
root@server2:/#
Hãy khởi động lại server1.example.com và xem thư mục /data:

server1.example.com:
Mã:
ls -l /data/testvol
Mã:
root@server1:/# ls -l /data/testvol
tổng cộng 0
-rw-r--r-- 2 root root 0 23-03 08:06 test1
-rw-r--r-- 2 root root 0 23-03 08:09 test3
-rw-r--r-- 2 root root 0 23/03 08:09 test4
root@server1:/#
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:
Mã:
ls -l /mnt/glusterfs/
Mã:
root@client1:/# ls -l /mnt/glusterfs/
tổng cộng 0
-rw-r--r-- 1 root root 0 23-03 08:06 test1
-rw-r--r-- 1 root root 0 23-03 08:09 test3
-rw-r--r-- 1 root root 0 23-03 08:09 test4
root@client1:/#

5 Liên kết​

 
Back
Bên trên