在單機上構建 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 &