Cách thiết lập Nginx High Availability với Pacemaker, Corosync và Crmsh trên Ubuntu 16.04

theanh

Administrator
Nhân viên
Trong hướng dẫn này, tôi sẽ chỉ cho bạn từng bước cách tạo Máy chủ web Nginx cụm có tính khả dụng cao với Pacemaker, Corosync và Crmsh. Chúng ta sẽ tạo máy chủ web Nginx cụm chủ động-thụ động hoặc cụm dự phòng bằng Pacemaker trên Ubuntu 16.04.

Pacemaker là phần mềm quản lý cụm nguồn mở giúp đạt được tính khả dụng cao tối đa cho các dịch vụ của bạn. Đây là trình quản lý cụm HA tiên tiến và có thể mở rộng được ClusterLabs phát triển từ năm 2007.

Cụm Corosync là một dự án nguồn mở bắt nguồn từ dự án OpenAIS năm 2008 và được phát hành theo Giấy phép BSD. Đây là hệ thống giao tiếp nhóm với các tính năng bổ sung để triển khai Tính khả dụng cao trong các ứng dụng.

Có một số ứng dụng khả dụng cho giao diện Pacemaker và Crmsh là một trong số đó. Đây là giao diện dòng lệnh Pacemaker để quản lý Ngăn xếp tính khả dụng cao của Pacemaker. Crmsh được viết bằng python. Chúng tôi có thể tạo, cấu hình và khắc phục sự cố cho ngăn xếp Pacemaker HA bằng công cụ dòng lệnh Crmsh.

Điều kiện tiên quyết
  • Ba máy chủ Ubuntu 16.04web01 10.0.15.11
  • web02 10.0.15.12
  • web03 10.0.15.13
[*] Địa chỉ IP động 10.0.15.15
[*] Root Quyền
Chúng ta sẽ làm gì?
  1. Ánh xạ tệp máy chủ.
  2. Cài đặt và cấu hình Nginx.
  3. Cài đặt Pacemaker, Corosync và Crmsh.
  4. Cấu hình khóa Corosync.
  5. Khởi động tất cả các dịch vụ.
  6. Tạo và cấu hình cụm.
  7. Kiểm tra.

Bước 1 - Ánh xạ tệp máy chủ​

Lưu ý:
Chạy bước 1 - 3 trên cả ba máy chủ 'web01', 'web02', 'web03'.

Trong hướng dẫn này, tôi sẽ sử dụng 3 máy chủ Ubuntu 16.04 và mỗi máy chủ có một tên máy chủ duy nhất: 'web01', 'web02' và 'web03'. Mỗi máy chủ có thể kết nối với các máy chủ khác bằng tên máy chủ của máy chủ đó.

Để thực hiện điều đó, hãy chỉnh sửa tệp '/etc/hosts' trên tất cả các máy chủ bằng vim.
Mã:
vim /etc/hosts
Dán cấu hình /etc/hosts bên dưới.
Mã:
10.0.15.11 web01
10.0.15.12 web02
10.0.15.13 web03
10.0.15.15 ha-web.co
Lưu tệp và thoát vim.

Tiếp theo, hãy kiểm tra tất cả các máy chủ bằng cách ping các máy chủ khác qua từng tên máy chủ.
Mã:
ping -c 3 web01
ping -c 3 web02
ping -c 3 web03

Bước 2 - Cài đặt và cấu hình Nginx​

Bây giờ chúng ta bắt đầu tạo thiết lập High Availability của máy chủ web Nginx bằng cách tạo cụm Failover với Pacemaker. Trước tiên, chúng ta cần cài đặt Nginx trên mỗi nút máy chủ.

Cài đặt Nginx bằng lệnh apt bên dưới.
Mã:
apt install -y nginx
Khi quá trình cài đặt hoàn tất, hãy thay thế trang mặc định của nginx bằng một trang duy nhất trên mỗi máy chủ bằng cách chạy các lệnh bên dưới để sau này chúng ta có thể xác định máy chủ nào đã phân phối trang.
Mã:
#Run Command on 'web01'
echo '[HEADING=1]web01 - hakase-labs[/HEADING]' > /var/www/html/index.html
 
#Chạy lệnh trên 'web02'
echo '[HEADING=1]web02 - hakase-labs[/HEADING]' > /var/www/html/index.html
 
#Chạy lệnh trên 'web03'
echo '[HEADING=1]web03 - hakase-labs[/HEADING]' > /var/www/html/index.html
Bây giờ hãy dừng máy chủ web.
Mã:
systemctl stop nginx
Quá trình cài đặt và cấu hình Nginx đã hoàn tất.


Bước 3 - Cài đặt Pacemaker, Corosync và Crmsh​

Pacemaker là một ứng dụng quản lý cụm nguồn mở. Corosync là một Cluster Engine cho Pacemaker và Crmsh là một công cụ dựa trên python để quản lý cụm Pacemaker. Tất cả các ứng dụng này đều có trong kho lưu trữ Uubuntu.

Cài đặt Pacemaker, Corosync và crmsh bằng lệnh apt bên dưới.
Mã:
apt install -y pacemaker corosync crmsh
Sau khi cài đặt, tất cả các dịch vụ này sẽ tự động chạy trên hệ thống. Dừng chúng bằng các lệnh systemctl bên dưới.
Mã:
systemctl stop corosync
systemctl stop pacemaker
Phần mềm cung cấp tính khả dụng cao cho Nginx đã được cài đặt.


Bước 4 - Cấu hình Corosync​

Lưu ý:
Chỉ chạy bước 4 trên máy chủ 'web01'.

Vì chúng tôi không sử dụng pcsd cho Ubuntu, nên chúng tôi cần cấu hình Corosync theo cách thủ công. Chúng tôi sẽ tạo khóa Corosync để xác thực cụm và tạo tệp cấu hình Corosync mới trên máy chủ 'web01', sau đó sao chép khóa và cấu hình sang các máy chủ khác 'web02' và 'web03'.

Trước khi tạo khóa Corosync, chúng ta cần cài đặt gói mới 'haveged'. Nó được sử dụng để có được các số ngẫu nhiên tốt hơn cho việc tạo khóa Corosync.

Cài đặt haveged từ kho lưu trữ bằng lệnh apt.
Mã:
apt install -y haveged
Bây giờ hãy tạo một khóa Corosync mới bằng lệnh bên dưới.
Mã:
corosync-keygen
Khi quá trình tạo khóa hoàn tất, bạn có thể thấy khóa mới 'authkey' trong thư mục '/etc/corosync/'.
Mã:
ls -lah /etc/corosync/


Tiếp theo, hãy đến thư mục '/etc/corosync' và sao lưu tệp cấu hình mặc định 'corosync.conf'.
Mã:
cd /etc/corosync/
mv corosync.conf corosync.conf.bekup
Sau đó, tạo một tệp cấu hình 'corosync.conf' mới bằng vim.
Mã:
vim corosync.conf
Dán cấu hình bên dưới vào tệp đó.
Mã:
# Cấu hình giao thức Totem
totem {
 phiên bản: 2
 cluster_name: hakase-cluster
 vận chuyển: udpu
 
# Cấu hình giao diện cho giao diện Corosync
 {
 ringnumber: 0
 bindnetaddr: 10.0.15.0
 phát sóng: có
 mcastport: 5407
 }
}
 
# Nodelist - Danh sách máy chủ
nodelist {
 node {
 ring0_addr: web01
 }
 node {
 ring0_addr: web02
 }
 node {
 ring0_addr: web03
 }
}
 
# Cấu hình số lượng thành viên
số lượng thành viên {
 nhà cung cấp: corosync_votequorum
}
 
# Cấu hình nhật ký Corosync
ghi nhật ký {
 to_logfile: có
 tệp nhật ký: /var/log/corosync/corosync.log
 to_syslog: có
 dấu thời gian: bật
}
 
dịch vụ {
 tên: máy tạo nhịp tim
 phiên bản: 0
}
Lưu tệp và thoát khỏi trình chỉnh sửa.

Tiếp theo, sao chép khóa xác thực và tệp cấu hình từ máy chủ 'web01' sang máy chủ 'web02' và 'web03'.
Mã:
scp /etc/corosync/* root@web02:/etc/corosync/
scp /etc/corosync/* root@web03:/etc/corosync/


Khi mọi thứ hoàn tất, hãy chuyển đến máy chủ 'web02' và 'web03', sau đó kiểm tra tệp.
Mã:
ssh root@web02
cd /etc/corosync/
ls -lah


Cấu hình Corosync đã hoàn tất.

Bước 5 - Khởi động tất cả các dịch vụ cụm​

Lưu ý:
Chạy bước 5 trên tất cả các máy chủ.

Khởi động ngăn xếp phần mềm cụm HA, pacemaker và corosync trên tất cả các máy chủ. Sau đó, cho phép nó tự động khởi động khi khởi động.

Khởi động Corosync và thêm nó để tự động khởi động khi khởi động.
Mã:
systemctl start corosync
systemctl enable corosync
Bây giờ, hãy khởi động pacemaker và cho phép nó khởi động khi khởi động.
Mã:
systemctl start pacemaker
update-rc.d pacemaker defaults 20 01
systemctl enable pacemaker
Tất cả các dịch vụ đã được khởi động, hãy kiểm tra tất cả các nút và đảm bảo trạng thái máy chủ là 'Trực tuyến' trên tất cả các nút đó.
Mã:
crm status


Hoặc bạn có thể kiểm tra trạng thái bằng cách kiểm tra các thành viên Corosync bằng lệnh corosync-cmapctl bên dưới.
Mã:
corosync-cmapctl | grep members
Bạn sẽ thấy tất cả Địa chỉ IP của máy chủ.


Bước 6 - Tạo và Cấu hình Cụm​

LƯU Ý:
Chỉ chạy bước 6 trên máy chủ web01

Ở bước này, chúng ta sẽ cấu hình Cụm Nginx Chủ động-Thụ động bằng công cụ dòng lệnh crmsh. Vì chúng ta không sử dụng thiết bị STONITH, chúng ta muốn vô hiệu hóa STONITH và bỏ qua chính sách Quorum trên cụm của chúng ta.

Chạy lệnh crm bên dưới để vô hiệu hóa 'STONITH' và Bỏ qua chính sách Quorum.
Mã:
crm configure property stonith-enabled=false
crm configure property no-quorum-policy=ignore
Bây giờ hãy kiểm tra trạng thái STONITH và chính sách quorum bằng lệnh crm bên dưới.
Mã:
crm configure show
Bạn sẽ thấy kết quả như bên dưới.



Tiếp theo, chúng ta cần tạo một số tài nguyên mới cho cụm. Pacemaker hỗ trợ các loại Resource Agent (RA) sau.
  • LSB (Linux Standard Based) - Được cung cấp bởi bản phân phối Linux. ví dụ: tập lệnh '/etc/init.d/service'.
  • OCF (Open Cluster Framework) - Bộ công cụ cho điện toán cụm. Dự án này là một phần của Linux Foundation.
Đối với máy chủ web NginxHA của chúng tôi, chúng tôi cần tạo hai tài nguyên OCF: 'virtual_ip' cho IP động và 'webserver' cho dịch vụ nginx.

Tạo một tài nguyên 'virtual_ip' mới cho cấu hình IP động bằng lệnh crm bên dưới.
Mã:
sudo crm configure primitive virtual_ip \
ocf:heartbeat:IPaddr2 params ip="10.0.15.15" \
cidr_netmask="32" op monitor interval="10s" \
meta migration-threshold="10"
Và đối với 'webserver' nginx, hãy tạo tài nguyên bằng lệnh bên dưới.
Mã:
sudo crm configure primitive webserver \
ocf:heartbeat:nginx configfile=/etc/nginx/nginx.conf \
op start timeout="40s" interval="0" \
op stop timeout="60s" interval="0" \
op monitor interval="10s" timeout="60s" \
meta migration-threshold="10"
Khi hoàn tất, hãy kiểm tra các tài nguyên mới 'virtual_ip' và 'webserver' bằng lệnh bên dưới. Đảm bảo tất cả các tài nguyên đều có trạng thái 'started'.
Mã:
crm resource status


Cuối cùng, chúng ta cần thêm một nhóm cho cấu hình mới của dịch vụ Failover IP. Chúng tôi muốn di chuyển dịch vụ 'Nginx' trên tài nguyên 'webserver' với IP động trên tài nguyên 'virtual_ip'.

Chúng tôi đã tạo IP động và Dịch vụ, bây giờ hãy thêm các tài nguyên đó vào một nhóm mới có tên là 'hakase_balancing' bằng lệnh bên dưới. Tất nhiên, bạn có thể chọn tên nhóm của riêng mình ở đây, chỉ cần đảm bảo thay thế tên sau đó ở bất kỳ nơi nào nó được sử dụng.
Mã:
sudo crm configure group hakase_balancing virtual_ip webserver
Một nhóm tài nguyên mới có tên 'hakase_balancing' đã được định nghĩa. Bạn có thể kiểm tra bằng lệnh bên dưới.
Mã:
crm resource show
Bạn sẽ nhận được một nhóm có tên hakase_balancing với các thành viên là tài nguyên 'virtual_ip' và 'webserver'.



Cấu hình cụm đã hoàn tất.

Bước 7 - Kiểm tra​

Kiểm tra trạng thái nút và trạng thái cụm.
Mã:
crm status


Chúng tôi có 3 Nút có trạng thái 'Trực tuyến'.

Chúng tôi có một nhóm tài nguyên có tên 'hakase_balancing' và hiện đang chạy trên nút 'web01'.

Kiểm tra máy chủ web Nginx từ trình duyệt web. Truy cập địa chỉ IP động, tên máy chủ thử nghiệm của tôi là - ha-web.co. Sử dụng tên mà bạn đã chọn cho máy chủ của mình tại đây.



Tất cả tài nguyên đều nằm trên nút 'web01'.

Kiểm tra cụm chủ động-thụ động hoặc chuyển đổi dự phòng

Dừng cụm trên máy chủ 'web01' bằng cách thực hiện lệnh bên dưới trên nút 'web01'.
Mã:
crm cluster stop
Bạn sẽ nhận được kết quả 'INFO: Cluster services stopped'.

Bây giờ hãy đăng nhập vào nút 'web02' và kiểm tra trạng thái cụm.
Mã:
crm status



Bây giờ bạn nhận được kết quả là nút 'web01' là 'Ngoại tuyến' và tài nguyên của virtual_ip và webserver được chuyển sang nút 'web02'.

Khi bạn truy cập lại IP động 'ha-web.co', bạn sẽ nhận được web02 trang.



Nginx High Availability với Pacemaker, Corosync và Crmshon Ubuntu 16.04 đã được cài đặt và thử nghiệm thành công.

Tham khảo​

 
Back
Bên trên