Mỗi hướng dẫn trong loạt bài này bao gồm mô tả về các lỗi cấu hình HAProxy, mạng, hệ thống file hoặc quyền phổ biến. Loạt bài này bắt đầu với tổng quan về các lệnh và file log mà bạn có thể sử dụng để khắc phục sự cố HAProxy. Các hướng dẫn tiếp theo kiểm tra các lỗi cụ thể một cách chi tiết.
Có ba lệnh chính và một vị trí log chung mà bạn có thể sử dụng để bắt đầu khắc phục lỗi HAProxy. Nói chung khi bạn khắc phục sự cố HAProxy, bạn sẽ sử dụng các lệnh này theo thứ tự được chỉ ra ở đây, sau đó kiểm tra file log để biết dữ liệu chẩn đoán cụ thể.
Các lệnh và log mà bạn thường sử dụng để khắc phục sự cố HAProxy trên hầu hết các bản phân phối Linux là:
systemctl
- Được sử dụng để điều khiển và tương tác với các dịch vụ Linux thông qua trình quản lý dịch vụ systemd
.journalctl
- Được sử dụng để truy vấn và xem log được tạo bởi systemd
.haproxy
- Khi khắc phục sự cố, lệnh này được sử dụng để kiểm tra cấu hình của HAProxy./var/log/haproxy.log
- Tệp này chứa các mục log từ chính HAProxy nêu chi tiết lưu lượng TCP và HTTP đang được server xử lý.Các lệnh này, cách sử dụng chúng và log của HAProxy nơi bạn có thể tìm thấy thông tin bổ sung về lỗi được mô tả chi tiết hơn trong các phần sau.
systemctl
cho HAProxyĐể khắc phục các lỗi HAProxy phổ biến bằng trình quản lý dịch vụ systemd
, bước đầu tiên là kiểm tra trạng thái của các quy trình HAProxy trên hệ thống. Các lệnh systemctl
sau đây sẽ truy vấn systemd
về trạng thái của các quy trình HAProxy trên hầu hết các bản phân phối Linux.
Cờ -l
sẽ đảm bảo kết quả không bị cắt ngắn hoặc có kích thước nhỏ. Cờ --no-pager
sẽ đảm bảo kết quả sẽ chuyển trực tiếp đến terminal mà không yêu cầu bất kỳ tương tác nào từ phía bạn để xem nó. Nếu bạn bỏ qua cờ --no-pager
bạn có thể cuộn qua kết quả bằng các phím mũi tên hoặc phím lên và xuống của trang. Để thoát khỏi máy nhắn tin, hãy sử dụng phím q
. Bạn sẽ nhận được kết quả như thế này:
● haproxy.service - HAProxy Load Balancer Loaded: loaded (/lib/systemd/system/haproxy.service; enabled; vendor preset: enabled) Active: active (running) since Thu 2020-08-20 19:30:11 UTC; 5s ago Docs: man:haproxy(1) file:/usr/share/doc/haproxy/configuration.txt.gz Process: 487 ExecStartPre=/usr/sbin/haproxy -f $CONFIG -c -q $EXTRAOPTS (code=exited, status=0/SUCCESS) Main PID: 488 (haproxy) Tasks: 2 (limit: 2344) . . . Aug 19 21:31:46 d6cdd0c71489 systemd[1]: Started HAProxy Load Balancer.
Đầu ra của bạn có thể hơi khác tùy thuộc vào bản phân phối Linux bạn đang sử dụng, nhưng trong mọi trường hợp, hãy comment Active
trong kết quả . Nếu server HAProxy của bạn không hiển thị active (running)
như được đánh dấu trong kết quả ví dụ nhưng bạn mong đợi điều đó xảy ra, có thể đã xảy ra lỗi. Thông thường nếu có sự cố, bạn sẽ có một dòng như sau trong kết quả của bạn (lưu ý phần failed
đánh dấu):
Active: failed (Result: exit-code) since Thu 2020-08-20 19:32:26 UTC; 6s ago
Nếu có vấn đề với quy trình hoặc cấu hình HAProxy của bạn, bạn có thể khắc phục sự cố thêm bằng cách sử dụng lệnh journalctl
.
journalctl
cho HAProxyĐể kiểm tra log systemd
cho HAProxy, bạn có thể sử dụng lệnh journalctl
. Nhật ký systemd
cho HAProxy thường sẽ cho biết liệu có sự cố khi khởi động hoặc quản lý quy trình HAProxy hay không.
Các log này tách biệt với log lỗi và yêu cầu của HAProxy. journalctl
hiển thị log từ systemd
mô tả chính dịch vụ HAProxy, từ khi khởi động đến khi tắt, cùng với bất kỳ lỗi quy trình nào có thể gặp phải trong quá trình này.
Cờ --since today
sẽ giới hạn kết quả của lệnh chỉ để ghi các mục nhập bắt đầu từ 00:00:00 của ngày hiện tại. Sử dụng tùy chọn này sẽ giúp hạn chế dung lượng các mục nhập log mà bạn cần kiểm tra khi kiểm tra lỗi. Bạn sẽ nhận được kết quả như sau (có thể có một vài dòng thừa giữa dòng Starting
và Started
tùy thuộc vào bản phân phối Linux của bạn):
Aug 20 19:37:08 d6cdd0c71489 systemd[1]: Starting HAProxy Load Balancer... . . . Aug 20 19:37:08 d6cdd0c71489 systemd[1]: Started HAProxy Load Balancer.
Nếu có một lỗi, bạn sẽ có một dòng trong kết quả đó là tương tự như sau, với sự khác biệt chính giữa các bản phân phối Linux là nhấn mạnh yourhostname
phần:
Aug 20 19:32:25 yourhostname systemd[1]: Failed to start HAProxy Load Balancer.
Nếu server HAProxy của bạn có lỗi trong log journalctl
như ví dụ trước, thì bước tiếp theo để khắc phục sự cố có thể xảy ra là điều tra cấu hình của HAProxy bằng công cụ dòng lệnh haproxy
.
haproxy
Để khắc phục sự cố cấu hình HAProxy, hãy sử dụng lệnh haproxy -c
. Công cụ sẽ phân tích cú pháp các file HAProxy của bạn và phát hiện bất kỳ lỗi nào hoặc cài đặt bị thiếu trước khi cố gắng khởi động server .
Chạy lệnh như thế này trên các bản phân phối dựa trên Ubuntu, Debian, CentOS và Fedora. Đảm bảo thay đổi đường dẫn đến file cấu hình nếu bạn đang sử dụng tên file hoặc vị trí khác:
Một cấu hình HAProxy đang hoạt động sẽ dẫn đến kết quả như sau:
Configuration file is valid
Nếu có lỗi trong cấu hình HAProxy của bạn, chẳng hạn như lỗi đánh máy hoặc chỉ thị đặt sai vị trí, haproxy -c
sẽ phát hiện ra lỗi đó và cố gắng thông báo cho bạn về sự cố.
Ví dụ: cố gắng sử dụng chỉ thị bind
trong haproxy.cfg
ở vị trí sai sẽ dẫn đến các thông báo như sau:
[ALERT] 232/194354 (199) : parsing [/etc/haproxy/haproxy.cfg:13] : unknown keyword 'bind' in 'global' section [ALERT] 232/194354 (199) : Error(s) found in configuration file : /etc/haproxy/haproxy.cfg [ALERT] 232/194354 (199) : Fatal errors found in configuration.
Trong ví dụ này bind
chỉ được đặt không đúng chỗ bên trong một global
phần cấu hình, vì vậy HAProxy tạo ra các unknown keyword
lỗi. Thông báo cũng bao gồm số dòng 13
, để bạn có thể chỉnh sửa file và sửa hoặc loại bỏ dòng bị lỗi mà không cần phải tìm kiếm trong file .
Học cách sử dụng haproxy -c
để phát hiện và sửa lỗi rất hữu ích khi bạn đang khắc phục một lỗi hiện có hoặc trước khi bạn reload HAProxy với cấu hình đã chỉnh sửa có thể có lỗi.
Các file log HAProxy là một tài nguyên rất hữu ích để khắc phục sự cố. Nói chung, bất kỳ lỗi nào bạn gặp phải trong trình duyệt hoặc ứng dụng client HTTP khác sẽ có mục nhập tương ứng trong log của HAProxy. Đôi khi HAProxy cũng sẽ xuất ra các lỗi liên quan đến cấu hình và thông tin gỡ lỗi khác vào các file log của nó.
Trên các bản phân phối Linux dựa trên Ubuntu và Debian, gói haproxy
bao gồm các tập lệnh cấu hình kết quả log trong /var/log/haproxy.log
.
Trên CentOS, Fedora và các bản phân phối Linux khác có nguồn root từ RedHat, haproxy
không xuất ra file log theo mặc định. Để ghi log kết quả HAProxy vào /var/log/haproxy.log
, hãy làm theo hướng dẫn bắt đầu nhanh này, Cách cấu hình ghi log HAProxy với Rsyslog trên CentOS 8 .
Khi bạn đang khắc phục sự cố HAProxy bằng cách sử dụng file log của nó, hãy kiểm tra /var/log/haproxy.log
để tìm lỗi bằng cách sử dụng một công cụ như tail
trở less
. Ví dụ: để xem hai dòng cuối cùng của log bằng tail
, hãy chạy lệnh sau:
Lỗi ví dụ sẽ giống như những dòng sau, dù bạn đang sử dụng bản phân phối Linux nào để chạy server HAProxy của bạn :
Aug 20 19:36:21 d6cdd0c71489 haproxy[19202]: [ALERT] 258/134605 (19202) : Proxy 'app', server 'app1' [/etc/haproxy/haproxy.cfg:88] verify is enabled by default but no CA file specified. If you're running on a LAN where you're certain to trust the server's certificate, please set an explicit 'verify none' statement on the 'server' line, or use 'ssl-server-verify none' in the global section to disable server-side verifications by default. Aug 20 19:36:22 d6cdd0c71489 haproxy[4451]: 203.0.113.1:54428 [20/Aug/2020:19:36:22.288] main app/<NOSRV> 0/-1/-1/-1/1 503 212 - - SC-- 1/1/0/0/0 0/0 "GET / HTTP/1.1"
Những dòng ví dụ này chỉ mang tính chất minh họa. Nếu bạn đang chẩn đoán lỗi với server HAProxy của bạn , rất có thể các dòng trong log của bạn sẽ có nội dung khác với những dòng này. Một số dòng sẽ bao gồm các phản hồi thành công và các mục chẩn đoán không quan trọng khác.
Dù bản phân phối Linux của bạn là gì, định dạng của các dòng trong log HAProxy của bạn sẽ bao gồm bất kỳ mã trạng thái HTTP nào được trả lại cho client , cùng với các IP yêu cầu và trạng thái của các server backend .
Khi bạn có ý tưởng về những gì có thể gây ra sự cố với server HAProxy của bạn , bạn có thể tiếp tục nghiên cứu và khắc phục sự cố. Mã trạng thái HTTP và mô tả văn bản đặc biệt hữu ích, vì chúng cung cấp cho bạn các thuật ngữ cụ thể và rõ ràng mà bạn có thể sử dụng để thu hẹp phạm vi các nguyên nhân có thể gây ra sự cố.
Khắc phục sự cố lỗi HAProxy có thể bao gồm từ chẩn đoán lỗi với chính dịch vụ, đến định vị các tùy chọn được cấu hình sai cho các module hoặc kiểm tra chi tiết các-luật kiểm soát truy cập tùy chỉnh. Phần giới thiệu về chẩn đoán sự cố với HAProxy này giải thích cách sử dụng một số tiện ích để giúp thu hẹp các nguyên nhân có thể gây ra lỗi. Thông thường, bạn sẽ sử dụng các tiện ích này theo thứ tự giống nhau, mặc dù bạn luôn có thể bỏ qua một số tiện ích hoặc bắt đầu trực tiếp với việc kiểm tra log nếu bạn có ý tưởng chung về vấn đề có thể là gì.
Tuy nhiên, như một trình tự chung để khắc phục sự cố, cần có phương pháp và sử dụng các công cụ này theo thứ tự được mô tả. Bắt đầu khắc phục sự cố với systemctl
để kiểm tra trạng thái của server HAProxy. Nếu bạn cần thêm thông tin, hãy kiểm tra log systemd
cho HAProxy bằng cách sử dụng lệnh journalctl
. Nếu vấn đề vẫn không rõ ràng sau khi kiểm tra journalctl
, kiểm tra cấu hình của HAProxy bằng cách sử dụng haproxy -c -f /etc/haproxy/haproxy.cfg
là bước tiếp theo. Cuối cùng, để khắc phục sự cố chuyên sâu, việc kiểm tra các file log của HAProxy thường sẽ chỉ ra một lỗi cụ thể, với các thông báo chẩn đoán hữu ích và mã lỗi.
Phần còn lại của các hướng dẫn trong loạt bài này sẽ xem xét một số lỗi phổ biến mà bạn có thể gặp phải khi sử dụng HAProxy một cách chi tiết hơn.