1. Tăng kích thước bộ đệm TCP (TCP Buffer Tuning)
Tăng kích thước bộ đệm nhận và gửi của TCP giúp hệ thống xử lý được lượng dữ liệu lớn hơn trên đường truyền mà không bị nghẽn cổ chai do giới hạn bộ nhớ mặc định của kernel.
Điều này đặc biệt quan trọng với YugabyteDB khi thực hiện các giao dịch HTAP có độ trễ thấp (low-latency) và thông lượng cao (high-throughput) giữa các node.
Thực hiện chỉnh sửa file cấu hình persistent trong thư mục /etc/sysctl.d để đảm bảo các tham số này được áp dụng sau khi reboot.
sudo nano /etc/sysctl.d/99-yugabyte-tcp-buffer.conf
Nội dung file cần thêm chính xác như sau để thiết lập giới hạn tối đa và tối thiểu cho bộ đệm TCP:
# Tăng kích thước bộ đệm TCP tối đa (64MB)
net.core.rmem_max = 67108864
net.core.wmem_max = 67108864
# Kích thước bộ đệm TCP khởi tạo (auto-tuning)
net.ipv4.tcp_rmem = 4096 87380 67108864
net.ipv4.tcp_wmem = 4096 65536 67108864
Áp dụng các thay đổi này ngay lập tức mà không cần khởi động lại máy chủ.
sudo sysctl --system
Kiểm tra xem các giá trị đã được áp dụng thành công chưa bằng cách query trực tiếp vào kernel.
sysctl net.core.rmem_max net.core.wmem_max net.ipv4.tcp_rmem net.ipv4.tcp_wmem
Kết quả mong đợi: Các giá trị trả về phải khớp với con số 67108864 (64MB) cho các tham số max.
2. Cấu hình tham số TCP congestion control
Thuật toán kiểm soát tắc nghẽn (Congestion Control) quyết định cách TCP điều chỉnh tốc độ truyền dữ liệu khi mạng bị quá tải.
Trên Ubuntu 24.04, kernel mặc định có thể sử dụng "Cubic". Đối với môi trường mạng có độ trễ biến động hoặc WAN, thuật toán "BBR" (Bottleneck Bandwidth and RTT) thường mang lại hiệu năng vượt trội hơn.
Đầu tiên, kiểm tra xem module BBR đã được compile vào kernel chưa.
ls /sys/module/tcp_bbr/
Nếu thấy thư mục tồn tại, tiến hành cấu hình để kernel sử dụng BBR làm default algorithm.
sudo nano /etc/sysctl.d/99-yugabyte-tcp-cc.conf
Nội dung file cấu hình để bật BBR:
# Kích hoạt BBR Congestion Control
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr
Áp dụng cấu hình ngay lập tức.
sudo sysctl --system
Verify xem thuật toán hiện tại đang chạy trên các socket TCP là gì.
sysctl net.ipv4.tcp_congestion_control
Kết quả mong đợi: Giá trị trả về phải là "bbr".
3. Tối ưu hóa tham số TCP timeout và keepalive
Giảm thời gian chờ (timeout) và kích hoạt cơ chế giữ kết nối (keepalive) giúp phát hiện nhanh các kết nối chết hoặc mạng bị đứt, tránh việc các tiến trình của YugabyteDB bị treo do chờ phản hồi từ mạng.
Tham số này giúp hệ thống tự động dọn dẹp các socket bị "zombie" nhanh hơn, giải phóng tài nguyên cho các kết nối mới.
Tạo file cấu hình riêng cho các tham số timeout và keepalive.
sudo nano /etc/sysctl.d/99-yugabyte-tcp-timeout.conf
Nội dung file với các giá trị tối ưu cho môi trường database:
# Giảm thời gian chờ kết nối (Keepalive)
net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_keepalive_intvl = 60
net.ipv4.tcp_keepalive_probes = 6
# Giảm thời gian chờ retransmission
net.ipv4.tcp_retries2 = 8
net.ipv4.tcp_fin_timeout = 15
# Tăng số lượng kết nối đang chờ (backlog)
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_syncookies = 1
Áp dụng các tham số này vào kernel hiện tại.
sudo sysctl --system
Kiểm tra giá trị của tham số keepalive_time để xác nhận thay đổi.
sysctl net.ipv4.tcp_keepalive_time
Kết quả mong đợi: Giá trị trả về là 600 (giây).
4. Cấu hình Netfilter và tắt module không cần thiết
Netfilter (IPtables/Nftables) là bộ lọc gói tin của Linux. Mặc dù cần thiết cho bảo mật, nhưng các module lọc không cần thiết có thể gây ra độ trễ (latency) đáng kể do xử lý gói tin ở mức kernel.
Để tối ưu hóa hiệu năng mạng cho YugabyteDB, chúng ta cần tắt các module lọc không cần thiết và giảm độ phức tạp của Netfilter trên các giao diện nội bộ.
Tạo file cấu hình để blacklist các module không cần thiết (ví dụ: nf_conntrack_ftp, nf_nat_ftp, v.v.) nếu môi trường không dùng FTP.
sudo nano /etc/modprobe.d/yugabyte-network-blacklist.conf
Nội dung file để ngăn kernel load các module này:
blacklist nf_conntrack_ftp
blacklist nf_nat_ftp
blacklist nf_conntrack_netbios_ns
blacklist nf_conntrack_sctp
blacklist nf_conntrack_h323
Tiến hành tắt các module đang chạy (nếu có) để giảm tải ngay lập tức.
sudo modprobe -r nf_conntrack_ftp nf_nat_ftp nf_conntrack_netbios_ns 2>/dev/null || true
Để giảm latency hơn nữa, cấu hình hệ thống bỏ qua Netfilter cho lưu lượng nội bộ (nếu bạn đang dùng bridge hoặc veth interfaces cho cluster).
echo 0 | sudo tee /proc/sys/net/bridge/bridge-nf-call-iptables
echo 0 | sudo tee /proc/sys/net/bridge/bridge-nf-call-ip6tables
Để đảm bảo cài đặt này tồn tại sau khi reboot, thêm vào sysctl.
sudo nano /etc/sysctl.d/99-yugabyte-netfilter.conf
Nội dung file:
# Tắt Netfilter cho bridge để giảm latency
net.bridge.bridge-nf-call-iptables = 0
net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-arptables = 0
Áp dụng và kiểm tra lại giá trị.
sudo sysctl --system
sysctl net.bridge.bridge-nf-call-iptables
Kết quả mong đợi: Giá trị trả về là 0, nghĩa là lưu lượng qua bridge sẽ không bị inspect bởi iptables.
5. Tinh chỉnh buffer cho giao thức TCP (Window Scaling)
Window Scaling cho phép TCP mở rộng kích thước cửa sổ (window size) vượt quá giới hạn 64KB của đầu tin TCP gốc.
Điều này là bắt buộc để tận dụng đầy đủ băng thông đường truyền trong các mạng có độ trễ cao (High Bandwidth-Delay Product - BDP) mà không bị giới hạn bởi bộ đệm nhỏ.
Đảm bảo tham số window scaling được bật (mặc định thường là bật, nhưng cần xác nhận trong cấu hình persistent).
sudo nano /etc/sysctl.d/99-yugabyte-tcp-window-scaling.conf
Nội dung file:
# Bật TCP Window Scaling
net.ipv4.tcp_window_scaling = 1
# Bật TCP Fast Open để giảm latency handshake (tùy chọn nhưng khuyến khích)
net.ipv4.tcp_fastopen = 3
Áp dụng cấu hình.
sudo sysctl --system
Kiểm tra trạng thái của tham số window scaling.
sysctl net.ipv4.tcp_window_scaling
Kết quả mong đợi: Giá trị trả về là 1 (bật).
Để kiểm tra tổng thể hiệu quả của các thay đổi mạng, bạn có thể chạy một test đơn giản để xem throughput tăng lên.
iperf3 -c -t 10
Lưu ý: Thay thế bằng địa chỉ IP thực tế của node YugabyteDB khác trong cụm.
Điều hướng series:
Mục lục: Series: Triển khai Database HTAP với YugabyteDB và Linux Kernel Tuning trên Ubuntu 24.04
« Phần 2: Tinh chỉnh Linux Kernel (Part 1): Tối ưu hóa hệ thống tệp và bộ nhớ
Phần 4: Triển khai cụm YugabyteDB v2.11 trên Ubuntu 24.04 »