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 Heartbeat và IP nổi trên Ubuntu 14.04

Heartbeat là một chương trình open-souce cung cấp khả năng cơ sở hạ tầng cụm — tính năng thành viên cụm và nhắn tin — cho các server khách hàng, là một thành phần quan trọng trong cơ sở hạ tầng server có tính khả dụng cao (HA). Heartbeat thường được sử dụng cùng với trình quản lý tài nguyên cụm (CRM), chẳng hạn như Máy tạo nhịp tim, để đạt được cài đặt HA hoàn chỉnh. Tuy nhiên, trong hướng dẫn này, ta sẽ trình bày cách tạo cài đặt server HA 2 nút bằng cách sử dụng Heartbeat và IP nổi DigitalOcean.

Nếu bạn đang muốn cài đặt HA mạnh mẽ hơn, hãy xem xét sử dụng Corosync và Pacemaker hoặc Keepalived .

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 các dịch vụ hoặc trang web , để trỏ đến server chính hoặc đang hoạt động trừ khi phát hiện ra lỗi. Trong trường hợp dịch vụ Heartbeat phát hiện server chính không khả dụng, server phụ sẽ tự động chạy 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 cho đến khi server chính hoạt động trở lại (lúc đó, server chính sẽ gán lại IP nổi cho chính nó).

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
  • Tạo DNS Một bản ghi trỏ đến IP nổi (tùy chọn)
  • Cài đặt Heartbeat trên Server
  • Cấu hình Heartbeat để chạy Dịch vụ chỉ định lại IP nổi
  • Tạo dịch vụ chuyển nhượng IP nổi
  • Kiểm tra chuyển đổi dự phòng

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 trong cùng một trung tâm dữ liệu, trung tâm này 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. Đối với một cài đặt thực sự, cá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.

Tạo hai server Ubuntu 14.04, chínhphụ , với 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 

Thao tác 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 đến 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 kiểm tra đảm bảo rằng bạn có thể tiếp cận Server mà nó đã được chỉ định bằng cách truy cập nó 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 ngay bây giờ, bạn nên sử dụng địa chỉ IP nổi để thay thế.

Cài đặt Heartbeat

Bước tiếp theo là cài đặt Heartbeat trên cả hai server . Cách đơn giản nhất để cài đặt Heartbeat là sử dụng apt-get:

sudo apt-get update sudo apt-get install heartbeat 

Heartbeat hiện đã được cài đặt nhưng nó cần được cấu hình trước khi thực hiện bất cứ điều gì.

Cấu hình Nhịp tim

Để cài đặt và chạy cụm mong muốn của ta , ta phải cài đặt các file cấu hình Heartbeat này trong /etc/ha.d , giống hệt nhau trên cả hai server :

  1. ha.cf: Cấu hình chung của cụm Heartbeat, bao gồm các node thành viên của nó
  2. authkeys: Chứa khóa bảo mật cung cấp cho các node cách xác thực với cụm
  3. haresources: Chỉ định các dịch vụ được quản lý bởi cụm và nút là chủ sở hữu ưu tiên của các dịch vụ. Lưu ý file này không được sử dụng trong cài đặt sử dụng CRM như Pacemaker

Ta cũng cần cung cấp một tập lệnh sẽ thực hiện gán lại IP nổi trong trường hợp tính khả dụng của Server chính thay đổi.

Thu thập thông tin nút

Trước khi cấu hình ha.cf , ta nên tra cứu tên của từng nút. Heartbeat yêu cầu mỗi tên nút phải trùng với kết quả uname -n tương ứng của chúng.

Trên cả hai server , hãy chạy lệnh này để tra cứu tên nút thích hợp:

  • uname -n

Lưu ý kết quả kết quả của lệnh. Các tên nút ví dụ là “chính” và “phụ”, trùng với những gì ta đã đặt tên cho các server .

Ta cũng cần phải tra cứu network interface và địa chỉ IP mà mỗi nút sẽ sử dụng để giao tiếp với phần còn lại của cụm, để xác định nút nào khả dụng. Bạn có thể sử dụng bất kỳ network interface nào, miễn là mỗi nút có thể đến các node khác trong cụm. Ta sẽ sử dụng giao diện công khai của Server, giao diện này sẽ là eth0 .

Trên cả hai server , sử dụng lệnh này để tra cứu địa chỉ IP của giao diện eth0 (hoặc tra cứu trong Control panel DigitalOcean):

  • ip addr show eth0
ip addr show eth0 output:
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 04:01:76:a5:45:01 brd ff:ff:ff:ff:ff:ff inet 104.236.6.11/18 brd 104.236.63.255 scope global eth0 valid_lft forever preferred_lft forever inet 10.17.0.28/16 scope global eth0 valid_lft forever preferred_lft forever inet6 fe80::601:76ff:fea5:4501/64 scope link valid_lft forever preferred_lft forever

Lưu ý địa chỉ IP của network interface (được đánh dấu trong ví dụ). Đảm bảo lấy địa chỉ IP của cả hai server .

Tạo file ha.cf

Trên cả hai server , hãy mở /etc/ha.d/ha.cf trong editor yêu thích của bạn. Ta sẽ sử dụng vi :

  • sudo vi /etc/ha.d/ha.cf

Tệp phải mới và trống. Ta cần thêm các network interface và tên của từng nút trong cụm của ta .

Copy paste cấu hình này vào file , sau đó thay thế tên nút và địa chỉ IP tương ứng bằng các giá trị mà ta đã tra cứu trước đó. Trong ví dụ này, chính là địa chỉ IP là 104.236.6.11trung học của địa chỉ IP là 104.236.6.22 :

node primary ucast eth0 104.236.6.11 node secondary ucast eth0 104.236.6.22 

Lưu và thoát. Tiếp theo, ta sẽ cài đặt khóa ủy quyền của cụm.

Tạo file authkeys

Khóa ủy quyền được sử dụng để cho phép các thành viên trong cụm tham gia vào một cụm. Ta chỉ cần tạo một khóa ngẫu nhiên cho mục đích này.

Trên nút chính , hãy chạy các lệnh này để tạo khóa ủy quyền phù hợp trong biến môi trường có tên AUTH_KEY :

if [ -z "${AUTH_KEY}" ]; then   export AUTH_KEY="$(command dd if='/dev/urandom' bs=512 count=1 2>'/dev/null' \       | command openssl sha1 \       | command cut --delimiter=' ' --fields=2)" fi 

Sau đó, ghi file /etc/ha.d/authkeys bằng các lệnh sau:

sudo bash -c "{   echo auth1   echo 1 sha1 $AUTH_KEY } > /etc/ha.d/authkeys" 

Kiểm tra nội dung của file authkeys như sau:

  • sudo cat /etc/ha.d/authkeys

Nó sẽ giống như thế này (với một khóa ủy quyền khác):

/etc/ha.d/authkeys example:
auth1 1 sha1 d1e6557e2fcb30ff8d4d3ae65b50345fa46a2faa

Đảm bảo rằng file chỉ có thể đọc được bởi root:

  • sudo chmod 600 /etc/ha.d/authkeys

Bây giờ sao chép file /etc/ha.d/authkeys từ nút chính sang nút phụ của bạn. Bạn có thể làm điều này theo cách thủ công hoặc bằng scp .

Trên server phụ , hãy đảm bảo đặt quyền của file authkeys :

  • sudo chmod 600 /etc/ha.d/authkeys

Cả hai server phải có file /etc/ha.d/authkeys giống hệt nhau.

Tạo file haresources

Tệp haresources chỉ định các server ưu tiên được ghép nối với các dịch vụ mà cụm quản lý. Server lưu trữ ưu tiên là nút sẽ chạy (các) dịch vụ liên quan nếu nút đó khả dụng. Nếu server được ưu tiên không có sẵn, tức là cụm không thể truy cập được, một trong các node khác sẽ tiếp quản. Nói cách khác, server phụ sẽ tiếp quản nếu server chính gặp sự cố.

Trên cả hai server , hãy mở file haresources trong editor yêu thích của bạn. Ta sẽ sử dụng vi :

  • sudo vi /etc/ha.d/haresources

Bây giờ hãy thêm dòng này vào file , thay thế bằng tên nút chính của bạn:

/etc/ha.d/haresources
  • primary floatip

Lưu và thoát. Điều này cấu hình server chính làm server ưu tiên cho dịch vụ floatip , hiện chưa được xác định. Tiếp theo hãy cài đặt dịch vụ floatip .

Tạo dịch vụ chuyển nhượng IP nổi

Cụm Heartbeat của ta được cấu hình để duy trì dịch vụ floatip , một nút có thể sử dụng để gán IP nổi cho chính nó, nhưng ta vẫn cần tạo dịch vụ. Tuy nhiên, trước khi ta cài đặt chính dịch vụ, hãy tạo một tập lệnh sẽ chỉ định IP nổi, thông qua API DigitalOcean, cho nút chạy nó. Sau đó, ta sẽ tạo dịch vụ floatip sẽ chạy tập lệnh gán lại IP nổi.

Tạo tập lệnh gán-ip

Đối với ví dụ của ta , 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.

Bây giờ ta đã sẵn sàng để tạo dịch vụ floatip .

Tạo dịch vụ floatip

Để tạo dịch vụ floatip , tất cả những gì ta cần làm là tạo một tập lệnh init gọi tập lệnh assign-ip mà ta đã tạo trước đó và phản hồi các lệnh con startstop . Tập lệnh init này sẽ chịu trách nhiệm tra cứu ID server của server , thông qua dịch vụ Siêu dữ liệu Server. Ngoài ra, nó sẽ yêu cầu IP nổi sẽ được chỉ định lại và mã thông báo API DigitalOcean (Mã truy cập cá nhân được đề cập trong phần yêu cầu ).

Trên cả hai server , thêm mở /etc/init.d/floatip trong editor :

  • sudo vi /etc/init.d/floatip

Sau đó, sao chép và paste vào tập lệnh init này, thay thế các phần được đánh dấu bằng khóa API DigitalOcean của bạn và IP nổi sẽ được chỉ định lại:

/etc/init.d/floatip
  • #!/bin/bash
  • param=$1
  • export DO_TOKEN='b7d03a6947b217efb6f3ec3bd3504582'
  • IP='45.55.96.8'
  • ID=$(curl -s http://169.254.169.254/metadata/v1/id)
  • if [ "start" == "$param" ] ; then
  • python /usr/local/bin/assign-ip $IP $ID
  • exit 0
  • elif [ "stop" == "$param" ] ; then
  • exit 0;
  • elif [ "status" == "$param" ] ; then
  • exit 0;
  • else
  • echo "no such command $param"
  • exit 1;
  • fi

Lưu và thoát.

Làm cho tập lệnh có thể thực thi:

  • sudo chmod u+x /etc/init.d/floatip

Khi dịch vụ floatip này được khởi động, nó sẽ chỉ cần gọi tập lệnh Python assign-ip và gán IP nổi được chỉ định cho Server đã thực thi tập lệnh. Đây là tập lệnh sẽ được server phụ gọi, để gán lại IP nổi cho chính nó, nếu server chính bị lỗi. Tương tự như vậy, server chính sẽ sử dụng cùng một tập lệnh để lấy lại IP nổi, sau khi nó tham gia lại cụm.

Bắt đầu nhịp tim

Bây giờ Heartbeat đã được cấu hình và tất cả các tập lệnh mà nó dựa vào đã được cài đặt , ta đã sẵn sàng để bắt đầu cụm Heartbeat!

Trên cả hai server , hãy chạy lệnh này để bắt đầu Heartbeat:

  • sudo service heartbeat start

Bạn sẽ thấy kết quả như thế này:

Heartbeat output:
Starting High-Availability services: Done.

Cài đặt HA của ta hiện đã hoàn tất! Trước khi tiếp tục, hãy kiểm tra xem nó có hoạt động như dự định khô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ó 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 nút 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: 104.236.6.11

Đ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 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 http://example.com; 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 dừng dịch vụ Heartbeat, ta sẽ xem liệu IP nổi có được gán lại cho server phụ hay không.

Hãy tắt 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 poweroff

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: 104.236.6.11 ... curl: (7) Failed to connect to example.com port 80: Connection refused Server: secondary, IP Address: 104.236.6.22 Server: secondary, IP Address: 104.236.6.22 ...

Đó 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.

Bây giờ, bạn có thể bật Server chính của bạn , thông qua Control panel DigitalOcean. Vì Heartbeat được cấu hình với Server chính làm server lưu trữ ưu tiên để chạy tập lệnh gán lại Floating IP, Floating IP sẽ tự động trỏ trở lại server chính ngay khi nó khả dụng trở lại.

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 cách sử dụng Heartbeat và một IP nổi DigitalOcean.

Nếu bạn đang muốn cài đặt HA mạnh mẽ hơn, hãy xem xét sử dụng Corosync và Pacemaker hoặc Keepalived .

Nếu bạn muốn mở rộng cài đặt Heartbeat của bạn , bước tiếp theo là thay thế cài đặt Nginx mẫu bằng trình 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 ).


Tags:

Các tin liên quan

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 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