集群配置
配置 FerretDB 集群与所需的 PostgreSQL 集群。
Module:
Categories:
配置
在部署 Mongo (FerretDB) 集群前,你需要先在配置清单中使用相关参数定义好它。
下面的例子将默认的单节点 pg-meta
集群的 meta
数据库作为 FerretDB 的底层存储:
all:
children:
#----------------------------------#
# ferretdb for mongodb on postgresql
#----------------------------------#
# ./mongo.yml -l ferret
ferret:
hosts:
10.10.10.10: { mongo_seq: 1 }
vars:
mongo_cluster: ferret
mongo_pgurl: 'postgres://mongod:DBUser.Mongo@10.10.10.10:5432/meta'
这里 mongo_cluster
与 mongo_seq
属于不可或缺的身份参数,对于 FerretDB 来说,还有一个必须提供的参数是 mongo_pgurl
,指定了底层 PG 的位置。
请注意, mongo_pgurl
参数需要一个 PostgreSQL 超级用户。本例中定义了一个 mongod
超级用户供 FerretDB 专门使用。
请注意,FerretDB 的 认证 完全基于 PostgreSQL。 您可以使用 FerretDB 或者 PostgreSQL 创建其他所需的普通用户。
PostgreSQL集群
FerretDB 2.0+ 需要用到一个扩展插件: DocumentDB,该扩展插件同时依赖几个其他扩展,以下是创建 FerretDB 所需的 PostgreSQL 集群样板:
all:
children:
#----------------------------------#
# pgsql (singleton on current node)
#----------------------------------#
# postgres cluster: pg-meta
pg-meta:
hosts: { 10.10.10.10: { pg_seq: 1, pg_role: primary } }
vars:
pg_cluster: pg-meta
pg_users:
- { name: mongod ,password: DBUser.Mongo ,pgbouncer: true ,roles: [dbrole_admin ] ,superuser: true ,comment: ferretdb super user }
- { name: dbuser_meta ,password: DBUser.Meta ,pgbouncer: true ,roles: [dbrole_admin] ,comment: pigsty admin user }
- { name: dbuser_view ,password: DBUser.Viewer ,pgbouncer: true ,roles: [dbrole_readonly] ,comment: read-only viewer for meta database }
pg_databases:
- {name: meta, owner: mongod ,baseline: cmdb.sql ,comment: pigsty meta database ,schemas: [pigsty] ,extensions: [ documentdb, postgis, vector, pg_cron, rum ]}
pg_hba_rules:
- { user: dbuser_view , db: all ,addr: infra ,auth: pwd ,title: 'allow grafana dashboard access cmdb from infra nodes' }
- { user: mongod , db: all ,addr: world ,auth: pwd ,title: 'mongodb password access from everywhere' }
pg_extensions:
- documentdb, citus, postgis, pgvector, pg_cron, rum
pg_parameters:
cron.database_name: meta
pg_libs: 'pg_documentdb, pg_documentdb_core, pg_cron, pg_stat_statements, auto_explain' # add timescaledb to shared_preload_libraries
高可用
您可以使用 服务 来接入高可用的 PostgreSQL 集群,并部署多个 FerretDB 实例副本并绑定 L2 VIP 以实现 FerretDB 层本身的高可用。
ferret:
hosts:
10.10.10.45: { mongo_seq: 1 }
10.10.10.46: { mongo_seq: 2 }
10.10.10.47: { mongo_seq: 3 }
vars:
mongo_cluster: ferret
mongo_pgurl: 'postgres://mongod:DBUser.Mongo@10.10.10.3:5436/test'
vip_enabled: true
vip_vrid: 128
vip_address: 10.10.10.99
vip_interface: eth1
参数
FERRET
模块中提供了9个相关的配置参数,如下表所示:
参数 | 类型 | 级别 | 注释 |
---|---|---|---|
mongo_seq |
int | I | mongo 实例号,必选身份参数 |
mongo_cluster |
string | C | mongo 集群名,必选身份参数 |
mongo_pgurl |
pgurl | C/I | mongo/ferretdb 底层使用的 PGURL 连接串,必选 |
mongo_ssl_enabled |
bool | C | mongo/ferretdb 是否启用SSL?默认为 false |
mongo_listen |
ip | C | mongo 监听地址,默认留控则监听所有地址 |
mongo_port |
port | C | mongo 服务端口,默认使用 27017 |
mongo_ssl_port |
port | C | mongo TLS 监听端口,默认使用 27018 |
mongo_exporter_port |
port | C | mongo exporter 端口,默认使用 9216 |
mongo_extra_vars |
string | C | MONGO 服务器额外环境变量,默认为空白字符串 |
# mongo_cluster: #CLUSTER # mongo cluster name, required identity parameter
# mongo_seq: 0 #INSTANCE # mongo instance seq number, required identity parameter
# mongo_pgurl: 'postgres:///' # mongo/ferretdb underlying postgresql url, required
mongo_ssl_enabled: false # mongo/ferretdb ssl enabled, false by default
mongo_listen: '' # mongo/ferretdb listen address, '' for all addr
mongo_port: 27017 # mongo/ferretdb listen port, 27017 by default
mongo_ssl_port: 27018 # mongo/ferretdb tls listen port, 27018 by default
mongo_exporter_port: 9216 # mongo/ferretdb exporter port, 9216 by default
mongo_extra_vars: '' # extra environment variables for mongo/ferretdb