更新时间:2024-07-24 GMT+08:00

配置通过ELB访问ClickHouse

当前ClickHouse不管是多分片还是多副本都是以集群方式部署,如果对外直接提供服务,将暴露多个节点服务,没有统一的访问入口。ClickHouse官方虽然提供了BalancedClickhouseDataSource的驱动方案,可以支持多节点的随机分配,提供了一定程度的负载均衡能力,但其故障检测能力不足,而且在扩缩容时,需要客户端感知集群节点变化,易用性不佳。

针对上述风险,MRS服务提供了基于弹性负载均衡ELB的部署架构图1。基于ELB的部署架构,可以将用户访问流量自动均匀分发到多台后端节点,扩展系统对外的服务能力,实现更高水平的应用容错。当其中一台ClickHouse后端节点发生故障时,ELB通过故障转移方式正常对外提供服务。

图1 通过弹性负载均衡访问ClickHouse

ELB的部署架构对比BalancedClickhouseDataSource的优势可以参考表1说明。

表1 ELB和BalancedClickhouseDataSource两种负载均衡方案对比

负载均衡方案

方案对比

ELB

  • 支持多种请求策略
  • 故障自动检测转移
  • 后端ClickHouse扩容新增节点只需要修改ELB上的配置即可

BalancedClickhouseDataSource

  • 内部随机方式分发请求,可能会导致负载不均匀
  • 故障检测能力不足

当前通过ELB访问ClickHouse支持的协议和端口请参考表2,请根据实际使用场景选择配置。

表2 通过ELB访问ClickHouse支持的协议和端口列表

协议

端口

场景描述

TCP

9000

通过客户端请求到ELB连接ClickHouse场景时配置。例如使用clickhouse client命令连接,host参数为ELB的私有IP地址。

HTTP

8123

发送http请求到ELB连接ClickHouse场景时配置。

本章节演示如何实现客户端通过ELB访问ClickHouse。具体操作分为以下几个步骤:

  • 步骤一:购买ELB并获取其私有IP地址
  • 步骤二:添加ELB监听器,配置协议端口
  • 步骤三:在ELB上添加ClickHouse后端服务器
  • 步骤四:使用客户端通过ELB访问ClickHouse

前提条件

  • MRS集群已创建,ClickHouse实例状态正常。
  • 已安装MRS客户端,例如安装目录为“/opt/client”。以下操作的客户端目录只是举例,请根据实际安装目录修改。

购买ELB并配置对接ClickHouse

购买ELB并获取其私有IP地址

详细操作步骤请参考创建共享型负载均衡器

  1. 登录“弹性负载均衡器”控制台,在“负载均衡器”界面单击“购买弹性负载均衡”。
  2. 在“购买弹性负载均衡”界面,“实例规格类型”选择“共享型”,“所属VPC”和“子网”参数需要和MRS集群保持一致,其他参数保持默认即可。
  3. 单击“立即购买”,确认配置信息,并单击“提交”。
  4. 创建完成后,在“负载均衡器”界面,选择对应的区域即可看到新建的负载均衡器。查看并获取该负载均衡器的私有IP地址。

添加ELB监听器

详细操作步骤请参考添加监听器

  1. 在“负载均衡器”界面,单击需要添加监听器的负载均衡名称。
  2. 选择“监听器 > 添加监听器”。

  3. 在“添加监听器”界面,根据界面提示完成具体配置。

    1. 配置监听器。
      “前端协议/端口”选择“TCP”、端口填写“9000”,其他参数保持默认。配置完成单击“下一步”。

      如果是通过HTTP请求访问,则“前端协议/端口”选择“HTTP”、端口填写“8123”。

    2. 配置后端服务器组。

      “分配策略类型”参数选择“加权轮询算法”。单击“完成”,添加成功后,单击“确定”完成配置。

添加ClickHouse后端服务器

  1. 登录MRS控制台,单击要对接的MRS集群名称。
  2. 在MRS集群页面,单击“节点管理”,在ClickHouse节点组名称下,获取ClickHouse实例节点名称和IP地址。

  3. 登录“弹性负载均衡器”控制台,单击已创建的负载均衡器名称。
  4. 单击“监听器”,在“监听器”界面选择“后端服务器组”页签,单击“添加”。

  5. 在“添加后端服务器”界面,根据2中获取到的ClickHouse实例节点名称和IP地址勾选后端服务器,单击“下一步”。
  6. “批量添加端口”参数填写为“9000”,单击“确定”。确认后端口配置无误后,单击“完成”。

    如果是通过HTTP请求访问,端口填写“8123”。

  7. 后端服务器配置安全组。

    配置完成后,在“监听器”界面的“后端服务器组”页签下,对应的后端服务器显示“健康检查结果”状态为“异常”。

    解决如上问题需要在ClickHouse后端服务器对应的安全组下放通“100.125.0.0/16”网段,具体操作如下:

    1. 在“监听器”界面的“后端服务器”页签下,单击任意一个服务器名称。
    2. 单击“安全组 > 配置规则”,选择“入方向规则 > 添加规则”。
    3. 在“添加入方向规则”界面添加协议为TCP,端口为9000,IP地址配置“100.125.0.0/16”。单击“确定”完成配置。

      如果是通过HTTP请求访问,端口填写“8123”。

    4. 重新进入到创建的负载均衡器,刷新浏览器页面,单击“监听器”界面中的“后端服务器组”页签,对应的后端服务器“健康检查结果”状态显示为“正常”。

通过ELB访问ClickHouse

  1. 登录Manager页面选择“集群 > 服务 > ClickHouse > 配置 > 全部配置”,修改参数“SSL_NONESSL_BOTH_ENABLE”值为“true”。
  2. 参考ClickHouse客户端使用实践使用客户端登录ClickHouse服务实例节点。注意:客户端命令clickhouse client中的host参数填写4中获取的ELB私有IP地址。
  3. 在客户端界面查看通过ELB可以正常连接到ClickHouse实例节点。

    手工通过客户端命令连接时,因为并发请求数较少,ELB可能始终将请求发送给一个后端ClickHouse节点,属于正常现象。

    如果并发请求数多时,ELB会把请求轮询分配给多个后端ClickHouse节点。