1. 程式人生 > >在單機上構建 insecure 多節點CockroachDB叢集

在單機上構建 insecure 多節點CockroachDB叢集

       本文將向大家介紹如何在一臺機器上(可以是物理機,也可以是一臺虛擬機器)建立insecure多節點CockroachDB叢集(在示例中我們將建立一個具有3節點的CRDB資料庫叢集)。這種方式建立的叢集非常適合大家學習CRDB使用。在本人後續的很多文章中所描述的示例,為了方便大家試驗和執行將採用這種方式建立CRDB叢集。

      這裡所說的不安全模式 (insecure) 是指叢集的各節點之間以及client與叢集節點之間的通訊不加密,而安全模式(secure)使用TLS證書對通訊進行加密。在生產環境下建議建立secure多節點CockroachDB叢集。對於在單機上建立secure多節點CockroachDB叢集的方法,在後續的文章中介紹。

環境說明

一個虛擬機器:8G Mem 、4 VCores

作業系統:CentOS 7.4

作業系統使用者: crdb  使用者組:newsql 該使用者具有sudo許可權(假設讀者已經掌握在Linux上建立使用者和組以及設定許可權的方法,本文不進行描述)

CockroachDB版本:2.0.6 (目前最新的釋出版本)

 

下面開始介紹具體的建立方法

     1. 建立目錄

         我們需要在作業系統的檔案系統中建立一個目錄,用於存放CRDB使用的檔案

$ sudo mkdir /data/crdb

$ sudo chown crdb:newsql -R /data/crdb

     2. 安裝CRDB

$ cd /tmp

$ wget https://binaries.cockroachdb.com/cockroach-v2.0.6.linux-amd64.tgz

$ tar xvfz cockroach-v2.0.6.linux-amd64.tgz

$ sudo mv cockroach-v2.0.6.linux-amd64/cockroach /usr/local/bin   

$ rm -Rf cockroach-v2.0.6.linux-amd64

     3. 啟動第一個節點

        使用cockroach start命令啟動第一個節點:

$cockroach start --insecure --store="/data/crdb/node1" --host=0.0.0.0 --port=26257 --http-port=8080 --join=0.0.0.0:26257,0.0.0.0:26258,0.0.0.0:26259 &

 

       執行上面的命令後,輸出如下:

*

* WARNING: RUNNING IN INSECURE MODE!

*

* - Your cluster is open for any client that can access localhost.

* - Any user, even root, can log in without providing a password.

* - Any user, connecting as root, can read or write any data in your cluster.

* - There is no network encryption nor authentication, and thus no confidentiality.

*

* Check out how to secure your cluster: https://www.cockroachlabs.com/docs/stable/secure-a-cluster.html

*

命令引數說明:

參  數

描 述

--insecure

指示cockroachdb資料庫叢集節點之間通訊不加密。

當crdb叢集頭一個節點使用--insecure引數啟動時,那麼後續在啟動節點時或者使用cockroach命令執行操作時都要加上這個引數。

如果不帶這個引數,cockroach命令將會查詢安全證書以加密通訊。

--store

指定本地目錄,用於儲存節點的資料和日誌

--host

指定節點的主機名或IP地址,這個地址用於節點間通訊或者客戶端訪問節點時使用。

--port

指定節點的通訊埠,這個埠用於節點間通訊或者客戶端訪問節點時使用。

這個引數的預設值是26257。

--http-port

指定CockroachDB admin UI監聽的埠。這個引數的預設值是8080。

--join

建立CockroachDB叢集時,所有初始節點的地址和TCP埠。

在啟動所有初始節點時,都需要加上這個引數,並且引數值應當相同。

 

 

 

注意:

        可以執行cockroach start --help檢視命令的引數描述,也可以執行cockroach --help檢視檢視所有的命令引數描述。

 

     4. 啟動另兩個節點

        使用cockroach start命令能夠再啟動多個節點,這些節點是第1個節點啟動時--join引數中指定的初始節點(除第1個節點之外的節點)。

--啟動第2個節點

$cockroach start --insecure --store="/data/crdb/node2" --host=0.0.0.0 --port=26258 --http-port=8081 --join=0.0.0.0:26257,0.0.0.0:26258,0.0.0.0:26259 &

--啟動第3個節點

$cockroach start --insecure --store="/data/crdb/node3" --host=0.0.0.0 --port=26259 --http-port=8082 --join=0.0.0.0:26257,0.0.0.0:26258,0.0.0.0:26259 &

 

      5. 初始化CockroachDB叢集

      在前面的步驟中,我們執行帶有--jon引數的cockroach start只是啟動了節點,但是這些節點還不能正常工作,需要執行初始化後CRDB叢集才完成建立,對外正常工作。

         (1) 執行cockroach init命令初始化叢集

  $ cockroach init --insecure 

         你將會看到輸出的資訊中如果出現如下資訊,表示叢集初始化成功:

Cluster successfully initialized

         (2) 下面是初始化時3個節點顯示的完整輸出:

  $ CockroachDB node starting at 2018-10-05 09:12:58.657491019 +0000 UTC (took 65.8s)

build:               CCL v2.0.6 @ 2018/10/01 13:59:40 (go1.10)
admin:               http://0.0.0.0:8080
sql:                 postgresql://[email protected]:26257?sslmode=disable
logs:                /data/crdb/node1/logs
temp dir:            /data/crdb/node1/cockroach-temp941783697
external I/O path:   /data/crdb/node1/extern
store[0]:            path=/data/crdb/node1
status:              initialized new cluster
clusterID:           c537a7bc-6fee-4c2a-bb1d-d7630b245247
nodeID:              1

CockroachDB node starting at 2018-10-05 09:12:59.137653974 +0000 UTC (took 35.1s)

build:               CCL v2.0.6 @ 2018/10/01 13:59:40 (go1.10)
admin:               http://0.0.0.0:8081
sql:                 postgresql://[email protected]:26258?sslmode=disable
logs:                /data/crdb/node2/logs
temp dir:            /data/crdb/node2/cockroach-temp477522607
external I/O path:   /data/crdb/node2/extern
store[0]:            path=/data/crdb/node2
status:              initialized new node, joined pre-existing cluster
clusterID:           c537a7bc-6fee-4c2a-bb1d-d7630b245247
nodeID:              2

CockroachDB node starting at 2018-10-05 09:13:00.756600674 +0000 UTC (took 18.5s)

build:               CCL v2.0.6 @ 2018/10/01 13:59:40 (go1.10)
admin:               http://0.0.0.0:8082
sql:                 postgresql://[email protected]:26259?sslmode=disable
logs:                /data/crdb/node3/logs
temp dir:            /data/crdb/node3/cockroach-temp004902255
external I/O path:   /data/crdb/node3/extern
store[0]:            path=/data/crdb/node3
status:              initialized new node, joined pre-existing cluster
clusterID:           c537a7bc-6fee-4c2a-bb1d-d7630b245247
nodeID:              3

 

下表是輸出欄位的描述:

欄位

描述

build

執行的CockroachDB版本號

admin

Admin UI訪問的URL地址

sql

客戶端連線CockroachDB的URL

logs

包含日誌檔案的檔案系統目錄

store[n]

儲存節點資料的目錄

status

節點的狀態。可能的狀態有:

(1) “initialized new cluster”:叢集中頭一個節點(在執行init 之前啟動的第一個節點)。例如:上面輸出的nodeID為1的節點。

(2) “initialized new node, joined pre-existing cluster”:第一次加入叢集的節點,--join引數指定的除頭一個啟動的接節點之外的節點都是這個狀態。例如:上面輸出的節點2和3.

(3) “restarted pre-existing node”:重新加入叢集的節點會顯示這個狀態。

clusterID

叢集的唯一標識

nodeID

節點的唯一標識

 

      6. 檢驗資料庫叢集狀態

         (1) 使用cockroach node status命令檢查叢集中節點的狀態(本示例crdb資料庫叢集 是由3個節點組成):

 $ cockroach node status --insecure

 

         (2) 使用cockroach sql命令查詢資料庫情況:

$ cockroach sql --insecure --port=26257 --execute="SHOW DATABASES;"

      (3)訪問Admin UI

        通過訪問CRDB叢集中的任何一個節點的http port埠(在啟動節點時--http-port引數制定),我們可以看到用於管理和監控CRDB的web頁面。例如:

        http://192.168.1.171:8081  

        下圖是顯示的Admin UI的介面:        

        到此,我們就在一臺機器上構建好具有3個節點的CockroachDB叢集了。最後介紹一下停止和啟動CRDB叢集的方法:

## 停止CRDB叢集

$ pkill cockroach

## 啟動CRDB叢集

編寫一個sh指令碼(假設叫做start-crdb-3.sh),方便以後每次啟動建立好的這個叢集。指令碼內容如下:

#!/bin/bash

#start first node
cockroach start \
--insecure \
--store="/data/crdb/node1" \
--host=0.0.0.0 \
--port=26257 \
--http-port=8080 \
--join=0.0.0.0:26257,0.0.0.0:26258,0.0.0.0:26259 &

#start second node
cockroach start \
--insecure \
--store="/data/crdb/node2" \
--host=0.0.0.0 \
--port=26258 \
--http-port=8081 \
--join=0.0.0.0:26257,0.0.0.0:26258,0.0.0.0:26259 &

#start third node
cockroach start \
--insecure \
--store="/data/crdb/node3" \
--host=0.0.0.0 \
--port=26259 \
--http-port=8082 \
--join=0.0.0.0:26257,0.0.0.0:26258,0.0.0.0:26259 &