Thứ ba, 20/10/2015 | 00:00 GMT+7

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

Hướng dẫn này sẽ trình bày cách bạn có thể sử dụng Corosync và Pacemaker với IP nổi để tạo cơ sở hạ tầng server có tính khả dụng cao (HA) trên DigitalOcean.

Corosync là một chương trình open-souce cung cấp khả năng thành viên cụm và khả năng nhắn tin, thường được gọi là lớp nhắn tin , cho các server khách hàng. Pacemaker là một trình quản lý tài nguyên cụm open-souce (CRM), một hệ thống điều phối các tài nguyên và dịch vụ được quản lý và tạo khả năng sẵn sàng cao bởi một cụm. Về bản chất, Corosync cho phép các server giao tiếp như một cụm, trong khi Pacemaker cung cấp khả năng kiểm soát cách hoạt động của cụm.

Mục tiêu

Khi hoàn tất, cài đặt HA sẽ bao gồm hai server Ubuntu 14.04 trong cấu hình hoạt động / thụ động. Điều này sẽ được thực hiện bằng cách trỏ IP nổi, đó là cách user của bạn sẽ truy cập vào dịch vụ web của bạn, để trỏ đến server chính (đang hoạt động) trừ khi phát hiện ra lỗi. Trong trường hợp Pacemaker phát hiện ra rằng server chính không khả dụng, server thứ cấp (thụ động) sẽ tự động chạy một tập lệnh gán lại IP nổi cho chính nó thông qua API DigitalOcean. Do đó, lưu lượng mạng tiếp theo đến IP nổi sẽ được chuyển hướng đến server phụ của bạn, server này sẽ hoạt động như server hoạt động và xử lý lưu lượng đến.

Sơ đồ này thể hiện khái niệm cài đặt được mô tả:

Sơ đồ chủ động / bị động

Lưu ý: Hướng dẫn này chỉ đề cập đến việc cài đặt tính khả dụng cao chủ động / thụ động ở cấp cổng. Nghĩa là, nó bao gồm IP nổi và server cân bằng tải — Chính và Phụ. Hơn nữa, với mục đích demo , thay vì cấu hình bộ cân bằng tải Reverse Proxy trên mỗi server , ta sẽ chỉ cần cấu hình chúng để phản hồi với tên server và địa chỉ IP công cộng tương ứng.

Để đạt được mục tiêu này, ta sẽ làm theo các bước sau:

  • Tạo 2 server sẽ nhận được lưu lượng truy cập
  • Tạo IP nổi và gán nó cho một trong các Server
  • Cài đặt và cấu hình Corosync
  • Cài đặt và cấu hình Máy tạo nhịp tim
  • Cấu hình tài nguyên cụm chuyển nhượng IP nổi
  • Kiểm tra chuyển đổi dự phòng
  • Cấu hình tài nguyên cụm Nginx

Yêu cầu

Để tự động hóa việc gán lại IP nổi, ta phải sử dụng API DigitalOcean. Điều này nghĩa là bạn cần tạo Mã truy cập cá nhân (PAT), là mã thông báo API được dùng để xác thực account DigitalOcean của bạn, với quyền truy cập đọcghi theo phần Cách tạo Mã thông báo truy cập cá nhân của API hướng dẫn. PAT của bạn sẽ được sử dụng trong một tập lệnh sẽ được thêm vào cả hai server trong cụm của bạn, vì vậy hãy đảm bảo giữ nó ở nơi an toàn — vì nó cho phép truy cập đầy đủ vào account DigitalOcean của bạn — để tham khảo.

Ngoài API, hướng dẫn này sử dụng các tính năng DigitalOcean sau:

Vui lòng đọc các hướng dẫn được liên kết nếu bạn muốn tìm hiểu thêm về chúng.

Tạo server

Bước đầu tiên là tạo hai server Ubuntu, có bật Mạng riêng, trong cùng một trung tâm dữ liệu, sẽ hoạt động như các server chính và phụ được mô tả ở trên. Trong cài đặt ví dụ của ta , ta sẽ đặt tên cho chúng là “chính” và “phụ” để dễ tham khảo. 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 HA đang hoạt động. Để cài đặt thực, server của bạn phải chạy web server hoặc bộ cân bằng tải mà bạn chọn, chẳng hạn như Nginx hoặc HAProxy.

Tạo hai server Ubuntu 14.04, chínhphụ . Nếu bạn muốn làm theo cài đặt ví dụ, hãy sử dụng tập lệnh bash này làm dữ liệu user :

Dữ liệu user mẫu
#!/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ủa server (bằng cách tham chiếu dịch vụ Siêu dữ liệu). Truy cập vào một trong hai Server qua địa chỉ IP công cộng của nó sẽ hiển thị một trang web cơ bản với tên server và địa chỉ IP của Server, điều này sẽ hữu ích để kiểm tra Server mà IP nổi đang trỏ đến bất kỳ thời điểm nào.

Tạo IP nổi

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.

Không có IP nổi

Gán IP nổi cho Server chính của bạn, sau đó nhấp vào nút Gán IP nổi .

Sau khi IP nổi đã được chỉ định, hãy ghi lại địa chỉ IP của nó. Kiểm tra xem bạn có thể tiếp cận Server mà nó đã được chỉ định hay không bằng cách truy cập địa chỉ IP Nổi trong trình duyệt web.

http://your_floating_ip 

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

Cấu hình DNS (Tùy chọn)

Nếu bạn muốn có thể truy cập cài đặt HA của bạn thông qua một domain , hãy tiếp tục và tạo một bản ghi A trong DNS của bạn để trỏ domain của bạn đến địa chỉ IP Nổi của bạn. Nếu domain của bạn đang sử dụng server định danh của DigitalOcean, hãy làm theo bước ba của hướng dẫn Cách cài đặt tên server với DigitalOcean. Khi điều đó phổ biến, bạn có thể truy cập server đang hoạt động của bạn thông qua domain .

Tên domain mẫu mà ta sẽ sử dụng là example.com . Nếu bạn không có domain để sử dụng ngay bây giờ, bạn sẽ sử dụng địa chỉ IP Nổi để truy cập cài đặt của bạn .

Cấu hình đồng bộ hóa thời gian

Khi nào bạn có nhiều server giao tiếp với nhau, đặc biệt là với phần mềm phân cụm, điều quan trọng là đảm bảo đồng hồ của chúng được đồng bộ hóa. Ta sẽ sử dụng NTP (Network Time Protocol) để đồng bộ hóa các server của bạn .

Trên cả hai server , sử dụng lệnh này để mở bộ chọn múi giờ:

  • sudo dpkg-reconfigure tzdata

Chọn múi giờ mong muốn của bạn. Ví dụ: ta sẽ chọn America/New_York .

Tiếp theo, cập nhật apt-get:

  • sudo apt-get update

Sau đó cài đặt gói ntp bằng lệnh này;

  • sudo apt-get -y install ntp

Đồng hồ server của bạn bây giờ sẽ được đồng bộ hóa bằng NTP. Để tìm hiểu thêm về NTP, hãy xem hướng dẫn này: Định cấu hình Múi giờ và Đồng bộ hóa Giao thức Thời gian Mạng .

Cấu hình firewall

Corosync sử dụng truyền tải UDP giữa các cổng 54045406 . Nếu bạn đang chạy firewall , hãy đảm bảo giao tiếp trên các cổng đó được phép giữa các server .

Ví dụ: nếu bạn đang sử dụng iptables , bạn có thể cho phép lưu lượng truy cập trên các cổng này và eth1 ( network interface riêng) bằng các lệnh sau:

  • sudo iptables -A INPUT -i eth1 -p udp -m multiport --dports 5404,5405,5406 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
  • sudo iptables -A OUTPUT -o eth1 -p udp -m multiport --sports 5404,5405,5406 -m conntrack --ctstate ESTABLISHED -j ACCEPT

Bạn nên sử dụng các luật firewall hạn chế hơn ví dụ được cung cấp.

Cài đặt Corosync và Pacemaker

Trên cả hai server , cài đặt Corosync và Pacemaker bằng cách sử dụng apt-get:

  • sudo apt-get install pacemaker

Lưu ý Corosync được cài đặt như một phần phụ thuộc của gói Pacemaker.

Corosync và Pacemaker hiện đã được cài đặt nhưng chúng cần được cấu hình trước khi làm bất cứ điều gì hữu ích.

Cấu hình Corosync

Corosync phải được cấu hình để các server của ta có thể giao tiếp như một cụm.

Tạo khóa ủy quyền cụm

Để cho phép các node tham gia một cụm, Corosync yêu cầu mỗi nút sở hữu một khóa ủy quyền cụm giống hệt nhau.

Trên server chính , hãy cài đặt gói haveged :

  • sudo apt-get install haveged

Gói phần mềm này cho phép ta dễ dàng tăng số lượng entropy trên server của ta , được yêu cầu bởi tập lệnh corosync-keygen .

Trên server chính , hãy chạy tập lệnh tạo mã corosync-keygen :

  • sudo corosync-keygen

Thao tác này sẽ tạo khóa ủy quyền cụm 128 byte và ghi nó vào /etc/corosync/authkey .

Bây giờ ta không cần gói haveged , hãy xóa nó khỏi server chính :

  • sudo apt-get remove --purge haveged
  • sudo apt-get clean

Trên server chính , hãy sao chép mã authkey thực vào server phụ:

  • sudo scp /etc/corosync/authkey username@secondary_ip:/tmp

Trên server phụ , hãy di chuyển file authkey đến vị trí thích hợp và hạn chế quyền của nó đối với root:

  • sudo mv /tmp/authkey /etc/corosync
  • sudo chown root: /etc/corosync/authkey
  • sudo chmod 400 /etc/corosync/authkey

Bây giờ cả hai server phải có một khóa ủy quyền giống hệt nhau trong file /etc/corosync/authkey .

Cấu hình cụm đồng bộ hóa

Để cài đặt và chạy cụm mong muốn, ta phải cài đặt

Trên cả hai server , hãy mở file corosync.conf để chỉnh sửa trong editor yêu thích của bạn ( ta sẽ sử dụng vi ):

  • sudo vi /etc/corosync/corosync.conf

Đây là file cấu hình Corosync sẽ cho phép server của bạn giao tiếp như một cụm. Đảm bảo thay thế các phần được đánh dấu bằng các giá trị thích hợp. bindnetaddr phải được đặt thành địa chỉ IP riêng của server bạn hiện đang làm việc. Hai mục được đánh dấu khác phải được đặt thành địa chỉ IP riêng của server được chỉ định. Ngoại trừ bindnetaddr , file phải giống hệt nhau trên cả hai server .

Thay thế nội dung của corosync.conf bằng cấu hình này, bằng những thay đổi dành riêng cho môi trường của bạn:

/etc/corosync/corosync.conf
  • totem {
  • version: 2
  • cluster_name: lbcluster
  • transport: udpu
  • interface {
  • ringnumber: 0
  • bindnetaddr: server_private_IP_address
  • broadcast: yes
  • mcastport: 5405
  • }
  • }
  • quorum {
  • provider: corosync_votequorum
  • two_node: 1
  • }
  • nodelist {
  • node {
  • ring0_addr: primary_private_IP_address
  • name: primary
  • nodeid: 1
  • }
  • node {
  • ring0_addr: secondary_private_IP_address
  • name: secondary
  • nodeid: 2
  • }
  • }
  • logging {
  • to_logfile: yes
  • logfile: /var/log/corosync/corosync.log
  • to_syslog: yes
  • timestamp: on
  • }

Phần totem (dòng 1-11), đề cập đến giao thức Totem mà Corosync sử dụng cho thành viên cụm, chỉ định cách các thành viên cụm giao tiếp với nhau. Trong cài đặt của ta , các cài đặt quan trọng bao gồm transport: udpu (chỉ định chế độ unicast) và bindnetaddr (chỉ định địa chỉ mạng mà Corosync sẽ liên kết).

Phần túc số (dòng 13-16) chỉ định rằng đây là một cụm hai nút, vì vậy chỉ cần một nút duy nhất cho túc số ( two_node: 1 ). Đây là một giải pháp thay thế thực tế là để đạt được túc số yêu cầu ít nhất ba nút trong một cụm. Cài đặt này sẽ cho phép cụm hai nút của ta chọn một người điều phối (DC), là nút điều khiển cụm tại bất kỳ thời điểm nào.

Phần NodeList (dòng 18-29) quy định cụ thể mỗi nút trong cluster, và làm thế nào mỗi nút có thể đạt được. Ở đây, ta cấu hình cả nút chính và nút phụ của bạn và chỉ định rằng chúng có thể được truy cập thông qua địa chỉ IP riêng tương ứng của chúng.

Phần ghi log (dòng 31-36) chỉ định rằng log Corosync phải được ghi vào /var/log/corosync/corosync.log . Nếu bạn gặp sự cố nào với phần còn lại của hướng dẫn này, hãy nhớ xem ở đây trong khi khắc phục sự cố.

Lưu và thoát.

Tiếp theo, ta cần cấu hình Corosync để cho phép dịch vụ Máy tạo nhịp tim.

Trên cả hai server , tạo file pcmk trong folder dịch vụ Corosync bằng editor . Ta sẽ sử dụng vi :

  • sudo vi /etc/corosync/service.d/pcmk

Sau đó thêm dịch vụ Máy tạo nhịp tim:

service {   name: pacemaker   ver: 1 } 

Lưu và thoát. Điều này sẽ có trong cấu hình Corosync và cho phép Pacemaker sử dụng Corosync để giao tiếp với server của ta .

Theo mặc định, dịch vụ Corosync bị tắt. Trên cả hai server , hãy thay đổi điều đó bằng cách chỉnh sửa /etc/default/corosync :

  • sudo vi /etc/default/corosync

Thay đổi giá trị của START thành yes :

/ etc / default / corosync
START=yes 

Lưu và thoát. Bây giờ ta có thể bắt đầu dịch vụ Corosync.

Trên cả hai server , khởi động Corosync bằng lệnh sau:

  • sudo service corosync start

Khi Corosync đang chạy trên cả hai server , chúng nên được group lại với nhau. Ta có thể xác minh điều này bằng cách chạy lệnh này:

  • sudo corosync-cmapctl | grep members

Đầu ra sẽ trông giống như thế này, cho biết rằng nút chính (nút 1) và phụ (nút 2) đã tham gia vào cụm:

corosync-cmapctl output:
runtime.totem.pg.mrp.srp.members.1.config_version (u64) = 0 runtime.totem.pg.mrp.srp.members.1.ip (str) = r(0) ip(primary_private_IP_address) runtime.totem.pg.mrp.srp.members.1.join_count (u32) = 1 runtime.totem.pg.mrp.srp.members.1.status (str) = joined runtime.totem.pg.mrp.srp.members.2.config_version (u64) = 0 runtime.totem.pg.mrp.srp.members.2.ip (str) = r(0) ip(secondary_private_IP_address) runtime.totem.pg.mrp.srp.members.2.join_count (u32) = 1 runtime.totem.pg.mrp.srp.members.2.status (str) = joined

Đến đây bạn đã cài đặt Corosync đúng cách, hãy chuyển sang cấu hình Pacemaker.

Khởi động và cấu hình máy tạo nhịp tim

Máy tạo nhịp tim, phụ thuộc vào khả năng nhắn tin của Corosync, hiện đã sẵn sàng để khởi động và đã cấu hình các thuộc tính cơ bản của nó.

Bật và khởi động máy tạo nhịp tim

Dịch vụ Pacemaker yêu cầu Corosync để chạy, vì vậy nó bị tắt theo mặc định.

Trên cả hai server , cho phép Pacemaker bắt đầu khởi động hệ thống bằng lệnh sau:

  • sudo update-rc.d pacemaker defaults 20 01

Với lệnh trước, ta đặt mức ưu tiên bắt đầu của Máy tạo nhịp tim thành 20 . Điều quan trọng là phải chỉ định mức ưu tiên bắt đầu cao hơn Corosync (theo mặc định là 19 ), để Máy tạo nhịp tim bắt đầu sau Corosync.

Bây giờ hãy bắt đầu Pacemaker:

  • sudo service pacemaker start

Để tương tác với Pacemaker, ta sẽ sử dụng trình crm .

Kiểm tra Máy tạo nhịp tim bằng crm :

  • sudo crm status

Điều này sẽ xuất ra thông tin như thế này (nếu không, hãy đợi trong 30 giây, sau đó chạy lại lệnh):

crm status:
Last updated: Fri Oct 16 14:38:36 2015 Last change: Fri Oct 16 14:36:01 2015 via crmd on primary Stack: corosync Current DC: primary (1) - partition with quorum Version: 1.1.10-42f2063 2 Nodes configured 0 Resources configured Online: [ primary secondary ]

Có một số điều cần lưu ý về kết quả này. Đầu tiên, DC hiện tại (Điều phối viên được chỉ định) phải được đặt thành primary (1) hoặc secondary (2) . Thứ hai, nên có 2 Nút được cấu hình0 Tài nguyên được cấu hình . Thứ ba, cả hai nút phải được đánh dấu là trực tuyến . Nếu chúng được đánh dấu là offline , hãy thử đợi 30 giây và kiểm tra lại trạng thái để xem nó có tự khắc phục hay không.

Từ thời điểm này, bạn có thể cần chạy trình theo dõi CRM tương tác trong một cửa sổ SSH khác (được kết nối với một trong hai nút cụm). Điều này sẽ cung cấp cho bạn các bản cập nhật theo thời gian thực về trạng thái của mỗi nút và nơi mỗi tài nguyên đang chạy:

  • sudo crm_mon

Đầu ra của lệnh này trông giống với kết quả của crm status ngoại trừ nó chạy liên tục. Nếu bạn muốn thoát, hãy nhấn Ctrl-C .

Cấu hình thuộc tính cụm

Bây giờ ta đã sẵn sàng để cấu hình các thuộc tính cơ bản của Máy tạo nhịp tim. Lưu ý tất cả các lệnh Pacemaker ( crm ) có thể chạy từ một trong hai server nút, vì nó tự động đồng bộ hóa tất cả các thay đổi liên quan đến cụm trên tất cả các node thành viên.

Đối với cài đặt mong muốn của ta , ta muốn tắt STONITH — một chế độ mà nhiều cụm sử dụng để xóa các node bị lỗi — bởi vì ta đang cài đặt một cụm hai nút. Để làm như vậy, hãy chạy lệnh này trên một trong hai server :

  • sudo crm configure property stonith-enabled=false

Ta cũng muốn vô hiệu hóa các thông báo liên quan đến túc số trong log :

  • sudo crm configure property no-quorum-policy=ignore

, cài đặt này chỉ áp dụng cho các cụm 2 nút.

Nếu bạn muốn xác minh cấu hình Máy tạo nhịp tim của bạn , hãy chạy lệnh sau:

  • sudo crm configure show

Điều này sẽ hiển thị tất cả các cài đặt Máy tạo nhịp tim đang hoạt động của bạn. Hiện tại, điều này sẽ chỉ bao gồm hai nút và thuộc tính STONITH và túc số mà bạn vừa đặt.

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

Bây giờ Pacemaker đang chạy và được cấu hình , ta cần thêm tài nguyên để nó quản lý. Như đã đề cập trong phần giới thiệu, tài nguyên là các dịch vụ mà cụm có trách nhiệm cung cấp khả dụng cao. Trong Pacemaker, việc thêm tài nguyên yêu cầu sử dụng tác nhân tài nguyên , hoạt động như giao diện với dịch vụ sẽ được quản lý. Máy tạo nhịp tim cung cấp một số tác nhân tài nguyên cho các dịch vụ thông thường và cho phép thêm các tác nhân tài nguyên tùy chỉnh.

Trong cài đặt của bạn , ta muốn đảm bảo dịch vụ được cung cấp bởi các web server của ta , chínhphụ , có tính khả dụng cao trong cài đặt chủ động / thụ động, nghĩa là ta cần một cách đảm bảo rằng IP nổi của ta luôn trỏ đến server cái đó có sẵn. Để kích hoạt điều này, ta cần cài đặt một tác nhân tài nguyên mà mỗi nút có thể chạy để xác định xem nó có sở hữu IP Nổi hay không và nếu cần, hãy chạy một tập lệnh để trỏ IP Nổi đến chính nó. Ta sẽ gọi tác nhân tài nguyên là “FloatIP OCF” và tập lệnh gán lại IP nổi là assign-ip . Khi ta đã cài đặt tác nhân tài nguyên FloatIP OCF, ta có thể xác định chính tài nguyên đó, mà ta sẽ gọi là FloatIP .

Download tập lệnh gán-ip

Như ta vừa đề cập, ta cần một tập lệnh có thể gán lại Server IP Floating của ta đang trỏ tới, trong trường hợp tài nguyên FloatIP cần được chuyển đến một nút khác. Vì mục đích này, ta sẽ download tập lệnh Python cơ bản chỉ định IP nổi cho một ID server nhất định, sử dụng API DigitalOcean.

Trên cả hai server , hãy download tập lệnh Python assign-ip :

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

Trên cả hai server , hãy làm cho nó thực thi được:

  • sudo chmod +x /usr/local/bin/assign-ip

Việc sử dụng tập lệnh assign-ip yêu cầu các chi tiết sau:

  • 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
  • DigitalOcean PAT (Mã thông báo API): Được chuyển vào dưới dạng biến môi trường DO_TOKEN , đọc / ghi DigitalOcean PAT của bạn

Vui lòng xem lại nội dung của kịch bản trước khi tiếp tục.

Vì vậy, nếu bạn muốn chạy tập lệnh này theo cách thủ công để chỉ định lại IP nổi, bạn có thể chạy nó như sau: DO_TOKEN= your_digitalocean_pat /usr/local/bin/assign-ip your_floating_ip server_id . Tuy nhiên, tập lệnh này sẽ được gọi từ tác nhân tài nguyên FloatIP OCF trong trường hợp tài nguyên FloatIP cần được chuyển đến một nút khác.

Tiếp theo hãy cài đặt Float IP Resource Agent.

Download FloatIP OCF Resource Agent

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 , hãy tạo folder đại lý tài nguyên digitalocean bằng lệnh sau:

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

Trên cả hai server , download FloatIP OCF Resource Agent:

  • sudo curl -o /usr/lib/ocf/resource.d/digitalocean/floatip https://gist.githubusercontent.com/thisismitch/b4c91438e56bfe6b7bfb/raw/2dffe2ae52ba2df575baae46338c155adbaef678/floatip-ocf

Trên cả hai server , hãy làm cho nó thực thi được:

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

Vui lòng xem lại nội dung của tác nhân tài nguyên trước khi tiếp tục. Nó là một tập lệnh bash, nếu được gọi bằng lệnh start , sẽ tìm kiếm ID server của nút gọi nó (thông qua Siêu dữ liệu) và gán IP nổi cho ID server . Ngoài ra, nó phản hồi các lệnh statusmonitor bằng cách trả về việc liệu Server đang gọi có IP Nổi được gán cho nó hay không.

Nó yêu cầu các thông số OCF sau:

  • do_token:: Mã thông báo API DigitalOcean để sử dụng cho các chỉ định lại IP nổi, tức là Mã thông báo truy cập cá nhân DigitalOcean của bạn
  • float_ip:: IP Nổi (địa chỉ) của bạn, trong trường hợp nó cần được chỉ định lại

Bây giờ ta có thể sử dụng tác nhân tài nguyên FloatIP OCF để xác định tài nguyên FloatIP của ta .

Thêm tài nguyên FloatIP

Với tác nhân tài nguyên FloatIP OCF của ta được cài đặt, giờ đây ta có thể cấu hình tài nguyên FloatIP của FloatIP .

Trên một trong hai server , hãy tạo tài nguyên FloatIP bằng lệnh này (đảm bảo chỉ định hai tham số được đánh dấu bằng thông tin của bạn ):

  • sudo crm configure primitive FloatIP ocf:digitalocean:floatip \
  • params do_token=your_digitalocean_personal_access_token \
  • floating_ip=your_floating_ip

Điều này tạo ra một tài nguyên nguyên thủy, là một loại tài nguyên cụm chung, được gọi là “FloatIP”, sử dụng Tác nhân Tài nguyên FloatIP OCF mà ta đã tạo trước đó ( ocf:digitalocean:floatip ). Chú ý rằng nó đòi hỏi do_tokenfloating_ip để được thông qua như các tham số. Chúng sẽ được sử dụng nếu IP nổi cần được chỉ định lại.

Nếu bạn kiểm tra trạng thái cụm của bạn ( sudo crm status hoặc sudo crm_mon ), bạn sẽ thấy rằng tài nguyên FloatIP được xác định và bắt đầu trên một trong các node của bạn:

crm_mon:
... 2 Nodes configured 1 Resource configured Online: [ primary secondary ] FloatIP (ocf::digitalocean:floatip): Started primary

Giả sử rằng mọi thứ đã được cài đặt đúng cách, bây giờ bạn sẽ có một cài đặt HA chủ động / thụ động! Như hiện tại, Floating IP sẽ được gán lại cho một server trực tuyến nếu nút mà FloatIP được khởi động ở standby độ offline hoặc ở standby . Ngay bây giờ, nếu nút đang hoạt động - chính , trong kết quả ví dụ của ta - không khả dụng, cụm sẽ chỉ thị cho nút phụ khởi động tài nguyên FloatIP và xác nhận địa chỉ IP Nổi cho chính nó. Khi việc gán lại xảy ra, IP nổi sẽ hướng user đến server phụ mới hoạt động.

Hiện tại, chuyển đổi dự phòng (chuyển nhượng lại IP nổi) chỉ được kích hoạt nếu server đang hoạt động offline hoặc không thể giao tiếp với cụm. Một version tốt hơn của cài đặt này sẽ chỉ định các tài nguyên bổ sung mà Pacemaker quản lý. Điều này sẽ cho phép cụm phát hiện lỗi của các dịch vụ cụ thể, chẳng hạn như bộ cân bằng tải hoặc phần mềm web server . Tuy nhiên, trước khi cài đặt , ta nên đảm bảo chuyển đổi dự phòng cơ bản hoạt động.

Kiểm tra tính khả dụng cao

Điều quan trọng là phải kiểm tra xem cài đặt tính khả dụng cao của ta có hoạt động hay không, vì vậy hãy làm điều đó ngay bây giờ.

Hiện tại, IP nổi được chỉ định cho một trong các node của bạn (giả sử là chính ). Việc truy cập Floating IP ngay bây giờ, thông qua địa chỉ IP hoặc bằng domain trỏ đến nó, sẽ chỉ hiển thị trang index của server chính . Nếu bạn đã sử dụng tập lệnh dữ liệu user mẫu, nó sẽ trông giống như sau:

Floating IP is pointing to primary server:
Server: primary, IP Address: primary_ip_address

Điều này cho biết IP nổi trên thực tế được gán cho Server chính.

Bây giờ, hãy mở một terminal local mới và sử dụng curl để truy cập IP Nổi trên vòng lặp 1 giây. Sử dụng lệnh này để thực hiện , nhưng hãy đảm bảo thay thế URL bằng domain của bạn hoặc địa chỉ IP nổi:

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

Hiện tại, điều này sẽ xuất ra cùng một tên Server và địa chỉ IP của server chính. Nếu ta khiến server chính bị lỗi, bằng cách tắt nguồn hoặc bằng cách thay đổi trạng thái cụm của nút chính thành standby , ta sẽ xem liệu IP nổi có được gán lại cho server phụ hay không.

Hãy khởi động lại server chính ngay bây giờ. Làm như vậy thông qua Control panel DigitalOcean hoặc bằng cách chạy lệnh này trên server chính:

  • sudo reboot

Sau một vài phút, server chính sẽ không khả dụng. Chú ý đến kết quả của vòng lặp curl đang chạy trong terminal . Bạn sẽ thấy kết quả trông giống như sau:

curl loop output:
Server: primary, IP Address: primary_IP_address ... curl: (7) Failed to connect to floating_IP_address port 80: Connection refused Server: secondary, IP Address: secondary_IP_address ...

Đó là, địa chỉ IP nổi nên được chỉ định lại để trỏ đến địa chỉ IP của server phụ . Điều đó nghĩa là cài đặt HA của bạn đang hoạt động, vì quá trình chuyển đổi dự phòng tự động thành công đã xảy ra.

Bạn có thể thấy hoặc không thấy lỗi Connection refused , lỗi này có thể xảy ra nếu bạn thử và truy cập IP Nổi giữa lỗi server chính và việc hoàn thành gán lại IP Nổi.

Nếu bạn kiểm tra trạng thái của Pacemaker, bạn sẽ thấy rằng tài nguyên FloatIP được khởi động trên server phụ . Ngoài ra, server chính nên tạm thời được đánh dấu là OFFLINE nhưng sẽ tham gia vào danh sách Online ngay sau khi nó hoàn thành khởi động lại và tham gia lại cụm.

Khắc phục sự cố khi chuyển đổi dự phòng (Tùy chọn)

Bỏ qua phần này nếu cài đặt HA của bạn hoạt động như mong đợi. Nếu chuyển đổi dự phòng không diễn ra như mong đợi, bạn nên xem lại cài đặt của bạn trước khi tiếp tục. Đặc biệt, hãy đảm bảo mọi tham chiếu đến cài đặt của bạn , chẳng hạn như địa chỉ IP của nút, IP nổi và mã thông báo API của bạn.

Các lệnh hữu ích để khắc phục sự cố

Dưới đây là một số lệnh có thể giúp bạn khắc phục sự cố cài đặt của bạn .

Như đã đề cập trước đó, công cụ crm_mon có thể rất hữu ích trong việc xem trạng thái thời gian thực của các node và tài nguyên của bạn:

  • sudo crm_mon

Ngoài ra, bạn có thể xem cấu hình cụm của bạn bằng lệnh này:

  • sudo crm configure show

Nếu các lệnh crm không hoạt động, bạn nên xem log Corosync để biết manh mối:

  • sudo tail -f /var/log/corosync/corosync.log

Các lệnh CRM khác

Các lệnh này có thể hữu ích khi cấu hình cụm của bạn.

Bạn có thể đặt một nút ở standby , được dùng để mô phỏng một nút trở nên không khả dụng, bằng lệnh này:

  • sudo crm node standby NodeName

Bạn có thể thay đổi trạng thái của nút từ standby sang online bằng lệnh này:

  • sudo crm node online NodeName

Bạn có thể chỉnh sửa tài nguyên, cho phép bạn cấu hình lại tài nguyên bằng lệnh sau:

sudo crm configure edit ResourceName 

Bạn có thể xóa tài nguyên, tài nguyên này phải được dừng lại trước khi xóa, bằng lệnh sau:

  • sudo crm resource stop ResourceName
  • sudo crm configure delete ResourceName

Cuối cùng, lệnh crm có thể được tự chạy để truy cập vào dấu nhắc crm tương tác:

  • crm

Ta sẽ không đề cập đến việc sử dụng dấu nhắc crm tương tác, nhưng nó được dùng để thực hiện tất cả các cấu hình crm mà ta đã thực hiện cho đến thời điểm này.

Thêm tài nguyên Nginx (tùy chọn)

Đến đây bạn đã chắc chắn rằng chuyển đổi dự phòng Floating IP của bạn hoạt động, hãy xem xét việc thêm tài nguyên mới vào cụm của bạn. Trong cài đặt ví dụ của ta , Nginx là dịch vụ chính mà ta đang cung cấp rất sẵn sàng, vì vậy hãy làm việc để thêm nó làm tài nguyên mà cụm của ta sẽ quản lý.

Pacemaker đi kèm với một tác nhân tài nguyên Nginx, vì vậy ta có thể dễ dàng thêm Nginx làm tài nguyên cụm.

Sử dụng lệnh này để tạo một tài nguyên cụm nguyên thủy mới có tên là “Nginx”:

  • sudo crm configure primitive Nginx ocf:heartbeat:nginx \
  • params httpd="/usr/sbin/nginx" \
  • op start timeout="40s" interval="0" \
  • op monitor timeout="30s" interval="10s" on-fail="restart" \
  • op stop timeout="60s" interval="0"

Tài nguyên được chỉ định yêu cầu cụm giám sát Nginx 10 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, Pacemaker sẽ quyết định khởi động tài nguyên NginxFloatIP trên các node riêng biệt vì ta chưa xác định bất kỳ ràng buộc tài nguyên nào. Đây là một vấn đề vì điều này nghĩa là IP nổi sẽ trỏ đến một Server , trong khi dịch vụ Nginx sẽ chỉ 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 một tài nguyên sao chép của tài nguyên Nginx được gọi là “Nginx-clone” bằng lệnh sau:

  • sudo crm configure clone Nginx-clone Nginx

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: Nginx-clone [Nginx] Started: [ primary secondary ]

Như bạn thấy , tài nguyên sao chép, Nginx-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 Nginx-clone đang hoạt động. Để tạo một giới hạn vị trí có tên là “FloatIP-Nginx”, hãy sử dụng lệnh sau:

  • sudo crm configure colocation FloatIP-Nginx inf: FloatIP Nginx-clone

Bạn sẽ không thấy bất kỳ sự khác biệt nào trong kết quả crm status , 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 có Nginx đang chạy, trong khi chỉ một trong số chúng có tài nguyên FloatIP đang chạy. Bây giờ là thời điểm tốt để kiểm tra cài đặt HA của bạn bằng cách dừng dịch vụ Nginx của bạn và bằng cách khởi động lại hoặc tắt nguồn server đang hoạt động của bạn.

Kết luận

Xin chúc mừng! Đến đây bạn có một cài đặt server HA cơ bản bằng Corosync, Pacemaker và một IP nổi DigitalOcean.

Bước tiếp theo là thay thế cài đặt Nginx mẫu bằng bộ cân bằng tải Reverse Proxy . Bạn có thể sử dụng Nginx hoặc HAProxy cho mục đích này. Lưu ý bạn cần liên kết trình cân bằng tải của bạn với địa chỉ IP cố định , để user của bạn chỉ có thể truy cập các server của bạn qua địa chỉ IP Nổi (chứ không phải qua địa chỉ IP công cộng của từng server ). Quá trình này được trình bày chi tiết trong hướng dẫn Cách tạo cài đặt HAProxy có tính khả dụng cao với Corosync, Pacemaker và IP nổi trên Ubuntu 14.04 .


Tags:

Các tin liên quan

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
Cách bảo vệ WordPress với Fail2Ban trên Ubuntu 14.04
2015-09-16
Cách cài đặt và sử dụng Composer trên Ubuntu 14.04
2015-09-11
Cách tối ưu hóa cài đặt Tomcat của bạn trên Ubuntu 14.04
2015-09-08
Cách cài đặt Mailpile trên Ubuntu 14.04
2015-08-21
Cách cài đặt CouchDB và Futon trên Ubuntu 14.04
2015-08-10