一钻哩、準(zhǔn)備工作
- 下載databend【根據(jù)各自的系統(tǒng)颜价,下載對(duì)應(yīng)的版本: uname -a】
databend下載地址 - 解壓對(duì)應(yīng)的壓縮包
- 查看當(dāng)前系統(tǒng)是否支持avx/sse/avx2等指令集
# macos查看cpu支持的指令集
sysctl -a | grep machdep.cpu.features
# macos 查看cpu是否支持SSE 4.2
sysctl -a | grep machdep.cpu.features | grep SSE
# 查看支持的所有的指令集
sysctl machdep.cpu
- 集群規(guī)劃:3個(gè)meta實(shí)例+3個(gè)query實(shí)例
注意不同實(shí)例的端口配置答恶,確保集群唯一蔚晨,不沖突
接下來(lái)就是開始配置:【注:當(dāng)前采用的是單機(jī)多實(shí)例的方式部署齿诞,故數(shù)據(jù)存儲(chǔ)采用的是fs】
二、配置
關(guān)于databend-meta配置乞巧,主要配置的內(nèi)容:【 注意端口和raft_id的唯一性 】
# 指定日志的目錄
log_dir = "~/tests/databend/logs/log1"
# meta的管理地址
admin_api_address = "0.0.0.0:28101"
# 讀寫meta的rpc地址
grpc_api_address = "0.0.0.0:28102"
#### 關(guān)于meta集群化的raft配置:注意不同的實(shí)例id是不同的
[raft_config]
id = 1
raft_dir = "~/tests/databend/metas/meta1"
raft_api_port = 28103
# Assign raft_{listen|advertise}_host in test config.
# This allows you to catch a bug in unit tests when something goes wrong in raft meta nodes communication.
raft_listen_host = "0.0.0.0"
raft_advertise_host = "localhost"
# 集群模式配置一
# 首先第一個(gè)啟動(dòng)的meta節(jié)點(diǎn)采用single方式
# Start up mode: single node cluster
single = true
# 集群模式配置一
# 當(dāng)新增新的meta節(jié)點(diǎn)時(shí)配置
join = ["0.0.0.0:28103"]
# Start up mode: single node cluster
single = false
- 樣例配置:meta集群第一個(gè)node
log_dir = "~/tests/databend/logs/log1"
admin_api_address = "0.0.0.0:28101"
grpc_api_address = "0.0.0.0:28102"
[raft_config]
id = 1
raft_dir = "~/tests/databend/metas/meta1"
raft_api_port = 28103
# Assign raft_{listen|advertise}_host in test config.
raft_listen_host = "0.0.0.0"
raft_advertise_host = "localhost"
# Start up mode: single node cluster
single = true
- 新增新節(jié)點(diǎn)時(shí)的配置,以此類推調(diào)整對(duì)應(yīng)的配置文件join和single的配置
log_dir = "~/tests/databend/logs/log2"
admin_api_address = "0.0.0.0:28201"
grpc_api_address = "0.0.0.0:28202"
[raft_config]
id = 2
raft_dir = "~/tests/databend/metas/meta2"
raft_api_port = 28203
# Assign raft_{listen|advertise}_host in test config.
# This allows you to catch a bug in unit tests when something goes wrong in raft meta nodes communication.
raft_listen_host = "0.0.0.0"
raft_advertise_host = "localhost"
# 代表當(dāng)前節(jié)點(diǎn)要加入已存在的meta集群摊鸡,可以指定多個(gè)已存在的meta raft地址
join = ["0.0.0.0:28103"]
# 此時(shí)對(duì)應(yīng)的single需設(shè)置為false
# Start up mode: single node cluster
single = false
接下來(lái)就是關(guān)于databend-query配置
主要的配置項(xiàng)如下:
[query]
max_active_sessions = 256
wait_timeout_mills = 5000
# For flight rpc.
# 主要是進(jìn)行shuffle時(shí)使用地址
flight_api_address = "0.0.0.0:19091"
# query節(jié)點(diǎn)的http地址
# Databend Query http address.
# For admin RESET API.
admin_api_address = "0.0.0.0:18081"
# metrics的地址
# Databend Query metrics RESET API.
metric_api_address = "0.0.0.0:17071"
# mysql client的http訪問(wèn)地址
# Databend Query MySQL Handler.
mysql_handler_host = "0.0.0.0"
mysql_handler_port = 3307
# clickhouse client訪問(wèn)的http地址
# Databend Query ClickHouse Handler.
clickhouse_http_handler_host = "0.0.0.0"
clickhouse_http_handler_port = 18125
# http handler地址(采用curl之類的方式)
# Databend Query HTTP Handler.
http_handler_host = "0.0.0.0"
http_handler_port = 18001
# 用來(lái)標(biāo)識(shí)租戶id和集群id
tenant_id = "test_tenant"
cluster_id = "test_cluster"
table_engine_memory_enabled = true
database_engine_github_enabled = true
table_cache_enabled = true
table_memory_cache_mb_size = 1024
table_disk_cache_root = "_cache"
table_disk_cache_mb_size = 10240
# 日志相關(guān)配置
[log]
level = "ERROR"
dir = "~/tests/databend/logs/log1"
query_enabled = true
# meta server相關(guān)配置:主要是endpoints
[meta]
endpoints = ["0.0.0.0:28102","0.0.0.0:28202","0.0.0.0:28203"]
embedded_dir = "~/tests/databend/metas/meta_embedded_1"
# address = "0.0.0.0:9191"
username = "root"
password = "root"
client_timeout_in_second = 60
auto_sync_interval = 60
# 采用的存儲(chǔ)類型
# Storage config.
[storage]
# fs | s3 | azblob
type = "fs"
# 當(dāng)使用fs時(shí)需要指定一個(gè)本地路徑
# Set a local folder to store your data.
# Comment out this block if you're NOT using local file system as storage.
[storage.fs]
data_path = "~/tests/databend/datas/stateless_test_data"
配置時(shí)需要注意meta部分和storage部分
meta因?yàn)槭莄luster模式绽媒,需要指定endpoints; storage因?yàn)槭鞘褂玫膄s免猾,需要確保最終的數(shù)據(jù)存放到一個(gè)共享目錄或共享存儲(chǔ)還可以使用分布式文件存儲(chǔ)系統(tǒng)是辕,確保數(shù)據(jù)能夠被所有的databend-query節(jié)點(diǎn)共享。
- 樣例配置如下: databend-query配置基本無(wú)差別( 注意端口的唯一性 )
[query]
max_active_sessions = 256
wait_timeout_mills = 5000
# For flight rpc.
flight_api_address = "0.0.0.0:19091"
# Databend Query http address.
# For admin RESET API.
admin_api_address = "0.0.0.0:18081"
# Databend Query metrics RESET API.
metric_api_address = "0.0.0.0:17071"
# Databend Query MySQL Handler.
mysql_handler_host = "0.0.0.0"
mysql_handler_port = 3307
# Databend Query ClickHouse Handler.
clickhouse_http_handler_host = "0.0.0.0"
clickhouse_http_handler_port = 18125
# Databend Query HTTP Handler.
http_handler_host = "0.0.0.0"
http_handler_port = 18001
tenant_id = "test_tenant"
cluster_id = "test_cluster"
table_engine_memory_enabled = true
database_engine_github_enabled = true
table_cache_enabled = true
table_memory_cache_mb_size = 1024
table_disk_cache_root = "_cache"
table_disk_cache_mb_size = 10240
[log]
level = "ERROR"
dir = "~/tests/databend/logs/log1"
query_enabled = true
[meta]
endpoints = ["0.0.0.0:28102","0.0.0.0:28202","0.0.0.0:28203"]
# To enable embedded meta-store, set address to "".
embedded_dir = "~/tests/databend/metas/meta_embedded_1"
# address = "0.0.0.0:9191"
username = "root"
password = "root"
client_timeout_in_second = 60
auto_sync_interval = 60
# Storage config.
[storage]
# fs | s3 | azblob
type = "fs"
# Set a local folder to store your data.
# Comment out this block if you're NOT using local file system as storage.
[storage.fs]
data_path = "~/tests/databend/datas/stateless_test_data"
三猎提、啟動(dòng)集群
- 首先要啟動(dòng)meta
# 以single方式啟動(dòng)第一個(gè)meta節(jié)點(diǎn)
./bin/databend-meta -c configs/databend-meta-1.toml > logs/meta_1.log 2>&1 &
# 新增其他節(jié)點(diǎn)到已存在的集群
./bin/databend-meta -c configs/databend-meta-2.toml > logs/meta_2.log 2>&1 &
./bin/databend-meta -c configs/databend-meta-3.toml > logs/meta_3.log 2>&1 &
驗(yàn)證meta集群
curl -s http://127.0.0.1:28101/v1/cluster/nodes
或者
# 確認(rèn)單個(gè)節(jié)點(diǎn)是否健康
curl -I http://127.0.0.1:28101/v1/health
- 啟動(dòng)databendq-query節(jié)點(diǎn)
./bin/databend-meta -c configs/databend-query-1.toml > logs/query_1.log 2>&1 &
./bin/databend-meta -c configs/databend-query-2.toml > logs/query_2.log 2>&1 &
./bin/databend-meta -c configs/databend-query-3.toml > logs/query_3.log 2>&1 &
驗(yàn)證是否正常
curl -I http://127.0.0.1:18081/v1/health
四获三、測(cè)試
1、官方性能測(cè)試用例:databend-performance
2锨苏、sql測(cè)試: databend-sql
3疙教、msyql client測(cè)試用例
注意3個(gè)databend-query的端口不同
mysql -h 127.0.0.1 -P 3307 -u root
create databease if not exists test_db;
use test_db;
create table if not exists tb_a(a int);
show create table tb_a;
insert into tb_a values(1), (2),(3),(4);
select * from tb_a;
五、部署過(guò)程中出現(xiàn)的問(wèn)題
1伞租、ERROR 1105 (HY000): Code: 3001, displayText = entity not found (object error:
* 大概率是databend-query數(shù)據(jù)存儲(chǔ)路徑不共享贞谓,并不是所有的實(shí)例都是可用的 *
2、新增meta實(shí)例后葵诈,啟動(dòng)沒(méi)有成功,
一般是join部分配置存在問(wèn)題裸弦, 可以將當(dāng)前集群已存在的節(jié)點(diǎn)都添加到待添加的新meta節(jié)點(diǎn)的配置文件join項(xiàng)中祟同;
或者時(shí)進(jìn)行單機(jī)多實(shí)例時(shí)端口沖突;
或者當(dāng)前meta節(jié)點(diǎn)raft_id是否全局唯一烁兰;
3耐亏、啟動(dòng)query節(jié)點(diǎn)失敗
注意meta配置的endpoints項(xiàng)是否正確;見上面的databend-query.toml模版
4沪斟、部署時(shí)多參考官方文檔
databend-standalone部署
databend-manage
關(guān)于Databend部署-單機(jī)版(測(cè)試)