Thứ tư, 22/11/2017 | 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 16.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ư cách thành viên cụm và nhắn tin - cho các server khách hàng. Những khả năng này 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). 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 chỉ bằng cách sử dụng Heartbeat và IP nổi DigitalOcean .

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. 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 thành, cài đặt HA sẽ bao gồm hai server Ubuntu 16.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 nhằm mục đích demo và chỉ bao gồm một số khía cạnh của việc cài đặt một giải pháp HA tin cậy .
Những điểm chính của tài liệu này là các chi tiết về cách cài đặt các node chủ động / bị động ở cấp cổng và kết nối chúng với một IP nổi.
Để làm cho hướng dẫn đơn giản hơn, thay vì cấu hình bộ cân bằng tải Reverse Proxy trên mỗi server , ta sẽ cấu hình chúng để phản hồi bằng tên server và địa chỉ IP công khai 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 một IP nổi và gán nó cho một trong các Server
  • Tạo bản ghi 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

Với mục tiêu này, ta có thể bắt đầu cài đặt HA của bạn .

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ã thông báo 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 . Bạn có thể đạt được điều này theo phần Cách tạo Mã thông báo truy cập cá nhân của hướng dẫn API. 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. Điều quan trọng là bạn phải giữ nó ở nơi an toàn để tham khảo, vì nó cho phép truy cập đầy đủ vào account DigitalOcean của bạn.

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 cài đặt production , 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 16.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 > /var/www/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 khảo 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 phụ.

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 tạo và cài đặt các file cấu hình Heartbeat này giống hệt nhau trong cả hai folder /etc/ha.d của 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 .

Để xác định những nút nào khả dụng, 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. 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 198.51.100.5/24 brd 198.51.100.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 nano:

  • sudo nano /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à 198.51.100.5trung học của địa chỉ IP là 198.51.100.6 :

/etc/ha.d/ha.cf
node primary ucast eth0 198.51.100.5 node secondary ucast eth0 198.51.100.6 

Lưu và thoát khỏi file . 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ó trông giống như sau (với một khóa ủy quyền khác):

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

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

  • 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

Đến đây, 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 nano:

  • sudo nano /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 nếu nó khác:

/etc/ha.d/haresources
primary floatip 

Lưu và thoát khỏi file . Đ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

Vì tập lệnh của ta đang đưa ra yêu cầu đối với một API, ta cần cài đặt thư viện Yêu cầu Python:

sudo apt-get install python-requests 

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 nano /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='your_DO_API_token'
  • IP='your_floating_IP_address'
  • 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 khỏi file .

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, nếu server chính bị lỗi, để gán lại IP nổi cho chính nó,. 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 systemctl start heartbeat

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

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

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

Trong ví dụ này, ta đã cài đặt Nginx làm trình cân bằng tải cơ bản nhưng nếu bạn muốn cải thiện cài đặt Heartbeat của bạn bằng cách sử dụng trình cân bằng tải Reverse Proxy , bạn có thể thực hiện bằng cách cấu hình Nginx làm một hoặc sử dụng HAProxy.

Xin lưu ý với một trong hai cách thay thế bạn chọn sử dụng, bạn cần liên kết trình cân bằng tải / Reverse Proxy của bạn với địa chỉ IP cố định để user của bạn chỉ có thể truy cập server của bạn qua địa chỉ IP Nổi (chứ không phải qua địa chỉ công cộng Địa chỉ IP của mỗi server ).


Tags:

Các tin liên quan

Cách cài đặt phpIPAM trên Ubuntu 16.04
2017-11-22
Cách sử dụng Logrotate và S3cmd để lưu trữ log vào bộ nhớ đối tượng trên Ubuntu 16.04
2017-11-09
Cách quản lý các tệp log bằng Logrotate trên Ubuntu 16.04
2017-11-09
Cách tạo VPN điểm-điểm với WireGuard trên Ubuntu 16.04
2017-11-09
Cách đánh giá trang web bằng Firefox, Siege và Sproxy trên Ubuntu 16.04
2017-11-07
Cách cài đặt Nagios 4 và theo dõi server của bạn trên Ubuntu 16.04
2017-11-06
Cách cài đặt và cấu hình Nextcloud trên Ubuntu 16.04
2017-10-06
Cách cài đặt WordPress với Caddy trên Ubuntu 16.04
2017-08-03
Cách cài đặt và cấu hình GoCD trên Ubuntu 16.04
2017-08-01
Cách cấu hình GoCD với Let's Encrypt SSL Certificates trên Ubuntu 16.04
2017-08-01