Apache ShardingSphere JDBC 模式配置详解
什么是运行模式
在 Apache ShardingSphere 中,运行模式(Mode)决定了系统的部署方式和元数据管理机制。理解并正确配置运行模式对于构建稳定可靠的分库分表系统至关重要。
运行模式类型
ShardingSphere 提供了两种主要的运行模式:
- Standalone 模式:单机运行模式,适用于开发测试环境
- Cluster 模式:集群运行模式,适用于生产环境,支持高可用和分布式协调
核心配置类解析
ModeConfiguration 类
ModeConfiguration
是模式配置的核心类,位于 org.apache.shardingsphere.infra.config.mode
包下,主要包含两个关键属性:
type
:运行模式类型,可选值为 "Standalone" 或 "Cluster"repository
:持久化仓库配置,根据模式类型不同而有所区别
持久化仓库配置
Standalone 模式配置
StandalonePersistRepositoryConfiguration
类用于 Standalone 模式的持久化配置:
type
:持久化仓库类型,如 "JDBC"、"File" 等props
:持久化仓库所需的属性配置
Cluster 模式配置
ClusterPersistRepositoryConfiguration
类用于 Cluster 模式的持久化配置:
type
:持久化仓库类型,推荐使用 "ZooKeeper"namespace
:注册中心命名空间,用于隔离不同环境或应用server-lists
:注册中心服务器地址列表,多个地址用逗号分隔props
:持久化仓库所需的额外属性
生产环境最佳实践
- 模式选择:生产环境务必使用 Cluster 模式,确保高可用性
- 注册中心选择:优先选择 ZooKeeper 作为注册中心,它经过了大规模生产验证
- 配置管理:在 Cluster 模式下,ZooKeeper 中的配置具有最高优先级
配置示例详解
Maven 依赖配置
在项目中引入 ShardingSphere JDBC 核心依赖:
<dependency>
<groupId>org.apache.shardingsphere</groupId>
<artifactId>shardingsphere-jdbc</artifactId>
<version>5.3.2</version> <!-- 使用最新稳定版本 -->
</dependency>
Standalone 模式配置示例
// 创建 Standalone 模式配置
private ModeConfiguration createStandaloneModeConfig() {
Properties props = new Properties();
// 可根据需要设置 Standalone 模式特有属性
return new ModeConfiguration(
"Standalone",
new StandalonePersistRepositoryConfiguration("JDBC", props)
);
}
// 创建数据源
DataSource dataSource = ShardingSphereDataSourceFactory.createDataSource(
"demo_database", // 逻辑数据库名称
createStandaloneModeConfig(), // 模式配置
dataSourceMap, // 真实数据源映射
ruleConfigs, // 分片规则集合
props // 全局属性
);
Cluster 模式配置示例
// 创建 Cluster 模式配置
private ModeConfiguration createClusterModeConfig() {
Properties zkProps = new Properties();
// 设置 ZooKeeper 特有属性,如会话超时时间等
zkProps.setProperty("retryIntervalMilliseconds", "500");
zkProps.setProperty("maxRetries", "3");
return new ModeConfiguration(
"Cluster",
new ClusterPersistRepositoryConfiguration(
"ZooKeeper", // 使用 ZooKeeper
"sharding-demo", // 命名空间
"zk1:2181,zk2:2181", // ZooKeeper 集群地址
zkProps
)
);
}
// 创建数据源
DataSource dataSource = ShardingSphereDataSourceFactory.createDataSource(
"order_db", // 逻辑数据库名称
createClusterModeConfig(), // 集群模式配置
dataSourceMap, // 真实数据源映射
ruleConfigs, // 分片规则集合
props // 全局属性
);
常见问题解答
Q: Standalone 和 Cluster 模式的主要区别是什么?
A: Standalone 模式适合单机开发测试,元数据存储在本地;Cluster 模式适合生产环境,通过注册中心实现配置共享和节点协调。
Q: 为什么生产环境推荐使用 ZooKeeper?
A: ZooKeeper 提供了强一致性的分布式协调服务,能够保证集群中所有节点的配置一致性,并且具备高可用特性。
Q: 模式配置错误会导致什么问题?
A: 错误的模式配置可能导致系统无法启动,或者在集群环境下出现配置不一致、脑裂等问题。
总结
正确配置 Apache ShardingSphere 的运行模式是构建分布式数据库中间件的基础。开发环境可以使用简单的 Standalone 模式快速验证,而生产环境必须使用 Cluster 模式配合 ZooKeeper 等注册中心来保证系统的高可用性。通过本文的详细讲解和示例代码,开发者应该能够根据实际需求选择合适的模式并进行正确配置。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考