Cách tạo thiết lập HAProxy khả dụng cao với Corosync, Pacemaker và IP nổi trên Ubuntu 14.04
Hướng dẫn này sẽ chỉ cho bạn cách tạo cài đặt cân bằng tải HAProxy Khả dụng cao trên DigitalOcean, với sự hỗ trợ của IP nổi và ngăn xếp cụm Corosync / Pacemaker. Mỗi bộ cân bằng tải HAProxy sẽ được cấu hình để phân chia lưu lượng giữa hai server ứng dụng backend . Nếu bộ cân bằng tải chính gặp sự cố, IP nổi sẽ tự động được chuyển sang bộ cân bằng tải thứ hai, cho phép dịch vụ tiếp tục. Lưu ý: DigitalOcean Load Balancers là một dịch vụ cân bằng tải được quản lý đầy đủ, có tính khả dụng cao. Dịch vụ Cân bằng tải có thể thực hiện role tương tự như cài đặt tính sẵn sàng cao thủ công được mô tả ở đây. Làm theo hướng dẫn của ta về cách cài đặt Cân bằng tải nếu bạn muốn đánh giá tùy chọn đó.
Yêu cầu
Để hoàn thành hướng dẫn này, bạn cần phải hoàn thành Hướng dẫn cách tạo cài đặt tính khả dụng cao với Corosync, Pacemaker và IP nổi trên Ubuntu 14.04 hướng dẫn (bạn nên bỏ qua phần Thêm tài nguyên Nginx tùy chọn). Điều này sẽ để lại cho bạn hai Server , mà ta sẽ gọi là chính và phụ , với IP nổi có thể chuyển đổi giữa chúng. Nói chung, ta sẽ gọi các server này là bộ cân bằng tải . Đây là những server mà ta sẽ cài đặt bộ cân bằng tải, HAProxy.
Bạn cũng cần có thể tạo thêm hai server Ubuntu 14.04 trong cùng một trung tâm dữ liệu, có bật Mạng riêng, để chứng minh rằng cài đặt cân bằng tải HA hoạt động. Đây là những server sẽ được cân bằng tải bởi HAProxy. Ta sẽ đề cập đến các server ứng dụng này, mà ta sẽ cài đặt Nginx trên, dưới dạng ứng dụng-1 và ứng dụng-2 . Nếu bạn đã có các server ứng dụng mà bạn muốn cân bằng tải, hãy sử dụng chúng để thay thế.
Trên mỗi server này, bạn cần một user không phải root được cấu hình với quyền truy cập sudo
. Bạn có thể làm theo hướng dẫn cài đặt server ban đầu Ubuntu 14.04 của ta để tìm hiểu cách cài đặt những user này.
Tạo server ứng dụng
Bước đầu tiên là tạo hai server Ubuntu, có bật Mạng riêng tư, trong cùng một trung tâm dữ liệu với bộ cân bằng tải của bạn, sẽ hoạt động như các server ứng dụng 1 và ứng dụng 2 được mô tả ở trên. Ta sẽ cài đặt Nginx trên cả hai Server và thay thế các trang index của chúng bằng thông tin nhận dạng duy nhất chúng. Điều này sẽ cho phép ta một cách đơn giản để chứng minh rằng cài đặt cân bằng tải HA đang hoạt động. Nếu bạn đã có các server ứng dụng mà bạn muốn cân bằng tải, vui lòng điều chỉnh các phần thích hợp của hướng dẫn này để làm cho điều đó hoạt động (và bỏ qua bất kỳ phần nào không liên quan đến cài đặt của bạn).
Nếu bạn muốn làm theo cài đặt ví dụ, hãy tạo hai server Ubuntu 14.04, app-1 và app-2 và sử dụng tập lệnh bash này làm dữ liệu user :
#!/bin/bash apt-get -y update apt-get -y install nginx export HOSTNAME=$(curl -s http://169.254.169.254/metadata/v1/hostname) export PUBLIC_IPV4=$(curl -s http://169.254.169.254/metadata/v1/interfaces/public/0/ipv4/address) echo Server: $HOSTNAME, IP Address: $PUBLIC_IPV4 > /usr/share/nginx/html/index.html
Dữ liệu user này sẽ cài đặt Nginx và thay thế nội dung của index.html bằng tên server và địa chỉ IP công khai của server (bằng cách tham chiếu dịch vụ Siêu dữ liệu). Việc truy cập vào một trong hai Server sẽ hiển thị một trang web cơ bản với tên server Server và địa chỉ IP công khai, điều này sẽ hữu ích cho việc kiểm tra server ứng dụng nào mà bộ cân bằng tải đang hướng lưu lượng truy cập đến.
Thu thập thông tin mạng server
Trước khi ta bắt đầu cấu hình thực tế của các thành phần cơ sở hạ tầng của bạn , cách tốt nhất là thu thập một số thông tin về từng server của bạn.
Để hoàn thành hướng dẫn này, bạn cần có thông tin sau về server của bạn :
- server ứng dụng : Địa chỉ IP riêng
- bộ cân bằng tải Địa chỉ IP riêng và cố định
Tìm địa chỉ IP riêng
Cách dễ nhất để tìm địa chỉ IP riêng của Server là sử dụng curl
để lấy địa chỉ IP riêng từ dịch vụ metadata DigitalOcean. Lệnh này sẽ được chạy từ bên trong Server. Trên mỗi server , nhập:
- curl 169.254.169.254/metadata/v1/interfaces/private/0/ipv4/address && echo
Địa chỉ IP chính xác sẽ được in trong cửa sổ dòng lệnh:
Private IP address:10.132.20.236
Thực hiện bước này trên tất cả bốn Server và sao chép các địa chỉ IP Riêng tư vào đâu đó mà bạn có thể dễ dàng tham khảo.
Tìm địa chỉ IP neo
IP neo là địa chỉ IP riêng local mà IP nổi sẽ liên kết với khi được gắn vào server DigitalOcean. Nó chỉ đơn giản là một alias cho địa chỉ eth0
thông thường, được thực hiện ở cấp siêu giám sát.
Cách dễ nhất, ít lỗi nhất để lấy giá trị này là trực tiếp từ dịch vụ metadata DigitalOcean. Sử dụng curl
, bạn có thể liên hệ với điểm cuối này trên từng server của bạn bằng lệnh :
- curl 169.254.169.254/metadata/v1/interfaces/public/0/anchor_ipv4/address && echo
IP neo sẽ được in trên dòng riêng của nó:
Output10.17.1.18
Thực hiện bước này trên cả hai server cân bằng tải của bạn và sao chép địa chỉ IP cố định ở đâu đó mà bạn có thể dễ dàng tham khảo.
Cấu hình server ứng dụng
Sau khi thu thập dữ liệu ở trên, ta có thể chuyển sang cấu hình các dịch vụ của bạn .
Ta sẽ bắt đầu bằng cách cài đặt các server ứng dụng backend của ta . Cả hai server này sẽ chỉ phục vụ tên và địa chỉ IP công cộng của chúng; trong một cài đặt thực, các server này sẽ phục vụ nội dung giống hệt nhau. Họ sẽ chỉ chấp nhận các kết nối web qua địa chỉ IP riêng của họ. Điều này sẽ giúp đảm bảo lưu lượng truy cập được chuyển hướng độc quyền qua một trong hai server HAProxy mà ta sẽ cấu hình sau này.
Việc cài đặt server ứng dụng đằng sau trình cân bằng tải cho phép ta phân phối gánh nặng yêu cầu giữa một số server ứng dụng giống hệt nhau. Khi nhu cầu lưu lượng truy cập của ta thay đổi, ta có thể dễ dàng mở rộng quy mô để đáp ứng các nhu cầu mới bằng cách thêm hoặc xóa server ứng dụng khỏi cấp này.
Cấu hình Nginx để chỉ cho phép yêu cầu từ bộ cân bằng tải
Nếu bạn đang làm theo ví dụ và bạn đã sử dụng dữ liệu user được cung cấp khi tạo server ứng dụng, thì server của bạn sẽ được cài đặt Nginx. Bước tiếp theo là thực hiện một vài thay đổi cấu hình.
Ta muốn cấu hình Nginx để chỉ lắng nghe các yêu cầu trên địa chỉ IP riêng của server . Hơn nữa, ta sẽ chỉ phục vụ các yêu cầu đến từ địa chỉ IP riêng của hai bộ cân bằng tải của ta . Điều này sẽ buộc user truy cập server ứng dụng của bạn thông qua bộ cân bằng tải của bạn (mà ta sẽ cấu hình để chỉ có thể truy cập thông qua địa chỉ IP Nổi).
Để thực hiện những thay đổi này, hãy mở file khối server Nginx mặc định trên mỗi server ứng dụng của bạn:
- sudo vi /etc/nginx/sites-available/default
Để bắt đầu, ta sẽ sửa đổi các chỉ thị listen
. Thay đổi chỉ thị listen
để lắng nghe địa chỉ IP riêng của server ứng dụng hiện tại trên cổng 80. Xóa dòng listen
bổ sung. Nó trông giống như sau :
server { listen app_server_private_IP:80; . . .
Ngay bên dưới chỉ thị listen
, ta sẽ cài đặt hai chỉ thị allow
để cho phép lưu lượng truy cập bắt nguồn từ địa chỉ IP riêng của hai bộ cân bằng tải của ta . Ta sẽ theo dõi điều này với luật deny all
để cấm tất cả các lưu lượng truy cập khác:
allow load_balancer_1_private_IP; allow load_balancer_2_private_IP; deny all;
Lưu và đóng các file khi bạn hoàn tất.
Kiểm tra xem các thay đổi bạn đã thực hiện có đại diện cho cú pháp Nginx hợp lệ hay không bằng lệnh :
- sudo nginx -t
Nếu không có sự cố nào được báo cáo, hãy khởi động lại daemon Nginx bằng lệnh :
- sudo service nginx restart
Hãy nhớ thực hiện tất cả các bước này (với địa chỉ IP riêng của server ứng dụng thích hợp) trên cả hai server ứng dụng.
Kiểm tra các thay đổi
Để kiểm tra xem server ứng dụng của bạn có bị giới hạn đúng cách hay không, bạn có thể đưa ra yêu cầu bằng cách sử dụng curl
từ các vị trí khác nhau.
Trên chính các server ứng dụng của bạn , bạn có thể thử một yêu cầu đơn giản về nội dung local bằng lệnh :
- curl 127.0.0.1
Do các hạn chế mà ta đặt ra trong các file khối server Nginx của bạn , yêu cầu này sẽ thực sự bị từ chối:
Outputcurl: (7) Failed to connect to 127.0.0.1 port 80: Connection refused
Điều này được mong đợi và phản ánh hành vi mà ta đã cố gắng thực hiện.
Như vậy, từ một trong hai bộ cân bằng tải , ta có thể đưa ra yêu cầu cho một trong hai địa chỉ IP công cộng của server ứng dụng của ta :
- curl web_server_public_IP
, điều này sẽ thất bại. Các server ứng dụng không lắng nghe trên giao diện công khai và hơn nữa, khi sử dụng địa chỉ IP công cộng, các server ứng dụng của ta sẽ không thấy các địa chỉ IP riêng được phép trong yêu cầu từ bộ cân bằng tải của ta :
Outputcurl: (7) Failed to connect to app_server_public_IP port 80: Connection refused
Tuy nhiên, nếu ta sửa đổi lệnh gọi để thực hiện yêu cầu bằng địa chỉ IP riêng của server ứng dụng, nó sẽ hoạt động chính xác:
- curl app_server_private_IP
Trang Nginx index.html
sẽ được trả lại. Nếu bạn đã sử dụng dữ liệu user mẫu, trang phải chứa tên và địa chỉ IP công khai của server ứng dụng đang được truy cập:
app server index.htmlServer: app-1, IP Address: 159.203.130.34
Kiểm tra điều này từ cả hai trình cân bằng tải cho cả hai server ứng dụng. Mỗi yêu cầu cho địa chỉ IP riêng sẽ thành công trong khi mỗi yêu cầu được thực hiện cho các địa chỉ công cộng sẽ không thành công.
Một khi hành vi trên được chứng minh, ta có thể tiếp tục. Cấu hình server ứng dụng backend của ta hiện đã hoàn tất.
Xóa Nginx khỏi Load Balancers
Theo Hướng dẫn cài đặt HA yêu cầu với Corosync, Pacemaker và Floating IPs , các server cân bằng tải của bạn sẽ được cài đặt Nginx. Bởi vì ta sẽ sử dụng HAProxy làm trình cân bằng tải Reverse Proxy , ta nên xóa Nginx và mọi tài nguyên cụm liên quan.
Xóa tài nguyên cụm Nginx
Nếu bạn đã thêm tài nguyên cụm Nginx trong khi làm theo hướng dẫn yêu cầu , hãy dừng và xóa tài nguyên Nginx
bằng các lệnh sau trên một trong các bộ cân bằng tải của bạn :
- sudo crm resource stop Nginx
- sudo crm configure delete Nginx
Thao tác này cũng sẽ xóa cài đặt cụm nào phụ thuộc vào tài nguyên Nginx
. Ví dụ, nếu bạn tạo ra một clone
hoặc colocation
rằng tài liệu tham khảo các Nginx
tài nguyên, họ cũng sẽ bị xóa.
Xóa gói Nginx
Bây giờ ta đã sẵn sàng gỡ cài đặt Nginx trên cả hai server cân bằng tải .
Trước tiên, hãy dừng dịch vụ Nginx:
- sudo service nginx stop
Sau đó, xóa gói bằng lệnh này:
- sudo apt-get purge nginx
Bạn cũng có thể cần xóa các file cấu hình Nginx:
- sudo rm -r /etc/nginx
Bây giờ ta đã sẵn sàng cài đặt và cấu hình HAProxy.
Cài đặt và cấu hình HAProxy
Tiếp theo, ta sẽ cài đặt bộ cân bằng tải HAProxy. Mỗi thứ này sẽ ngồi trước web server của ta và phân chia yêu cầu giữa hai server ứng dụng backend . Các bộ cân bằng tải này sẽ hoàn toàn dư thừa, trong cấu hình chủ động-thụ động; chỉ một người sẽ nhận được lưu lượng truy cập tại bất kỳ thời điểm nào.
Cấu hình HAProxy sẽ chuyển yêu cầu đến cả hai web server . Bộ cân bằng tải sẽ lắng nghe các yêu cầu trên địa chỉ IP neo của chúng. Như đã đề cập trước đó, đây là địa chỉ IP mà địa chỉ IP nổi sẽ liên kết khi được gắn vào Server. Điều này đảm bảo chỉ lưu lượng truy cập bắt nguồn từ địa chỉ IP nổi mới được chuyển tiếp.
Cài đặt HAProxy
Phần này cần được thực hiện trên cả hai server cân bằng tải .
Ta sẽ cài đặt HAProxy 1.6, không có trong repository lưu trữ mặc định của Ubuntu. Tuy nhiên, ta vẫn có thể sử dụng trình quản lý gói để cài đặt HAProxy 1.6 nếu ta sử dụng PPA, với lệnh này:
- sudo add-apt-repository ppa:vbernat/haproxy-1.6
Cập nhật index gói local trên bộ cân bằng tải của bạn và cài đặt HAProxy bằng lệnh :
- sudo apt-get update
- sudo apt-get install haproxy
HAProxy hiện đã được cài đặt, nhưng ta cần phải cấu hình nó ngay bây giờ.
Cấu hình HAProxy
Mở file cấu hình HAProxy chính:
- sudo vi /etc/haproxy/haproxy.cfg
Tìm phần defaults
và thêm hai dòng sau vào phần đó:
option forwardfor option http-server-close
Tùy chọn forwardfor đặt HAProxy để thêm tiêu đề X-Forwarded-For
vào mỗi yêu cầu — điều này hữu ích nếu bạn muốn server ứng dụng của bạn biết địa chỉ IP nào ban đầu đã gửi yêu cầu — và tùy chọn http-server-close giúp giảm độ trễ giữa HAProxy và user bằng cách đóng các kết nối nhưng vẫn duy trì các alias riêng.
Tiếp theo, ở cuối file , ta cần xác cấu hình giao diện user của bạn . Điều này sẽ chỉ định cách HAProxy lắng nghe các kết nối đến. Ta sẽ liên kết HAProxy với địa chỉ IP neo của bộ cân bằng tải. Điều này sẽ cho phép nó lắng nghe lưu lượng truy cập bắt nguồn từ địa chỉ IP nổi. Ta sẽ gọi giao diện user của bạn là “http” cho đơn giản. Ta cũng sẽ chỉ định một backend mặc định, app_pool
, để chuyển lưu lượng truy cập đến ( ta sẽ cấu hình trong giây lát):
frontend http bind load_balancer_anchor_IP:80 default_backend app_pool
Lưu ý: IP neo là phần duy nhất của cấu hình HAProxy sẽ khác nhau giữa các server cân bằng tải. Đó là, hãy đảm bảo chỉ định IP neo của server cân bằng tải mà bạn hiện đang làm việc.
Tiếp theo, ta có thể xác cấu hình backend . Điều này sẽ chỉ định các vị trí hạ lưu nơi HAProxy sẽ vượt qua lưu lượng mà nó nhận được. Trong trường hợp của ta , đây sẽ là địa chỉ IP riêng của cả hai server ứng dụng Nginx mà ta đã cấu hình :
backend app_pool server app-1 app_server_1_private_IP:80 check server app-2 app_server_2_private_IP:80 check
Khi bạn thực hiện xong các thay đổi trên, hãy lưu và thoát khỏi file .
Kiểm tra xem các thay đổi cấu hình mà ta thực hiện có đại diện cho cú pháp HAProxy hợp lệ hay không bằng lệnh :
- sudo haproxy -f /etc/haproxy/haproxy.cfg -c
Nếu không có lỗi nào được báo cáo, hãy khởi động lại dịch vụ của bạn bằng lệnh :
- sudo service haproxy restart
, hãy đảm bảo thực hiện tất cả các bước trong phần này trên cả hai server cân bằng tải.
Kiểm tra các thay đổi
Ta có thể đảm bảo cấu hình của ta hợp lệ bằng cách thử nghiệm lại với curl
.
Từ các server của bộ cân bằng tải, hãy thử yêu cầu server local , địa chỉ IP công cộng của bộ cân bằng tải hoặc địa chỉ IP riêng của server :
- curl 127.0.0.1
- curl load_balancer_public_IP
- curl load_balancer_private_IP
Tất cả những điều này sẽ không thành công với các thông báo trông giống như sau:
Outputcurl: (7) Failed to connect to IP_address port 80: Connection refused
Tuy nhiên, nếu bạn thực hiện một yêu cầu đối với địa chỉ IP neo của bộ cân bằng tải, nó sẽ hoàn tất thành công:
- curl load_balancer_anchor_IP
Bạn sẽ thấy trang Nginx index.html
của một trong các server ứng dụng:
app server index.htmlServer: app-1, IP Address: app1_IP_address
Thực hiện lại yêu cầu cuộn tóc tương tự:
- curl load_balancer_anchor_IP
Bạn sẽ thấy trang index.html
của server ứng dụng khác, vì HAProxy sử dụng cân bằng tải round-robin theo mặc định:
app server index.htmlServer: app-2, IP Address: app2_IP_address
Nếu hành vi này trùng với hành vi của hệ thống , thì bộ cân bằng tải của bạn đã được cấu hình chính xác; bạn đã kiểm tra thành công rằng server cân bằng tải của bạn đang cân bằng lưu lượng giữa cả hai server ứng dụng backend . Ngoài ra, IP nổi của bạn nên đã được chỉ định cho một trong các server cân bằng tải, vì điều đó đã được cài đặt trong hướng dẫn Cài đặt HA yêu cầu với Corosync, Pacemaker và Floating IPs .
Download HAProxy OCF Resource Agent
Đến đây, bạn đã có chuyển đổi dự phòng cấp server , cơ bản nhưng ta có thể cải thiện cài đặt bằng cách thêm HAProxy làm tài nguyên cụm. Làm như vậy sẽ cho phép cụm của bạn đảm bảo HAProxy đang chạy trên server mà IP nổi của bạn được chỉ định. Nếu Pacemaker phát hiện ra rằng HAProxy không chạy, nó có thể khởi động lại dịch vụ hoặc gán IP nổi cho nút khác (nút đó phải đang chạy HAProxy).
Pacemaker cho phép bổ sung các tác nhân tài nguyên OCF bằng cách đặt chúng vào một folder cụ thể.
Trên cả hai server cân bằng tải , download tác nhân tài nguyên HAProxy OCF bằng các lệnh sau:
- cd /usr/lib/ocf/resource.d/heartbeat
- sudo curl -O https://raw.githubusercontent.com/thisismitch/cluster-agents/master/haproxy
Trên cả hai server cân bằng tải , hãy làm cho nó thực thi được:
- sudo chmod +x haproxy
Vui lòng xem lại nội dung của tài nguyên trước khi tiếp tục. Nó là một tập lệnh shell được dùng để quản lý dịch vụ HAProxy.
Bây giờ ta có thể sử dụng tác nhân tài nguyên HAProxy OCF để xác định tài nguyên cụm haproxy
của ta .
Thêm tài nguyên haproxy
Với tác nhân tài nguyên HAProxy OCF của ta được cài đặt, giờ đây ta có thể cấu hình tài nguyên haproxy
sẽ cho phép cụm quản lý HAProxy.
Trên một trong hai server cân bằng tải , hãy tạo tài nguyên nguyên thủy haproxy
bằng lệnh sau:
- sudo crm configure primitive haproxy ocf:heartbeat:haproxy op monitor interval=15s
Tài nguyên được chỉ định yêu cầu cụm giám sát HAProxy 15 giây một lần và khởi động lại nó nếu nó không khả dụng.
Kiểm tra trạng thái tài nguyên cụm của bạn bằng cách sử dụng sudo crm status
sudo crm_mon
hoặc sudo crm status
:
crm_mon:... Online: [ primary secondary ] FloatIP (ocf::digitalocean:floatip): Started primary Nginx (ocf::heartbeat:nginx): Started secondary
Thật không may, máy tạo nhịp tim có thể quyết định để bắt đầu haproxy
và FloatIP
nguồn lực trên các node riêng biệt bởi vì ta chưa xác định bất kỳ hạn chế tài nguyên. Đây là sự cố vì IP nổi có thể đang trỏ đến một Server trong khi dịch vụ HAProxy đang chạy trên Server khác. Việc truy cập IP nổi sẽ chỉ bạn đến một server không chạy dịch vụ cần có khả năng cao.
Để giải quyết vấn đề này, ta sẽ tạo một tài nguyên nhân bản , tài nguyên này chỉ định rằng một tài nguyên nguyên thủy hiện có nên được bắt đầu trên nhiều nút.
Tạo bản sao của tài nguyên haproxy
được gọi là “haproxy-clone” bằng lệnh sau:
- sudo crm configure clone haproxy-clone haproxy
Trạng thái cụm bây giờ sẽ trông giống như sau:
crm_mon:Online: [ primary secondary ] FloatIP (ocf::digitalocean:floatip): Started primary Clone Set: haproxy-clone [Nginx] Started: [ primary secondary ]
Như bạn thấy , tài nguyên sao chép, haproxy-clone
, hiện đã được bắt đầu trên cả hai nút của ta .
Bước cuối cùng là cấu hình hạn chế vị trí, để chỉ định rằng tài nguyên FloatIP
sẽ chạy trên một nút có tài nguyên haproxy-clone
đang hoạt động. Để tạo một hạn chế vị trí có tên “FloatIP-haproxy”, hãy sử dụng lệnh sau:
- sudo crm configure colocation FloatIP-haproxy inf: FloatIP haproxy-clone
Bạn sẽ không thấy bất kỳ sự khác biệt nào trong kết quả trạng thái crm, nhưng bạn có thể thấy rằng tài nguyên vị trí đã được tạo bằng lệnh này:
- sudo crm configure show
Bây giờ, cả hai server của bạn phải chạy HAProxy, trong khi chỉ một trong số chúng có tài nguyên FloatIP đang chạy.
Thử dừng dịch vụ HAProxy trên một trong hai server cân bằng tải:
- sudo service haproxy stop
Bạn sẽ nhận thấy rằng nó sẽ khởi động lại trong vòng 15 giây tới.
Tiếp theo, ta sẽ kiểm tra cài đặt HA của bạn bằng cách khởi động lại server cân bằng tải đang hoạt động của bạn ( server mà tài nguyên FloatIP
hiện đang “khởi động”).
Kiểm tra tính khả dụng cao của bộ cân bằng tải
Với cài đặt HAProxy Tính sẵn sàng cao mới, bạn cần kiểm tra xem mọi thứ có hoạt động như dự định không.
Để hình dung quá trình chuyển đổi giữa các bộ cân bằng tải tốt hơn, ta có thể theo dõi log Nginx của server ứng dụng trong quá trình chuyển đổi.
Vì thông tin về server proxy nào đang được sử dụng không được trả lại cho client , nơi tốt nhất để xem log là từ các web server backend thực tế. Mỗi server này phải duy trì log về những khách hàng yêu cầu nội dung. Từ quan điểm của dịch vụ Nginx, client là bộ cân bằng tải thực hiện các yêu cầu thay mặt cho khách hàng thực.
Theo dõi trạng thái cụm
Trong khi thực hiện các thử nghiệm sắp tới, bạn có thể cần xem trạng thái thời gian thực của các node cụm và tài nguyên. Bạn có thể làm như vậy với lệnh này, trên một trong hai server cân bằng tải (miễn là nó đang chạy):
- sudo crm_mon
Đầu ra sẽ giống như sau:
crm_mon output:Last updated: Thu Nov 5 13:51:41 2015 Last change: Thu Nov 5 13:51:27 2015 via cibadmin on primary Stack: corosync Current DC: secondary (2) - partition with quorum Version: 1.1.10-42f2063 2 Nodes configured 3 Resources configured Online: [ primary secondary ] FloatIP (ocf::digitalocean:floatip): Started primary Clone Set: haproxy-clone [haproxy] Started: [ primary secondary ]
Điều này sẽ cho bạn thấy những nút cân bằng tải đang trực tuyến và có các node các FloatIP
và haproxy
nguồn lực được bắt đầu vào.
Lưu ý nút mà tài nguyên FloatIP
được Started
, chính trong ví dụ trên, là server cân bằng tải mà IP nổi hiện được gán cho. Ta sẽ gọi server này là server cân bằng tải hoạt động .
Tự động hóa yêu cầu đối với IP nổi
Trên máy local của bạn, ta sẽ yêu cầu nội dung web ở địa chỉ IP nổi 2 giây một lần. Điều này sẽ cho phép ta dễ dàng xem cách bộ cân bằng tải hoạt động đang xử lý lưu lượng đến. Đó là, ta sẽ xem các server ứng dụng backend mà nó đang gửi lưu lượng truy cập đến. Trong terminal local của bạn, hãy nhập lệnh này:
- while true; do curl floating_IP_address; sleep 2; done
Cứ sau hai giây, bạn sẽ thấy phản hồi từ một trong các server ứng dụng backend . Nó có thể sẽ thay thế giữa app-1 và app-2 vì thuật toán cân bằng mặc định của HAProxy, mà ta chưa chỉ định, được đặt thành round-robin . Vì vậy, terminal của bạn sẽ hiển thị thông tin như sau:
[secondary_label curl loop output: Server: app-1, IP Address: app_1_IP_address Server: app-2, IP Address: app_2_IP_address ...
Giữ cửa sổ terminal này mở để các yêu cầu liên tục được gửi đến server của bạn. Chúng sẽ hữu ích trong các bước thử nghiệm tiếp theo của ta .
Điều chỉnh log trên web server
Trên mỗi server ứng dụng backend của ta , ta có thể tail
các /var/log/nginx/access.log
địa điểm. Điều này sẽ hiển thị từng yêu cầu được thực hiện cho server . Vì các bộ cân bằng tải của ta chia đều lưu lượng truy cập bằng cách sử dụng xoay vòng, mỗi server ứng dụng backend sẽ thấy khoảng một nửa số yêu cầu được thực hiện.
Địa chỉ client là trường đầu tiên trong log truy cập, vì vậy sẽ dễ dàng tìm thấy. Chạy phần sau trên cả hai server ứng dụng Nginx của bạn (trong các cửa sổ terminal riêng biệt):
- sudo tail -f /var/log/nginx/access.log
Trường đầu tiên sẽ hiển thị địa chỉ IP riêng của server cân bằng tải đang hoạt động của bạn, cứ sau bốn giây ( ta sẽ cho rằng đó là trình cân bằng tải chính , nhưng nó có thể là địa chỉ phụ trong trường hợp của bạn):
Output. . . primary_loadbalancer_IP - - [05/Nov/2015:14:26:37 -0500] "GET / HTTP/1.1" 200 43 "-" "curl/7.43.0" primary_loadbalancer_IP - - [05/Nov/2015:14:26:37 -0500] "GET / HTTP/1.1" 200 43 "-" "curl/7.43.0" . . .
Giữ lệnh tail
chạy trên cả hai server ứng dụng của bạn.
Ngắt dịch vụ HAProxy trên Bộ cân bằng tải chính
Bây giờ, hãy khởi động lại bộ cân bằng tải chính , đảm bảo rằng chuyển đổi dự phòng Floating IP hoạt động:
- sudo reboot
Bây giờ, hãy chú ý đến log truy cập Nginx trên cả hai server ứng dụng của bạn. Bạn nên lưu ý , sau khi chuyển đổi dự phòng Floating IP xảy ra, log truy cập cho thấy rằng server ứng dụng đang được truy cập bằng địa chỉ IP khác so với trước đây. Các bản ghi sẽ cho biết server cân bằng tải thứ cấp đang gửi các yêu cầu:
Output. . . secondary_loadbalancer_IP - - [05/Nov/2015:14:27:37 -0500] "GET / HTTP/1.1" 200 43 "-" "curl/7.43.0" secondary_loadbalancer_IP - - [05/Nov/2015:14:27:37 -0500] "GET / HTTP/1.1" 200 43 "-" "curl/7.43.0" . . .
Điều này cho thấy lỗi của bộ cân bằng tải chính đã được phát hiện và IP nổi đã được chỉ định lại thành công cho bộ cân bằng tải thứ cấp.
Bạn cũng có thể cần kiểm tra kết quả của terminal local của bạn (đang truy cập IP nổi hai giây một lần) để xác minh trình cân bằng tải thứ cấp đang gửi yêu cầu đến cả hai server ứng dụng backend :
[secondary_label curl loop output: Server: app-1, IP Address: app_1_IP_address Server: app-2, IP Address: app_2_IP_address ...
Bạn cũng có thể thử chuyển đổi dự phòng theo hướng khác, sau khi bộ cân bằng tải khác trực tuyến trở lại.
Cấu hình Nginx để ghi địa chỉ IP client thực tế
Như bạn đã thấy, log truy cập Nginx cho thấy rằng tất cả các yêu cầu của client là từ địa chỉ IP riêng của bộ cân bằng tải hiện tại, thay vì địa chỉ IP thực của client đã thực hiện yêu cầu ban đầu (tức là máy local của bạn). Thường hữu ích khi ghi lại địa chỉ IP của người yêu cầu ban đầu, thay vì server cân bằng tải. Điều này có thể dễ dàng đạt được bằng cách thực hiện một vài thay đổi đối với cấu hình Nginx trên tất cả các server ứng dụng backend của bạn.
Trên cả hai server ứng dụng , hãy mở file nginx.conf
trong editor :
- sudo vi /etc/nginx/nginx.conf
Tìm phần “Cài đặt ghi log ” (trong khối http
) và thêm dòng sau:
log_format haproxy_log 'ProxyIP: $remote_addr - ClientIP: $http_x_forwarded_for - $remote_user [$time_local] ' '"$request" $status $body_bytes_sent "$http_referer" ' '"$http_user_agent"';
Lưu và thoát. Điều này chỉ định một định dạng log mới có tên là haproxy_log
, định dạng này sẽ thêm giá trị $http_x_forwarded_for
— địa chỉ IP của ứng dụng client đã thực hiện yêu cầu ban đầu — vào các mục log truy cập mặc định. Ta cũng bao gồm $remote_addr
, là địa chỉ IP của trình cân bằng tải Reverse Proxy (tức là server cân bằng tải hoạt động).
Tiếp theo, để sử dụng định dạng log mới này, ta cần thêm một dòng vào khối server mặc định của bạn .
Trên cả hai server ứng dụng , hãy mở cấu hình server default
:
- sudo vi /etc/nginx/sites-available/default
Trong khối server
(ngay bên dưới chỉ thị listen
là một nơi tốt), hãy thêm dòng sau:
access_log /var/log/nginx/access.log haproxy_log;
Lưu và thoát. Điều này yêu cầu Nginx viết log truy cập của nó bằng cách sử dụng định dạng log haproxy_log
mà ta đã tạo gần đây.
Trên cả hai server ứng dụng , hãy khởi động lại Nginx để các thay đổi có hiệu lực:
- sudo service nginx restart
Như vậy, log truy cập Nginx của bạn phải chứa địa chỉ IP thực của các client đưa ra yêu cầu. Xác minh điều này bằng cách gắn thẻ log của server ứng dụng của bạn, như ta đã làm trong phần trước. Các mục log sẽ trông giống như sau:
New Nginx access logs:. . . ProxyIP: load_balancer_private_IP - ClientIP: local_machine_IP - - [05/Nov/2015:15:05:53 -0500] "GET / HTTP/1.1" 200 43 "-" "curl/7.43.0" . . .
Nếu log của bạn trông tốt, bạn đã sẵn sàng!
Kết luận
Trong hướng dẫn này, ta đã đi qua toàn bộ quy trình cài đặt cơ sở hạ tầng cân bằng tải, có tính khả dụng cao. Cấu hình này hoạt động tốt vì server HAProxy đang hoạt động có thể phân phối tải cho group server ứng dụng trên phần backend . Bạn có thể dễ dàng mở rộng quy mô group này khi nhu cầu của bạn tăng lên hoặc giảm xuống.
Cấu hình IP nổi và Corosync / Pacemaker giúp loại bỏ điểm lỗi duy nhất ở lớp cân bằng tải, cho phép dịch vụ của bạn tiếp tục hoạt động ngay cả khi bộ cân bằng tải chính bị lỗi hoàn toàn. Cấu hình này khá linh hoạt và có thể được điều chỉnh cho phù hợp với môi trường ứng dụng của bạn bằng cách cài đặt ứng dụng bạn muốn đằng sau server HAProxy.
Các tin liên quan
Cách cài đặt Elasticsearch 1.7, Logstash 1.5 và Kibana 4.1 (ELK Stack) trên Ubuntu 14.042015-11-04
Cách cài đặt và cấu hình Elasticsearch trên Ubuntu 14.04
2015-10-26
Cách thiết lập server HAProxy khả dụng cao với các IP được lưu giữ và nổi trên Ubuntu 14.04
2015-10-23
Cách cài đặt Cassandra và chạy một cụm node đơn trên Ubuntu 14.04
2015-10-21
Cách tạo thiết lập tính khả dụng cao với Corosync, Pacemaker và IP nổi trên Ubuntu 14.04
2015-10-20
Cách tạo thiết lập tính khả dụng cao với Heartbeat và IP nổi trên Ubuntu 14.04
2015-10-20
Cách cài đặt và cấu hình server Salt Master và Minion trên Ubuntu 14.04
2015-10-05
Cách cài đặt và bắt đầu với Symfony 2 trên Ubuntu 14.04
2015-10-01
Cách cài đặt MemSQL trên Ubuntu 14.04
2015-09-30
Cách thiết lập xác thực đa yếu tố cho SSH trên Ubuntu 14.04
2015-09-29