Tìm hiểu và Sử dụng Glusterfs.
1. NFS
1.1. NFS là gì?
- NFS là dịch vụ chia sẻ file phổ biến trong mạng Linux và Unix.
- NFS cho phép truy cập phân vùng ổ đĩa từ xa như một local disk.
- NFS sử dụng mô hình client server. Server chưa các thư mục chia sẻ và các tiến trình daemon phục vụ quá trình chia sẻ dữ liệu với client
- Cung cấp chức năng bảo mật file và quản lý dung lượng cho từng user group( file system quota)
- Khi client cần sử dụng các thư mục được chia sẻ thì sẽ sử dụng NFS để mount thư mục đó về máy client.
- Xử lý được những file lớn hơn 2GB, đòi hỏi hệ thống phải có phiên bản kernel lớn hơn hoặc bằng 2.4x và glibc từ 2.2.x trở lên
- Client từ phiên bản kernel 2.2.18 trở đi đều hỗ trợ NFS trên nền TCP
1.2. NFS server.
1.2.1. File cấu hình
Có 3 file cấu hình chính để thiết lập NFS server: /etc/exports, /etc/hosts.allow và /etc/hosts.deny
/etc/exports
Cú pháp cấu hình trong file /etc/exports
:
dir host1(option) host2(option) hostn(option)
- Trong đó:
dir
: là thư mục hoặc filesystem muốn chia sẻ.host
: là các host được cho phép mount thư mụcdir
.host
có thể được chỉ định bởi tên, tên nhóm, một hay một dải địa chỉ ip, hoặc tất cả các host (ký tự *).option
: Các tùy chọn hay gán quyền khi mount cho các host.
- Các option:
- ro: thư mục được chia sẻ chỉ đọc được; client không thể ghi lên nó.
- rw: client có thể đọc và ghi trên thư mục.
- no_root_squash: Mặc định, bất kỳ file truy vấn được tạo bởi người dùng (root) máy trạm đều được xử lý tương tự nếu nó được tạo bởi user nobody. Nếu no_root_squash được chọn, user root trên client sẽ giống như root trên server.
- no_subtree_check: Nếu chỉ 1 phần của ổ đĩa được chia sẻ, 1 đoạn chương trình gọi là “thẩm tra lại việc kiểm tra cây con” được yêu cầu từ phía client (nó là 1 file n m trong phân vùng được chia sẻ). Nếu toàn bộ ổ đĩa được chia sẻ, việc vô hiệu hóa sự kiểm tra này sẽ tăng tốc độ truyền tải.
- sync: thông báo cho client biết 1 file đã được ghi xong- tức là nó đã được ghi để lưu trữ an toàn-khi mà NFS hoàn thành việc kiểm soát ghi lên các file hệ thống. cách xử lí này có thể là nguyên nhân làm sai lệch dữ liệu nếu server khởi động lại.
- Ví dụ 1 file cấu hình mẫu:
/usr/local *.123.vn(ro,sync) /home 192.168.1.0/255.255.255.0(rw) /var/tmp 192.168.1.1(rw) 192.168.1.3(rw)
Dòng thứ nhất : Cho phép tất cả các host với tên miền định dạng “somehost”.123.vn được mount thư mục /usr/local với quyền chỉ đọc, và thông báo cho client về việc sync data. Dòng thứ hai : Cho phép bất kỳ host nào có địa chỉ IP thuộc subnet 192.168.1.0/24 được mount thư mục /home với quyền đọc và ghi. Dòng thứ ba : Cho phép 2 host được mount thư mục /var/tmp với quyền đọc và ghi.
Khi thay đổi cấu hình trong /etc/exports
thì chạy lệnh exportfs -ra
để nfsd đọc lại nội dung file cấu hình.
/etc/hosts.allow và /etc/hosts.deny Hai file này định nghĩa quyền truy cập vào các dịch vụ trên hệ thống của bạn. Mỗi dòng trong file chứa 1 dịch vụ và một hay một nhóm các host.
- Đầu tiên, hệ thống sẽ kiểm tra client có phù hợp với quy tắc nào trong file
/etc/hosts.allow
không, nếu có client sẽ được truy cập dịch vụ trong quy tắc đó. - Nếu client không phù hợp với quy tắc nào trong
/etc/hosts.allow
thì hệ thống bắt đầu kiểm tra xem client có phù hợp với quy tắc nào trong file/etc/hosts.deny
. Nếu có, client sẽ bị chặn truy cập dịch vụ đó. - Nếu client không phù hợp với bất kì quy tắc nào trong hai file này thì nó sẽ được phép truy cập.
Chú ý
- Có thể cấu hình tùy chọn kích thước gói dữ liệu để tối ưu khi truyền với options rsize và wsize. link tham khảo: http://blogit.edu.vn/toi-uu-he-thong-nfs/
-
Không đặt rsize và wsize lớn hơn MTU của mạng truyền.
-
Dùng nfsstat để có thêm thông tin về hoạt động của NFS.
-
Thay đổi port cho statd: statd -p 32765 -o 32766
- Thay đổi port mountd: mountd -p 32767
Có hai chế độ mount là sử dụng lệnh mount để mount tạm thời( khi reboot sẽ mất mount) hoặc sử dụng fstab để mount tự động sau mỗi lần reboot.
1.3. Cài đặt và cấu hình NFS trên Centos 7.
Trên server:
- Cài đặt:
yum install -y nfs-utils
- Cấu hình share thư mục /web cho các host trong mạng 10.88.88.0/24 với quyền read, write.
vi /etc/exports
/web 10.88.88.0/24(rw)
- Chạy dịch vụ:
systemctl start rpcbind nfs-server systemctl enable rpcbind nfs-server
Nếu dịch vụ firewalld được bật thì cần cấu hình enable dịch vụ:
firewall-cmd --add-service=nfs --permanent firewall-cmd --add-service={nfs3,mountd,rpc-bind} --permanent firewall-cmd --reload
Trên Client:
- Cài đặt:
yum install -y nfs-utils systemctl start rpcbind systemctl enable rpcbind
- Mount thư mục /root/web-data trên client đến /web trên nfs server:
mount -t nfs 10.88.88.10:/web /root/web-data
- Hoặc có thể cấu hình auto mount sử dụng fstab:
vi /etc/fstab
10.88.88.0:/web /root/web-data nfs defaults 0 0
2. Glusterfs
2.1. Giới thiệu.
GlusterFS là một open source, là tập hợp file hệ thống có thể được nhân rộng tới vài peta-byte và có thể xử lý hàng ngàn Client. GlusterFS có thể linh hoạt kết hợp với các thiết bị lưu trữ vật lý, ảo, và tài nguyên điện toán đám mây để cung cấp 1 hệ thống lưu trữ có tính sẵn sàng cao và khả năng performant cao . Chương trình này có thể lưu trữ dữ liệu trên các mô hình, các thiết bị khác nhau, nó kết nối với các node GlusterFS qua TCP và RDMA tạo ra một nguồn tài nguyên lưu trữ dữ liệu duy nhất, mốt khối lưu trữ duy nhất(distributed mode) hoặc có thể tận dụng tối đa không gian lưu trữ trên các node để có thể nhân bản dữ liệu và đặt trên nhiều node( replicated mode).
2.2. Một số khái niêm khi sử dụng GlusterFS
Trusted Storage Pool: Các server được dùng để lưu trữ được gọi là các node, tập hợp những node này khi được kết hợp lại thành một không gian lưu trữ nhờ GlusterFS được gọi là Pool.
Brick: Là bất kì thư mục lưu trữ nào trên một node nào đó mà được chia sẻ trong trusted storage pool.
- Brick được định dạng bởi 1 server(tên hay địa chỉ ip) và đường dẫn tới nó. Ví dụ:
192.168.88.99:/root/share
- Mỗi brick bị giới hạn dung lượng bởi filesystem.
- Trong mô hình lý tưởng, các brick sẽ có dung lượng bằng nhau.
Volume: Là tập hợp logic của những brick cùng hoặc trên các server khác nhau. Volume được mount và sử dụng bởi client (ví dụ: mount -t glusterfs gl1:/ /my/mnt/point
).
Distributed File system: là hệ thống file mà dữ liệu trong đó được chia ra trên các node khác nhau mà người dùng sử dụng file mà không biết thực sự file đó đang ở đâu.
glusterd: là daemon quản lý glusterfs
cluster: mang ý nghĩa tương tự như trusted storage pool.
2.3. Các loại volume trong glusterfs.
Khi sử dụng Glusterfs, có thể tạo nhiều loại volume khác nhau với các chức năng, mục đích khác nhau.
Distributed volume
- Dữ liệu được lưu trữ phân tán trên các brick, mỗi file sẽ được lưu trữ trên một brick duy nhất.
- Giúp mở rộng dung lượng lưu trữ (tổng dung lượng volume sẽ bằng tổng dung lượng các brick trong volume đó)
- Nhược điểm: khi một brick lỗi thì dữ liệu trong brick sẽ bị mất.
Replicated volume
- Tất cả dữ liệu sẽ được nhân bản, đồng bộ lên tất cả các brick trong volume đó.
- Đảm bảo tính nhất quán dữ liệu trên các brick.
- Không giới hạn số lượng nhân bản
- Có khả năng dự phòng và sẵn sàng cao.
- Nhược điểm là tốn dung lượng cho việc nhân bản dữ liệu.
Striped Volume
- Dữ liệu được chia nhỏ và lưu trữ trên các brick khác nhau. (tương tự RAID 0)
- Phù hợp với yêu cầu về hiệu năng cao đặc biệt là với những file lớn.
- Khi một brick bị lỗi, toàn bộ dữ liệu trong volume bị mất.
Distributed Replicated Volume
- Kết hợp giữa distributed và replicated.
- Dữ liệu sẽ được lưu phân tán, mối file sẽ được lưu trữ trên một replicated volume và được nhân bản trên các brick của các replicated volume đó.
- Vừa mở rộng vừa tăng tính dự phòng cho dữ liệu.
Distributed stripe volume:
- Kết hợp từ Distributed và stripe. Do đó nó có hầu hết những thuộc tính hai loại trên và khi 1 node và 1 brick delete đồng nghĩa volume cũng không thể hoạt động được nữa.
Replicated stripe volume
- Kết hợp từ replicated và stripe.
2.4. Thực hiện một số cấu hình cơ bản.
2.4.1. Mô hình
Server:
- 10.88.88.10 gl1
- 10.88.88.20 gl2
- 10.88.88.30 gl3 Client
- 10.88.88.99
2.4.2. Cấu hình tạo một replicated volume.
- Cài đặt glusterfs trên tất cả các server. ``` yum install wget -y yum install centos-release-gluster -y yum install epel-release -y yum install glusterfs-server -y
systemctl start glusterd systemctl enable glusterd
Cấu hình firewalld:
firewall-cmd –zone=public –add-port=24007-24008/tcp –permanent firewall-cmd –zone=public –add-port=24009/tcp –permanent firewall-cmd –zone=public –add-service=nfs –add-service=samba –add-service=samba-client –permanent firewall-cmd –zone=public –add-port=111/tcp –add-port=139/tcp –add-port=445/tcp –add-port=965/tcp –add-port=2049/tcp –add-port=38465-38469/tcp –add-port=631/tcp –add-port=111/udp –add-port=963/udp –add-port=49152-49251/tcp –permanent firewall-cmd –reload
Trên server **gl1(10.88.88.10)**:
- Thêm node server2 (10.88.88.20) vào pool trên gl1.
gluster peer probe 10.88.88.20
Kiểm tra với lệnh:
```sh
# gluster peer status
Number of Peers: 1
Hostname: 10.88.88.20
Uuid: e7a88b3f-a338-47f1-9db0-966c5495afd4
State: Peer in Cluster (Connected)
- Tạo thư mục để làm brick trên gl1
mkdir /mnt/brick-on-node1
Trên gl2(10.88.88.20):
- Tạo thư mục để làm brick
mkdir /mnt/brick-on-node2
- Tạo volume replicated testvoltừ hai thư mục vừa tạo:
gluster volume create testvol replica 2 transport tcp 10.88.88.10:/mnt/brick-on-node1 10.88.88.20:/mnt/brick-on-node2 force
Lưu ý: Khi tạo replicated volume thì cần khai báo đúng số brick với số replicate. Ví dụ nếu cấu hình
rep 2
thì chỉ được khai báo 2 brick, nếu khai báo hơn thì sẽ bị lỗi hoặc sẽ tạo ra distributed replicated volume nếu số brick là bộ số của số replicate.
- Nếu phiên bản glusterfs trên client nhỏ hơn 5.0, cần thiết lập tắt chức năng ctime của volume:
gluster volume set testvol ctime off
- Start volume:
gluster volume start testvol
Trên Client(10.88.88.99):
- Chạy lệnh sau để cài glusterfs client:
yum install glusterfs-fuse -y
- Mount volume glusterfs đến thư mục /root/share-data
mount -t glusterfs 10.88.88.10:/testvol /root/share-data
- Kiểm tra với lệnh df -Th:
[root@localhost ~]# df -Th Filesystem Type Size Used Avail Use% Mounted on /dev/mapper/centos-root xfs 17G 1,1G 16G 7% / devtmpfs devtmpfs 476M 0 476M 0% /dev tmpfs tmpfs 488M 0 488M 0% /dev/shm tmpfs tmpfs 488M 7,6M 480M 2% /run tmpfs tmpfs 488M 0 488M 0% /sys/fs/cgroup /dev/sda1 xfs 1014M 130M 885M 13% /boot tmpfs tmpfs 98M 0 98M 0% /run/user/0 10.88.88.10:/testvol fuse.glusterfs 17G 1,3G 16G 8% /root/share-data
2.4.3. Cấu hình thêm node và brick vào replicated volume vừa tạo.
Trên server gl3 (10.88.88.30 ) tạo thư mục để làm brick:
mkdir /mnt/brick-on-node3
Trên server gl1, thêm server gl3 vào pool và thêm brick trên server gl3 vào volume testvol
:
[root@gl1 ~]# gluster peer probe 10.88.88.30
peer probe: success.
[root@gl1 ~]# gluster peer status
Number of Peers: 2
Hostname: 10.88.88.20
Uuid: e7a88b3f-a338-47f1-9db0-966c5495afd4
State: Peer in Cluster (Connected)
Hostname: 10.88.88.30
Uuid: d67993e3-515f-4aa1-a9df-fa94d6302593
State: Peer in Cluster (Connected)
[root@gl1 ~]# gluster volume add-brick testvol replica 3 10.88.88.30:/mnt/brick-on-node3 force
volume add-brick: success
[root@gl1 ~]# gluster volume status testvol
Status of volume: testvol
Gluster process TCP Port RDMA Port Online Pid
------------------------------------------------------------------------------
Brick 10.88.88.10:/mnt/brick-on-node1 49152 0 Y 1044
Brick 10.88.88.20:/mnt/brick-on-node2 49152 0 Y 1032
Brick 10.88.88.30:/mnt/brick-on-node3 49152 0 Y 1407
Self-heal Daemon on localhost N/A N/A Y 1691
Self-heal Daemon on 10.88.88.20 N/A N/A Y 1552
Self-heal Daemon on 10.88.88.30 N/A N/A Y 1428
Task Status of Volume testvol
------------------------------------------------------------------------------
There are no active volume tasks
Kiểm tra dữ liệu trên brick của server gl3 đã thấy dữ liệu được đồng bộ.
2.4.4. Xóa brick, peer, volume với replicated volume.
Ví dụ: Volume test-vol
đang có 3 brick replica với nhau, lệnh sau để gỡ một brick ra khỏi volume:
# gluster volume remove-brick test-vol rep 2 10.88.88.30:/mnt/brick-on-node3 force
Xóa một peer khỏi cluster(cần xóa các brick trên peer này nếu nó nằm trong một volume nào đó trước) :
gluster peer detach 10.88.88.30
Để xóa một volume thì ta cần dừng nó trước khi xóa:
gluster volume stop test-vol
gluster volume delete test-vol
2.4.5. Tạo distributed volume.
Lệnh trên sẽ tạo distributed volume distvol
với hai brick trên 2 peer là gl1 và gl2.
gluster volume create distvol gl1:/mnt/brick1 gl2:/mnt/brick
Lệnh trên sẽ tạo distributed volume distvol
với hai brick trên 2 peer là gl1 và gl2.