Tăng mật độ vùng chứa trên một nút bằng công nghệ PFCACHE

Tăng mật độ vùng chứa trên một nút bằng công nghệ PFCACHE

Một trong những mục tiêu của nhà cung cấp dịch vụ lưu trữ là tối đa hóa việc sử dụng các thiết bị hiện có để cung cấp dịch vụ chất lượng cao cho người dùng cuối. Tài nguyên của máy chủ cuối luôn bị giới hạn, nhưng số lượng dịch vụ máy khách được lưu trữ và trong trường hợp của chúng ta đang nói về VPS, có thể khác nhau đáng kể. Đọc về cách trèo cây và ăn bánh mì kẹp thịt dưới vết cắt.

Việc nén VPS trên một nút theo cách mà khách hàng hoàn toàn không cảm nhận được sẽ giúp tăng hiệu quả kinh tế của bất kỳ nhà cung cấp dịch vụ lưu trữ nào. Tất nhiên, một nút sẽ không bị vỡ tại các đường nối nếu nó chứa đầy các thùng chứa và bất kỳ sự đột biến nào về tải sẽ được tất cả khách hàng cảm nhận ngay lập tức.

Có bao nhiêu VPS có thể được lưu trữ trên một nút phụ thuộc vào nhiều yếu tố, những yếu tố hiển nhiên như:

1. Đặc điểm phần cứng của chính nút đó
2. Kích thước VPS
3. Tính chất tải trên VPS
4. Công nghệ phần mềm giúp tối ưu hóa mật độ

Trong trường hợp này, chúng tôi sẽ chia sẻ kinh nghiệm sử dụng công nghệ Pfcache cho Virtuozzo.
Chúng tôi sử dụng nhánh thứ 6, nhưng mọi điều đã nói cũng đúng với nhánh thứ 7.

bộ nhớ đệm – cơ chế Virtuozzo giúp loại bỏ trùng lặp IOPS và RAM trong các vùng chứa, phân bổ các tệp giống hệt nhau trong các vùng chứa vào một khu vực chung riêng biệt.

Trong thực tế nó bao gồm:
1. Mã hạt nhân
2. Con quỷ không gian người dùng
3. Tiện ích không gian người dùng

Về phía nút, chúng tôi phân bổ toàn bộ phần trong đó các tệp sẽ được tạo sẽ được tất cả VPS trên nút sử dụng trực tiếp. Một thiết bị khối ploop được gắn ở phần này. Sau đó, khi vùng chứa khởi động, nó sẽ nhận được một tham chiếu cho phần này:

[root@pcs13 ~]# cat /proc/mounts
...
/dev/ploop62124p1 /vz/pfcache ext4 rw,relatime,barrier=1,data=ordered,balloon_ino=12 0 0
...
/dev/ploop22927p1 /vz/root/418 ext4 rw,relatime,barrier=1,data=ordered,balloon_ino=12,pfcache_csum,pfcache=/vz/pfcache 0 0
/dev/ploop29642p1 /vz/root/264 ext4 rw,relatime,barrier=1,data=ordered,balloon_ino=12,pfcache_csum,pfcache=/vz/pfcache 0 0
...

Dưới đây là số liệu thống kê gần đúng về số lượng tệp trên một trong các nút của chúng tôi:

[root@pcs13 ~]# find /vz/pfcache -type f | wc -l
45851
[root@pcs13 ~]# du -sck -h /vz/pfcache
2.4G    /vz/pfcache
2.4G    total

Nguyên tắc của pfcache như sau:
• Trình nền không gian người dùng Pfcached ghi hàm băm sha-1 của tệp vào thuộc tính xattr của tệp này. Không phải tất cả các tệp đều được xử lý mà chỉ trong các thư mục /usr, /bin, /usr/sbin, /sbin, /lib, /lib64

• Rất có thể các tập tin trong các thư mục này sẽ được “chia sẻ” và sẽ được nhiều vùng chứa sử dụng;

• Pfcached định kỳ thu thập số liệu thống kê về việc đọc các tập tin từ kernel, phân tích nó và thêm các tập tin vào bộ đệm nếu chúng được sử dụng thường xuyên;

• Các thư mục này có thể khác nhau và được cấu hình trong các tập tin cấu hình.

• Khi đọc một tập tin, nó sẽ được kiểm tra xem nó có chứa hàm băm được chỉ định trong các thuộc tính mở rộng xattr hay không. Nếu nó chứa, tệp "chung" sẽ được mở thay vì tệp vùng chứa. Sự thay thế này xảy ra mà mã vùng chứa không chú ý và bị ẩn trong kernel;

• Khi ghi vào một tập tin, hàm băm không còn hiệu lực. Do đó, vào lần tiếp theo bạn mở nó, chính tệp vùng chứa sẽ được mở chứ không phải bộ đệm của nó.

Bằng cách giữ các tệp được chia sẻ từ /vz/pfcache trong bộ đệm trang, chúng tôi đạt được mức tiết kiệm trong chính bộ đệm này cũng như tiết kiệm trong IOPS. Thay vì đọc mười tệp từ đĩa, chúng tôi đọc một tệp và ngay lập tức chuyển đến bộ đệm trang.

struct inode {
...
 struct file             *i_peer_file;
...
};
struct address_space {
...
 struct list_head        i_peer_list;
...
}

Danh sách VMA cho tệp vẫn duy nhất (chúng tôi loại bỏ bộ nhớ trùng lặp) và được đọc từ đĩa ít thường xuyên hơn (tiết kiệm iops). Quỹ chung của chúng tôi nằm trên ổ SSD - một lợi ích bổ sung về tốc độ.

Ví dụ về việc lưu vào bộ đệm tệp /bin/bash:

[root@pcs13 ~]# ls -li /vz/root/2388/bin/bash
524650 -rwxr-xr-x 1 root root 1021112 Oct  7  2018 /vz/root/2388/bin/bash
[root@pcs13 ~]# pfcache dump /vz/root/2388 | grep 524650
8e3aa19fdc42e87659746f6dc8ea3af74ab30362 i:524650      g:1357611108  f:CP
[root@pcs13 ~]# sha1sum /vz/root/2388/bin/bash
8e3aa19fdc42e87659746f6dc8ea3af74ab30362  /vz/root/2388/bin/bash
[root@pcs13 /]# getfattr -ntrusted.pfcache /vz/root/2388/bin/bash
# file: vz/root/2388/bin/bash
trusted.pfcache="8e3aa19fdc42e87659746f6dc8ea3af74ab30362"
[root@pcs13 ~]# sha1sum /vz/pfcache/8e/3aa19fdc42e87659746f6dc8ea3af74ab30362
8e3aa19fdc42e87659746f6dc8ea3af74ab30362  /vz/pfcache/8e/3aa19fdc42e87659746f6dc8ea3af74ab30362

Chúng tôi tính toán hiệu quả sử dụng kịch bản làm sẵn.

Tập lệnh này đi qua tất cả các vùng chứa trên nút, tính toán các tệp được lưu trong bộ nhớ đệm của từng vùng chứa.

[root@pcs16 ~]# /pcs/distr/pfcache-examine.pl
...
Pfcache cache uses 831 MB of memory
Total use of pfcached files in containers is 39837 MB of memory
Pfcache effectiveness: 39006 MB

Do đó, từ bộ nhớ, chúng tôi lưu khoảng 40 gigabyte tệp trong vùng chứa, chúng sẽ được tải từ bộ đệm.

Để cơ chế này hoạt động tốt hơn nữa, cần phải đặt VPS “giống hệt” nhất trên node. Ví dụ: những thứ mà người dùng không có quyền truy cập root và trên đó môi trường từ hình ảnh đã triển khai được định cấu hình.

Bạn có thể điều chỉnh pfcache thông qua tệp cấu hình
/etc/vz/pfcache.conf

MINSIZE, MAXSIZE – kích thước tệp tối thiểu/tối đa để lưu vào bộ nhớ đệm
THỜI GIAN - thời gian chờ giữa các lần thử bộ nhớ đệm

Bạn có thể xem danh sách đầy đủ các thông số по ссылке.

Nguồn: www.habr.com

Thêm một lời nhận xét