Thứ năm, 23/01/2014 | 00:00 GMT+7

Cách thiết lập một cụm Serf trên một số VPS Ubuntu

Serf là một công cụ điều phối dịch vụ và khám phá dịch vụ phi tập trung. Nó có khả năng chịu lỗi và phân quyền cực kỳ cao, không có điểm lỗi nào giống như các công cụ tương tự khác. Serf được dùng để kích hoạt bất kỳ sự kiện nào trên một cụm hệ thống cũng như thực hiện các nhiệm vụ giám sát. Nó được xây dựng dựa trên giao thức Gossip được thiết kế cho giao tiếp phi tập trung. Để một nút tham gia một cụm Serf, ban đầu nút chỉ cần biết địa chỉ của một nút khác trong cụm. Sau khi nút tham gia, tất cả thông tin thành viên sẽ được truyền khắp cụm. Giao thức Gossip giúp Serf cực kỳ dễ cài đặt và cấu hình.


Sử dụng nhiều VPS


Serf được thiết kế để chạy trên nhiều VPS và máy móc, đồng thời tương thích với hệ thống nix, windows và Mac OS. Hướng dẫn này sẽ chỉ cho bạn cách cài đặt Serf trên hai server Ubuntu khác nhau.

Trong hướng dẫn này, các server sẽ được đặt tên là SerfNode1SerfNode2 . Bạn cần biết địa chỉ IP của từng server ; các địa chỉ IP sau được sử dụng để đại diện cho mỗi VPS trong hướng dẫn này. [Bất cứ nơi nào bạn nhìn thấy các địa chỉ IP này trong hướng dẫn, bạn sẽ thay thế chúng bằng địa chỉ IP của riêng mình].

SerfNode1 | 1.1.1.1

SerfNode2 | 2.2.2.2


Cài đặt Serf


Điều này cần được thực hiện trên cả SerfNode1SerfNode2

Download gói Serf mới nhất:

wget https://dl.bintray.com/mitchellh/serf/0.3.0_linux_amd64.zip 

Cài đặt công cụ extract để extract gói:

apt-get install unzip 

Extract gói Serf:

unzip 0.3.0_linux_amd64.zip 

Thêm Serf vào folder binary để nó có thể được thực thi từ mọi nơi:

mv serf /usr/local/bin 

Tạo một cụm Serf


Bắt đầu nút Serf đầu tiên trên SerfNode1 :

serf agent -node=**SerfNode1** -bind=1.1.1.1:7496  

Bạn sẽ thấy một cái gì đó tương tự như kết quả bên dưới:

==> Starting Serf agent... ==> Starting Serf agent RPC... ==> Serf agent running!     Node name: '**SerfNode1**'     Bind addr: '1.1.1.1:7496'      RPC addr: '127.0.0.1:7373'     Encrypted: false      Snapshot: false       Profile: lan  ==> Log data will now stream in as it occurs:      2014/01/18 21:57:57 [INFO] Serf agent starting     2014/01/18 21:57:57 [WARN] Binding to public address without encryption!     2014/01/18 21:57:57 [INFO] serf: EventMemberJoin: **SerfNode1** 1.1.1.1     2014/01/18 21:57:58 [INFO] agent: Received event: member-join  

Lưu ý: Tham số nút chỉ định tên của nút và ràng buộc đại diện cho địa chỉ IP và cổng để liên kết.

Trên SerfNode2, ta sẽ khởi động tác nhân Serf trong nền:

serf agent -node=**SerfNode2** -bind=2.2.2.2:7497 -rpc-addr=127.0.0.1:7373 & 

Lưu ý: Dấu '&' cho lệnh thực thi ở chế độ nền

Yêu cầu SerfNode2 tham gia SerfNode1 :

serf join 1.1.1.1:7496 

Bạn sẽ thấy kết quả tương tự như sau:

...     2014/01/18 22:03:04 [INFO] serf: EventMemberJoin: **SerfNode2** 2.2.2.2     2014/01/18 22:03:05 [INFO] agent: Received event: member-join1922 ... 

Tuyệt vời! Đến đây bạn có một cụm Serf nhỏ đang hoạt động. Để cài đặt các server bổ sung, bạn chỉ cần lặp lại quy trình ta đã thực hiện trên SerfNode2 . Để tham gia một cụm Serf, bạn chỉ cần hướng dẫn VPS tham gia một tác nhân Serf khác đã có trong cụm. Giao thức Gossip tự động thông báo cho tất cả các tác nhân Serf khác trong cụm của VPS mới.

Sự kiện và Xử lý sự kiện


Một lý do khác khiến Serf trở nên tuyệt vời là việc xử lý sự kiện dễ dàng như thế nào. Đầu tiên ta hãy gửi một sự kiện đến cụm.

Gửi một sự kiện user đơn giản


Trên SerfNode2 , thực hiện lệnh sau:

serf event hello 

Trên SerfNode1 , bạn sẽ thấy một cái gì đó tương tự như sau:

2014/01/16 15:48:05 [INFO] agent: Received event: user-event: hello 

Chà! Ta vừa gửi sự kiện đầu tiên của ta đến cụm. Ok, điều đó thật tuyệt, nhưng sự kiện này không thực sự làm được gì nhiều.

Tạo trình xử lý sự kiện tùy chỉnh


Bây giờ ta sẽ cấu hình một số xử lý sự kiện tùy chỉnh. Serf có thể kích hoạt các sự kiện tùy chỉnh trên một cụm để bắt đầu những thứ như triển khai, cập nhật bảo mật, cấu hình hệ thống, v.v. Bất kỳ sự kiện nào trên máy Linux có thể được viết kịch bản, Serf đều có thể kích hoạt nó.

Hãy bắt đầu với một ví dụ đơn giản.

Trên SerfNode1 , dừng Serf agent bằng cách nhấn Ctrl + C. Nó sẽ cung cấp cho bạn kết quả bên dưới:

    2014/01/16 15:58:54 [INFO] agent: requesting serf shutdown     2014/01/16 15:58:54 [WARN] Shutdown without a Leave     2014/01/16 15:58:54 [INFO] agent: shutdown complete 

Bây giờ ta sẽ tạo một kịch bản sự kiện tùy chỉnh ghi “ghi vào file ” vào file văn bản trong folder / usr / src. Khi user gửi sự kiện 'ghi', nó sẽ thực thi tập lệnh này.

Đầu tiên, hãy tạo trình xử lý sự kiện của ta . Trình xử lý sự kiện có thể là các file thực thi nào - trong trường hợp của ta , ta sẽ sử dụng file bash.

Chuyển sang folder / usr / src:

cd /usr/src 

Mở nano:

nano handler.sh 

Sử dụng tập lệnh sau cho trình xử lý sự kiện:

 #!/bin/bash if [ "${SERF_USER_EVENT}" = "write" ]; then         echo "written to file" >> test.txt fi  echo "${SERF_USER_EVENT}" 

Lưu ý: $ {SERF USER EVENT} là tên của lời giới thiệu mà ta đang gửi. Lưu ý cách bạn có thể sử dụng câu lệnh if để cài đặt các sự kiện khác nhau.

Nhấn Ctrl + X để thoát nano

Nhấn Y để lưu

Nhấn Enter

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

chmod +x handler.sh 

Bây giờ ta sẽ khởi động lại tác nhân Serf, nhưng lần này ta sẽ sử dụng trình xử lý sự kiện mà ta vừa tạo:

serf agent -log-level=debug -event-handler=./handler.sh -node=**SerfNode1** -bind=1.1.1.1:7496 

(BƯỚC TÙY CHỌN)

Mỗi đặc vụ Serf có thể có trình xử lý sự kiện riêng. Nếu bạn muốn có một trình xử lý sự kiện tùy chỉnh cho SerfNode2 , bạn chỉ cần thực hiện cùng một quy trình tạo trình xử lý sự kiện mà bạn đã làm cho SerfNode1 hoặc bạn chỉ cần sao chép tập lệnh xử lý sự kiện vào thư mục / usr / src của server SerfNode2 và thực hiện như sau lệnh:

Trên SerfNode2 , rời khỏi cụm Serf:

serf leave 

Điều hướng đến folder / usr / src:

cd /usr/src 

Khởi động tác nhân Serf trong nền với trình xử lý sự kiện tùy chỉnh:

serf agent -log-level=debug -event-handler=./handler.sh -node=**SerfNode2** -bind=2.2.2.2:7496 & 

Kiểm tra trình xử lý sự kiện


Trên SerfNode2 , tham gia lại SerfNode1 :

serf join 1.1.1.1:7496 

Thực hiện lệnh sau:

serf event write  

Trên SerfNode1, chuyển sang directoy / usr / src:

cd /usr/src 

Đến đây bạn sẽ thấy file test.txt trong directoy. Tệp này được tạo khi ta kích hoạt sự kiện Serf từ SerfNode2 . Khá tiện lợi hả? Bây giờ ta hãy làm một cái gì đó nâng cao hơn một chút.

Cài đặt giám sát bộ nhớ trống


Ta sẽ cài đặt một trình xử lý sự kiện tùy chỉnh sẽ ghi lại bộ nhớ trống trên một cụm server vào một server trung tâm.

Trên SerfNode1 , nhấn Ctrl + C để rời khỏi cụm Serf.

Đảm bảo rằng bạn đang ở trong folder / usr / src:

cd /usr/src 

Mở tập lệnh handler.sh:

nano handler.sh 

Thay đổi tập lệnh thành sau:

 #!/bin/bash if [ "${SERF_USER_EVENT}" = "mem" ]; then    serf event memresponse "$(awk '/MemTotal/ {printf( "%.2f\n", $2 / 1024 ) }'              /proc/meminfo) MB from $(wget -qO- http://ipecho.net/plain ; echo) at $(date)" fi 

Nhấn Ctrl + X để thoát nano

Nhấn Y để lưu

Nhấn Enter

Tập lệnh này sẽ kích hoạt sự kiện Serf sẽ trả lại bộ nhớ trống trên server ảo với định dạng sau:

490 MB from 1.1.1.1 at Sun Jan 19 00:37:22 EST 2014 

Bây giờ ta cần một cách để đăng nhập điều này trên VPS

Trên SerfNode2 , rời khỏi cụm Serf:

serf leave 

Đảm bảo rằng bạn đang ở trong folder / usr / src:

cd /usr/src 

Tạo một tập lệnh xử lý:

nano handler.sh 

Sử dụng phần sau cho tập lệnh:

 #!/bin/bash if [ "${SERF_USER_EVENT}" = "memresponse" ]; then     cat >> mem.txt     echo "\n" >> mem.txt fi 

Nhấn Ctrl + X để thoát nano

Nhấn Y để lưu

Nhấn Enter

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

chmod +x handler.sh 

Khởi động tác nhân trên SerfNode1 :

serf agent -log-level=debug -event-handler=./handler.sh -node=**SerfNode1** -bind=1.1.1.1:7496 

Khởi động tác nhân trên SerfNode2 :

serf agent -log-level=debug -event-handler=./handler.sh -node=**SerfNode2** -bind=2.2.2.2:7496 & 

Trên SerfNode2 , tham gia lại SerfNode1 2:

serf join 1.1.1.1:7496 

Kích hoạt sự kiện 'ghi nhớ':

serf event mem 

Kiểm tra file mem.txt:

nano mem.txt 

Đến đây bạn có một công cụ giám sát bộ nhớ đang hoạt động có thể được phân phối trên nhiều server ảo.

Sự kiện Serf chi tiết


Dưới đây là một số biến có ích khi tạo tập lệnh xử lý sự kiện tùy chỉnh. Những thứ này được lấy trực tiếp từ <a href=p>http://serfdom.ioosystem> trang web Serf. </a>

  • SERF_EVENT là loại sự kiện đang xảy ra. Đây sẽ là một trong những thành viên tham gia, thành viên rời khỏi, thành viên không thành công hoặc user .

  • SERF_SELF_NAME là tên của nút đang thực thi trình xử lý sự kiện.

  • SERF_SELF_ROLE là role của nút đang thực thi trình xử lý sự kiện.

  • SERF_USER_EVENT là tên của loại sự kiện user nếu SERF_EVENT là " user ".

  • SERF_USER_LTIME là LamportTime của sự kiện user nếu SERF_EVENT là " user ".

Khi một sự kiện được kích hoạt, sau đây là bố cục của lệnh sự kiện:

serf event [SERF_EVENT_NAME] [PAYLOAD] 
  • Trọng tải là bất kỳ thứ gì theo sau tên sự kiện. Trọng tải được tập lệnh hiểu là stdin.

  • Khi một sự kiện user tùy chỉnh được sử dụng, biến SERF USER EVENT sẽ được sử dụng thay vì biến SERF_EVENT.

Kết luận


Serf là một cách tốt để kích hoạt các sự kiện trên một group máy. Nó đơn giản, nhẹ và có khả năng chịu lỗi. Ngoài những tính năng tuyệt vời này, nó cực kỳ phi tập trung và không có điểm nào bị lỗi. Một số trường hợp sử dụng ví dụ là: cấu hình hệ thống, triển khai, cập nhật bảo mật, phát thông báo và giám sát server . Serf cũng cực kỳ tùy biến và có thể được điều chỉnh để trở thành giải pháp cho một loạt các vấn đề.

Bạn có thể tìm thấy thêm thông tin và tài liệu về Serf <a href=p>http://www.serfdom.ioosystem> tại đây </a>.

<div class = “author”> Được gửi bởi: <a href=p>http://blog.opendev.ioosystem> Cooper Thompson </a> </div>


Tags:

Các tin liên quan

Cách cấu hình Cụm Galera với MariaDB trên server Ubuntu 12.04
2014-01-20
Cách cài đặt Neo4J trên VPS Ubuntu
2014-01-15
Cách sử dụng PM2 để thiết lập môi trường sản xuất Node.js trên VPS Ubuntu
2014-01-10
Cách sử dụng psad để phát hiện nỗ lực xâm nhập mạng trên VPS Ubuntu
2014-01-10
Cách sử dụng Makefiles để tự động hóa các tác vụ lặp đi lặp lại trên Ubuntu VPS
2014-01-07
Cách thiết lập CouchDB với ElasticSearch trên VPS Ubuntu 13.10
2013-12-30
Cách sử dụng Celery với RabbitMQ để xếp hàng các tác vụ trên Ubuntu VPS
2013-12-19
Cách thiết lập một Honeypot Pháo binh trên VPS Ubuntu
2013-12-04
Cách triển khai Bộ sao chép trong MongoDB trên VPS Ubuntu
2013-12-03
Cách tạo một cụm Sharded trong MongoDB bằng VPS Ubuntu 12.04
2013-12-02