跳到主要内容
版本:0.2.x

在 Kubernetes 上部署 ByConity

本文演示了如何在 Kubernetes 集群中部署 ByConity 集群。

本地部署一个 demo

Prerequisites

  • 在本地环境中安装和设置 kubectl
  • 在本地环境中安装 helm
  • 安装kindDocker
  • 签出 conity-deploy 代码查看
git clone git@github.com:ByConity/byconity-deploy.git
cd byconity-deploy

使用 Kind 配置本地 Kubernetes 集群

警告:Kind 不是为生产用途而设计的。 macOS 用户请注意:您可能需要增加容器的可用内存(建议 6 GB)。

这将创建一个 1-control-plane、3-worker 的 Kubernetes 集群。

kind create cluster --config examples/kind/kind-byconity.yaml

测试以确保本地 kind 集群已准备就绪:

kubectl cluster-info

初始化 Byconity 演示集群

# Install with fdb CRD first
helm upgrade --install --create-namespace --namespace byconity -f ./examples/kind/values-kind.yaml byconity ./chart/byconity --set fdb.enabled=false

# Install with fdb cluster
helm upgrade --install --create-namespace --namespace byconity -f ./examples/kind/values-kind.yaml byconity ./chart/byconity

等到所有 Pod 准备就绪。

kubectl -n byconity get po

让我们试试吧!

$ kubectl -n byconity exec -it sts/byconity-server -- bash
root@byconity-server-0:/# clickhouse client

172.16.1.1 :)

从 Kubernetes 集群中删除或停止 ByConity

helm uninstall --namespace byconity byconity

如果您想暂时停止它,请在您的机器上停止它

docker stop byconity-cluster-control-plane byconity-cluster-worker byconity-cluster-worker2 byconity-cluster-worker3

部署在您自建的 Kubernetes 中

如何部署或购买 Kubernetes 集群?

您可以在这里获取信息:生产环境

先决条件

  • 在本地环境中安装和设置 kubectl
  • 在本地环境中安装 helm

准备您的存储

为了获得最佳的 TCO 和性能,本地磁盘最好与 ByConity server 和 worker 一起使用。

ByConity server 和 worker 的存储仅用于磁盘缓存,您可以随时删除它们。

您可以使用 OpenEBS local PV 等存储.

准备你自己的 helm 值文件

您可以从 ./chart/byconity/values.yaml 复制并修改一些字段,例如:

  • 存储类名

  • 时区

  • 服务器/工人的副本

  • hdfs 存储请求

    如果您想使用自己现有的 HDFS 集群,请将 hdfs.enabled 设置为 true。您可以在 values.yaml 中覆盖 HDFS 的配置

byconity:
hdfs_address: hdfs://your own hdfs:port
hdfs:
enabled: false
  • fdb configuration

    如果您想使用自己的 FDB,请将 fdb.enabled 和 fdb-operator.enabled 都设置为 false。您可以参考 values_use_existing_fdb.yaml 进行配置

byconity:
hdfs_address: hdfs://byconity-hdfs-namenodes:8020 # can using your own hdfs
use_existing_fdb: true
fdb_cluster_file: your fdb-cluster-file content. #byconity_fdb:Is0hBgl6iICdHuspBmhAODmD5WISXKzI@192.168.224.150:4501,192.168.226.83:4501,192.168.228.152:4501
fdb:
enabled: false
fdb-operator:
enabled: false

初始化 Byconity 集群

# Install with fdb CRD first
helm upgrade --install --create-namespace --namespace byconity -f ./your/custom/values.yaml byconity ./chart/byconity --set fdb.enabled=false

# Install with fdb cluster
helm upgrade --install --create-namespace --namespace byconity -f ./your/custom/values.yaml byconity ./chart/byconity

等到所有 Pod 准备就绪。

kubectl -n byconity get po

让我们试试吧!

$ kubectl -n byconity exec -it sts/byconity-server -- bash
root@byconity-server-0:/# clickhouse client

172.16.1.1 :)

测试

运行一些 SQL 来测试

CREATE DATABASE IF NOT EXISTS test;
USE test;
DROP TABLE IF EXISTS test.lc;
CREATE TABLE test.lc (b LowCardinality(String)) engine=CnchMergeTree ORDER BY b;
INSERT INTO test.lc SELECT '0123456789' FROM numbers(100000000);
SELECT count(), b FROM test.lc group by b;
DROP TABLE IF EXISTS test.lc;
DROP DATABASE test;

更新您的 Byconity 集群

添加新的虚拟数据仓库

假设您要为您的用户添加 2 个虚拟数据仓库,5 个副本用于 my-new-vw-default 读取,2 个副本用于 my-new-vw-write 写入。

修改你的 values.yaml

byconity:
virtualWarehouses:
...

- <<: *defaultWorker
name: my-new-vw-default
replicas: 5
- <<: *defaultWorker
name: my-new-vw-write
replicas: 2

使用新值应用 helm 版本

helm upgrade --install --create-namespace --namespace byconity -f ./your/custom/values.yaml byconity ./chart/byconity

运行CREATE WAREHOUSE 数据定义语言 在 Byconity 创建逻辑虚拟仓库

CREATE WAREHOUSE IF NOT EXISTS `my-new-vw-default` SETTINGS num_workers = 0, type = 'Read';
CREATE WAREHOUSE IF NOT EXISTS `my-new-vw-write` SETTINGS num_workers = 0, type = 'Write';

完毕。现在让我们创建一个表并使用您的新虚拟数据仓库!

-- Create a table with SETTINGS cnch_vw_default = 'my-new-vw-default', cnch_vw_write = 'my-new-vw-write'
CREATE DATABASE IF NOT EXISTS test;
CREATE TABLE test.lc2 (b LowCardinality(String)) engine=CnchMergeTree
ORDER BY b
SETTINGS cnch_vw_default = 'my-new-vw-default', cnch_vw_write = 'my-new-vw-write';

-- Check if the table has the new settings
SHOW CREATE TABLE test.lc2;

在原有的 VirtualWareHouse 扩缩容

假设您有一个 my-new-vw-default,希望扩容增加 2 个 worker,可以直接更新 Kubernetes 的资源对象 statefulset:

首先使用如下命令,获取当前 Kubernetes 集群中所有 StatefulSet 资源的名称

kubectl get statefulset

然后,找到并打开该配置,做如下修改

kubectl edit statefulset.apps/my-new-vw-default

把配置"replicas: 1" 变更为 "replicas: 2"

spec:
podManagementPolicy: OrderedReady
replicas: 2 #由1变更为2
revisionHistoryLimit: 10
selector:
matchLabels:
app.kubernetes.io/instance: byconity
app.kubernetes.io/name: byconity
byconity-role: worker
byconity-vw: vw_default
serviceName: my-new-vw-default

更新完后使用 kubectl 可以查看 VirtualWarehouse 已经扩容包含 2 个 woker

配置 Byconity 高可用集群(可选)

高可用的 ByConity 集群功能开启需要打开所有组件的 zookeeper 配置,参考server.yaml

打开 zookeeper 配置:

partition_by: event_date
flush_interval_milliseconds: 15000
mark_cache_size: 5368709120
zookeeper: {} # enable zookeeper
cnch_config: /etc/byconity/cnch-config.yaml

官方提供了高可用的 helm 配置 yaml 文件value_HA_example.yaml供参考。

使用 helm 更新集群:

helm upgrade --install --create-namespace --namespace byconity -f ./your/custom/values.yaml byconity ./chart/byconity