Mục lục [Ẩn]
Bạn đã bao giờ gặp phải tình huống trong đó một ứng dụng thống trị toàn bộ băng thông mạng của bạn chưa? Nếu bạn đã từng ở trong tình huống một ứng dụng ăn hết lưu lượng truy cập của bạn, thì bạn sẽ đánh giá cao vai trò của ứng dụng định hình băng thông nhỏ.
Dù bạn là quản trị viên hệ thống hay chỉ là người dùng Linux, bạn cần học cách kiểm soát tốc độ tải lên và tải xuống cho các ứng dụng để đảm bảo rằng băng thông mạng của bạn không bị đốt cháy bởi một ứng dụng duy nhất.
Trickle là gì?
Trickle là một công cụ định hình băng thông mạng cho phép chúng tôi quản lý tốc độ tải lên và tải xuống của các ứng dụng để ngăn chặn bất kỳ ứng dụng nào trong số chúng chiếm hết (hoặc hầu hết) băng thông có sẵn.
Nói một cách ngắn gọn, Trickle cho phép bạn kiểm soát tốc độ lưu lượng mạng trên cơ sở mỗi ứng dụng, trái ngược với kiểm soát trên mỗi người dùng, đây là ví dụ điển hình về định hình băng thông trong môi trường máy khách-máy chủ.
Trickle hoạt động như thế nào?
Ngoài ra, một mẹo nhỏ có thể giúp chúng tôi xác định mức độ ưu tiên trên cơ sở mỗi ứng dụng để khi các giới hạn tổng thể đã được đặt cho toàn bộ hệ thống, các ứng dụng ưu tiên sẽ vẫn tự động nhận được nhiều băng thông hơn.
Để thực hiện nhiệm vụ này, trickle đặt giới hạn lưu lượng đối với cách thức mà dữ liệu được gửi đến và nhận từ các socket sử dụng kết nối TCP. Chúng tôi phải lưu ý rằng, ngoài tốc độ truyền dữ liệu, nhỏ giọt không sửa đổi theo bất kỳ cách nào hành vi của quá trình mà nó đang định hình tại bất kỳ thời điểm nào.
Trickle không thể làm gì?
Có thể nói, hạn chế duy nhất là sự nhỏ giọt đó sẽ không hoạt động với các ứng dụng hoặc tệp nhị phân được liên kết tĩnh với bộ SUID hoặc SGID bit vì nó sử dụng liên kết động và tải để đặt chính nó giữa quy trình định hình và ổ cắm mạng liên quan của nó. Sau đó, Trickle hoạt động như một proxy giữa hai thành phần phần mềm này.
Vì nhỏ giọt không yêu cầu đặc quyền của người dùng cấp cao để chạy, người dùng có thể đặt giới hạn lưu lượng truy cập của riêng họ. Điều này có thể không mong muốn, chúng tôi sẽ khám phá cách đặt giới hạn tổng thể mà người dùng hệ thống không được vượt quá. Nói cách khác, người dùng sẽ vẫn có thể quản lý tốc độ truy cập của họ, nhưng luôn nằm trong giới hạn do quản trị viên hệ thống đặt ra.
Môi trường thử nghiệm
Trong bài viết này, chúng tôi sẽ giải thích cách giới hạn băng thông mạng được sử dụng bởi các ứng dụng trong máy chủ Linux.
Để tạo lưu lượng truy cập cần thiết, chúng tôi sẽ sử dụng ncftpput và ncftpget (cả hai công cụ đều có sẵn bằng cách cài đặt ncftp) trên máy khách (CentOS máy chủ- dev1: 192.168.0.17) và trên máy chủ vsftpd (Debian - dev2: 192.168.0.15) cho mục đích trình bày. Các hướng dẫn tương tự cũng hoạt động dựa trên RedHat, Fedora và các hệ thống dựa trên Ubuntu.
Cài đặt ncftp và vsftpd trong Linux
1. Đối với RHEL/CentOS 8/7, hãy bật kho EPEL. Extra Packages for Enterprise Linux (EPEL) là một kho chứa phần mềm mã nguồn mở và miễn phí chất lượng cao được duy trì bởi dự án Fedora và tương thích 100% với các phần mềm phụ của nó, chẳng hạn như Red Hat Enterprise Linux và CentOS. Cả Trickle và ncftp đều có sẵn từ kho này.
2. Cài đặt ncftp như sau:
# yum update && sudo yum install ncftp [On RedHat based systems]
# aptitude update && aptitude install ncftp [On Debian based systems]
3. Thiết lập một máy chủ FTP trong một máy chủ riêng biệt. Xin lưu ý rằng mặc dù FTP vốn không an toàn, nhưng nó vẫn được sử dụng rộng rãi trong các trường hợp không cần bảo mật khi tải lên hoặc tải xuống tệp.
Chúng tôi đang sử dụng nó trong bài viết này để minh họa số tiền thưởng nhỏ giọt và vì nó hiển thị tỷ lệ chuyển tiền bằng stdout trên khách hàng, và chúng tôi sẽ để lại thảo luận về việc nên hay không nên sử dụng nó cho một ngày và giờ khác.
# yum update && yum install vsftpd [On RedHat based systems]
# apt update && apt install vsftpd [On Debian based systems]
Bây giờ, hãy chỉnh sửa tệp /etc/vsftpd/vsftpd.conf trên máy chủ FTP như sau:
$ sudo nano /etc/vsftpd/vsftpd.conf
OR
$ sudo /etc/vsftpd.conf
Thực hiện các thay đổi sau:
anonymous_enable=NO
local_enable=YES
chroot_local_user=YES
allow_writeable_chroot=YES
Sau đó, hãy đảm bảo khởi động vsftpd cho phiên hiện tại của bạn và bật nó tự động bắt đầu khi khởi động trong tương lai:
# systemctl start vsftpd [For systemd-based systems]
# systemctl enable vsftpd
# service vsftpd start [For init-based systems]
# chkconfig vsftpd on
4. Nếu bạn đã chọn thiết lập máy chủ FTP trong CentOS/RHEL Trickle với các khóa SSH để truy cập từ xa, bạn sẽ cần tài khoản người dùng được bảo vệ bằng mật khẩu với quyền thư mục và tệp thích hợp để tải lên và tải xuống nội dung mong muốn BÊN NGOÀI thư mục gốc của thư mục gốc.
Sau đó, bạn có thể duyệt đến thư mục chính của mình bằng cách nhập URL sau vào trình duyệt của bạn. Một cửa sổ đăng nhập sẽ bật lên nhắc bạn nhập tài khoản người dùng và mật khẩu hợp lệ trên máy chủ FTP.
ftp://192.168.0.15
Nếu xác thực thành công, bạn sẽ thấy nội dung của thư mục chính của mình. Sau đó trong hướng dẫn này, bạn sẽ có thể làm mới trang đó để hiển thị các tệp đã được tải lên trong các bước trước đó.
Cách cài đặt Trickle trong Linux
Bây giờ hãy cài đặt Trickle qua yum hoặc apt.
Để đảm bảo cài đặt thành công, bạn nên đảm bảo rằng các gói hiện được cài đặt được cập nhật (sử dụng yum update) trước khi cài đặt công cụ.
# yum -y update && yum install trickle [On RedHat based systems]
# apt -y update && apt install trickle [On Debian based systems]
Xác minh xem liệu Trickle có hoạt động với tệp nhị phân mong muốn hay không. Như chúng tôi đã giải thích trước đó, Trickle sẽ chỉ hoạt động với các tệp nhị phân sử dụng các thư viện động hoặc được chia sẻ. Để xác minh xem chúng ta có thể sử dụng công cụ này với một ứng dụng nhất định hay không, chúng ta có thể sử dụng tiện ích ldd nổi tiếng, trong đó ldd là viết tắt của danh sách các phụ thuộc động.
Cụ thể, chúng ta sẽ tìm kiếm sự hiện diện của glibc (thư viện GNU C) trong danh sách các phụ thuộc động của bất kỳ chương trình nhất định nào vì chính thư viện đó xác định các lệnh gọi hệ thống liên quan đến giao tiếp thông qua các socket.
Chạy lệnh sau đối với một nhị phân nhất định để xem liệu có thể sử dụng Trickle để định hình băng thông của nó hay không:
# ldd $(which [binary]) | grep libc.so
Ví dụ:
# ldd $(which ncftp) | grep libc.so
có đầu ra là:
# libc.so.6 => /lib64/libc.so.6 (0x00007efff2e6c000)
Chuỗi giữa các dấu ngoặc trong đầu ra có thể thay đổi từ hệ thống này sang hệ thống khác và thậm chí giữa các lần chạy tiếp theo của cùng một lệnh kể từ nó đại diện cho địa chỉ tải của thư viện trong bộ nhớ vật lý.
Nếu lệnh trên không trả về bất kỳ kết quả nào, điều đó có nghĩa là tệp nhị phân mà nó được chạy chống lại không sử dụng libc, và do đó không thể sử dụng nhỏ giọt làm công cụ định hình băng thông trong trường hợp đó.
Tìm hiểu cách sử dụng Trickle trong Linux
Cách sử dụng cơ bản nhất của trickle là ở chế độ độc lập. Sử dụng cách tiếp cận này, nhỏ giọt được sử dụng để xác định rõ ràng tốc độ tải xuống và tải lên của một ứng dụng nhất định. Như chúng tôi đã giải thích trước đó, để ngắn gọn, chúng tôi sẽ sử dụng cùng một ứng dụng để tải xuống và tải lên thử nghiệm.
Chạy Trickle ở chế độ độc lập
Chúng tôi sẽ so sánh tốc độ tải xuống và tải lên có và không sử dụng nhỏ giọt. Các tùy chọn -d chỉ ra tốc độ tải xuống trong KB/s, trong khi cờ -u nói Trickle để hạn chế tốc độ tải lên bởi cùng một đơn vị. Ngoài ra, chúng tôi sẽ sử dụng cờ -s, chỉ định rằng nhỏ giọt sẽ chạy ở chế độ độc lập.
Cú pháp cơ bản để chạy Trickle ở chế độ độc lập như sau:
# trickle -s -d [download rate in KB/s] -u [upload rate in KB/s]
Để tự thực hiện các ví dụ sau, hãy đảm bảo để Trickle và cài đặt ncftp trên máy khách (trong trường hợp của tôi là 192.168.0.17).
Ví dụ 1: Tải lên tệp PDF 2,8 MB có và không có Trickle.
Chúng tôi đang sử dụng tệp PDF các nguyên tắc cơ bản của Linux phân phối miễn phí(có sẵn tại đây) cho các thử nghiệm sau.
Ban đầu, bạn có thể tải tệp này xuống thư mục làm việc hiện tại của mình bằng lệnh sau:
# wget https://linux-training.be/files/books/LinuxFun.pdf
Cú pháp tải tệp lên máy chủ FTP của chúng tôi một cách dễ dàng như sau :
# ncftpput -u username -p password 192.168.0.15 /remote_directory local-filename
Trong đó /remote_directory là đường dẫn của thư mục tải lên liên quan đến trang chủ của tên người dùng và local-filename là một tệp trong thư mục làm việc hiện tại của bạn.
Cụ thể, chúng tôi nhận được tốc độ tải lên cao nhất là 52,02 MB/s (xin lưu ý rằng đây không phải là tốc độ tải lên trung bình thực, mà là đỉnh bắt đầu tức thì), và tệp được tải lên gần như ngay lập tức:
# ncftpput -u username -p password 192.168.0.15 /testdir LinuxFun.pdf
Đầu ra:
LinuxFun.pdf: 2.79 MB 52.02 MB/s
Với nhỏ giọt, chúng tôi sẽ giới hạn tốc độ truyền tải lên ở mức 5 KB/s. Trước khi tải tệp lên lần thứ hai, chúng ta cần xóa tệp khỏi thư mục đích. Nếu không, ncftp sẽ thông báo cho chúng tôi rằng tệp tại thư mục đích giống như tệp mà chúng tôi đang cố tải lên và sẽ không thực hiện chuyển:
# rm /absolute/path/to/destination/directory/LinuxFun.pdf
Sau đó:
# trickle -s -u 5 ncftpput -u username -p password 111.111.111.111 /testdir LinuxFun.pdf
Đầu ra:
LinuxFun.pdf: 2.79 MB 4.94 kB/s
Trong ví dụ trên, chúng ta có thể thấy rằng tốc độ tải lên trung bình giảm xuống còn ~ 5 KB/s.
Ví dụ 2: Tải xuống cùng một tệp PDF 2,8 MB có và không có nhỏ giọt
Trước tiên, hãy nhớ xóa tệp PDF khỏi thư mục nguồn ban đầu:
# rm /absolute/path/to/source/directory/LinuxFun.pdf
Xin lưu ý rằng các trường hợp sau sẽ tải tệp từ xa vào thư mục hiện tại trong máy khách. Thực tế này được biểu thị bằng dấu chấm ('.') Xuất hiện sau địa chỉ IP của máy chủ FTP.
Không Trickle:
# ncftpget -u username -p password 111.111.111.111 . /testdir/LinuxFun.pdf
Đầu ra:
LinuxFun.pdf: 2.79 MB 260.53 MB/s
Với nhỏ giọt, giới hạn tốc độ tải xuống ở 20 KB/s:
# trickle -s -d 30 ncftpget -u username -p password 111.111.111.111 . /testdir/LinuxFun.pdf
Đầu ra:
LinuxFun.pdf: 2.79 MB 17.76 kB/s
Khởi động Trickle trong Supervised (unmanaged)
Trickle cũng có thể chạy ở chế độ không được quản lý, tuân theo một loạt các tham số được xác định trong /etc/trickled.conf. Tệp này xác định cách hoạt động và quản lý Trickle (daemon).
Ngoài ra, nếu chúng ta muốn thiết lập cài đặt chung được sử dụng, nói chung, cho tất cả các ứng dụng, chúng ta sẽ cần sử dụng lệnh Trickle. Lệnh này chạy daemon và cho phép chúng tôi xác định giới hạn tải xuống và tải lên sẽ được chia sẻ bởi tất cả các ứng dụng chạy thông qua Trickle mà chúng tôi không cần chỉ định giới hạn mỗi lần.
Ví dụ: đang chạy:
# trickled -d 50 -u 10
Sẽ khiến tốc độ tải xuống và tải lên của bất kỳ ứng dụng nào chạy qua Trickle bị giới hạn 30 KB/s và 10 KB/s tương ứng.
Xin lưu ý rằng bạn có thể kiểm tra bất kỳ lúc nào liệu Trickled đang chạy hay không và với các đối số nào:
# ps -ef | grep trickled | grep -v grep
Đầu ra:
root 16475 1 0 Dec24 ? 00:00:04 trickled -d 50 -u 10
Ví dụ 3: Tải lên tệp MP4 19MB lên máy chủ FTP của chúng tôi bằng cách sử dụng có và không có nhỏ giọt.
Trong ví dụ này, chúng tôi sẽ sử dụng video phân phối miễn phí "He is the gift", có sẵn để tải xuống từ liên kết này.
Ban đầu, chúng tôi sẽ tải tệp này xuống thư mục làm việc hiện tại của bạn bằng lệnh sau:
# wget https://media2.ldscdn.org/assets/missionary/our-people-2014/2014-00-1460-he-is-the-gift-360p-eng.mp4
Trước hết, chúng ta sẽ khởi động trình daemon có Trickle bằng lệnh được liệt kê ở trên:
# trickled -d 30 -u 10
Không có Trickle:
# ncftpput -u username -p password 192.168.0.15 /testdir 2014-00-1460-he-is-the-gift-360p-eng.mp4
Đầu ra:
2014-00-1460-he-is-the-gift-360p-eng.mp4: 18.53 MB 36.31 MB/s
Với Trickle:
# trickle ncftpput -u username -p password 192.168.0.15 /testdir 2014-00-1460-he-is-the-gift-360p-eng.mp4
Đầu ra:
2014-00-1460-he-is-the-gift-360p-eng.mp4: 18.53 MB 9.51 kB/s
Như chúng ta có thể thấy trong đầu ra ở trên, tốc độ truyền tải lên giảm xuống còn ~10 KB/s.
Ví dụ 4: Tải xuống cùng một video có và không có nhỏ giọt
Như trong Ví dụ 2, chúng tôi sẽ tải tệp xuống thư mục làm việc hiện tại.
Không Trickle:
# ncftpget -u username -p password 192.168.0.15 . /testdir/2014-00-1460-he-is-the-gift-360p-eng.mp4
Đầu ra:
2014-00-1460-he-is-the-gift-360p-eng.mp4: 18.53 MB 108.34 MB/s
Với Trickle:
# trickle ncftpget -u username -p password 111.111.111.111 . /testdir/2014-00-1460-he-is-the-gift-360p-eng.mp4
Đầu ra:
2014-00-1460-he-is-the-gift-360p-eng.mp4: 18.53 MB 29.28 kB/s
Điều này phù hợp với giới hạn tải xuống đã đặt trước đó (30 KB/s).
Lưu ý: Khi daemon đã được khởi động, không cần đặt giới hạn riêng cho từng ứng dụng sử dụng nhỏ giọt.
Như chúng tôi đã đề cập trước đó, người ta có thể tùy chỉnh thêm định dạng băng thông của trickle thông qua Trickled.conf. Một phần điển hình trong tệp này bao gồm các phần sau:
[service]
[service]
Priority =
Time-Smoothing =
Length-Smoothing =
Trong đó,
+ [service] cho biết tên của ứng dụng mà chúng tôi dự định sử dụng băng thông hình dạng.
+ Mức độ ưu tiên cho phép chúng ta chỉ định một dịch vụ có mức độ ưu tiên cao hơn so với một dịch vụ khác, do đó không cho phép một ứng dụng đơn lẻ chiếm tất cả băng thông mà daemon đang quản lý. Con số càng thấp, càng nhiều băng thông được gán cho [dịch vụ].
+ Time-Smoothing [tính bằng giây]: xác định với khoảng thời gian nào được nhỏ giọt sẽ cố gắng cho phép ứng dụng truyền và/hoặc nhận dữ liệu. Các giá trị nhỏ hơn (trong khoảng 0,1 - 1 giây) là lý tưởng cho các ứng dụng tương tác và sẽ dẫn đến phiên liên tục (mượt mà) hơn trong khi các giá trị lớn hơn một chút (1-10 giây) sẽ tốt hơn cho các ứng dụng cần chuyển hàng loạt. Nếu không có giá trị nào được chỉ định, giá trị mặc định (5s) sẽ được sử dụng.
+ Làm mượt khoảng cách [tính bằng KB]: ý tưởng giống như trong Làm mịn thời gian, nhưng dựa trên độ dài của thao tác I/O. Nếu không có giá trị nào được chỉ định, giá trị mặc định (10KB) sẽ được sử dụng.
Việc thay đổi các giá trị làm mịn sẽ chuyển sang ứng dụng được chỉ định bằng [dịch vụ] cách sử dụng tốc độ truyền trong một khoảng thời gian thay vì một giá trị cố định. Thật không may, không có công thức để tính giới hạn dưới và giới hạn trên của khoảng này vì nó chủ yếu phụ thuộc vào từng trường hợp cụ thể.
Sau đây là tệp mẫu trickled.conf trong máy khách CentOS 7 (192.168.0.17):
[ssh]
Priority = 1
Time-Smoothing = 0.1
Length-Smoothing = 2
[ftp]
Priority = 2
Time-Smoothing = 1
Length-Smoothing = 3
Sử dụng thiết lập này, nhỏ giọt sẽ ưu tiên các kết nối SSH hơn truyền FTP. Lưu ý rằng một quy trình tương tác, chẳng hạn như SSH, sử dụng các giá trị làm mịn thời gian nhỏ hơn, trong khi một dịch vụ thực hiện truyền dữ liệu hàng loạt (FTP) sử dụng một giá trị lớn hơn.
Các giá trị làm mịn chịu trách nhiệm cho tốc độ tải xuống và tải lên trong ví dụ trước của chúng tôi không khớp với giá trị chính xác được chỉ định bởi daemon Trickle nhưng di chuyển trong khoảng thời gian gần với nó.
Kết luận
Trong bài viết này, chúng tôi đã khám phá cách giới hạn băng thông được sử dụng bởi các ứng dụng sử dụng nhỏ giọt trên các bản phân phối dựa trên Fedora và Debian/dẫn xuất. Các trường hợp sử dụng có thể có khác bao gồm, nhưng không giới hạn ở:
Giới hạn tốc độ tải xuống thông qua tiện ích hệ thống như wget, hoặc ứng dụng torrent chẳng hạn.
Giới hạn tốc độ mà hệ thống của bạn có thể được cập nhật qua 'yum' (hoặc 'aptitude', nếu bạn đang sử dụng hệ thống dựa trên Debian), hệ thống quản lý gói.
Nếu máy chủ của bạn tình cờ đặt sau proxy hoặc tường lửa (hoặc chính là proxy hoặc tường lửa), bạn có thể sử dụng công cụ nhỏ giọt để đặt giới hạn cho cả tốc độ tải xuống và tải lên hoặc giao tiếp với máy khách hoặc bên ngoài.
Vui lòng sử dụng biểu mẫu dưới đây để gửi chúng theo cách của chúng tôi.
+ Fanpage: https://www.facebook.com/nhanhoacom
+ Chỉ đường: https://g.page/nhanhoacom
+ Chương trình khuyến mãi mới nhất: https://nhanhoa.com/khuyen-mai.html
————————————————————
CÔNG TY TNHH PHẦN MỀM NHÂN HÒA
Hotline: 1900 6680
Trụ sở chính: Tầng 4 - Tòa nhà 97-99 Láng Hạ, Đống Đa, Hà Nội
Tel: (024) 7308 6680 – Email: sales@nhanhoa.com
Chi nhánh TP. Hồ Chí Minh: 270 Cao Thắng (nối dài), Phường 12, Quận 10, Tp.HCM
Tel: (028) 7308 6680 – Email: hcmsales@nhanhoa.com
Chi nhánh Vinh - Nghệ An: Tầng 2 Tòa nhà Sài Gòn Sky, ngõ 26 Nguyễn Thái Học, phường Đội Cung, TP. Vinh, Nghệ An
Tel: 0915221384 – Email: contact@nhanhoa.com