Khi lưu trữ bất kỳ dữ liệu quan trọng nào, việc có một điểm lỗi duy nhất là rất rủi ro. Mặc dù nhiều cơ sở dữ liệu và phần mềm khác cho phép bạn trải rộng dữ liệu trong ngữ cảnh của một ứng dụng, nhưng các hệ thống khác có thể hoạt động ở cấp độ hệ thống tệp để đảm bảo rằng dữ liệu được sao chép sang một vị trí khác bất cứ khi nào dữ liệu được ghi vào đĩa.
GlusterFS là một hệ thống tệp lưu trữ gắn trên mạng cho phép bạn gộp các tài nguyên lưu trữ của nhiều máy. Đổi lại, nó cho phép bạn xử lý nhiều thiết bị lưu trữ được phân phối giữa nhiều máy tính như một thiết bị mạnh mẽ hơn. GlusterFS cũng cho phép bạn tự do tạo các loại cấu hình lưu trữ khác nhau, nhiều cấu hình trong số đó có chức năng tương tự như cấp độ RAID. Chẳng hạn, bạn có thể phân chia dữ liệu trên các nút khác nhau trong cụm hoặc bạn có thể triển khai dự phòng để có sẵn dữ liệu tốt hơn.
Trong hướng dẫn này, bạn sẽ tạo một mảng lưu trữ theo cụm dự phòng (redundant clustered storage), còn được gọi là hệ thống tệp phân tán hoặc, như được đề cập trong tài liệu GlusterFS, Trusted Storage Pool. Điều này sẽ cung cấp chức năng tương tự như cấu hình RAID được nhân đôi qua mạng: mỗi máy chủ độc lập sẽ chứa bản sao dữ liệu của chính nó, cho phép các ứng dụng của bạn truy cập vào một trong hai bản sao, từ đó giúp phân phối tải đọc của bạn.
Cụm GlusterFS dự phòng (redundant GlusterFS cluster) này sẽ bao gồm hai máy chủ Ubuntu 20.04. Điều này sẽ hoạt động tương tự như một máy chủ NAS với RAID được nhân đôi. Sau đó, bạn sẽ truy cập vào cụm từ máy chủ Ubuntu 20.04 thứ ba được thiết lập cấu hình để hoạt động như một máy khách GlusterFS.
Khi bạn thêm dữ liệu vào ổ đĩa GlusterFS, dữ liệu đó sẽ được đồng bộ hóa với mọi máy trong nhóm lưu trữ nơi ổ đĩa được lưu trữ. Lưu lượng truy cập giữa các node này không được mã hóa theo mặc định, nghĩa là có nguy cơ bị chặn bởi các tác nhân độc hại.
Vì lý do này, nếu bạn định sử dụng GlusterFS trong sản xuất, bạn nên chạy nó trên một mạng biệt lập. Ví dụ: bạn có thể thiết lập để nó chạy trong Virtual Private Cloud (VPC) hoặc với VPN chạy giữa mỗi nút.
Để làm theo hướng dẫn này, bạn sẽ cần ba máy chủ chạy Ubuntu 20.04. Mỗi máy chủ phải có một non-root user với quyền quản trị và tường lửa được thiết lập cấu hình bằng UFW. Để thiết lập điều này, hãy làm theo hướng dẫn thiết lập máy chủ ban đầu của chúng tôi cho Ubuntu 20.04.
Lưu ý: Như đã đề cập trong phần Mục tiêu, bài viết này sẽ hướng dẫn bạn cách thiết lập cấu hình hai trong số các máy chủ Ubuntu của bạn để hoạt động như các máy chủ trong nhóm lưu trữ (storage pool) của bạn và máy chủ còn lại hoạt động như một ứng dụng khách (client) mà bạn sẽ sử dụng để truy cập các node này.
Để rõ ràng, hướng dẫn này sẽ đề cập đến các máy này với các tên máy chủ sau:
Tên máy chủ | Vai trò trong Storage Pool |
---|---|
gluster0 | Server |
gluster1 | Server |
gluster2 | Client |
Các lệnh nên chạy trên gluster0 hoặc gluster1 sẽ có nền màu xanh lam và đỏ tương ứng:
sammy@gluster0:~$
sammy@gluster1:~$
Các lệnh chỉ nên chạy trên máy khách (gluster2) sẽ có nền màu xanh lục:
sammy@gluster2:~$
Các lệnh có thể hoặc nên chạy trên nhiều máy sẽ có nền màu xám:
-
Thiết lập một số loại phân giải tên máy chủ giữa mỗi máy tính có thể giúp quản lý Gluster storage pool của bạn. Bằng cách này, bất cứ khi nào bạn phải tham chiếu một trong các máy của mình bằng lệnh gluster
dưới đây trong hướng dẫn này, bạn có thể làm như vậy với một tên miền dễ nhớ hoặc thậm chí là biệt hiệu thay vì địa chỉ IP tương ứng của chúng.
Nếu bạn không có tên miền dự phòng hoặc nếu bạn chỉ muốn thiết lập một cái gì đó nhanh chóng, thay vào đó, bạn có thể chỉnh sửa tệp /etc/hosts
trên mỗi máy tính. Đây là một tệp đặc biệt trên các máy Linux, nơi bạn có thể thiết lập cấu hình tĩnh hệ thống để phân giải bất kỳ tên máy chủ nào có trong tệp thành địa chỉ IP tĩnh.
Lưu ý: Nếu bạn muốn thiết lập cấu hình máy chủ của mình để xác thực bằng miền mà bạn sở hữu, trước tiên bạn cần lấy tên miền từ công ty đăng ký tên miền — như CloudFly — và thiết lập cấu hình bản ghi DNS thích hợp.
Khi bạn đã thiết lập cấu hình bản ghi A cho mỗi máy chủ, bạn có thể chuyển sang Bước 2. Khi làm theo hướng dẫn này, hãy đảm bảo rằng bạn thay thế glusterN.example.com và glusterN bằng tên miền phân giải thành máy chủ tương ứng được tham chiếu trong lệnh ví dụ.
Sử dụng trình soạn thảo văn bản ưa thích của bạn, mở tệp này với quyền root trên mỗi máy của bạn. Ở đây, chúng tôi sẽ sử dụng nano
:
- sudo nano /etc/hosts
Theo mặc định, tệp sẽ trông giống như thế này với các nhận xét đã bị xóa:
127.0.1.1 hostname hostname
127.0.0.1 localhost
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts
Trên một trong các máy chủ Ubuntu của bạn, hãy thêm địa chỉ IP của từng máy chủ, sau đó là bất kỳ tên nào bạn muốn sử dụng để tham chiếu chúng trong các lệnh bên dưới định nghĩa máy chủ lưu trữ cục bộ.
Trong ví dụ sau, mỗi máy chủ được cấp một tên máy chủ dài phù hợp với glusterN.example.com
và một tên ngắn phù hợp với glusterN
. Bạn có thể thay đổi các phần glusterN.example.com
và glusterN
của mỗi dòng thành bất kỳ tên nào — hoặc các tên được phân tách bằng dấu cách đơn — bạn muốn sử dụng để truy cập từng máy chủ. Tuy nhiên, xin lưu ý rằng hướng dẫn này sẽ sử dụng các ví dụ này xuyên suốt:
Lưu ý: Nếu máy chủ của bạn là một phần của nhóm cơ sở hạ tầng Virtual Private Cloud, thì bạn nên sử dụng địa chỉ IP riêng của từng máy chủ trong tệp /etc/hosts
thay vì IP công khai của chúng.
. . .
127.0.0.1 localhost
first_ip_address gluster0.example.com gluster0
second_ip_address gluster1.example.com gluster1
third_ip_address gluster2.example.com gluster2
. . .
Khi bạn hoàn tất việc thêm những dòng mới này vào tệp /etc/hosts
của một máy, hãy sao chép và thêm chúng vào tệp /etc/hosts
trên các máy khác của bạn. Mỗi tệp /etc/hosts
phải chứa các dòng giống nhau, liên kết địa chỉ IP của máy chủ với tên bạn đã chọn.
Lưu và đóng từng tệp khi bạn hoàn tất. Nếu bạn đã sử dụng nano
, hãy làm như vậy bằng cách nhấn CTRL + X
, Y
, rồi ENTER
.
Giờ đây, bạn đã thiết lập cấu hình độ phân giải tên máy chủ giữa mỗi máy chủ của mình, việc chạy các lệnh sau này sẽ dễ dàng hơn khi bạn thiết lập vùng lưu trữ và ổ đĩa. Tiếp theo, bạn sẽ thực hiện một bước khác phải được hoàn thành trên mỗi máy chủ của mình. Cụ thể, bạn sẽ thêm kho lưu trữ gói cá nhân chính thức (PPA) của dự án Gluster vào từng máy chủ trong số ba máy chủ Ubuntu của mình để đảm bảo rằng bạn có thể cài đặt phiên bản mới nhất của GlusterFS.
Mặc dù kho lưu trữ APT mặc định của Ubuntu 20.04 có chứa các gói GlusterFS, tại thời điểm viết bài này, chúng không phải là phiên bản mới nhất. Một cách để cài đặt phiên bản ổn định mới nhất của GlusterFS (phiên bản 7.6 tính đến thời điểm viết bài này) là thêm PPA chính thức của dự án Gluster vào từng máy chủ trong số ba máy chủ Ubuntu của bạn.
Thêm PPA cho các gói GlusterFS bằng cách chạy lệnh sau trên mỗi máy chủ:
- sudo add-apt-repository ppa:gluster/glusterfs-7
Nhấn ENTER
khi được nhắc để xác nhận rằng bạn thực sự muốn thêm PPA.
Sau khi thêm PPA, hãy làm mới chỉ mục gói cục bộ của từng máy chủ. Điều này sẽ làm cho mỗi máy chủ nhận thức được các gói mới có sẵn:
- sudo apt update
Sau khi thêm PPA chính thức của dự án Gluster vào từng máy chủ và cập nhật chỉ mục gói cục bộ, bạn đã sẵn sàng cài đặt các gói GlusterFS cần thiết. Tuy nhiên, vì hai trong số ba máy của bạn sẽ đóng vai trò là máy chủ Gluster và máy kia sẽ đóng vai trò là máy khách nên có hai quy trình cài đặt và cấu hình riêng biệt. Trước tiên, bạn sẽ cài đặt và thiết lập các thành phần máy chủ.
Storage pool là bất kỳ lượng dung lượng lưu trữ nào được tổng hợp từ nhiều tài nguyên lưu trữ. Trong bước này, bạn sẽ thiết lập cấu hình hai trong số các máy chủ của mình — gluster0 và gluster1 — làm thành phần cụm.
Trên cả gluster0 và gluster1, hãy cài đặt gói máy chủ GlusterFS bằng cách nhập:
- sudo apt install glusterfs-server
Khi được nhắc, nhấn Y
rồi ENTER
để xác nhận cài đặt.
Quá trình cài đặt sẽ tự động thiết lập cấu hình GlusterFS để chạy dưới dạng dịch vụ systemd
. Tuy nhiên, nó không tự động khởi động dịch vụ hoặc cho phép dịch vụ chạy khi khởi động.
Để khởi động glusterd
, dịch vụ GlusterFS, hãy chạy lệnh systemctl start
sau trên cả gluster0 và gluster1:
- sudo systemctl start glusterd.service
Sau đó chạy lệnh sau trên cả hai máy chủ. Điều này sẽ cho phép dịch vụ bắt đầu bất cứ khi nào máy chủ khởi động:
- sudo systemctl enable glusterd.service
Sau đó, bạn có thể kiểm tra trạng thái của dịch vụ trên một hoặc cả hai máy chủ:
- sudo systemctl status glusterd.service
Nếu dịch vụ đang hoạt động, bạn sẽ nhận được kết quả như sau:
Output● glusterd.service - GlusterFS, a clustered file-system server
Loaded: loaded (/lib/systemd/system/glusterd.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2020-06-02 21:32:21 UTC; 32s ago
Docs: man:glusterd(8)
Main PID: 14742 (glusterd)
Tasks: 9 (limit: 2362)
CGroup: /system.slice/glusterd.service
└─14742 /usr/sbin/glusterd -p /var/run/glusterd.pid --log-level INFO
Giả sử bạn đã làm theo hướng dẫn thiết lập máy chủ ban đầu tiên quyết, bạn sẽ thiết lập tường lửa với UFW trên mỗi máy của mình. Do đó, bạn sẽ cần mở tường lửa trên mỗi node trước khi có thể thiết lập liên lạc giữa chúng và tạo storage pool.
Gluster daemon sử dụng cổng 24007
, vì vậy bạn sẽ cần cho phép mỗi node truy cập vào cổng đó thông qua tường lửa của từng node khác trong storage pool của bạn. Để làm như vậy, hãy chạy lệnh sau trên gluster0. Nhớ thay gluster1_ip_address
thành địa chỉ IP của gluster1:
sammy@gluster0:~$ sudo ufw allow from gluster1_ip_address to any port 24007
Và chạy lệnh sau trên gluster1. Một lần nữa, hãy đảm bảo thay đổi gluster0_ip_address
thành địa chỉ IP của gluster0:
sammy@gluster1:~$ sudo ufw allow from gluster0_ip_address to any port 24007
Bạn cũng cần cho phép máy khách của mình (gluster2) truy cập vào cổng này. Nếu không, bạn sẽ gặp sự cố sau này khi cố gắn âm lượng lên. Chạy lệnh sau trên cả gluster0 và gluster1 để mở cổng này tới máy khách của bạn:
- sudo ufw allow from gluster2_ip_address to any port 24007
Sau đó, để đảm bảo rằng không có máy nào khác có thể truy cập vào cổng của Gluster trên cả hai máy chủ, hãy thêm quy tắc deny
toàn bộ sau cho cả gluster0 và gluster1:
- sudo ufw deny 24007
Bây giờ bạn đã sẵn sàng để thiết lập giao tiếp giữa gluster0 và gluster1. Để làm như vậy, bạn sẽ cần chạy lệnh gluster peer probe
trên một trong các node của mình. Việc bạn sử dụng node nào không quan trọng, nhưng ví dụ sau cho thấy lệnh đang được chạy trên gluster0:
sammy@gluster0:~$ sudo gluster peer probe gluster1
Về cơ bản, lệnh này yêu cầu gluster0 tin tưởng gluster1 và đăng ký nó như một phần của storage pool của nó. Nếu thăm dò thành công, nó sẽ trả về đầu ra sau:
Outputpeer probe: success
Bạn có thể kiểm tra xem các node có đang giao tiếp bất cứ lúc nào hay không bằng cách chạy lệnh gluster peer status
trên một trong hai node. Trong ví dụ này, nó chạy trên gluster1:
sammy@gluster1:~$ sudo gluster peer status
Nếu bạn chạy lệnh này từ gluster1, nó sẽ hiển thị kết quả như sau:
OutputNumber of Peers: 1
Hostname: gluster0.example.com
Uuid: a3fae496-c4eb-4b20-9ed2-7840230407be
State: Peer in Cluster (Connected)
Tại thời điểm này, hai máy chủ của bạn đang giao tiếp và sẵn sàng tạo storage volume với nhau.
Nhớ lại rằng mục tiêu chính của hướng dẫn này là tạo một redundant storage pool. Để làm được điều này, bạn sẽ thiết lập một ổ đĩa có chức năng sao chép, cho phép bạn giữ nhiều bản sao dữ liệu của mình và ngăn không cho cụm của bạn có một điểm lỗi duy nhất.
Để tạo một ổ đĩa, bạn sẽ sử dụng lệnh gluster volume create
với cú pháp chung sau:
- sudo gluster volume create volume_name replica number_of_servers domain1.com:/path/to/data/directory domain2.com:/path/to/data/directory force
Đây là ý nghĩa của các đối số và tùy chọn của lệnh gluster volume create
này:
volume_name
: Đây là tên bạn sẽ sử dụng để chỉ ổ đĩa sau khi nó được tạo. Lệnh ví dụ sau tạo một ổ có tên là volume1
.replica number_of_servers
: Theo tên ổ đĩa, bạn có thể xác định loại ổ đĩa bạn muốn tạo. Hãy nhớ rằng mục tiêu của hướng dẫn này là tạo redundant storage pool, vì vậy chúng tôi sẽ sử dụng loại ổ đĩa replica
. Điều này yêu cầu một đối số cho biết dữ liệu của ổ đĩa sẽ được sao chép tới bao nhiêu máy chủ (2
trong trường hợp của hướng dẫn này).domain1.com:/…
và domain2.com:/…
: Chúng xác định vị trí máy và thư mục của bricks — thuật ngữ của GlusterFS cho đơn vị lưu trữ cơ bản của nó, bao gồm bất kỳ thư mục nào trên bất kỳ máy nào đóng vai trò là một phần hoặc bản sao của một volume lớn hơn - sẽ tạo nên volume1
. Ví dụ sau sẽ tạo một thư mục có tên gluster-storage
trong thư mục gốc của cả hai máy chủ.force
: Tùy chọn này sẽ ghi đè bất kỳ cảnh báo hoặc tùy chọn nào có thể xuất hiện và tạm dừng quá trình tạo tập đĩa.Theo các quy ước được thiết lập trước đó trong hướng dẫn này, bạn có thể chạy lệnh này để tạo một ổ đĩa. Lưu ý rằng bạn có thể chạy nó từ gluster0 hoặc gluster1:
- sudo gluster volume create volume1 replica 2 gluster0.example.com:/gluster-storage gluster1.example.com:/gluster-storage force
Nếu volume được tạo thành công, bạn sẽ nhận được đầu ra sau:
Outputvolume create: volume1: success: please start the volume to access data
Tại thời điểm này, volume của bạn đã được tạo, nhưng nó chưa hoạt động. Bạn có thể khởi động tập đĩa và cung cấp tập đĩa đó để sử dụng bằng cách chạy lại lệnh sau từ một trong các máy chủ Gluster của bạn:
- sudo gluster volume start volume1
Bạn sẽ nhận được kết quả này nếu volume được bắt đầu đúng cách:
Outputvolume start: volume1: success
Tiếp theo, kiểm tra xem volume có trực tuyến không. Chạy lệnh sau từ một trong các node của bạn:
- sudo gluster volume status
Điều này sẽ trả lại đầu ra tương tự như thế này:
OutputStatus of volume: volume1
Gluster process TCP Port RDMA Port Online Pid
------------------------------------------------------------------------------
Brick gluster0.example.com:/gluster-storage 49152 0 Y 18801
Brick gluster1.example.com:/gluster-storage 49152 0 Y 19028
Self-heal Daemon on localhost N/A N/A Y 19049
Self-heal Daemon on gluster0.example.com N/A N/A Y 18822
Task Status of Volume volume1
------------------------------------------------------------------------------
There are no active volume tasks
Dựa trên đầu ra này, bricks trên cả hai máy chủ đều trực tuyến.
Là bước cuối cùng để thiết lập cấu hình volume của bạn, bạn sẽ cần mở tường lửa trên cả hai máy chủ để máy khách của bạn có thể kết nối và gắn volume. Theo đầu ra mẫu của lệnh trước đó, volume1
đang chạy trên cổng 49152
trên cả hai máy. Đây là cổng mặc định của GlusterFS cho volume đầu tiên của nó và volume tiếp theo bạn tạo sẽ sử dụng cổng 49153
, sau đó là 49154
, v.v.
Chạy lệnh sau trên cả gluster0 và gluster1 để cho phép gluster2 truy cập vào cổng này thông qua tường lửa tương ứng của mỗi người:
- sudo ufw allow from gluster2_ip_address to any port 49152
Sau đó, để có thêm một lớp bảo mật, hãy thêm một quy tắc deny
chung khác cho cổng của volume trên cả gluster0 và gluster1. Điều này sẽ đảm bảo rằng không có máy nào khác ngoài máy khách của bạn có thể truy cập volume trên cả hai máy chủ:
- sudo ufw deny 49152
Giờ đây, volume của bạn đã được thiết lập và chạy, bạn có thể thiết lập máy khách của mình và bắt đầu sử dụng nó từ xa.
Volume của bạn hiện đã được thiết lập cấu hình và có sẵn để máy khách của bạn sử dụng. Tuy nhiên, trước khi bắt đầu, bạn cần cài đặt gói glusterfs-client
từ PPA mà bạn đã thiết lập ở Bước 1 trên máy khách của mình. Các thành phần phụ thuộc của gói này bao gồm một số thư viện chung của GlusterFS và các mô-đun dịch thuật cũng như các công cụ FUSE cần thiết để nó hoạt động.
Chạy lệnh sau trên gluster2:
sammy@gluster2:~$ sudo apt install glusterfs-client
Bạn sẽ sớm gắn storage volume từ xa vào máy khách của mình. Tuy nhiên, trước khi bạn có thể làm điều đó, bạn cần tạo một điểm gắn kết. Theo truyền thống, cái này nằm trong thư mục /mnt
, nhưng có thể sử dụng ở bất cứ đâu thuận tiện.
Để đơn giản, hãy tạo một thư mục có tên /storage-pool
trên máy khách của bạn để làm điểm gắn kết. Tên thư mục này bắt đầu bằng dấu gạch chéo (/
) đặt nó trong thư mục gốc, vì vậy bạn sẽ cần tạo nó với quyền sudo
:
sammy@gluster2:~$ sudo mkdir /storage-pool
Bây giờ bạn có thể gắn volume từ xa. Tuy nhiên, trước đó, hãy xem cú pháp của lệnh mount
mà bạn sẽ sử dụng để làm như vậy:
sudo mount -t glusterfs domain1.com:volume_name /path/to/mount/point
mount
là một tiện ích được tìm thấy trong nhiều hệ điều hành giống Unix. Nó được sử dụng để gắn hệ thống tệp — mọi thứ từ thiết bị lưu trữ bên ngoài, như thẻ SD hoặc thẻ nhớ USB, đến bộ lưu trữ gắn mạng như trong trường hợp của hướng dẫn này — đến các thư mục trên hệ thống tệp hiện có của máy. Cú pháp lệnh mount
bạn sẽ sử dụng bao gồm tùy chọn -t
, yêu cầu ba đối số: loại hệ thống tệp được gắn, thiết bị nơi hệ thống tệp được gắn có thể được tìm thấy và thư mục trên máy khách nơi bạn sẽ gắn volume.
Lưu ý rằng trong cú pháp ví dụ này, đối số thiết bị trỏ đến tên máy chủ theo sau là dấu hai chấm và sau đó là tên của volume. GlusterFS trừu tượng hóa các thư mục lưu trữ thực tế trên mỗi máy chủ, nghĩa là lệnh này không tìm cách gắn thư mục /gluster-storage
mà thay vào đó là volume1
volume.
Cũng lưu ý rằng bạn chỉ phải chỉ định một thành viên của storage cluster. Đây có thể là một trong hai node, vì dịch vụ GlusterFS coi chúng là một máy.
Chạy lệnh sau trên máy khách của bạn (gluster2) để gắn volume vào thư mục /storage-pool
mà bạn đã tạo:
sammy@gluster2:~$ sudo mount -t glusterfs gluster0.example.com:/volume1 /storage-pool
Sau đó, chạy lệnh df
. Điều này sẽ hiển thị lượng không gian đĩa có sẵn cho các hệ thống tệp mà người dùng gọi nó có quyền truy cập:
sammy@gluster2:~$ df
Lệnh này sẽ chỉ ra rằng GlusterFS volume được gắn vào đúng vị trí:
OutputFilesystem 1K-blocks Used Available Use% Mounted on
. . .
gluster0.example.com:/volume1 50633164 1938032 48695132 4% /storage-pool
Giờ đây, bạn có thể chuyển sang kiểm tra xem mọi dữ liệu bạn ghi vào volume trên máy khách có được sao chép vào các node máy chủ của bạn như mong đợi hay không.
Bây giờ bạn đã thiết lập ứng dụng khách của mình để sử dụng storage pool và volume của mình, bạn có thể kiểm tra chức năng của nó.
Trên máy khách của bạn (gluster2), điều hướng đến điểm gắn kết mà bạn đã xác định ở bước trước:
sammy@gluster2:~$ cd /storage-pool
Sau đó tạo một vài tệp thử nghiệm. Lệnh sau tạo mười tệp trống riêng biệt trong storage pool của bạn:
sammy@gluster2:~$ sudo touch file_{0..9}.test
Nếu bạn kiểm tra các thư mục lưu trữ mà bạn đã xác định trước đó trên mỗi máy chủ lưu trữ, bạn sẽ phát hiện ra rằng tất cả các tệp này đều có trên mỗi hệ thống.
Trên gluster0:
sammy@gluster0:~$ ls /gluster-storage
Outputfile_0.test file_2.test file_4.test file_6.test file_8.test
file_1.test file_3.test file_5.test file_7.test file_9.test
Tương tự như vậy, trên gluster1:
sammy@gluster1:~$ ls /gluster-storage
Outputfile_0.test file_2.test file_4.test file_6.test file_8.test
file_1.test file_3.test file_5.test file_7.test file_9.test
Khi các kết quả đầu ra này hiển thị, các tệp thử nghiệm mà bạn đã thêm vào ứng dụng khách cũng được ghi vào cả hai node của bạn.
Nếu đã từng có lúc một trong các node trong storage cluster của bạn ngừng hoạt động, thì node đó có thể không đồng bộ với storage pool nếu có bất kỳ thay đổi nào được thực hiện đối với hệ thống tệp. Thực hiện thao tác đọc trên điểm gắn kết máy khách sau khi node trực tuyến trở lại sẽ cảnh báo node để nhận bất kỳ tệp nào bị thiếu:
sammy@gluster2:~$ ls /storage-pool
Bây giờ, bạn đã xác minh rằng storage volume của mình được gắn chính xác và có thể sao chép dữ liệu vào cả hai máy trong cụm, bạn có thể khóa quyền truy cập vào storage pool.
Tại thời điểm này, bất kỳ máy tính nào cũng có thể kết nối với storage volume của bạn mà không có bất kỳ hạn chế nào. Bạn có thể thay đổi điều này bằng cách đặt tùy chọn auth.allow
, tùy chọn này xác định địa chỉ IP của bất kỳ máy khách nào có quyền truy cập vào volume.
Nếu bạn đang sử dụng cấu hình /etc/hosts
, tên bạn đã đặt cho từng máy chủ sẽ không định tuyến chính xác. Thay vào đó, bạn phải sử dụng địa chỉ IP tĩnh. Mặt khác, nếu bạn đang sử dụng bản ghi DNS, tên miền bạn đã thiết lập cấu hình sẽ hoạt động ở đây.
Trên một trong các storage node của bạn (gluster0 hoặc gluster1), hãy chạy lệnh sau:
- sudo gluster volume set volume1 auth.allow gluster2_ip_address
Nếu lệnh hoàn thành thành công, nó sẽ trả về đầu ra này:
Outputvolume set: success
Nếu bạn cần xóa giới hạn tại bất kỳ thời điểm nào, bạn có thể nhập:
- sudo gluster volume set volume1 auth.allow *
Điều này sẽ cho phép kết nối lại từ bất kỳ máy nào. Điều này không an toàn, nhưng có thể hữu ích cho các vấn đề gỡ lỗi.
Nếu bạn có nhiều máy khách, bạn có thể chỉ định địa chỉ IP hoặc tên miền của chúng cùng lúc (tùy thuộc vào việc bạn đang sử dụng /etc/hosts
hay độ phân giải tên máy chủ DNS), được phân tách bằng dấu phẩy:
- sudo gluster volume set volume1 auth.allow gluster_client1_i,gluster_client2_ip
Storage pool của bạn hiện đã được thiết lập cấu hình, bảo mật và sẵn sàng để sử dụng. Tiếp theo, bạn sẽ tìm hiểu một số lệnh sẽ giúp bạn nhận thông tin về trạng thái storage pool của mình.
Khi bạn bắt đầu thay đổi một số cài đặt cho GlusterFS storage của mình, bạn có thể bối rối về những tùy chọn nào bạn có sẵn, volume nào đang hoạt động và node nào được liên kết với mỗi volume.
Có một số lệnh khác nhau có sẵn trên các node của bạn để truy xuất dữ liệu này và tương tác với storage pool của bạn.
Nếu bạn muốn biết thông tin về từng volume của mình, hãy chạy lệnh gluster volume info
:
- sudo gluster volume info
OutputVolume Name: volume1
Type: Replicate
Volume ID: a1e03075-a223-43ab-a0f6-612585940b0c
Status: Started
Snapshot Count: 0
Number of Bricks: 1 x 2 = 2
Transport-type: tcp
Bricks:
Brick1: gluster0.example.com:/gluster-storage
Brick2: gluster1.example.com:/gluster-storage
Options Reconfigured:
auth.allow: gluster2_ip_address
transport.address-family: inet
storage.fips-mode-rchecksum: on
nfs.disable: on
performance.client-io-threads: off
Tương tự, để lấy thông tin về bất kỳ node nào mà nút này được kết nối, bạn có thể nhập:
sammy@gluster1:~$ sudo gluster peer status
Number of Peers: 1
Hostname: gluster0.example.com Uuid: cb00a2fc-2384-41ac-b2a8-e7a1793bb5a9 State: Peer in Cluster (Connected)
Nếu bạn muốn biết thông tin chi tiết về cách mỗi node đang hoạt động, bạn có thể lập cấu hình cho một volume bằng cách nhập:
- sudo gluster volume profile volume_name start
Khi lệnh này hoàn tất, bạn có thể lấy thông tin được thu thập bằng cách gõ:
- sudo gluster volume profile volume_name info
OutputBrick: gluster0.example.com:/gluster-storage
--------------------------------------------
Cumulative Stats:
%-latency Avg-latency Min-Latency Max-Latency No. of calls Fop
--------- ----------- ----------- ----------- ------------ ----
0.00 0.00 us 0.00 us 0.00 us 30 FORGET
0.00 0.00 us 0.00 us 0.00 us 36 RELEASE
0.00 0.00 us 0.00 us 0.00 us 38 RELEASEDIR
Duration: 5445 seconds
Data Read: 0 bytes
Data Written: 0 bytes
Interval 0 Stats:
%-latency Avg-latency Min-Latency Max-Latency No. of calls Fop
--------- ----------- ----------- ----------- ------------ ----
0.00 0.00 us 0.00 us 0.00 us 30 FORGET
0.00 0.00 us 0.00 us 0.00 us 36 RELEASE
0.00 0.00 us 0.00 us 0.00 us 38 RELEASEDIR
Duration: 5445 seconds
Data Read: 0 bytes
Data Written: 0 bytes
. . .
Như đã trình bày trước đây, để có danh sách tất cả các thành phần liên kết với GlusterFS đang chạy trên mỗi node của bạn, hãy chạy lệnh gluster volume status
:
- sudo gluster volume status
OutputStatus of volume: volume1
Gluster process TCP Port RDMA Port Online Pid
------------------------------------------------------------------------------
Brick gluster0.example.com:/gluster-storage 49152 0 Y 19003
Brick gluster1.example.com:/gluster-storage 49152 0 Y 19040
Self-heal Daemon on localhost N/A N/A Y 19061
Self-heal Daemon on gluster0.example.com N/A N/A Y 19836
Task Status of Volume volume1
------------------------------------------------------------------------------
There are no active volume tasks
Nếu bạn sắp quản lý GlusterFS storage volumes của mình, bạn nên chuyển sang bảng điều khiển GlusterFS. Điều này sẽ cho phép bạn tương tác với môi trường GlusterFS của mình mà không cần gõ sudo gluster
trước mọi thứ:
- sudo gluster
Điều này sẽ cung cấp cho bạn lời nhắc nơi bạn có thể nhập lệnh của mình. help
là một cách tốt để giúp bạn định hướng:
- help
Outputpeer help - display help for peer commands
volume help - display help for volume commands
volume bitrot help - display help for volume bitrot commands
volume quota help - display help for volume quota commands
snapshot help - display help for snapshot commands
global help - list global commands
Khi bạn đã hoàn tất, hãy chạy exit
để thoát khỏi bảng điều khiển Gluster:
- exit
Cùng với đó, bạn đã sẵn sàng bắt đầu tích hợp GlusterFS với ứng dụng tiếp theo của mình.
Bằng cách hoàn thành hướng dẫn này, bạn có một redundant storage system cho phép bạn ghi đồng thời vào hai máy chủ riêng biệt. Điều này có thể hữu ích cho một số ứng dụng và có thể đảm bảo rằng dữ liệu của bạn luôn sẵn sàng ngay cả khi một máy chủ ngừng hoạt động.