Thứ sáu, 15/08/2014 | 00:00 GMT+7

Giới thiệu về cách sử dụng Consul, Hệ thống khám phá dịch vụ, trên Ubuntu 14.04

Consul là một hệ thống phân tán, có tính khả dụng cao, nhận biết trung tâm dữ liệu, hệ thống phát hiện và cấu hình dịch vụ. Nó được dùng để trình bày các dịch vụ và nút trong một giao diện linh hoạt và mạnh mẽ cho phép khách hàng luôn có cái nhìn cập nhật về cơ sở hạ tầng mà họ là một phần của nó.

Lãnh sự cung cấp nhiều tính năng khác nhau được sử dụng để cung cấp thông tin nhất quán và sẵn có về cơ sở hạ tầng của bạn. Điều này bao gồm cơ chế phát hiện dịch vụ và nút, hệ thống gắn thẻ, kiểm tra sức khỏe, quy trình bầu cử dựa trên sự đồng thuận, lưu trữ khóa / giá trị trên toàn hệ thống, v.v. Bằng cách tận dụng lãnh sự trong tổ chức của bạn , bạn có thể dễ dàng xây dựng mức độ nhận biết tinh vi đối với các ứng dụng và dịch vụ của bạn .

Trong hướng dẫn này, ta sẽ giới thiệu cho bạn một số điều cơ bản về cách sử dụng lãnh sự. Ta sẽ đề cập đến các thủ tục chung cần thiết để đưa lãnh sự chạy trên server của bạn để kiểm tra. Trong hướng dẫn tiếp theo, ta sẽ tập trung vào việc cài đặt lãnh sự trong môi trường production .

Yêu cầu và Mục tiêu

Trong hướng dẫn này, ta sẽ làm quen với việc sử dụng lãnh sự để xây dựng một hệ thống khám phá và cấu hình dịch vụ cho cơ sở hạ tầng của bạn.

Đối với phần trình diễn của ta , ta sẽ cấu hình ba server và một client . Server được sử dụng để xử lý các truy vấn và duy trì chế độ xem nhất quán của hệ thống. Máy khách cũng là một thành viên của hệ thống và có thể kết nối với server để biết thông tin về cơ sở hạ tầng. Khách hàng cũng có thể có các dịch vụ sẽ được giám sát bởi lãnh sự.

Theo mục đích của hướng dẫn này, và toàn bộ loạt bài này, ta sẽ cấu hình 4 máy tính. Ba đầu tiên sẽ là server lãnh sự như đã mô tả ở trên. Người cuối cùng sẽ là một đại lý lãnh sự hoạt động như một khách hàng và được dùng để truy vấn thông tin về hệ thống.

Để ta triển khai một số cơ chế bảo mật sau này, ta cần đặt tên cho tất cả các máy của bạn trong một domain duy nhất. Điều này để ta có thể tận dụng certificate SSL ký tự đại diện trong tương lai.

Chi tiết về máy của ta ở đây:

Tên server Địa chỉ IP Role
server1.example.com 192.0.2.1 server lãnh sự bootstrap
server2.example.com 192.0.2.2 server lãnh sự
server3.example.com 192.0.2.3 server lãnh sự
agent1.example.com 192.0.2.50 khách hàng lãnh sự

Ta sẽ sử dụng server Ubuntu 14.04 64-bit cho phần trình diễn này, nhưng bất kỳ server Linux hiện đại nào cũng hoạt động tốt như nhau.

Download và Cài đặt Consul

Bước đầu tiên ta cần thực hiện là tải và cài đặt phần mềm lãnh sự trên mỗi máy của bạn . Các bước sau đây phải được thực hiện trên từng máy được liệt kê ở trên. Bạn nên đăng nhập với quyền root.

Trước khi xem xét đơn xin lãnh sự, ta cần unzip để extract file thực thi. Ta cũng sẽ sử dụng ứng dụng screen để cho phép ta dễ dàng có nhiều phiên trong một cửa sổ terminal duy nhất. Điều này hữu ích cho phần giới thiệu của ta , vì lãnh sự thường chiếm toàn bộ màn hình khi không chạy dưới dạng dịch vụ.

Cập nhật cache ẩn gói hệ thống local và sau đó cài đặt gói bằng apt :

apt-get update apt-get install unzip screen 

Vì vậy, ta đừng quên làm như vậy sau, hãy bắt đầu phiên màn hình của bạn ngay bây giờ:

screen 

Nhấn enter nếu bạn nhận được thông báo bản quyền. Bạn sẽ được đưa trở lại cửa sổ terminal , nhưng bây giờ bạn đang ở trong một phiên màn hình.

Bây giờ, ta có thể bắt đầu chương trình lãnh sự. Trang của dự án lãnh sự cung cấp liên kết download các gói binary cho Windows, OS X và Linux.

Đi tới trang trên và nhấp chuột phải vào hệ điều hành và kiến trúc đại diện cho server của bạn. Trong hướng dẫn này, vì ta đang sử dụng server 64-bit, ta sẽ sử dụng liên kết “amd64” trong “linux”. Chọn “vị trí liên kết sao chép” hoặc bất kỳ tùy chọn tương tự nào mà trình duyệt của bạn cung cấp.

Trong terminal của bạn, hãy chuyển đến folder /usr/local/bin , nơi ta sẽ giữ file thực thi. wget và khoảng trắng, sau đó dán URL mà bạn đã sao chép từ trang web:

cd /usr/local/bin wget https://dl.bintray.com/mitchellh/consul/0.3.0_linux_amd64.zip 

Bây giờ, ta có thể extract gói binary bằng lệnh unzip mà ta đã cài đặt trước đó. Sau đó, ta có thể xóa file đã nén:

unzip *.zip rm *.zip 

Đến đây bạn sẽ có sẵn lệnh consul trên tất cả các server của bạn .

Khởi động server Bootstrap

Để bắt đầu làm việc với lãnh sự, ta cần cài đặt và chạy các server lãnh sự của bạn . Khi cấu hình điều này trong môi trường nhiều server được khuyến khích , bước này sẽ phải được thực hiện theo từng giai đoạn.

Điều đầu tiên ta cần làm là khởi động chương trình lãnh sự trên một trong các server của ta ở chế độ serverbootstrap . Chế độ server nghĩa là lãnh sự sẽ khởi động như một version server thay vì một client . Tùy chọn bootstrap được sử dụng cho server đầu tiên. Điều này cho phép nó tự chỉ định mình là “lãnh đạo” cho cụm mà không cần bầu cử (vì nó sẽ là server duy nhất có sẵn).

Trong bảng chỉ định các server của ta , ta đã chỉ định server1 của ta làm server bootstrap. Trên server1, bắt đầu version bootstrap bằng lệnh :

consul agent -server -bootstrap -data-dir /tmp/consul 

Server sẽ khởi động trong terminal hiện tại và dữ liệu log sẽ được xuất ra khi các sự kiện xảy ra. Ở cuối dữ liệu log , bạn sẽ thấy những dòng sau:

. . . 2014/07/07 14:32:15 [ERR] agent: failed to sync remote state: No cluster leader 2014/07/07 14:32:17 [WARN] raft: Heartbeat timeout reached, starting election 2014/07/07 14:32:17 [INFO] raft: Node at 192.0.2.1:8300 [Candidate] entering Candidate state 2014/07/07 14:32:17 [INFO] raft: Election won. Tally: 1 2014/07/07 14:32:17 [INFO] raft: Node at 192.0.2.1:8300 [Leader] entering Leader state 2014/07/07 14:32:17 [INFO] consul: cluster leadership acquired 2014/07/07 14:32:17 [INFO] consul: New leader elected: server1.example.com 2014/07/07 14:32:17 [INFO] consul: member 'server1.example.com' joined, marking health alive 

Như bạn thấy , không tìm thấy group trưởng vì đây là nút ban đầu. Tuy nhiên, vì ta đã bật tùy chọn bootstrap, server này đã có thể tự đi vào trạng thái dẫn đầu để bắt đầu một cụm với một server duy nhất.

Khởi động các server khác

Trên server2server3 , bây giờ ta có thể bắt đầu dịch vụ lãnh sự mà không có tùy chọn bootstrap bằng lệnh :

consul agent -server -data-dir /tmp/consul 

Đối với các server này, bạn cũng sẽ thấy các mục log . Đến cuối, bạn sẽ thấy các thông báo như sau:

. . . 2014/07/07 14:37:25 [ERR] agent: failed to sync remote state: No cluster leader 2014/07/07 14:37:27 [WARN] raft: EnableSingleNode disabled, and no known peers. Aborting election. 2014/07/07 14:37:53 [ERR] agent: failed to sync remote state: No cluster leader 

Điều này xảy ra bởi vì nó không thể tìm thấy một group trưởng và không được phép tự trở thành group trưởng. Trạng thái này xảy ra do server thứ hai và thứ ba của ta được kích hoạt, nhưng không có server nào của ta được kết nối với nhau.

Để kết nối với nhau, ta cần nối các server này với nhau. Điều này có thể được thực hiện theo bất kỳ hướng nào, nhưng dễ nhất là từ máy server1 của ta .

Vì ta đang chạy server lãnh sự trong cửa sổ terminal hiện tại của server1 , ta sẽ phải tạo một terminal khác có screen để thực hiện công việc bổ sung. Tạo một cửa sổ terminal mới trong phiên màn hình hiện có của server1 bằng lệnh :

CTRL-A C 

Thao tác này sẽ mở một version terminal mới trong khi vẫn giữ phiên trước đó của ta chạy. Bạn có thể bước qua từng phiên terminal hiện có bằng lệnh :

CTRL-A N 

Quay lại terminal mới của bạn, tham gia hai trường hợp khác bằng cách tham chiếu địa chỉ IP của chúng như sau:

consul join 192.0.2.2 192.0.2.3 

Điều này sẽ ngay lập tức kết hợp cả ba server vào cùng một cụm. Bạn có thể kiểm tra kỹ điều này bằng lệnh :

consul members 
Node                 Address             Status  Type    Build  Protocol server1.example.com  192.0.2.1:8301  alive   server  0.3.0  2 server2.example.com  192.0.2.2:8301  alive   server  0.3.0  2 server3.example.com  192.0.2.3:8301  alive   server  0.3.0  2 

Bạn cũng có thể lấy thông tin này từ bất kỳ server nào khác bằng cách tạo một phiên terminal mới trên màn hình như ta đã mô tả ở trên và đưa ra lệnh tương tự.

Loại bỏ server Bootstrap và tham gia lại như một server thông thường

Ta có tất cả ba server của ta được tham gia vào một cụm, nhưng ta vẫn chưa hoàn thành.

Hiện tại, vì server1 đã được khởi động ở chế độ bootstrap, nó có quyền đưa ra quyết định mà không cần tham khảo ý kiến của các server khác. Vì chúng được cho là hoạt động bình đẳng và đưa ra quyết định theo số đại biểu, ta muốn xóa quyền này sau khi cụm đã được khởi động.

Để làm điều này, ta cần dừng dịch vụ lãnh sự trên máy server1 . Điều này sẽ cho phép các máy còn lại chọn một nhà lãnh đạo mới. Sau đó, ta có thể khởi động lại dịch vụ lãnh sự trên server1 mà không có tùy chọn bootstrap và tham gia lại cụm.

Trên server 1, chuyển trở lại terminal đang chạy lãnh sự:

CTRL-A N 

Dừng dịch vụ bằng lệnh :

CTRL-C 

Bây giờ, khởi động lại dịch vụ mà không có tùy chọn bootstrap:

consul agent -server -data-dir /tmp/consul 

Chuyển trở lại terminal đang mở của bạn và tham gia lại cụm bằng cách kết nối với một trong hai server trong cụm:

CTRL-A N consul join 192.0.2.2 

Đến đây bạn sẽ có ba server của bạn ở trạng thái ngang nhau. Chúng sẽ sao chép thông tin cho nhau và sẽ xử lý các tình huống mà một server duy nhất trở nên không khả dụng. Các server bổ sung giờ đây cũng có thể tham gia cụm bằng cách khởi động server mà không cần bootstrap và tham gia cụm.

Tham gia Cụm với quyền Khách hàng và Phục vụ Giao diện User Web

Bây giờ cụm server đã có sẵn, ta có thể tiếp tục và kết nối bằng client .

Ta sẽ đặt giao diện user web của lãnh sự trên client để ta có thể tương tác với cụm và theo dõi tình trạng của nó. Để thực hiện việc này, hãy truy cập trang download giao diện user web . Nhấp chuột phải vào nút download và chọn "sao chép vị trí liên kết" hoặc bất kỳ tùy chọn tương tự nào bạn có .

Trên client của bạn, hãy thay đổi thành folder chính của bạn. wget và một dấu cách, sau đó dán URL bạn đã sao chép từ trang:

cd ~ wget https://dl.bintray.com/mitchellh/consul/0.3.0_web_ui.zip 

Khi quá trình download hoàn tất, hãy extract và xóa file lưu trữ:

unzip *.zip rm *.zip 

Sẽ có một folder tên là dist chứa tất cả các file cần thiết để hiển thị giao diện user web của lãnh sự. Ta chỉ cần chỉ định folder này khi ta đang kết nối với cụm.

Để kết nối với cụm, ta sẽ sử dụng một cuộc gọi tương tự đến đại lý lãnh sự mà ta đã sử dụng cho các server . Tuy nhiên, ta sẽ sử dụng các cờ khác nhau.

Ta sẽ không sử dụng cờ server , vì ta muốn hoạt động ở chế độ client . Theo mặc định, giao diện client của mỗi nút có thể truy cập được bằng giao diện vòng lặp local . Vì ta muốn truy cập giao diện user web từ xa, thay vào đó ta sẽ phải chỉ định địa chỉ IP công cộng của ứng dụng.

Ta sẽ phải chỉ cho lãnh sự đến folder chứa giao diện user web để phân phát nội dung đó. Ngoài ra, ta sẽ tham gia cụm ngay lập tức bằng cách chuyển địa chỉ IP của một trong các server trong cụm. Điều này sẽ cho phép ta tránh phải tham gia sau đó. Ta có thể đã làm điều này sớm hơn với các ví dụ server .

Cuối cùng, lệnh kết nối của ta khá dài. Nó sẽ trông giống thế này:

consul agent -data-dir /tmp/consul -client 192.0.2.50 -ui-dir /home/your_user/dir -join 192.0.2.1 

Điều này sẽ kết nối client của ta với cụm như một tác nhân thông thường, không phải server . Tác nhân này sẽ phản hồi các yêu cầu trên địa chỉ IP công cộng của nó thay vì giao diện 127.0.0.1 thông thường. Do đó, bạn cần thêm một cờ bổ sung cho bất kỳ lệnh lãnh sự nào chỉ định rpc-addr .

Ví dụ: nếu bạn muốn truy vấn danh sách các thành viên từ client , bạn sẽ phải thực hiện bằng cách chuyển vào giao diện và cổng thay thế mà bạn đã chọn:

consul members -rpc-addr=192.0.2.50:8400 
Node     Address             Status  Type    Build  Protocol agent1   192.0.2.50:8301    alive   client  0.3.0  2 server2  192.0.2.2:8301  alive   server  0.3.0  2 server1  192.0.2.1:8301  alive   server  0.3.0  2 server3  192.0.2.3:8301  alive   server  0.3.0  2 

Điều này có vẻ phức tạp, nhưng nó cung cấp cho ta cơ hội truy cập giao diện web của lãnh sự. Bạn có thể truy cập giao diện web bằng cách truy cập địa chỉ IP của khách hàng của bạn, sau đó là :8500/ui trong trình duyệt web :

http://192.0.2.50:8500/ui 

Giao diện chính sẽ như thế này:

Trang đích giao diện  user  web của lãnh sự

Bạn có thể nhấp qua các menu khác nhau và khám phá giao diện. Điều này cung cấp cho bạn một cách tốt để hình dung cụm của bạn và tình trạng của máy móc và dịch vụ của bạn.

Thêm dịch vụ và séc

Bây giờ, ta muốn thêm các dịch vụ cho lãnh sự, đây là trường hợp sử dụng chính để cài đặt điều này. Bạn có thể thêm dịch vụ theo một số cách, nhưng cách dễ nhất là tạo folder cấu hình để lưu các định nghĩa dịch vụ của bạn.

Một dịch vụ được liên kết với nút chứa định nghĩa dịch vụ. Vì vậy, nếu ta có một web server , ta nên cài đặt đại lý lãnh sự trên server đó và tạo một file định nghĩa dịch vụ ở đó.

Vì mục đích của ta , ta sẽ cài đặt Nginx trên client của bạn để chứng minh điều này. Hủy phiên khách hiện tại bằng lệnh :

CTRL-C 

Cài đặt Nginx trên client bằng lệnh :

apt-get install nginx 

Bây giờ, ta có thể tạo một folder cấu hình để lưu trữ các định nghĩa dịch vụ của bạn :

mkdir ~/services 

Bên trong folder này, ta sẽ tạo một file JSON mô tả dịch vụ web của ta . Ta sẽ gọi đây là web.json :

nano ~/services/web.json 

Bên trong file này, ta cần bao gồm một cấu trúc cho định nghĩa dịch vụ của ta . Trong cấu trúc này, ta sẽ xác định một cấu trúc con để kiểm tra tình trạng của dịch vụ để ta có thể tin cậy được liệu nó có đang chạy hay không.

Phác thảo cơ bản trông như thế này:

{     "service": {         . . .         "check": {             . . .         }     } } 

Đối với dịch vụ, ta cần xác định tên cho dịch vụ và thông báo cho lãnh sự biết cổng cần kiểm tra. Ngoài ra, ta có thể cung cấp cho nó một danh sách các thẻ mà ta có thể sử dụng để phân loại tùy ý dịch vụ cho các mục đích phân loại của riêng ta .

Đối với ví dụ của ta , nó trông như thế này:

{     "service": {         "name": "web server",         "port": 80,         "tags": ["nginx", "demonstration"],         "check": {             . . .         }     } } 

Đây là tất cả những gì ta cần để xác định chính dịch vụ. Tuy nhiên, ta cũng muốn xác định một phương pháp mà lãnh sự có thể xác minh tình trạng của dịch vụ. Điều này thường khá đơn giản và sẽ lặp lại các kiểm tra thủ công của administrator hệ thống thông thường.

Đối với dịch vụ của ta , ta sẽ thực hiện một yêu cầu web đơn giản với curl như dự án lãnh sự liệt kê trong tài liệu riêng của bạn . Ta không thực sự cần biết curl có thể truy xuất những gì, ta chỉ quan tâm đến việc liệu lệnh có thể thực thi mà không có bất kỳ lỗi nào hay không. Bởi vì điều này, ta có thể vứt bỏ bất kỳ kết quả nào.

Ta cũng cần đặt khoảng thời gian mà séc sẽ được chạy. Đây luôn là sự dung hòa giữa hiệu suất và thông tin cập nhật. Ta sẽ sử dụng 10 giây, vì ta muốn biết tương đối sớm nếu có điều gì đó không ổn:

{     "service": {         "name": "web server",         "port": 80,         "tags": ["nginx", "demonstration"],         "check": {             "script": "curl localhost:80 > /dev/null 2>&1",             "interval": "10s"         }     } } 

Lưu file khi bạn hoàn tất.

Bây giờ, ta có thể chỉ cần khởi động lại phiên lãnh sự khách hàng và trỏ đến folder này là có các định nghĩa dịch vụ:

consul agent -data-dir /tmp/consul -client 192.0.2.50 -ui-dir /home/your_user/dist -join 192.0.2.1 -config-dir /home/your_user/services 

Thao tác này sẽ khởi động lại nút và kết nối nó với cụm. Nếu bạn quay lại giao diện web, bây giờ bạn sẽ thấy một dịch vụ:

Dịch vụ giới thiệu lãnh sự

Quay lại ứng dụng client của bạn , bạn có thể tạo một terminal mới và tạm thời dừng web server :

CTRL-A C service nginx stop 

Khi bạn làm mới giao diện user web, bạn có thể thấy rằng kiểm tra dịch vụ web hiện không thành công, như mong đợi:

Dịch vụ giới thiệu lãnh sự không thành công

Điều này cho thấy rằng kiểm tra sức khỏe của ta đang hoạt động như mong đợi.

Kết luận

Đến đây bạn nên có một ý tưởng cơ bản về cách hoạt động của lãnh sự. Phần minh họa mà ta cung cấp trong hướng dẫn này không chính xác là cách tốt nhất để xử lý lãnh sự trong quá trình production , nhưng được sử dụng để giúp bạn nhanh chóng thấy được các tính năng hữu ích của phần mềm.

Trong hướng dẫn tiếp theo , ta sẽ trình bày cách sử dụng lãnh sự trong môi trường production . Ta sẽ đưa tất cả các chi tiết cấu hình của bạn vào các file để dễ dàng tham khảo và tạo các tập lệnh khởi động để khởi động dịch vụ khi khởi động.


Tags:

Các tin liên quan

Cách cấu hình Lãnh sự trong Môi trường Sản xuất trên Ubuntu 14.04
2014-08-15
Cách bảo mật lãnh sự bằng mã hóa TLS trên Ubuntu 14.04
2014-08-15
Cách tạo một cụm RethinkDB được chia nhỏ trên Ubuntu 14.04
2014-08-08
Cách cấu hình Varnish Cache 4.0 với SSL Termination trên Ubuntu 14.04
2014-08-07
Giới thiệu về Ganglia trên Ubuntu 14.04
2014-08-05
Cách thực hiện chấm dứt SSL với HAProxy trên Ubuntu 14.04
2014-07-10
Cách sử dụng WP Super Cache và Jetpack Photon để tối ưu hóa hiệu suất WordPress trên Ubuntu 14.04
2014-06-27
Cách cài đặt Tinc và thiết lập VPN cơ bản trên Ubuntu 14.04
2014-06-18
Cách cài đặt và sử dụng OTPW cho mật khẩu SSH dùng một lần trên Ubuntu 14.04
2014-06-17
Cách cài đặt và cấu hình Syncthing để đồng bộ hóa các thư mục trên Ubuntu 14.04
2014-06-16