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à SerfNode1 và SerfNode2 . 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ả SerfNode1 và SerfNode2
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ếuSERF_EVENT
là " user ".SERF_USER_LTIME
là LamportTime của sự kiện user nếuSERF_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>
Các tin liên quan
Cách cấu hình Cụm Galera với MariaDB trên server Ubuntu 12.042014-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