持久化
持久化
本页介绍在使用 Helm Chart 部署时如何为 Polaris 配置持久化。有关 Polaris 持久化的总体信息,请参阅 Metastores 页面。
Polaris 支持三种元存储实现:
- 内存(In-Memory) - 仅用于测试
- PostgreSQL(JDBC) - 推荐用于生产环境
- MongoDB(NoSQL) - 实验性(测试版)
⚠️ 警告
默认的 in-memory 元存储不适用于生产环境。Pod 重启时数据将会丢失,并且无法运行多个副本。
内存元存储
内存元存储是默认实现,无需任何配置。它适用于快速测试和开发场景:
persistence:
type: in-memory📝 注意
使用内存元存储时,必须将 replicaCount: 1 设置为 1,因为 Pod 之间不共享数据。此外,无法启用水平自动扩缩容。
PostgreSQL (JDBC) 元存储
PostgreSQL 元存储将所有 Polaris 元数据存储在 PostgreSQL 数据库中。这是生产部署推荐使用的元存储。
前置条件
- 一个 PostgreSQL 数据库
- 从 Kubernetes 集群到该数据库的网络连通性
- 具有相应权限的数据库凭据
创建 Secret
创建一个包含数据库连接信息的 Kubernetes Secret:
kubectl create secret generic polaris-persistence \
--namespace polaris \
--from-literal=username=<db-username> \
--from-literal=password=<db-password> \
--from-literal=jdbcUrl=jdbc:postgresql://<db-host>:5432/<db-name>该密钥必须包含三个键:
username:数据库用户名password:数据库密码jdbcUrl:JDBC 连接 URL
配置 Chart
配置 Chart 以使用 PostgreSQL 元数据存储:
persistence:
type: relational-jdbc
relationalJdbc:
secret:
name: "polaris-persistence"
username: "username" # Key in secret containing the username
password: "password" # Key in secret containing the password
jdbcUrl: "jdbcUrl" # Key in secret containing the JDBC URL连接池设置
对于生产环境部署,你可能需要通过 advancedConfig 部分来调整连接池设置:
advancedConfig:
quarkus.datasource.jdbc.min-size: "5"
quarkus.datasource.jdbc.max-size: "20"
quarkus.datasource.jdbc.acquisition-timeout: "30S"
quarkus.datasource.jdbc.idle-removal-interval: "5M"有关所有可用选项,请参阅 Quarkus 数据源配置参考。
MongoDB (NoSQL) 元存储
📝 注意
MongoDB NoSQL 元存储目前处于 beta 阶段。
MongoDB 元存储将所有 Polaris 元数据保存在 MongoDB 数据库中。
前提条件
- 一个 MongoDB 数据库
- 从 Kubernetes 集群到该数据库的网络连通性
- 一个包含相应凭据的 MongoDB 连接字符串
创建 Secret
创建一个包含 MongoDB 连接字符串的 Kubernetes Secret,例如:
kubectl create secret generic polaris-mongodb \
--namespace polaris \
--from-literal=connectionString='mongodb://<username>:<password>@<host>:<port>'对于 MongoDB Atlas 或副本集,请使用相应的连接字符串格式:
# MongoDB Atlas
kubectl create secret generic polaris-mongodb \
--namespace polaris \
--from-literal=connectionString='mongodb+srv://<username>:<password>@<cluster>.mongodb.net/?retryWrites=true&w=majority'
# Replica Set
kubectl create secret generic polaris-mongodb \
--namespace polaris \
--from-literal=connectionString='mongodb://<username>:<password>@<host1>:<port1>,<host2>:<port2>,<host3>:<port3>/?replicaSet=<rs-name>&authSource=admin'配置 Chart
配置 Chart,使其使用以 MongoDb 为后端的 NoSQL 元数据存储:
persistence:
type: nosql
nosql:
backend: MongoDb
database: polaris
secret:
name: "polaris-mongodb"
connectionString: "connectionString" # Key in secret containing the connection string配置选项
| 设置项 | 默认值 | 说明 |
|---|---|---|
persistence.nosql.backend | MongoDb | NoSQL 后端类型。生产环境使用 MongoDb,测试环境使用 InMemory。 |
persistence.nosql.database | polaris | 要使用的 MongoDB 数据库名称。 |
persistence.nosql.secret.name | "" | 包含连接字符串的 Secret 名称。 |
persistence.nosql.secret.connectionString | connectionString | Secret 中保存 MongoDB 连接字符串的键。 |
高级 MongoDB 配置
如需进行高级 MongoDB 设置,请使用 advancedConfig 部分传入 Quarkus 的 MongoDB 配置属性:
advancedConfig:
quarkus.mongodb.connect-timeout: "10S"
quarkus.mongodb.read-timeout: "30S"
quarkus.mongodb.server-selection-timeout: "30S"
quarkus.mongodb.write-concern.safe: "true"
quarkus.mongodb.read-preference: "primaryPreferred"有关所有可用选项,请参阅 Quarkus MongoDB 配置参考。
生产环境建议
在生产环境中部署 Polaris 时,请考虑以下建议:
- 启用 TLS/SSL:确保数据库连接已加密。对于 PostgreSQL,请在 JDBC URL 中添加
?sslmode=require;对于 MongoDB,请在连接字符串中使用tls=true。 - 使用强凭据:为数据库访问生成强且唯一的密码,并定期轮换。
- 配置连接池:根据预期负载和数据库容量调整连接池设置。
- 建立监控:监控数据库性能和连接指标,以便及早发现问题。
- 规划备份:根据数据保留需求制定合适的备份策略。
- 测试故障转移:如果使用高可用数据库架构,请测试故障转移场景,确保应用程序能够妥善处理。
评论
登录后参与评论
KnowForge