Thứ sáu, 18/11/2016 | 00:00 GMT+7

Cách triển khai CockroachDB trên Cụm ba node trên Ubuntu 16.04

CockroachDB là một database SQL phân tán, open-souce , cung cấp tính nhất quán, khả năng mở rộng và khả năng tồn tại.

Một bài báo từ CockroachDB

Việc cài đặt CockroachDB rất đơn giản: bạn cài đặt nó trên nhiều server , mỗi server được gọi là một nút và kết hợp chúng với nhau để hoạt động như thể chúng là một thực thể duy nhất, được gọi là một cụm . Tất cả các node trong cụm của bạn sau đó hoạt động đối xứng và có quyền truy cập vào cùng một dữ liệu.

Với kiểu thiết kế này, khi nhu cầu lưu trữ dữ liệu tăng lên, bạn có thể dễ dàng tăng dung lượng hệ thống của bạn bằng cách tạo các node mới và kết hợp chúng vào cụm hiện có của bạn. Để biết thêm chi tiết, bạn có thể đọc mô hình khả năng mở rộng của CockroachDB .

Lưu ý : Tại thời điểm viết bài, CockroachDB hiện đang ở giai đoạn thử nghiệm , vì vậy ta khuyên bạn nên sử dụng hướng dẫn này như một cơ hội để làm quen với công nghệ chứ không phải là hướng dẫn triển khai cho một phần mềm quan trọng.

Hướng dẫn này không bảo mật quyền truy cập vào Giao diện admin-user của cụm; bất kỳ ai cũng có thể truy cập nó nếu họ biết URL chính xác. Nếu bạn dự định để điều này trong production , hãy xem xét kiểm soát quyền truy cập vào cổng 8080 bằng các luật firewall .

Bàn thắng

Trong hướng dẫn này, bạn sẽ tạo database phân tán và có khả năng chịu lỗi bằng cách triển khai CockroachDB trên nhiều server , một cụm đa nút phân tán . Bạn sẽ bắt đầu bằng cách cài đặt CockroachDB trên nhiều server , khởi động chúng dưới dạng các node , sau đó để chúng hoạt động cùng nhau như một cụm.

Ngoài ra, ta sẽ chứng minh sự phân phối dữ liệu và cách cụm tồn tại sau sự cố và chỉ cho bạn cách kết nối ứng dụng của bạn với CockroachDB.

Hướng dẫn này bao gồm việc cài đặt một triển khai không an toàn mà không có mã hóa SSL, mà ta không khuyên dùng cho production . Tuy nhiên, CockroachDB cũng cung cấp hướng dẫn triển khai an toàn cho DigitalOcean . (Bất chấp những gì đoạn đầu tiên tại liên kết nói, version Bảo mật của bài viết được chọn.)

Yêu cầu

Trước khi bắt đầu, bạn cần những thứ sau:

  • 3 server Ubuntu 16.04 với ít nhất 2GB RAM có bật mạng riêng . Tất cả chúng phải ở cùng một khu vực. Trong hướng dẫn này, ta sẽ sử dụng các tên server sau:
    • con gián-01
    • gián-02
    • gián-03
  • Trên mỗi server , hãy thêm user không phải root với các quyền sudo
  • Đảm bảo rằng lưu lượng TCP được phép trên các cổng sau. Nếu bạn đã cài đặt UFW làm firewall , bạn cần cho phép hai cổng này trên mỗi server :
    • 26257 cho giao tiếp giữa các node và ứng dụng: sudo ufw allow 26257/tcp
    • 8080 cho giao diện admin-user : sudo ufw allow 8080/tcp
  • Tùy chọn: Trên mỗi server , cài đặt và cấu hình NTP . (Đối với các bài kiểm tra ngắn, đây không phải là một yêu cầu chắc chắn)

Ghi lại địa chỉ IP công cộng và riêng tư của tất cả các server của bạn. Trong hướng dẫn này, ta sẽ sử dụng các tên server và địa chỉ IP độc lập như gián-01 , cockroach_01_public_ipcockroach_01_public_ip cho từng server trong ba server . Để tìm IP riêng của bạn, hãy nhấp vào server từ console DigitalOcean. IP Riêng được liệt kê trong hàng thông tin trên cùng.

Bước 1 - Cài đặt CockroachDB

Mỗi nút trong cụm của bạn cần có một bản sao của binary cockroach (tức là chương trình). Ta sẽ cài đặt CockroachDB trên server đầu tiên của bạn, spy-01 , sau đó thực hiện tương tự trên các server khác.

Để bắt đầu, hãy đăng nhập vào spy-01 bằng SSH.

  • ssh sammy@cockroach_01_public_ip

Tiếp theo, từ folder chính của user sudo của bạn, download và cài đặt file binary cockroach mới nhất:

  • wget https://binaries.cockroachdb.com/cockroach-latest.linux-amd64.tgz?s=do

Extract binary :

  • tar -xf cockroach-latest.linux-amd64.tgz?s=do --strip=1 cockroach-latest.linux-amd64/cockroach

Di chuyển file binary để có thể dễ dàng truy cập từ dòng lệnh:

  • sudo mv cockroach /usr/local/bin

Đảm bảo rằng file binary có thể truy cập được bằng cách kiểm tra version của nó:

  • cockroach version

Nếu hệ thống của bạn không thể tìm thấy lệnh cockroach , vui lòng xem lại phần này đảm bảo bạn đã download và extract chương trình.

Cuối cùng, lặp lại các lệnh này cho hai server khác mà bạn định sử dụng làm nút. Trong ví dụ của ta , đó là con gián-02con gián-03 .

Như vậy, CockroachDB đã có trên tất cả các máy của bạn, bạn có thể cài đặt cụm của bạn .

Bước 2 - Bắt đầu nút đầu tiên của bạn

Nút CockroachDB đầu tiên của bạn sẽ bắt đầu cụm của bạn. Không có gì đặc biệt về nút đầu tiên này; nó chỉ là bạn phải bắt đầu với một và sau đó có những người khác tham gia nó. Ta sẽ sử dụng gián-01 cho phần này.

Ghi lại địa chỉ IP riêng của bạn cho gián-01 . Từ console DigitalOcean, nhấp vào server lưu trữ này. IP Riêng được liệt kê trong hàng thông tin trên cùng.

Lệnh sau để bắt đầu cụm phải được thực thi trên spy-01 . Lệnh này bắt đầu một nút không có mã hóa SSL ( --insecure ), trả về quyền kiểm soát dấu nhắc lệnh ( --background ) và cài đặt nút này để giao tiếp với các node khác bằng địa chỉ IP nội bộ của nó ( --advertise-host ). Thay thế biến được đánh dấu bên dưới, cockroach_01_private_ip , bằng địa chỉ IP riêng thực tế:

  • cockroach start --insecure --background --advertise-host=cockroach_01_private_ip

Lưu ý: Khi bạn khởi động nút của bạn , bạn có thể sử dụng một số cờ để thay đổi hành vi của nó, chẳng hạn như thay đổi dữ liệu folder được lưu trữ trong. Các cờ đó được ghi lại trong phần cockroach start .

Như vậy, nút (và cụm) của bạn đã hoạt động, bạn có thể xem chi tiết của nó bằng cách đi tới console Giao diện admin-user của nó (một công cụ đi kèm với CockroachDB để hiển thị cho bạn thông tin về cụm của bạn). Truy cập http:// cockroach_01_public_ip :8080 . Lần này là địa chỉ IP công cộng.

Ở đây bạn sẽ thấy rằng bạn có một nút đang chạy.

Giao diện  admin-user  CockroachDB hiển thị một cụm chạy 1 nút

Bạn sẽ nhận thấy một dấu chấm than cảnh báo (!) Trong ô NODE . Nếu bạn di chuột qua cảnh báo, nó cho biết cụm của bạn có ít Nhân bản , nghĩa là bạn không có đủ nút. Điều này có thể thực hiện được, vì ta chỉ có một nút ngay bây giờ. Với một nút, dữ liệu không có khả năng chống thất bại vì nó không được sao chép đầy đủ sang các nguồn khác. Nếu nút gặp sự cố, dữ liệu sẽ bị mất.

Ta sẽ khắc phục điều đó trong bước tiếp theo bằng cách thêm hai server khác của bạn làm nút vào cụm này. Bằng cách có ba nút, CockroachDB đảm bảo có ít nhất ba bản sao dữ liệu , vì vậy có thể mất một nút mà không làm mất dữ liệu không thể sửa chữa.

Bước 3 - Thêm nút hai và ba vào cụm của bạn

Trên server gián-02 của bạn, khởi động nút CockroachDB bằng lệnh cockroach start giống như bạn đã làm trong Bước 2. Tại đây ta cập nhật lệnh để chỉ định rằng bạn muốn nó tham gia cụm server đầu tiên thông qua địa chỉ IP riêng của nó. Bạn cần địa chỉ IP riêng cho cả gián-02gián-01 để thay thế các biến được đánh dấu bên dưới, cockroach_02_private_ipcockroach_01_private_ip .

  • cockroach start --insecure --background \
  • --advertise-host=cockroach_02_private_ip \
  • --join=cockroach_01_private_ip:26257

Lặp lại lệnh này trên máy thứ ba của bạn, gián-03 , với địa chỉ IP riêng của nó. Cho nó tham gia vào nút đầu tiên.

  • cockroach start --insecure --background \
  • --advertise-host=cockroach_03_private_ip \
  • --join=cockroach_01_private_ip:26257

Bây giờ, khi bạn truy cập vào Giao diện admin-user từ bất kỳ nút nào, bạn sẽ thấy rằng cụm có 3 nút.

  • http:// cockroach_03_public_ip :8080

Giao diện  admin-user  CockroachDB hiển thị một cụm chạy 3 nút

Bây giờ tất cả các node của bạn được kết nối thông qua cụm, tất cả chúng sẽ có quyền truy cập vào cùng một dữ liệu.

(Tùy chọn) Bước 4 - Thể hiện sự phân tán dữ liệu

Khi nào bạn ghi dữ liệu vào một nút, tất cả các node khác trong cụm đều có quyền truy cập vào nó. Cách dễ nhất để chứng minh điều này là sử dụng dữ liệu mẫu của CockroachDB, sau đó xem dữ liệu đó từ máy khách SQL tích hợp sẵn .

Từ nút đầu tiên của bạn, gián-01 , tạo dữ liệu mẫu:

  • cockroach gen example-data | cockroach sql

Điều này tạo ra một database mẫu được gọi là startrek .

Đến đây bạn có thể chạy ứng dụng client SQL và xem database nào nằm trong cụm của bạn:

  • cockroach sql
  • SHOW DATABASES;

Bạn sẽ thấy database startrek được liệt kê, chứa dữ liệu mẫu của ta .

+--------------------+ |      Database      | +--------------------+ | information_schema | | pg_catalog         | | startrek           | | system             | +--------------------+ 

Lưu ý: CockroachDB hỗ trợ phương ngữ SQL của riêng nó cung cấp các phần mở rộng khác nhau của tiêu chuẩn SQL so với một số database khác cung cấp.

Bây giờ, hãy chuyển đến terminal của nút thứ hai, gián-02 và chạy các lệnh tương tự:

  • cockroach sql
  • SHOW DATABASES;

Bạn sẽ thấy rằng mặc dù bạn đã tạo dữ liệu mẫu trên một nút khác, nó đã được phân phối và database startrek có thể truy cập được từ tất cả các server khác của bạn.

Bạn cũng có thể xem database tồn tại từ thanh bên DATABASES của giao diện admin-user viên trên bất kỳ nút nào; ví dụ: tại http:// cockroach_01_public_ip :8080/#/databases/ .

(Tùy chọn) Bước 5 - Xóa nút khỏi cụm

Ngoài việc phân phối dữ liệu đến tất cả các node trong cụm của bạn, CockroachDB cũng đảm bảo tính khả dụng và tính toàn vẹn của dữ liệu trong trường hợp server ngừng hoạt động.

Công thức về khả năng chịu lỗi của CockroachDB đối với lỗi nút là (n - 1) / 2 , trong đó n là số nút trong cụm của bạn. Vì vậy, trong ví dụ về ba nút này, ta có thể chấp nhận việc mất một nút mà không mất bất kỳ dữ liệu nào.

Để chứng minh điều này, ta sẽ xóa một nút khỏi cụm và hiển thị rằng tất cả dữ liệu của cụm vẫn có sẵn. Sau đó, ta sẽ tham gia lại nút vào cụm và thấy rằng nó nhận được tất cả các cập nhật đã xảy ra khi nó offline .

Từ nút thứ hai của bạn, gián-02 , chạy ứng dụng client SQL nếu bạn vẫn chưa ở trong đó:

  • cockroach sql

Đếm số hàng trong bảng quotes của database mẫu:

  • SELECT COUNT(*) FROM startrek.quotes;

Bạn sẽ thấy rằng bảng có 200 hàng. Thoát khỏi client SQL bằng cách nhấn CTRL+C

Bây giờ, ta sẽ xóa nút này khỏi cụm và thấy rằng tất cả dữ liệu vẫn có sẵn từ các node khác.

Từ cùng một nút bạn đang sử dụng ( gián-02 ), dừng quá trình gián:

  • cockroach quit

Bây giờ chuyển sang terminal của một trong các node khác của bạn (ví dụ: gián-03 ) và chạy ứng dụng client SQL:

  • cockroach sql

Chạy lệnh tương tự như trước để đếm số hàng trong bảng quotes :

  • SELECT COUNT(*) FROM startrek.quotes;

Mặc dù mất một trong các node trong cụm, bạn sẽ thấy rằng bạn vẫn có 200 hàng dữ liệu! Điều này nghĩa là CockroachDB đã khắc phục thành công lỗi hệ thống và duy trì tính toàn vẹn của dữ liệu .

(Tùy chọn) Bước 6 - Liên kết lại một nút với cụm

Ta cũng có thể chứng minh rằng CockroachDB xử lý một cách linh hoạt server trực tuyến trở lại. Đầu tiên, ta sẽ xóa một số dữ liệu, sau đó để nút ta đã xóa tham gia lại vào cụm. Sau khi nó tham gia lại, ta sẽ có thể thấy rằng CockroachDB tự động xóa cùng một dữ liệu khỏi nút phục sinh.

Từ một trong các node của bạn hiện đang chạy, chẳng hạn như gián-03 , hãy xóa tất cả các dấu ngoặc kép có episode lớn hơn 50.

  • DELETE FROM startrek.quotes WHERE episode > 50;
  • SELECT COUNT(*) FROM startrek.quotes;

Bạn sẽ thấy hiện có 133 hàng dữ liệu.

Bây giờ, quay lại terminal của nút mà ta đã xóa khỏi cụm ( gián-02 ) và đặt nó tham gia lại cụm:

  • cockroach start --insecure --background \
  • --advertise-host=cockroach_02_private_ip \
  • --join=cockroach_01_private_ip:26257

Chạy ứng dụng client SQL tích hợp sẵn:

  • cockroach sql

Bây giờ, hãy đếm số hàng mà bảng quotes chứa:

  • SELECT COUNT(*) FROM startrek.quotes;

Nó vẫn phải là 133.

Vì vậy, mặc dù đang offline khi cập nhật xảy ra, nút được cập nhật ngay sau khi nó tham gia lại cụm.

Nếu muốn, bây giờ bạn có thể xóa dữ liệu mẫu (vẫn sử dụng CLI cockroach sql ):

  • DROP TABLE quotes;
  • DROP TABLE episodes;
  • DROP DATABASE startrek;

(Tùy chọn) Bước 7 - Kết nối ứng dụng

Với cụm của bạn được cài đặt và chạy, bạn có thể sử dụng nó làm database cho một ứng dụng. Điều này đòi hỏi hai phần:

  • trình điều khiển để sử dụng với ứng dụng của bạn (CockroachDB hoạt động với trình điều khiển PostgreSQL)
  • một chuỗi kết nối thích hợp

Hướng dẫn này cho thấy một ví dụ chung; bạn cần cung cấp chi tiết cụ thể cho ứng dụng của bạn .

Chọn và cài đặt một trình điều khiển thích hợp từ danh sách các trình điều khiển client PostgreSQL tương thích cho ứng dụng của bạn.

Lưu ý: Mặc dù CockroachDB hỗ trợ giao thức dây PostgreSQL, cú pháp SQL của nó khác và không phải là sự thay thế thả vào cho PostgreSQL.

Sau đó, sử dụng một chuỗi kết nối thích hợp tại bất kỳ thời điểm nào mà bạn cần ứng dụng của bạn kết nối với database .

Chuỗi kết nối của bạn phải kết nối với cổng 26257 và có thể sử dụng địa chỉ IP của bất kỳ nút nào. Điều này nghĩa là firewall của bạn cũng phải cho phép kết nối trên cổng 26257 (như ta đã cài đặt trong yêu cầu ).

Ví dụ: đây là một chuỗi kết nối PHP / PDO kết nối sammy user với bank database trên localhost :

PDO('pgsql:host=localhost;port=26257;dbname=bank;sslmode=disable',     'sammy', null, array(       PDO::ATTR_ERRMODE          => PDO::ERRMODE_EXCEPTION,       PDO::ATTR_EMULATE_PREPARES => true,   )); 

Để được trợ giúp thêm bằng cách sử dụng trình điều khiển client PostgreSQL, CockroachDB có sẵn một số mẫu mã .

Kết luận

Đến đây, bạn đã tạo một cụm ba nút, xem các tính năng phân tán và tồn tại của CockroachDB cũng như xem cách kết nối cụm với một ứng dụng.

Vì CockroachDB là một dự án phát triển nhanh, nên đôi khi bạn sẽ thấy console của bạn hiển thị thông báo Đã có version CockroachDB mới hơn. Sử dụng nút Cập nhật để xem liên kết đến file binary đã cập nhật, tại thời điểm viết bài, bạn sẽ phải download và cài đặt theo cách thủ công.

Nếu bạn muốn mở rộng quy mô triển khai của bạn theo chiều ngang bằng cách thêm nhiều nút hơn, hãy làm theo các bước cho nút thứ hai và thứ ba ở trên trên nút thứ tư, v.v. Tất cả những gì bạn cần làm là cài đặt binary cockroach và để (các) nút mới tham gia cụm hiện có.

Nếu, sau khi kiểm tra, bạn muốn chạy CockroachDB trong production , vui lòng đọc cài đặt production được đề xuất của họ.

Và cuối cùng, đây là một liên kết chung đến tài liệu của CockroachDB .


Tags:

Các tin liên quan

Cách thu thập các chỉ số cơ sở hạ tầng với Packetbeat và ELK trên Ubuntu 16.04
2016-11-03
Cách thu thập số liệu cơ sở hạ tầng với Packetbeat và ELK trên Ubuntu 14.04
2016-11-02
Cách thiết lập ứng dụng Node.js để sản xuất trên Ubuntu 16.04
2016-11-01
Cách cài đặt và cấu hình ownCloud trên Ubuntu 16.04
2016-10-31
Cách sử dụng module bản đồ của Nginx trên Ubuntu 16.04
2016-10-31
Cách thực hiện bộ đệm trình duyệt với module tiêu đề của Nginx trên Ubuntu 16.04
2016-10-31
Cách di chuyển thư mục dữ liệu cho ownCloud trên Ubuntu 16.04
2016-10-19
Cách cài đặt Hadoop ở chế độ độc lập trên Ubuntu 16.04
2016-10-13
Cách cài đặt và cấu hình NATS trên Ubuntu 16.04
2016-10-07
Cách kết nối Internet of Things của bạn với Node-RED trên Ubuntu 16.04
2016-09-23