Thứ ba, 22/12/2015 | 00:00 GMT+7

Cách tạo thiết lập tính khả dụng cao với Pacemaker, Corosync và IP nổi trên CentOS 7

Corosync là một công cụ cụm open-souce được sử dụng để triển khai tính khả dụng cao trong các ứng dụng. Thường được gọi là lớp nhắn tin , Corosync cung cấp thành viên cụm và mô hình giao tiếp khép kín để tạo các máy trạng thái sao chép, trên đó các nhà quản lý tài nguyên cụm như Pacemaker có thể chạy. Corosync có thể được coi là hệ thống cơ bản kết nối các node cụm với nhau, trong khi Pacemaker giám sát cụm và thực hiện hành động trong trường hợp có sự cố.

Hướng dẫn này sẽ trình bày cách sử dụng Corosync và Pacemaker để tạo cơ sở hạ tầng có tính khả dụng cao (HA) trên DigitalOcean với server CentOS 7 và IP nổi. Để tạo thuận lợi cho quá trình cài đặt và quản lý các node cụm, ta sẽ sử dụng PCS, một giao diện dòng lệnh tương tác với cả Corosync và Pacemaker.

Yêu cầu

Để làm theo hướng dẫn này, bạn cần :

Khi tạo các Server nước này, hãy sử dụng tên server mô tả để xác định duy nhất chúng. Đối với hướng dẫn này, ta sẽ coi những server này là chínhphụ .

Khi đã sẵn sàng để tiếp tục, hãy đảm bảo bạn đã đăng nhập vào cả hai server của bạn bằng user sudo của bạn.

Bước 1 - Cài đặt Nginx

Để tăng tốc mọi thứ, ta sẽ sử dụng một tập lệnh shell đơn giản cài đặt Nginx và cài đặt một trang web cơ bản chứa thông tin về server cụ thể đó. Bằng cách này, ta có thể dễ dàng xác định server nào hiện đang hoạt động trong cài đặt IP nổi của ta . Tập lệnh sử dụng dịch vụ Siêu dữ liệu của DigitalOcean để tìm nạp địa chỉ IP và tên server của Server.

Để thực thi tập lệnh, hãy chạy các lệnh sau trên cả hai server :

  • sudo curl -L -o install.sh http://do.co/nginx-centos
  • sudo chmod +x install.sh
  • sudo ./install.sh

Sau khi tập lệnh chạy xong, việc truy cập vào Server qua địa chỉ IP công cộng của nó từ trình duyệt sẽ cung cấp cho bạn một trang web cơ bản hiển thị tên server và địa chỉ IP của Server.

Để giảm độ phức tạp của hướng dẫn này, ta sẽ sử dụng các web server đơn giản làm các node cụm. Trong môi trường production , các node thường sẽ được cấu hình để hoạt động như các bộ cân bằng tải dự phòng. Để biết thêm thông tin về bộ cân bằng tải, hãy xem hướng dẫn Giới thiệu về HAProxy và khái niệm cân bằng tải của ta .

Bước 2 - Tạo và chỉ định IP nổi

Bước đầu tiên là tạo một IP nổi và gán nó cho server chính . Trong Control panel DigitalOcean, nhấp vào Mạng ở menu trên cùng, sau đó nhấp vào IP nổi trong menu bên.

Bạn sẽ thấy một trang như thế này:

 Control panel  IP nổi

Chọn server chính của bạn và nhấp vào nút “Chỉ định IP nổi”. Sau khi IP Nổi đã được chỉ định, hãy kiểm tra đảm bảo rằng bạn có thể tiếp cận Server chính bằng cách truy cập địa chỉ IP Nổi từ trình duyệt của bạn:

http://your_floating_ip 

Bạn sẽ thấy trang index của Server chính của bạn .

Bước 3 - Tạo tập lệnh gán lại IP

Trong bước này, ta sẽ trình bày cách API DigitalOcean được dùng để gán lại IP nổi cho một Server khác. Sau đó, ta sẽ cấu hình Pacemaker để thực thi tập lệnh này khi cụm phát hiện lỗi ở một trong các node .

Đối với ví dụ của ta , ta sẽ sử dụng một tập lệnh Python cơ bản lấy địa chỉ IP nổi và ID server làm đối số để chỉ định IP nổi cho Server đã cho. ID của Server có thể được tìm nạp từ bên trong chính Server bằng cách sử dụng dịch vụ Siêu dữ liệu.

Hãy bắt đầu bằng cách download tập lệnh assign-ip và làm cho nó có thể thực thi được. Vui lòng xem lại nội dung của tập lệnh trước khi download .

Hai lệnh sau phải được thực thi trên cả hai server (chính và phụ):

  • sudo curl -L -o /usr/local/bin/assign-ip http://do.co/assign-ip
  • sudo chmod +x /usr/local/bin/assign-ip

Tập lệnh assign-ip yêu cầu thông tin sau để được thực thi:

  • IP nổi : Đối số đầu tiên cho tập lệnh, IP nổi đang được chỉ định
  • ID server : Đối số thứ hai cho tập lệnh, ID server mà IP nổi sẽ được gán cho
  • thông báo API DigitalOcean : Được chuyển vào dưới dạng biến môi trường DO_TOKEN, mã truy cập cá nhân DigitalOcean đọc / ghi của bạn

Kiểm tra Tập lệnh chuyển nhượng IP

Để theo dõi việc gán lại IP đang diễn ra, ta có thể sử dụng lệnh curl để truy cập địa chỉ IP Nổi trong một vòng lặp, với khoảng thời gian 1 giây giữa mỗi yêu cầu.

Mở một terminal local mới và chạy lệnh sau, đảm bảo thay thế float_IP_address bằng địa chỉ IP Nổi thực tế của bạn:

  • while true; do curl floating_IP_address; sleep 1; done

Lệnh này sẽ tiếp tục chạy trong terminal đang hoạt động cho đến khi bị ngắt bằng CTRL+C Nó chỉ đơn giản là tìm nạp trang web được lưu trữ bởi server mà IP nổi của bạn hiện được chỉ định. Đầu ra sẽ như thế này:

Output
Server: primary, IP Address: primary_IP_address Server: primary, IP Address: primary_IP_address Server: primary, IP Address: primary_IP_address ...

Bây giờ, hãy chạy tập lệnh assign-ip để gán lại IP nổi cho server thứ cấp . Ta sẽ sử dụng dịch vụ Siêu dữ liệu của DigitalOcean để tìm nạp ID server hiện tại và sử dụng nó làm đối số cho tập lệnh. Tìm nạp ID của Server từ dịch vụ Siêu dữ liệu có thể được thực hiện với:

  • curl -s http://169.254.169.254/metadata/v1/id

Trong đó 169.254.169.254 là địa chỉ IP tĩnh được sử dụng bởi dịch vụ Siêu dữ liệu và do đó không nên sửa đổi. Thông tin này chỉ có sẵn trong chính Server.

Trước khi có thể thực thi tập lệnh, ta cần đặt biến môi trường DO_TOKEN chứa mã thông báo API DigitalOcean. Chạy lệnh sau từ server phụ và đừng quên thay your_api_token bằng Mã truy cập cá nhân đọc / ghi của bạn vào API DigitalOcean:

  • export DO_TOKEN=your_api_token

Vẫn trên server phụ , hãy chạy tập lệnh assign-ip thay thế float_IP_address bằng địa chỉ IP nổi của bạn:

  • assign-ip floating_IP_address `curl -s http://169.254.169.254/metadata/v1/id`
Output
Moving IP address: in-progress

Bằng cách theo dõi kết quả kết quả được tạo ra bởi lệnh curl trên terminal local của bạn, bạn sẽ nhận thấy rằng IP Nổi sẽ thay đổi địa chỉ IP được chỉ định và bắt đầu trỏ đến Server phụ sau vài giây:

Output
Server: primary, IP Address: primary_IP_address Server: primary, IP Address: primary_IP_address Server: secondary, IP Address: secondary_IP_address

Bạn cũng có thể truy cập địa chỉ IP nổi từ trình duyệt của bạn . Bạn sẽ nhận được một trang hiển thị thông tin về server thứ cấp . Điều này nghĩa là tập lệnh gán lại đã hoạt động như mong đợi.

Để gán lại Floating IP trở lại server chính, hãy lặp lại quy trình 2 bước nhưng lần này từ Server chính :

  • export DO_TOKEN=your_api_token
  • assign-ip floating_IP_address `curl -s http://169.254.169.254/metadata/v1/id`

Sau một vài giây, IP nổi sẽ lại trỏ tới Server chính của bạn.

Bước 4 - Cài đặt Corosync, Pacemaker và PCS

Bước tiếp theo là cài đặt Corosync, Pacemaker và PCS trên Server. Vì Corosync phụ thuộc vào Pacemaker, nên thường thì tốt hơn là bạn chỉ cần cài đặt Pacemaker và để hệ thống quyết định version Corosync nào nên được cài đặt.

Cài đặt gói phần mềm trên cả hai server :

  • sudo yum install pacemaker pcs

Tiện ích PCS tạo một user hệ thống mới trong quá trình cài đặt, có tên là hacluster , với password bị vô hiệu hóa. Ta cần xác định password cho user này trên cả hai server . Điều này sẽ cho phép PCS thực hiện các việc như đồng bộ hóa cấu hình Corosync trên nhiều nút, cũng như khởi động và dừng cụm.

Trên cả hai server , hãy chạy:

  • passwd hacluster

Bạn nên sử dụng cùng một password trên cả hai server . Ta sẽ sử dụng password này để cấu hình cụm trong bước tiếp theo.

Hacluster user không có shell tương tác hoặc folder chính được liên kết với account của nó, nghĩa là không thể đăng nhập vào server bằng thông tin đăng nhập của nó.

Bước 5 - Cài đặt cụm

Bây giờ ta đã cài đặt Corosync, Pacemaker và PCS trên cả hai server , ta có thể cài đặt cụm.

Kích hoạt và Khởi động PCS

Để bật và khởi động daemon PCS, hãy chạy phần sau trên cả hai server :

  • sudo systemctl enable pcsd.service
  • sudo systemctl start pcsd.service

Lấy địa chỉ IP mạng riêng cho mỗi nút

Để cải thiện hiệu suất mạng và bảo mật, các node nên được kết nối bằng mạng riêng . Cách dễ nhất để lấy địa chỉ IP mạng riêng của Server là thông qua dịch vụ Siêu dữ liệu. Trên mỗi server , hãy chạy lệnh sau:

  • curl http://169.254.169.254/metadata/v1/interfaces/private/0/ipv4/address && echo

Lệnh này sẽ chỉ xuất ra địa chỉ IP mạng riêng của Server mà bạn đã đăng nhập. Bạn cũng có thể tìm thấy thông tin này trên trang Server của bạn tại Control panel DigitalOcean (trong tab Cài đặt ).

Thu thập địa chỉ IP mạng riêng từ cả hai Server cho các bước tiếp theo.

Xác thực các node cụm

Xác thực các node cụm bằng cách sử dụng hacluster tên user và cùng một password mà bạn đã xác định ở bước 3. Bạn cần cung cấp địa chỉ IP mạng riêng cho mỗi nút. Từ server chính , hãy chạy:

  • sudo pcs cluster auth primary_private_IP_address secondary_private_IP_address

Bạn sẽ nhận được kết quả như thế này:

Output
Username: hacluster Password: primary_private_IP_address: Authorized secondary_private_IP_address: Authorized

Tạo cấu hình Corosync

Vẫn trên server chính , tạo file cấu hình Corosync bằng lệnh sau:

  • sudo pcs cluster setup --name webcluster \
  • primary_private_IP_address secondary_private_IP_address

Đầu ra sẽ giống như sau:

Output
Shutting down pacemaker/corosync services... Redirecting to /bin/systemctl stop pacemaker.service Redirecting to /bin/systemctl stop corosync.service Killing any remaining services... Removing all cluster configuration files... primary_private_IP_address: Succeeded secondary_private_IP_address: Succeeded Synchronizing pcsd certificates on nodes primary_private_IP_address, secondary_private_IP_address... primary_private_IP_address: Success secondary_private_IP_address: Success Restaring pcsd on the nodes in order to reload the certificates... primary_private_IP_address: Success secondary_private_IP_address: Success

Thao tác này sẽ tạo file cấu hình mới tại /etc/corosync/corosync.conf dựa trên các tham số được cung cấp cho lệnh pcs cluster setup . Ta đã sử dụng webcluster làm tên cụm trong ví dụ này, nhưng bạn có thể sử dụng tên tùy chọn của bạn .

Bắt đầu cụm

Để bắt đầu cụm bạn vừa cài đặt , hãy chạy lệnh sau từ server chính :

  • sudo pcs cluster start --all
Output
primary_private_IP_address: Starting Cluster... secondary_private_IP_address: Starting Cluster...

Đến đây bạn có thể xác nhận cả hai nút đã tham gia cụm bằng cách chạy lệnh sau trên bất kỳ server nào:

  • sudo pcs status corosync
Output
Membership information ---------------------- Nodeid Votes Name 2 1 secondary_private_IP_address 1 1 primary_private_IP_address (local)

Để biết thêm thông tin về trạng thái hiện tại của cụm, bạn có thể chạy:

  • sudo pcs cluster status

Đầu ra phải giống như sau :

Output
Cluster Status: Last updated: Fri Dec 11 11:59:09 2015 Last change: Fri Dec 11 11:59:00 2015 by hacluster via crmd on secondary Stack: corosync Current DC: secondary (version 1.1.13-a14efad) - partition with quorum 2 nodes and 0 resources configured Online: [ primary secondary ] PCSD Status: primary (primary_private_IP_address): Online secondary (secondary_private_IP_address): Online

Đến đây bạn có thể kích hoạt các dịch vụ corosyncpacemaker đảm bảo rằng chúng sẽ khởi động khi hệ thống khởi động. Chạy những điều sau trên cả hai server :

  • sudo systemctl enable corosync.service
  • sudo systemctl enable pacemaker.service

Vô hiệu hóa STONITH

STONITH (Shoot The Other Node In The Head) là một kỹ thuật hàng rào nhằm ngăn chặn dữ liệu bị hỏng do các node bị lỗi trong một cụm không phản hồi nhưng vẫn truy cập dữ liệu ứng dụng. Bởi vì cấu hình của nó phụ thuộc vào một số yếu tố nằm ngoài phạm vi của hướng dẫn này, ta sẽ tắt STONITH trong cài đặt cụm của ta .

Để tắt STONITH, hãy chạy lệnh sau trên một trong các Server, chính hoặc phụ:

  • sudo pcs property set stonith-enabled=false

Bước 6 - Tạo tác nhân tài nguyên chuyển nhượng IP nổi

Điều duy nhất cần làm là cấu hình tác nhân tài nguyên sẽ thực thi tập lệnh gán lại IP khi phát hiện lỗi ở một trong các node cụm. Tác nhân tài nguyên chịu trách nhiệm tạo giao diện giữa cụm và chính tài nguyên đó. Trong trường hợp của ta , tài nguyên là tập lệnh gán-ip. Cụm dựa vào tác nhân tài nguyên để thực thi các quy trình phù hợp khi được đưa ra lệnh bắt đầu, dừng hoặc giám sát. Có nhiều loại tác nhân tài nguyên khác nhau, nhưng loại phổ biến nhất là tiêu chuẩn OCF (Open Cluster Framework).

Ta sẽ tạo một đại lý tài nguyên OCF mới để quản lý dịch vụ gán-ip trên cả hai server .

Đầu tiên, hãy tạo folder chứa tác nhân tài nguyên. Tên folder sẽ được Pacemaker sử dụng làm định danh cho tác nhân tùy chỉnh này. Chạy những điều sau trên cả hai server :

  • sudo mkdir /usr/lib/ocf/resource.d/digitalocean

Tiếp theo, download tập lệnh tác nhân tài nguyên FloatIP và đặt nó vào folder mới được tạo, trên cả hai server :

  • sudo curl -L -o /usr/lib/ocf/resource.d/digitalocean/floatip http://do.co/ocf-floatip

Bây giờ làm cho tập lệnh có thể thực thi được bằng lệnh sau trên cả hai server :

  • sudo chmod +x /usr/lib/ocf/resource.d/digitalocean/floatip

Ta vẫn cần đăng ký tác nhân tài nguyên trong cụm, sử dụng trình PCS. Lệnh sau đây cần được thực hiện từ một trong các node (đừng quên để thay thế your_api_token với API của bạn DigitalOcean token và floating_IP_address với địa chỉ Floating IP thực của bạn):

  • sudo pcs resource create FloatIP ocf:digitalocean:floatip \
  • params do_token=your_api_token \
  • floating_ip=floating_IP_address

Tài nguyên bây giờ sẽ được đăng ký và hoạt động trong cụm. Bạn có thể kiểm tra các tài nguyên đã đăng ký từ bất kỳ nút nào bằng lệnh pcs status :

  • sudo pcs status
Output
... 2 nodes and 1 resource configured Online: [ primary secondary ] Full list of resources: FloatIP (ocf::digitalocean:floatip): Started primary ...

Bước 7 - Kiểm tra dự phòng

Cụm của bạn bây giờ đã sẵn sàng để xử lý lỗi nút. Một cách đơn giản để kiểm tra chuyển đổi dự phòng là khởi động lại server hiện đang hoạt động trong cài đặt Floating IP của bạn. Nếu bạn đã làm theo tất cả các bước trong hướng dẫn này, đây sẽ là server chính .

, hãy giám sát việc gán lại IP bằng cách sử dụng lệnh curl trong một vòng lặp. Từ một nhà ga local , hãy chạy:

  • while true; do curl floating_IP_address; sleep 1; done

Từ server chính , hãy chạy lệnh khởi động lại:

  • sudo reboot

Sau một vài phút, server chính sẽ không khả dụng. Điều này sẽ làm cho server phụ tiếp nhận như một nút hoạt động. Bạn sẽ thấy kết quả tương tự như sau trong local terminal của bạn đang chạy curl :

Output
... Server: primary, IP Address: primary_IP_address Server: primary, IP Address: primary_IP_address curl: (7) Failed connect to floating_IP_address; Connection refused Server: secondary, IP Address: secondary_IP_address Server: secondary, IP Address: secondary_IP_address

Lỗi "Kết nối bị từ chối" xảy ra khi yêu cầu được thực hiện ngay trước hoặc cùng thời điểm khi chuyển nhượng lại IP đang diễn ra. Nó có thể hiển thị hoặc không hiển thị trong kết quả .

Nếu bạn muốn trỏ Floating IP trở lại nút chính trong khi cũng đang thử nghiệm chuyển đổi dự phòng trên nút phụ, chỉ cần lặp lại quy trình nhưng lần này từ Server thứ cấp :

  • sudo reboot

Kết luận

Trong hướng dẫn này, ta đã biết cách Floating IPs được dùng cùng với Corosync, Pacemaker và PCS để tạo môi trường web server có tính khả dụng cao trên server CentOS 7. Ta đã sử dụng một cơ sở hạ tầng khá đơn giản để chứng minh việc sử dụng IP nổi, nhưng cài đặt này có thể được mở rộng để triển khai tính khả dụng cao ở bất kỳ cấp độ nào trong ứng dụng của bạn.


Tags:

Các tin liên quan

Cách sử dụng Prometheus để giám sát server CentOS 7 của bạn
2015-11-06
Cách cài đặt Elasticsearch 1.7, Logstash 1.5 và Kibana 4.1 (ELK Stack) trên CentOS 7
2015-11-04
Cách cài đặt và cấu hình scponly trên CentOS 7
2015-07-22
Cách viết quy tắc kiểm tra hệ thống tùy chỉnh trên CentOS 7
2015-07-16
Cách viết quy tắc kiểm tra hệ thống tùy chỉnh trên CentOS 7
2015-07-16
Cách thiết lập firewall bằng FirewallD trên CentOS 7
2015-06-18
Cách thiết lập firewall bằng FirewallD trên CentOS 7
2015-06-18
Cách phát hiện bất thường với Skyline trên CentOS 7
2015-06-16
Cách cài đặt và cấu hình mod_deflate trên CentOS 7
2015-06-12
Cách hạn chế tài nguyên bằng cách sử dụng nhóm trên CentOS 6
2015-06-10