APP 新增数据库
只要成功安装Flynn,Postgres 服务就手到擒来。 App 创建成功后,执行如下操作,为 App 新增数据库
执行成功后,Postgres 集群就为 App 新增了一个数据库,并且将你的 APP 连接到那个数据库
数据库连接
数据库创建成功后,Flynn 会为你的应用程序版本新增几个环境变量,比如 、PGUSER
、PGPASSWORD
、PGHOST
,Postgres 的客户端会通过这些参数,获取数据库连接详情。
同时,Flynn 提供 DATABASE_URL
环境变量给某些框架配置数据库连接时使用。
控制台连接
数据库如何连接 控制台?本地无需安装 Postgres 客户端,无需修改防火墙/安全,只需执行
flynn pg psql
它是在 Flynn 集群中的容器内运行的。
备份和恢复
Flynn 命令行接口支持数据库导入、导出和故障修复功能。
该文件既可用于数据修复,如执行flynn pg restore
,也可用于导入到本地不在 Flynn 管理的其他 Postgres 数据库中,如执行 pg_restore
flynn pg restore
命令将本地数据库文件装载到 Flynn Postgres 数据库中。Flynn 新建数据库/表对象之前,会先删掉数据库/表对象,避免数据库/表重建。
上面执行会产生一些告警信息,但无关紧要,可忽略。
恢复命令也可以用于从一个非 Flynn Postgres 的备份来恢复数据库,通过 pg_dump
来创建备份文件:
$ pg_dump --format=custom --no-acl --no-owner mydb > mydb.dump
扩展
Flynn Postgres 提供多款扩展,包括:hstore,PostGIS,以及 PLV8 等等。可以通过 CREATE EXTENSION
来使用扩展:
下面给出Flynn Postgres 完整扩展库列表:
此外,默认安装如下的检索词典扩展:
名称 | 版本 |
---|---|
danish_stem | 丹麦语的词干分析器 |
dutch_stem | 荷兰语的词干分析器 |
english_stem | 英语的词干分析器 |
finnish_stem | 芬兰语的词干分析器 |
french_stem | 法语的词干分析器 |
german_stem | 德语的词干分析器 |
hungarian_stem | 匈牙利语的词干分析器 |
italian_stem | 意大利语的词干分析器 |
norwegian_stem | 挪威语的词干分析器 |
portuguese_stem | 葡萄牙语的词干分析器 |
romanian_stem | 罗马尼亚语的词干分析器 |
russian_stem | 俄语的词干分析器 |
simple | simple 字典:将大写转小写,检查 stop word('and', 'the'…) |
spanish_stem | 西班牙语的词干分析器 |
swedish_stem | 瑞典语的词干分析器 |
turkish_stem | 土耳其语的词干分析器 |
设计
- 写操作不得丢失,必须保证数据一致性。
一旦出现错误,在确保操作可安全执行前提下,Flynn Postgres 可自动转换配置,而无需人工干预
基于理论,该结果系统可称为 "CP" 系统。Flynn Postgres 由三个或以上的 Postgres 实例组成:集群中有一个是主实例,提供持续的读写操作。
- 主实例会将副本同步到一个名叫 sync 的实例中。客户端提交的写操作会先不会立马执行,除非他们加到了 sync 的操作日志(transaction log)中。
- 一个或者多个实例以异步的方式从 sync 中同步增量数据,这一个或者多个实例,就构成了一个实例链,在链中从它们上游的链接处异步复制数据。
- 当服务故障时,系统通过主动重置保证服务正常运行最大化,确保数据不丢失。
当服务故障或者维护时,集群可能无法处理写请求,和保证读请求一致性,但时间很短。但通过 sync 和 async 实例,最终会确保读请求的一致性。
如果主实例服务不可用, sync 实例会知晓,并让自己成为主实例,让 async 实例从它这里复制数据并成为新的 sync 实例。在新的 sync 实例生成前,无法进行写操作。因为在设计中考虑了许多安全方面的情况,所以转换过程中不会造成写操作的丢失和split-brain。
Postgres 内置了状态机功能,保证数据流正常执行,如先流式写,后日志同步;这些状态信息,在主实例中维护,并存储在discoverd。通过访问 discoverd DNS 和 HTTP API,可以获取当前主实例信息。
此设计很大程度基于先前 Joyent 在 Manatee state machine 中做的工作。
Flynn 集群默认配置了三个实例。如果一个实例不可用了,调度程序会创建一个新的实例,并且由主实例自动重新配置,无需人为干预。当用户运行命令时,会在默认的集群上创建一个新的用户和数据库。