写点什么

AWS 云服务器 EC2 实例实现 ByConity 快速部署

作者:乌龟哥哥
  • 2023-11-20
    上海
  • 本文字数:4283 字

    阅读完需:约 14 分钟

1. 前言

亚马逊是全球最大的在线零售商和云计算服务提供商。AWS 云服务器在全球范围内都备受推崇,被众多业内人士誉为“云计算服务的行业标准”。在国内,亚马逊 AWS 也以其卓越的性能和服务满足了众多用户的需求,拥有着较高的市场份额和竞争力。同时也是出海用户的首选云服务。


作为一款主流的云服务提供商,亚马逊云服务器 EC2 在系统安全性和稳定性上表现十分出色。



ByConity 是字节跳动面向现代数据栈的一款开源数仓系统,应用了大量数据库成熟技术,如列存引擎,MPP 执行,智能查询优化,向量化执行,Codegen,indexing,数据压缩,适合用于 Online Analytical Processing(OLAP) 场景和轻载数仓的场景,包括但不限于交互式分析、实时 APP 监控、流数据处理和分析等。


下面我们通过详细图文内容介绍如何在亚马逊 EC2 云服务器上上部署并运行 ByConity

2. 购买并使用亚马逊 EC2 云服务器示例

2.1 EC2 实例购买教程

因为 AWS 为国外云服务提供商,和目前国内主流的云服务提供商的购买流程略有差别,所以在此一并介绍如何购买并使用 AWS 云服务器 EC2 实例


进入 AWS 官网: https://aws.amazon.com/cn/


<img src="https://typora-1302845125.cos.ap-shanghai.myqcloud.com/mypc/image-20231112002011948.png" alt="image-20231112002011948" style="zoom:67%;" />


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


<img src="https://typora-1302845125.cos.ap-shanghai.myqcloud.com/mypc/image-20231112003243548.png" alt="image-20231112003243548" style="zoom:67%;" />


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


<img src="https://typora-1302845125.cos.ap-shanghai.myqcloud.com/mypc/image-20231112003450911.png" alt="image-20231112003450911" style="zoom:67%;" />


若没有购买相关 Ec2 实例,若用户为初次使用亚马逊云服务相关资源,则可以免费获得一年的 Ec2 实例资源使用权限。


下面将展示如何领取或者购买 EC2 实例资源


点击启动实例


在启动之前需要选择服务器所在区域,区域选择在控制台左上角


<img src="https://typora-1302845125.cos.ap-shanghai.myqcloud.com/mypc/image-20231112003653970.png" alt="image-20231112003653970" style="zoom:67%;" />


关于镜像选择,大家可以根据自己的实际需求选择合适的镜像,这里我选择的是 Redhat,然后选择符合买条件的免费套餐,这样我们就可以免费获取相关资源,当然,免费资源的规格类型为 1c-1g,如果需要更高规格服务器,则需要付费购买。



选择完操作系统后,我们需要选择密钥对来进行后续的登录操作,若没有密钥对,则需要手动创建新的密钥对



创建好新的秘钥对后需要将其 pem 文件下载到本地,方便后续进行远程 ssh 登录。


AWS 的云服务器 EC2 的创建阶段和国内其他云服务器厂商的购买流程配置上也有些区别,比如,无法在初始化时直接通过 root 密码登录,需要通过密钥对登录后设置 root 密码


在网络配置阶段,选择启用公网 IP,同时根据自己的业务需求设置不同的安全组



存储则需要根据业务需求进行选择,我这里选择 40GB(后续可以更改)



全部填写完后,选择启动实例


2.2 EC2 实例初始化配置

在购买完 EC2 实例后,我们返回控制台进行查看,可以看到刚才购买的云服务器正在初始化,等待大约 5 分钟后会初始化完成



点击进去查看详情


可以看到此云服务器的详细配置信息



在登录之前,需要确认安全组已经放通相关端口

2.3 远程登录 EC2 服务器实例

每个人的喜好不太一样,常用的 shell 登录终端有很多,这里我使用的是 Finalshell


Finalshell 是一款强大的终端工具,它集成了 SSH 客户端、X 服务器和 Unix 命令集工具箱。在 Windows 操作系统下,MobaXterm 可以帮助用户轻松地连接并操作 Linux 服务器。

Finalshell 具有以下特点:

  1. 集成了 SSH 客户端:通过内嵌 SSH 客户端,可以快速建立与 Linux 服务器的安全连接,实现远程登录和管理。

  2. 支持 X 服务器:集成了 X 服务器,可以在 Windows 上运行 Unix/Linux 环境,并支持图形界面应用程序。

  3. 提供 Unix 命令集:集成了 Unix 命令集(GNU/Cygwin),用户可以在 Windows 上运行大多数 Linux 命令,实现高效的终端操作。

  4. 多终端视窗:支持开启多个终端视窗,可以同时连接多个 Linux 服务器,并进行灵活的终端管理。

  5. 可扩展性强:可以通过集成插件来扩展功能,例如运行 Gcc、Perl、Curl、Tcl/Tk/Expect 等程序。

  6. 免费开源:分为免费开源版和收费专业版,用户可以免费使用开源版,并根据需求选择专业版以获得更多的功能和更好的技术支持。


新建 ssh 登录,填写 EC2 实例的 ip 和用户名并通过刚才设置的密钥对进行登录



登录成功

3. 配置部署

3.1 资源准备

硬件规格中,Worker 和 Server 的本地磁盘主要用于存储写入时的临时数据和日志文件,同时 Worker 的本地磁盘中还会存储数据的 Cache,因此磁盘的大小需要根据配置的 DiskCache 大小及写入的数据量来确定。


我的部署见下图,为满足各个组件性能要求



整体云资源部署在亚马逊云服务器


按照上述配置要求和 目录 2 的操购买不同规格的云服务

3.2 服务器基础配置

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

kubectl 是 Kubernetes 命令行工具,可以通过命令行界面或脚本与 Kubernetes 集群进行通信,并执行各种操作,包括:

  1. 部署和管理应用程序:kubectl 可以使用 YAML 或 JSON 文件定义和创建 Kubernetes 资源对象,例如部署、服务、Pod、副本集、配置映射等。可以使用 kubectl 创建、更新、删除和查看这些资源,以及监控其状态和日志。

  2. 扩展和管理集群:kubectl 可以通过命令行管理 Kubernetes 集群的各个组件,例如节点、命名空间、存储卷、服务账户等。可以使用 kubectl 扩展集群的规模、添加或删除节点,以及执行与集群管理相关的操作。

  3. 调试和故障排除:kubectl 提供了各种命令和选项,用于诊断和调试 Kubernetes 集群中的问题。可以查看 Pod 的日志、执行进入容器的命令、获取集群事件等。

  4. 资源监控和调整:kubectl 可以用于查看 Kubernetes 集群和资源的状态、监控资源使用情况、扩展或缩减资源的副本数量等。

kubectl 提供了强大的功能和灵活性,能够有效地管理和操作 Kubernetes 集群。


用以下命令下载最新发行版:


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: FAILEDsha256sum: 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 使用称为 chart 的包装格式。chart 是描述相关的一组 Kubernetes 资源的文件集合。单个 chart 可能用于部署简单的东西,比如 memcached pod,或者一些复杂的东西,比如完整的具有 HTTP 服务,数据库,缓存等的 Web 应用程序堆栈。

chart 通过创建为特定目录树的文件,将它们打包到版本化的压缩包,然后进行部署。


Helm 有安装脚本可以自动拉取最新的 Helm 版本并在 本地安装


curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3chmod 700 get_helm.sh ./get_helm.sh
复制代码


如果想直接执行安装,运行


curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
复制代码

3.2.3 安装kindDocker

3.2.3.1 kind 安装

Kind,即 Kubernetes-in-docker 的简写,是一个使用 docker 容器作为“节点”实现部署 K8S 集群环境的工具。Kind 工具主要用于 Kubernetes 本身的测试,目前很多需要部署到 Kubernetes 环境测试的项目在 CI 流程中,都会选择用 Kind 快速创建一个 Kubernetes 环境,然后运行相关的测试用例,之后删除即可。


输入下面命令安装 kind


curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.9.0/kind-linux-amd64chmod +x ./kindmv ./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.gitcd 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 firsthelm upgrade --install --create-namespace --namespace byconity -f ./examples/kind/values-kind.yaml byconity ./chart/byconity --set fdb.enabled=false
# Install with fdb clusterhelm 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 -- bashroot@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、索引和数据压缩;同时也为云场景和存储计算分离架构做了特殊技术创新。

发布于: 刚刚阅读数: 4
用户头像

乌龟哥哥

关注

正在努力寻找offer的大四小菜鸟 2021-03-16 加入

擅长 Hbuilder、VS Code、MyEclipse、AppServ、PS 等软件的安装与卸载 精通 Html、CSS、JavaScript、jQuery、Java 等单词的拼写 熟悉 Windows、Linux、 等系统的开关机 看–时间过得多快,不说了,去搬砖了

评论

发布
暂无评论
AWS云服务器EC2实例实现ByConity快速部署_AWS_乌龟哥哥_InfoQ写作社区