[HAProxy] Cấu hình HAProxy mapping tiến trình với CPU Core để tối ưu hoá

Cấu hình HAProxy mapping tiến trình với CPU Core để tối ưu hoá – Khi bạn sử dụng hệ thống dịch vụ load balancing HA Proxy trên Linux để xử lý các kết nối HTTP SSL (HTTPS) hoặc cấu hình để HAProxy phải capture hoặc chỉnh sửa nội dung header HTTP Packet quá nhiều thì bạn sẽ gặp 1 vấn đề. Vấn đề đó là lượng tài nguyên CPU phải sử dụng cho các hoạt động mã hoá (encrypt)/giải mã (decript) SSL của HTTP hay hoạt động can thiệp HTTP Packet sẽ tăng cao (nhưng không hiệu quả) lên theo traffic vào hệ thống.

Và nếu bạn chưa biết thì HA Proxy mặc định chạy theo cơ chế single-thread và khởi động chỉ một hoặc hai tiến trình (process) để xử lý các kết nối. Mà nếu chạy trên môi trường server có nhiều core cpu (multi-core) thì HA Proxy mặc định cũng chỉ mapping một hoặc nhiều process sử dụng 1 CPU Core để hoạt động. Điều này vô hình chung không tối ưu hoá được HA Proxy trên server có nhiều CPU Core.

Từ phiên bản HA Proxy 1.5 trở đi (hiện tại version thời điểm viết bài đã là 1.8), thì HA Proxy đã hỗ trợ cho phép khi tạo ra số lượng process nhất định, bạn sẽ được phép gán (map) các tiến trình HAProxy sử dụng CPU Core cụ thể. Hoạt động này có tên gọi là “CPU Pinning” với 2 cấu hình đó là “nbproc” và “cpu-map” mà mình sẽ để cập ở dưới.

Kiểm tra phiên bản HA Proxy

# haproxy -v
HA-Proxy version 1.5.18 2016/05/10
Copyright 2000-2016 Willy Tarreau <willy@haproxy.org>

Kiểm tra số lượng CPU Core

# cat /proc/cpuinfo | grep "processor" | wc -l
8

Cấu trúc cấu hình nbproc và cpu-map

  • nbproc <number> : chỉ định số lượng tiến trình sẽ hoạt động khi chạy nền dịch vụ. Đi kèm cơ chế “daemon”.
  • cpu-map <process_number> <cpu_set> : cấu hình mapping process ha proxy tương ứng với cpu core mong muốn. Tức process HA Proxy có số thứ tự <process_number> sẽ chỉ sử dụng CPU Core số thứ tự <cpu_set> để hoạt động.

Cấu hình CPU Pinning, mapping tiến trình với CPU core

Giả sử server mình có 8 Core CPU. Mình sẽ tính toán sử dụng 7 process HAProxy để tối ưu hoạt động tiến trình sẵn sàng xử lý các kết nối dịch vụ tới HA Proxy. Tương ứng 7 process HAProxy mình sẽ map mỗi process với 1 core CPU, chừa lại 1 core CPU cho việc khác.

Cấu hình ở mode global section trong file config HAProxy.

# vi /etc/haproxy/haproxy.cfg
global
    nbproc 7
    cpu-map 1 1
    cpu-map 2 2
    cpu-map 3 3
    cpu-map 4 4
    cpu-map 5 5
    cpu-map 6 6
    cpu-map 7 7

Chú thích :

  • cpu-map 1 1 : cột số “1” đầu tiên đại diện cho giá trị process thứ 1 của HA Proxy. Cột số “1” thứ hai, đại diện cho CPU Core ở vị trí thứ 1. Như vậy với các dòng cấu hình kế tiếp thì bạn đang chia đều số lượng tiến trình HA Proxy mà bạn tạo sử dụng đều số lượng CPU Core mà bạn mong muốn.

Restart lại dịch vụ HA Proxy và kiểm tra số lượng tiến trình HA Proxy.

# systemctl restart haproxy
# ps aux | grep haproxy
root 31083 0.0 0.0 44172 1672 ? Ss 07:38 0:00 /usr/sbin/haproxy-systemd-wrapper -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid
haproxy 31084 0.0 0.0 48032 3416 ? S 07:38 0:00 /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -Ds
haproxy 31085 0.0 0.0 48032 1640 ? Ss 07:38 0:00 /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -Ds
haproxy 31086 0.0 0.0 48032 1640 ? Ss 07:38 0:00 /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -Ds
haproxy 31087 0.0 0.0 48032 1640 ? Ss 07:38 0:00 /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -Ds
haproxy 31088 0.0 0.0 48032 1640 ? Ss 07:38 0:00 /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -Ds
haproxy 31089 0.0 0.0 48032 1640 ? Ss 07:38 0:00 /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -Ds
haproxy 31090 0.0 0.0 48032 1640 ? Ss 07:38 0:00 /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -Ds

Điều hay ho đó là bạn có thể chỉ định số lượng process HA Proxy sẽ sử dụng cho mục frontend hoặc backend tuỳ ý. Khá là hấp dẫn phải không nào, ví dụ như traffic HTTPS sẽ có nhu cầu sử dụng nhiều tiến trình HA Proxy hơn để xử lý chẳng hạn.

frontend access_http
   bind 0.0.0.0:80
   bind-process 1 2

frontend access_https
   bind 0.0.0.0:443 ssl crt /etc/yourdomain.pem
   bind-process 3 4 5 6 7

Chú thích :

  • bind-process 1 2 : bạn đang lấy tiến trình HA Proxy số thứ tự 1 và 2 để dành cho việc xử lý traffic HTTP.
  • bind-process 3 4 5 6 7 : bạn đang lấy tiến trình HA Proxy số thứ tự từ 3 đến 7 để dành cho việc xử lý traffic HTTPS.

Đây là một trong những mẹo để tối ưu dịch vụ HA Proxy trên môi trường server có nhiều CPU Core (multi-core). Cực kì đơn giản và hiệu quả. Nếu bạn chưa thử thì hãy thử nghiệm nào. Nếu có bất kì khó khăn hay kinh nghiệm hãy comment trao đổi cùng Cuongquach.com nhé.

Previous articleTìm hiểu VNC là gì ? VNC – Virtual Network Computing
Next articleEbook Beginning The Linux Command Line PDF
Bạn đang theo dõi website "https://cuongquach.com/" nơi lưu trữ những kiến thức tổng hợp và chia sẻ cá nhân về Quản Trị Hệ Thống Dịch Vụ & Mạng, được xây dựng lại dưới nền tảng kinh nghiệm của bản thân mình, Quách Chí Cường. Hy vọng bạn sẽ thích nơi này !