本文旨在为您介绍如何通过阿里云负载均衡(SLB)对 StarRocks多Frontend(FE)节点进行流量分发,同时结合客户端连接池配置,实现高并发、高可用、高性能的数据库访问。
前提条件
FE配置:FE节点数量 ≥ 3。
网络访问权限:客户端地址需位于内网安全组或公网域名白名单中。
操作流程
步骤一:开启SLB访问
EMR Serverless StarRocks默认使用PrivateZone方式访问FE节点,这种方式不支持负载均衡,可能导致多个FE节点之间的连接数不均,从而引发负载不均衡问题。为了解决这一问题,建议开启SLB访问,以实现FE节点的负载均衡。此外,结合客户端连接池的优化配置,可以进一步提升访问效率和稳定性。
进入EMR Serverless StarRocks实例详情页面。
在左侧导航栏,选择
。在顶部菜单栏处,根据实际情况选择地域。
单击目标实例的名称。
在网关信息区域,单击开通SLB。
单击确定。
步骤二:配置客户端连接池
使用连接池的好处如下:
连接复用:减少频繁创建和销毁连接的开销,降低系统资源消耗。
生命周期管理:统一管理连接的生命周期,防止连接泄漏。
并发控制:支持连接队列机制,在高峰期优雅处理大量并发请求。
有效性检测:自动检测无效连接,确保每次查询都能获得有效的连接。
监控与调优:提供详细的监控指标(如FE连接数),便于实时监控连接池状态。
SDK方式(以Java + HikariCP为例)
Maven依赖
在项目的
pom.xml
文件中添加以下依赖。<dependency> <groupId>com.zaxxer</groupId> <artifactId>HikariCP</artifactId> <version>5.0.1</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.33</version> </dependency>
HikariCP连接池配置
import com.zaxxer.hikari.HikariConfig; import com.zaxxer.hikari.HikariDataSource; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; public class StarRocksConnectionPoolExample { public static void main(String[] args) { // 配置 HikariCP 连接池 HikariConfig config = new HikariConfig(); // 内网域名 config.setJdbcUrl("jdbc:mysql://fe-c-xxx-internal.starrocks.aliyuncs.com:9030/<yourDatabase>"); config.setUsername("<yourUsername>"); config.setPassword("<yourPassword>"); // 核心参数配置 config.setMaximumPoolSize(20); // 设置最大连接数为20 config.setMinimumIdle(5); // 设置最小空闲连接数为5 config.setConnectionTimeout(30000); // 设置连接超时时间为30秒(30000毫秒) config.setIdleTimeout(600000); // 设置空闲连接超时时间为10分钟(600000毫秒) config.setMaxLifetime(1800000); // 设置连接的最大存活时间为30分钟(1800000毫秒) config.setConnectionTestQuery("SELECT 1"); // 健康检测 SQL config.setValidationTimeout(5000); // 验证超时 config.setLeakDetectionThreshold(60000); // 连接泄漏检测(1分钟) // 创建数据源 HikariDataSource dataSource = new HikariDataSource(config); // 使用连接池执行查询 try (Connection conn = dataSource.getConnection(); PreparedStatement stmt = conn.prepareStatement("SELECT count(*) FROM your_table"); ResultSet rs = stmt.executeQuery()) { if (rs.next()) { System.out.println("Count: " + rs.getLong(1)); } } catch (Exception e) { e.printStackTrace(); } } }
BI工具配置
常用的BI工具(如Tableau、Superset、Metabase、Quick BI等)支持在高级选项中设置连接池参数。
步骤三:验证负载均衡效果
进入目标StarRocks实例的监控告警的实例页签,查看FE Net中的FE连接数监控图。
确认多个FE节点之间的连接数分布是否均衡。如果发现连接数不均,可以调整客户端连接池参数或检查SLB配置。
步骤四:调优负载均衡
您可以根据实际业务需求,动态调整以下参数以优化性能。
参数 | 推荐值 | 说明 |
| 10~50 | 设置连接池中允许的最大连接数,控制并发连接的上限。 根据应用的并发量调整,建议初始值为20。过高的值可能导致资源浪费。 |
| 5~10 | 设置连接池中保持的最小空闲连接数,避免冷启动时频繁创建新连接。 |
| 30s | 设置从连接池获取连接的最大等待时间,超过此时间将抛出异常。 |
| 600s(10 分钟) | 设置空闲连接在连接池中的存活时间,超过此时间后将被回收。 |
| 1800s(30 分钟) | 设置单个连接的最大存活时间,超过此时间后连接将被强制关闭并重新创建。 |
|
| 设置用于检测连接有效性的SQL查询语句,确保连接池中的连接始终可用。 StarRocks支持该语句,用于验证连接是否正常。 |
通过阿里云负载均衡(SLB)和客户端连接池的结合使用,可以有效解决StarRocks多FE节点的负载均衡问题,同时提升系统的稳定性和性能。建议您根据实际业务需求,合理配置连接池参数,并定期监控系统状态以确保最佳性能表现。