使用Cloudformation 部署Clickhouse On AWS

使用 cloudformation 部署 clickhouse on aws 架构

  • 本实验中,我们将通过cloudformation部署clickhouse on aws典型架构,您可以在Cloudformation参数中选择集群的规模,例如单节点、2分片2副本、4分片2副本等。Cloudformation将依据您定义的参数完成架构部署

资源清单

我们将使用cloudformation模板配置以下资源:

  1. 新建VPC,包含两个公有子网、两个私有子网,Internet网关和安全组以对外提供服务并支持安全访问控制。
  2. 新建安全组,包括堡垒机/clickhouse/zookeeper/DWadmin4个安全组,用户整套环境的最小访问权限控制。
  3. Amazon S3存储桶,用于clickhouse分层存储
  4. IAM角色,堡垒机/clickhouse/zookeeper/DWadmin.4个role用于管理整套环境服务权限
  5. 新建您所选择的clickhouse集群,可供选择的规模有:单节点2分片2副本4分片2副本10分片2副本。如果您选择单节点,将会在1个节点上部署所以内容,如果您选择2分片2副本,将创建4台clickhouse节点+3台zookeeper节点+1台DW admin实例+1台堡垒机实例
  6. 一台数据仓库管理实例,创建将被放置在公有子网,是整套环境对外提供服务的的唯一入口,在该实例中运行以下工具:
    • chproxy (实现clickhouse读写分离,负载路由,查询缓存)
    • Prometheus (实现clickhouse集群监控,他将监听并存储clickhouse各节点clickhouse_exporter和node_exporter的实时状态数据)
    • Grafana (3000端口对外服务,用于clickhouse SQL Tools和Prometheus监控可视化)
  7. 一台堡垒机EC2实例(包含在ASG内),创建将被放置在公有子网,是整套环境ssh的唯一入口对下游组件它将向架构前后端进行配置管理,对公网您可以配置只有您的本地IP地址可以与之通讯
  8. 加载演示数据,Cloudformation将以Ontime为样本,通过您选择的demosize参数创建表并加载数据,demosize:大 中 小 分别对应 500m/5g/50g
  9. 您通过多达20种参数的自定义在集群创建之初即完成优化配置,这些参数都有默认值,是我们推荐的通过情况最佳实践。(您可以在Cloudformation参数页面查看每个参数的解释)
  10. 您通过不同实例类型和不同EBS类型及空间的自定义以满足业务性能需求。
  11. 为方便内部测试,模板将为您的每台实例自动加载AmazonSSMManagedInstanceCore权限以满足PVRE合规要求,请放心食用

实验选项:

如果您是一个人使用自己的AWS账户或是使用PSA导师发送的AWS Event Engine账号进行实验,建议您使用cloudformation启动环境。而如果您是多人使用同一账户的不同IAM User进行实验,建议您手动搭建环境进行实验,并在必要时明确区别您和他人的资源命名,例如在任何资源名后加入-user1

使用cloudformation搭建环境

1.使用有效凭证登录AWS控制台

2.选择AWS区域。 此实验室的首选区域是us-west-1

  • 您可以点击以下的 Launch Stack ,这样将直接跳转到首选区域的堆栈创建页面
账户所属 实验模板
海外区域账户

3.等待cloudformation供应所有资源。 大约需要35分钟才能完成执行

4.cloudformation部署成功,包含5个内嵌stack,主stack为ClickHouseOnAWS

cloudformation Console output

5.点击ClickHouseOnAWS进入output,即可查看您可访问的多个URL,其中您的公网入口为Grafana的URL,他将允许您在参数中定义的AccessCIDR访问。

cloudformation Console output

登录Grafana查看您的clickhouse集群

在您的任意浏览器输出访问output的URL,这是一个ELB负载均衡器,后面连接至EKS 集群内的各个odoo Pod的地址,例如http://ec2-54-177-167-204.us-west-1.compute.amazonaws.com:3000/

输入您的默认密码,默认用户名密码为admin/admin,成功之后Grafana将提示您修改初始密码,点击跳过或更改密码后获得以下界面 odoo-登录

配置Prometheus集群监控

现在我们点击右侧的小齿轮configuration—》Data Source,以便配置Prometheus的DataSource

1,选择Add data source

odoo编辑网页

2,选择Prometheus,完成DataSource的配置

odoo-install-website 输入您在Cloudformation output中得到的Prometheus URL,点击添加,完成配置

3,选择右侧的小加号,点击import odoo-install-website

4,添加clickhouse的监控dashboard

比较简单的方式是您可以在Import via grafana.com填入clickhouse流行的dashboard,例如882 或者1216310483

您也可以下载或自己编写dashboard的json进行上传

odoo-install-website

5,为dashboard选择您刚刚创建的DataSource odoo-install-website

6,点击完成后,您将看到集群的监控状态

odoo-install-website

配置Grafana作为clickhouse的SQL工具

1,同样点击右侧的小齿轮configuration—》Data Source,这里选择clickhouse

odoo编辑网页

2,输入您在Cloudformation output中得到的CHproxy URL

3,在Auth选项中打开Basic auth,这里可以配置CHproxy 的逻辑用户,Cloudformation默认给了两个用户,分别是Distributed UserReplica User,用户名为distributedreplica,密码由您在Cloudformation参数中定义,默认为readwrite您也可以在Cloudformation的参数页面找到他们

odoo编辑网页

我们实例的场景为使用Distributed用户贴合读应用,sql将被负载均衡到指定的的存有分布式表的节点,通过分布式表实现快速查询。而Replica用户贴合写场景,Replica将会默认配置为将请求执行任意分片中的一个副本表,从而实现数据直接写副本表落盘,不必通过分布式表的节点再进行数据移动和副本同步。

odoo-安装其他应用

以下为CHproxy的默认配置文件示例:

# /data/chproxy/config.yml
# 实现读写分离,可以自定义读写分布式表,副本表,实现clickhouse原生的灵活度
# ./chproxy -config=/path/to/config.yml

server:
  http:
      listen_addr: ":9092"
      allowed_networks: ["172.0.0.0/8"]

users:
  - name: "distributed"
    password: "$distributedpassword"
    to_cluster: "distributed"
    to_user: "default"
  - name: "replica-write"
    password: "$replicapassword"
    to_cluster: "replica-write"
    to_user: "default"


clusters:
  - name: "distributed"
    nodes: [
      "$CH_Cluster_shard1_replica1:8123",
      "$CH_Cluster_shard1_replica2:8123",
      "$CH_Cluster_shard2_replica1:8123",
      "$CH_Cluster_shard2_replica2:8123"
    ]
    users:
      - name: "default"
        password: "$chpassword"

  - name: "replica-write"
    replicas:
      - name: "replica1"
        nodes: ["$CH_Cluster_shard1_replica1:8123", "$CH_Cluster_shard2_replica1:8123"]
      - name: "replica2"
        nodes: ["$CH_Cluster_shard1_replica2:8123", "$CH_Cluster_shard2_replica2:8123"]
    users:
      - name: "default"
        password: "$chpassword"

caches:
  - name: "shortterm"
    dir: "/data/chproxy/cache/shortterm"
    max_size: $cachesize
    expire: $cacheexpire


4,完成添加之后您可以来打dashboard页面,选择添加dashboard

odoo-安装其他应用

5,在dashboard页面,您可调整以下几个位置,以便您的SQl能适应可视化

odoo-安装其他应用

6,查询Cloudformation为您交付的集群环境,他应该与您的参数选择一致,例如2分片2副本:

select * from system.clusters

odoo-安装其他应用

7,查询Cloudformation为您交付的分层存储,他应该与您的参数选择一致,default(本地磁盘空间)不足30%时想s3移动数据。//数据移动还受其他因数控制,例如建表时的TTL,主键移动等

select * from system.disks

odoo-安装其他应用

8,查询Cloudformation为您交付的副本表(仅存在与访问节点的副本表)

select * from ontime_replica limit 10

odoo-安装其他应用

9,查询Cloudformation为您加载的分布式表(完整演示数据)

select * from ontime limit 10

odoo-安装其他应用


(可选)登录您的堡垒机,通过clickhouse client连接您的集群

Cloudformation帮助我们创建了clickhouse集群等资源,这些资源默认只能在内网进行通讯。我们仅能通过ssh至堡垒机从而对这些资源进行后台管理。这也是我们安全性最佳实践的原则。

1,ssh至您的堡垒机,例如

ssh -i "workshop.pem" ec2-user@ec2-54-176-92-104.us-west-1.compute.amazonaws.com

2,将您的没药上传至堡垒机

3,在堡垒机上为要授权

sudo chmod 400 xxxx.pem

4,登录至您的管理节点

5,执行登录命令 例如

clickhouse client --host ip-10-0-6-180.us-west-1.compute.internal --password 123456


ClickHouse client version 21.5.6.6 (official build).
Connecting to ip-10-0-6-180.us-west-1.compute.internal:9000 as user default.
Connected to ClickHouse server version 21.5.6 revision 54448.

ip-10-0-6-180.us-west-1.compute.internal :) 

5,执行sql 查看您的集群状态 例如

odoo编辑网页

odoo编辑网页

odoo编辑网页

6,您还可以通过客户端或任何BI工具进行复杂查询的测试,更多SQL请参考Demo table SQL页更多示例

Q1. The number of flights per day from the year 1988 to 1989

SELECT DayOfWeek, count(*) AS c
FROM ontime
WHERE Year>=1988 AND Year<=1989
GROUP BY DayOfWeek
ORDER BY c DESC;