首页 > 其他分享 >Databend 集群部署 | 新手篇(2)

Databend 集群部署 | 新手篇(2)

时间:2022-11-07 11:24:57浏览次数:67  
标签:Databend 192.168 节点 databend meta 集群 新手 id

在单机模式下我们部署了 databend-meta 和 databend-query 两种角色(参考:基于 MinIO 部署单实例 Databend | 新手篇(1)),其中 databend-query 是计算节点,无状态模式,这种架构也有直接用于生产的。

实际上生产环境推荐至少部署三个 databend-meta 组成集群,其中 databend-query 可以是一个节点,而且可做到不使用就关闭。如果你使用的是公有云上对象存储,就不用担心对象存储的高可用。 下面我们描述一下 Databend 的集群环境搭建。

Databend 集群中的概念

在 Databend 集群中分为两个角色:databend-meta 集群和 databend-query 集群。其中 databend-meta 集群要求先启动,它在生产环境中建议 awayson 状态,并至少 3 个节点;databend-query 集群,可以是多个。

在生产中,我们推荐可以全局部署一个 databend-meta 集群。databend-meta 对资源消耗不高,也可以和其它程序共用资源。

databend-query 默认是最大能力的并发,在单个 databend-query 节点下,一个 SQL 会尽最大努力把单节点的所有 CPU CORE 间并发;在集群模式下, databend-query 会把计算在整个集群中做并发调度。

集群资源隔离

在 databend 集群中,资源隔离有几个重要的概念: tenant_id, cluster_id, max_threads。 为了让大家更好的理解 databend 集群,我们需要先理解一下这三个概念。

  • tenant_id :租户 id, 用于标识 databend-query 属于哪个租户下面。当租户 tenant_id 一样时,这个 databend-query 就可以获取该租户下的:用户列表及权限, 对应的数据的定义相关等。

  • cluster_id :集群 id , 这个参数依附于 tenant_id,首先需要看它在哪个 tenant_id 下面,然后可以获取对应的 meta 数据, 然后再看是不是有同样的 cluster_id 成员。如果遇到同样的 cluster_id 成员就自动组成集群,可以在 system.clusters 表中查询到,之后 SQL 请求到该节点后,算力会在 tenant_id 和 cluster_id 一样的节点间协调。对于 tenant_id 一样, cluster_id 不一样的,可以起到算力隔离,但大家共享一份数据和用户列表。

  • max_threads:控制一个 sql 在 databend-query 上可以用到多少个 cpu core, 默认是节点支持的 cpu core ,例如有一些复杂 SQL 在内存不足的情况下通过 max_threads 限制并发的数量,减少内存的占用。

image.png

databend-meta 集群

假设 databend-meta 集群三个节点:192.168.1.100, 192.168.1.101, 192.168.1.102  这三个节点上同时部署 databend-query 架构如下:

image.png

大概搭建信息如下:

节点

ip

id

192.168.1.100

192.168.1.100

1

192.168.1.101

192.168.1.101

2

192.168.1.102

192.168.1.102

3

其中配置文件中:raft_advertise_host  建议配置成 hostname 或是域名,这个需要 databend-meta 之间可以 ping 通及建立连接。可以暴力的修改 /etc/hosts

192.168.1.100 meta100
192.168.1.101 meta101
192.168.1.102 meta102

第一个节点(192.168.1.100),需要声明一个 single 节点

<section id="nice" data-tool="mdnice编辑器" data-website="https://www.mdnice.com" style="font-size: 16px; color: black; padding: 0 10px; line-height: 1.6; word-spacing: 0px; letter-spacing: 0px; word-break: break-word; word-wrap: break-word; text-align: left; font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, 'PingFang SC', Cambria, Cochin, Georgia, Times, 'Times New Roman', serif;"><pre class="custom" data-tool="mdnice编辑器" style="margin-top: 10px; margin-bottom: 10px; border-radius: 5px; box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;"><span style="display: block; background: url(https://files.mdnice.com/user/3441/876cad08-0422-409d-bb5a-08afec5da8ee.svg); height: 30px; width: 100%; background-size: 40px; background-repeat: no-repeat; background-color: #282c34; margin-bottom: -7px; border-radius: 5px; background-position: 10px 10px;"></span><code class="hljs" style="overflow-x: auto; padding: 16px; color: #abb2bf; display: -webkit-box; font-family: Operator Mono, Consolas, Monaco, Menlo, monospace; font-size: 12px; -webkit-overflow-scrolling: touch; padding-top: 15px; background: #282c34; border-radius: 5px;">192.168.1.100&nbsp;meta100<br>192.168.1.101&nbsp;meta101<br>192.168.1.102&nbsp;meta102<br><br></code></pre>
</section>

第二个节点(192.168.1.101)  配置

# databend-meta -c databend-meta-node-1.toml

log_dir            = "./.databend/logs1"
admin_api_address  = "0.0.0.0:28101"
grpc_api_address   = "0.0.0.0:9191"

[raft_config]
id            = 2
raft_dir      = "./.databend/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.
# 为了安全,建议更改为内网 IP
raft_listen_host = "192.168.1.101"
# 建议修改成 hostname
raft_advertise_host = "meta101"

# Start up mode: single node cluster
#single        = true
join           =["192.168.1.100:28103","192.168.1.102:28103"]


注意 join 节点里不能出现本机的 ip

第三个节点(192.168.1.102) 配置

# databend-meta -c databend-meta-node-1.toml

log_dir            = "./.databend/logs1"
admin_api_address  = "0.0.0.0:28101"
grpc_api_address   = "0.0.0.0:9191"

[raft_config]
id            = 3
raft_dir      = "./.databend/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.
# 为了安全,建议更改为内网 IP
raft_listen_host = "192.168.1.102"
# 建议修改成 hostname
raft_advertise_host = "meta102"

# Start up mode: single node cluster
#single        = true
join           =["192.168.1.100:28103","192.168.1.101:28103"]


注意 join 节点里不能出现本机的 ip

databend-meta 启动

meta.sh
#---
ulimit  -n 65535
nohup bin/databend-meta --config-file=configs/databend-meta.toml 
2>&1 >meta.log &
#end
./meta.sh

分别在三个节点启动 databend-meta, 如果启动出错及连接上不集群的情况,可以查看 .databend/logs 下面对应的日志,获取详细的说明。

databend-meta 集群成员查看

curl 192.168.1.100:28102/v1/cluster/nodes

databend query 集群

curl 192.168.1.100:28102/v1/cluster/nodes

Query 节点的配置可以是一样的。需要注意以下

#这个地址需要改改成每台机器的 IP,如果 meta 不在本机可以用 0.0.0.0 

flight_api_address = "192.168.1.100:9090"
#flight_api_address = "192.168.1.101:9090"
#flight_api_address = "192.168.1.102:9090"
#flight_api_address = "0.0.0.0:9090"
...
[meta]
# To enable embedded meta-store, set address to "".
embedded_dir = "./.databend/meta_embedded_1"
address = ["192.168.1.100:9191","192.168.1.101:9191","192.168.1.102:9191"]
username = "root"
password = "root"
client_timeout_in_second = 60
auto_sync_interval = 60


其它可以保持一致,启动 databend-query 就可以加到一个集群,databend query 启动建议参考 script 下面的 start.sh 修改后,或是直接启动。

可以根据 script/start.sh 修改出对应的启动脚本。生产中也可以考虑反 databend-meta 和 databend-query 加到 systemd 中管理。

第一次需要注意,首先需要启第一个 single 等 true 的节点,然后启动其它节点。第一次启动外,也需要注意, 至少保证启动两个 meta 节点后,再启动 query 节点,否则可能出现 query 加不到集群的现象。

确认集群成员:

select * from system.clusters;

集群遇到问题

Q1 :databend-meta 进程启动 Ok,但集群成员列表查不 databend-meta 节点

这类错误通常在 databend-meta 对应的 logs 可以看到详细的报错提示

{"v":0,"name":"databend-meta","msg":"[JOIN_CLUSTER - START]","level":30,"hostname":"fz001.databend.cn","pid":170519,"time":"2022-10-20T06:22:15.767468275Z","target":"databend_meta::meta_service::raftmeta","line":559,"file":"src/meta/service/src/meta_service/raftmeta.rs"}
{"v":0,"name":"databend-meta","msg":"[JOIN_CLUSTER - EVENT] meta node is already initialized, skip joining it to a cluster","level":30,"hostname":"fz001.databend.cn","pid":170519,"time":"2022-10-20T06:22:15.767471165Z","target":"databend_meta::meta_service::raftmeta","line":573,"file":"src/meta/service/src/meta_service/raftmeta.rs"}
{"v":0,"name":"databend-meta","msg":"[JOIN_CLUSTER - END]","level":30,"hostname":"fz001.databend.cn","pid":170519,"time":"2022-10-20T06:22:15.767472905Z","target":"databend_meta::meta_service::raftmeta","line":559,"file":"src/meta/service/src/meta_service/raftmeta.rs"}

原因:该进程已经启动过,已经拥有数据,该节点会拒绝加入其它集群。如果需要他加入集群,需要清理一下对应节点的记录。

例如:

 rm -rf .databend/meta/* 
 # 然后再次启动
 nohup bin/databend-meta --config-file=configs/databend-meta.toml 2>&1 >meta.log &

对应修复的PR:https://github.com/datafuselabs/databend/issues/8383

如果你使用 databend-v0.8.85 后面的版本应该不会存在这个问题。

Q2:databend-meta 集群,如何删掉一个成员

  • 获取需要删除节点的id 例如: id=3

  • 利用成员查找找到成员信息

databend-meta --leave-id 3 --leave-via raft_listen_host:raft_api_port
如:
databend-meta --leave-id 3 --leave-via 192.168.1.100:28103

其中 leave-via 需要传入一个存活的节点信息。

Q3:退出的节点怎么加回到集群

参考 Q1 需要清理一下对应的数据,保证 id 在集群中是唯一的,启动就可以。

Q4:databend-query 集群中只有一个成员:127.0.0.1:9090 看不到其它成员是怎么回事?

databend Cluster 成员标识实质上用的:flight_api_address = "0.0.0.0:9090" ,如果 databend-meta 和  databend-query 在同一个节点,就容易被识别为 127.0.0.1:9090,处理办法可以更改一下:

flight_api_address = "0.0.0.0:9090" 中的 0.0.0.0 为本地局域网 IP 即可。

Q5:databend-query 如果划分集群

databend-query 依据 tenant_id = "test_tenant"  cluster_id = "test_cluster" 属于那个租户和那个集群, 同一个 teant_id 下 meta 相应的信息是共享的, 相应的 cluster_id 是计算可以共享。所以 Databend 中支持原生的多租户模型,同一个租户内也支持多个 Cluster。

关于 Databend

Databend 是一款开源、弹性、低成本,基于对象存储也可以做实时分析的新式数仓。期待您的关注,一起探索云原生数仓解决方案,打造新一代开源 Data Cloud。

image.png

标签:Databend,192.168,节点,databend,meta,集群,新手,id
From: https://www.cnblogs.com/databend/p/16865240.html

相关文章

  • redis集群的弱一致性
    Redis集群不能保证强一致性。一些已经向客户端确认写成功的操作,会在某些不确定的情况下丢失。产生写操作丢失的第一个原因,是因为主从节点之间使用了异步的方式来同步数据......
  • Redis集群介绍
    什么是集群能够对外提供相同服务的多台服务器组成的集合。为什么要建立集群1.从可用性角度考虑,如果只有一台机器提供服务,一旦出现故障,那么整个服务不可用。2.从容量角......
  • MINIO搭建单机以及集群
    MINIO简介  Minio是ApacheLicensev2.0下发布的对象存储服务器。它与AmazonS3云存储服务兼容。它最适合存储非结构化数据,如照片,视频,日志文件,备份和容器/VM映像。对象......
  • fianl详解(适合新手)
    final1、final是Java语言中的一个关键字2、final表示最终的,不可变的。3、final可以修饰变量以及方法,还有类等4、final修饰的变量?5、final修饰的方法?6、final修饰的类......
  • 关于变量的一些小知识 (纯新手)
    首先就是变量有好几种,第一字面变量就是常数123这种,然后就是变量名,我们自己定义的什么num啊这些,但是呢同一个变量名是可以赋值多个的,比如我这个,也是没有问题的2就是有个cons......
  • macOS使用docker搭建hadoop集群
    启动集群安装docker下载网址:https://www.docker.com/products/docker-desktop/构建基础镜像拉取centos镜像dockerpullcentos:7.5.1804创建文件夹,将jdk安装包放入,......
  • 盘点一个Pandas新手在文件读取路上遇到的问题
    大家好,我是皮皮。一、前言国庆期间在Python铂金交流群【暮雨和】问了一个Pandas处理的问题,提问截图如下:代码截图如下:新手上路,遇到的问题还是挺多的。二、实现过程......
  • K8S HA(高可用)集群搭建
    1,背景kubernetes高可用集群搭建,如果使用命令行进行部署的话会有各种时间同步、网络连通插件或者等等一系列事情要做,这个如果本职工作是运维工程师或者说云服务运维开发工......
  • 博客园主题美化——适合新手的详细攻略
    大家好,应该有很多新手对博客园主题该怎么进行优化而感到困惑吧。我在更改主题的过程中,也有着很多困惑,在看了很多博客后才更改成功,因为那些博客的内容都很零散,所以我记录下......
  • redis的三种集群方案(主从复制、哨兵模式、集群模式)
    redis的三种集群方案(主从复制、哨兵模式、集群模式)单个redis的读写能力是有限的(虽然已经很强了),并且存在不稳定性。当唯一的redis服务宕机了,就没有可用的redis服务了,......