1. 前言
亚马逊是全球最大的在线零售商和云计算服务提供商。AWS云服务器在全球范围内都备受推崇,被众多业内人士誉为“云计算服务的行业标准”。在国内,亚马逊AWS也以其卓越的性能和服务满足了众多用户的需求,拥有着较高的市场份额和竞争力。同时也是出海用户的首选云服务。
作为一款主流的云服务提供商,亚马逊云服务器EC2在系统安全性和稳定性上表现十分出色。
ByConity 是字节跳动面向现代数据栈的一款开源数仓系统,应用了大量数据库成熟技术,如列存引擎,MPP 执行,智能查询优化,向量化执行,Codegen,indexing,数据压缩,适合用于 Online Analytical Processing(OLAP) 场景和轻载数仓的场景,包括但不限于交互式分析、实时 APP 监控、流数据处理和分析等。
下面我们通过详细图文内容介绍如何在亚马逊EC2云服务器上上部署并运行ByConity
2. 购买并使用亚马逊EC2云服务器示例
2.1 EC2实例购买教程
进入AWS官网: https://aws.amazon.com/cn/

点击左上角登录,进入控制台,然后在控制台首页访问EC2

在EC2控制台可以看到我们已经购买的云服务器和一些相关信息

若没有购买相关Ec2实例,若用户为初次使用亚马逊云服务相关资源,则可以免费获得一年的Ec2实例资源使用权限。
下面将展示如何领取或者购买EC2实例资源
点击启动实例

关于镜像选择,大家可以根据自己的实际需求选择合适的镜像,这里我选择的是Redhat,然后选择符合买条件的免费套餐,这样我们就可以免费获取相关资源,当然,免费资源的规格类型为1c-1g,如果需要更高规格服务器,则需要付费购买。
选择完操作系统后,我们需要选择密钥对来进行后续的登录操作,若没有密钥对,则需要手动创建新的密钥对
创建好新的秘钥对后需要将其pem文件下载到本地,方便后续进行远程ssh登录。
在网络配置阶段,选择启用公网IP,同时根据自己的业务需求设置不同的安全组
存储则需要根据业务需求进行选择,我这里选择40GB(后续可以更改)
全部填写完后,选择启动实例
2.2 EC2实例初始化配置
在购买完EC2实例后,我们返回控制台进行查看,可以看到刚才购买的云服务器正在初始化,等待大约5分钟后会初始化完成
点击进去查看详情
可以看到此云服务器的详细配置信息
在登录之前,需要确认安全组已经放通相关端口
2.3 远程登录EC2服务器实例
每个人的喜好不太一样,常用的shell登录终端有很多,这里我使用的是Finalshell
新建ssh登录,填写EC2实例的ip和用户名并通过刚才设置的密钥对进行登录
登录成功
3. 配置部署
3.1 资源准备
我的部署见下图,为满足各个组件性能要求
组件名称 | CPU | 内存 | 硬盘 | 网络 | 实例数 |
---|---|---|---|---|---|
TSO | 1 | 1G | 5G | 千兆网卡 | 1 |
Server | 8 | 32G | 100G | 千兆网卡 | 1 |
Worker | 4 | 16G | 110G | 千兆网卡 | 1 |
DaemonManager | 1 | 2G | 40G | 千兆网卡 | 1 |
ResourceManager | 1 | 2G | 40G | 千兆网卡 | 1 |
整体云资源部署在亚马逊云服务器
按照上述配置要求和 目录2的操购买不同规格的云服务
3.2 服务器基础配置
3.2.1 在本地环境中安装和设置 kubectl
用以下命令下载最新发行版:
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
下载 kubectl 校验和文件:
curl -LO "https://dl.k8s.io/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl.sha256"
基于校验和文件,验证 kubectl 的可执行文件:
echo "$(cat kubectl.sha256) kubectl" | sha256sum --check
验证通过时,输出为:
kubectl: OK
验证失败时,sha256 将以非零值退出,并打印如下输出:
kubectl: FAILED
sha256sum: WARNING: 1 computed checksum did NOT match
安装 kubectl
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
执行测试,以保障安装的版本是最新的:
kubectl version --client
为了让 kubectl 能发现并访问 Kubernetes 集群,你需要一个 kubeconfig 文件, 该文件在 kube-up.sh 创建集群时,或成功部署一个 Minikube 集群时,均会自动生成。 通常,kubectl 的配置信息存放于文件 ~/.kube/config 中。
通过获取集群状态的方法,检查是否已恰当地配置了 kubectl:
kubectl cluster-info
如果返回一个 URL,则意味着 kubectl 成功地访问到集群。
3.2.2 在本地环境中安装 helm
Helm有安装脚本可以自动拉取最新的Helm版本并在 本地安装
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
chmod 700 get_helm.sh
./get_helm.sh
如果想直接执行安装,运行
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
3.2.3 安装kind和Docker
3.2.3.1 kind安装
输入下面命令安装kind
curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.9.0/kind-linux-amd64
chmod +x ./kind
mv ./kind /usr/local/bin/kind
3.2.3.2 Docker安装
安装docker-ce
yum clean all yum makecache fastyum -y install docker-ce
通过systemctl启动服务
systemctl start docker
4 .本地 Kubernetes 集群
4.1 使用 Kind 配置本地 Kubernetes 集群
将代码保存在本地
git clone git@github.com:ByConity/byconity-deploy.git
cd byconity-deploy
创建一个 1-control-plane、3-worker 的 Kubernetes 集群。.
kind create cluster --config examples/kind/kind-byconity.yaml
测试以确保本地 kind 集群已准备就绪:
kubectl cluster-info
4.2 初始化 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 :)
执行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;
5.总结
ByConity是基于ClickHouse构建的一个为现代云架构变化设计的数据仓库。将其部署在亚马逊EC2云服务器上能够得到稳定流畅的运行,它采用云原生架构设计,满足数据仓库用户对灵活扩展、读写分离、资源隔离和强数据一致性的需求。同时,它提供了卓越的查询和写入性能。采用大量成熟的OLAP技术,如列存储引擎、MPP执行、智能查询优化、向量化执行、Codegen、索引和数据压缩;同时也为云场景和存储计算分离架构做了特殊技术创新。