通过ELB访问ClickHouse
当前ClickHouse不管是多分片还是多副本都是以集群方式部署,如果对外直接提供服务,将暴露多个节点服务,没有统一的访问入口。ClickHouse官方虽然提供了BalancedClickhouseDataSource的驱动方案,可以支持多节点的随机分配,提供了一定程度的负载均衡能力,但其故障检测能力不足,而且在扩缩容时,需要客户端感知集群节点变化,易用性不佳。
针对上述风险,MRS服务提供了基于弹性负载均衡ELB的部署架构图1。基于ELB的部署架构,可以将用户访问流量自动均匀分发到多台后端节点,扩展系统对外的服务能力,实现更高水平的应用容错。当其中一台ClickHouse后端节点发生故障时,ELB通过故障转移方式正常对外提供服务。
ELB的部署架构对比BalancedClickhouseDataSource的优势可以参考表1说明。
负载均衡方案 |
方案对比 |
---|---|
ELB |
|
BalancedClickhouseDataSource |
|
当前通过ELB访问ClickHouse支持的协议和端口请参考表2,请根据实际使用场景选择配置。
协议 |
端口 |
场景描述 |
---|---|---|
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地址
详细操作步骤请参考创建共享型负载均衡器。
- 登录“弹性负载均衡器”控制台,在“负载均衡器”界面单击“购买弹性负载均衡”。
- 在“购买弹性负载均衡”界面,“实例规格类型”选择“共享型”,“所属VPC”和“子网”参数需要和MRS集群保持一致,其他参数保持默认即可。
- 单击“立即购买”,确认配置信息,并单击“提交”。
- 创建完成后,在“负载均衡器”界面,选择对应的区域即可看到新建的负载均衡器。查看并获取该负载均衡器的私有IP地址。
添加ELB监听器
详细操作步骤请参考添加监听器。
- 在“负载均衡器”界面,单击需要添加监听器的负载均衡名称。
- 选择“监听器 > 添加监听器”。
- 在“添加监听器”界面,根据界面提示完成具体配置。
添加ClickHouse后端服务器
- 登录MRS控制台,单击要对接的MRS集群名称。
- 在MRS集群页面,单击“节点管理”,在ClickHouse节点组名称下,获取ClickHouse实例节点名称和IP地址。
- 登录“弹性负载均衡器”控制台,单击已创建的负载均衡器名称。
- 单击“监听器”,在“监听器”界面选择“后端服务器组”页签,单击“添加”。
- 在“添加后端服务器”界面,根据2中获取到的ClickHouse实例节点名称和IP地址勾选后端服务器。单击“下一步”。
- “批量添加端口”参数填写为“9000”,单击“确定”。确认后端端口配置无误后,单击“完成”。
如果是通过HTTP请求访问,端口填写“8123”。
- 后端服务器配置安全组。
配置完成后,在“监听器”界面的“后端服务器组”页签下,对应的后端服务器显示“健康检查结果”状态为“异常”。
解决如上问题需要在ClickHouse后端服务器对应的安全组下放通“100.125.0.0/16”网段,具体操作如下:
- 在“监听器”界面的“后端服务器”页签下,单击任意一个服务器名称。
- 单击“安全组 > 配置规则”,选择“入方向规则 > 添加规则”。
- 在“添加入方向规则”界面添加协议为TCP,端口为9000,IP地址配置“100.125.0.0/16”。单击“确定”完成配置。
如果是通过HTTP请求访问,端口填写“8123”。
- 重新进入到创建的负载均衡器,刷新浏览器页面,单击“监听器”界面中的“后端服务器组”页签,对应的后端服务器“健康检查结果”状态显示为“正常”。
通过ELB访问ClickHouse
- 登录Manager页面选择“集群 > 服务 > ClickHouse > 配置 > 全部配置”,修改参数“SSL_NONESSL_BOTH_ENABLE”值为“true”。
- 参考使用ClickHouse客户端使用客户端登录ClickHouse服务实例节点。注意:客户端命令clickhouse client中的host参数填写4中获取的ELB私有IP地址。
- 在客户端界面查看通过ELB可以正常连接到ClickHouse实例节点。
手工通过客户端命令连接时,因为并发请求数较少,ELB可能始终将请求发送给一个后端ClickHouse节点,属于正常现象。
如果并发请求数多时,ELB会把请求轮询分配给多个后端ClickHouse节点。