APP 新增数据库

    只要成功安装Flynn,Postgres 服务就手到擒来。 App 创建成功后,执行如下操作,为 App 新增数据库

    执行成功后,Postgres 集群就为 App 新增了一个数据库,并且将你的 APP 连接到那个数据库

    数据库连接

    数据库创建成功后,Flynn 会为你的应用程序版本新增几个环境变量,比如 、PGUSERPGPASSWORDPGHOST,Postgres 的客户端会通过这些参数,获取数据库连接详情。

    同时,Flynn 提供 DATABASE_URL 环境变量给某些框架配置数据库连接时使用。

    控制台连接

    数据库如何连接 控制台?本地无需安装 Postgres 客户端,无需修改防火墙/安全,只需执行

    1. flynn pg psql

    它是在 Flynn 集群中的容器内运行的。

    备份和恢复

    Flynn 命令行接口支持数据库导入、导出和故障修复功能。

    该文件既可用于数据修复,如执行flynn pg restore,也可用于导入到本地不在 Flynn 管理的其他 Postgres 数据库中,如执行 pg_restore

    flynn pg restore 命令将本地数据库文件装载到 Flynn Postgres 数据库中。Flynn 新建数据库/表对象之前,会先删掉数据库/表对象,避免数据库/表重建。

    上面执行会产生一些告警信息,但无关紧要,可忽略。

    恢复命令也可以用于从一个非 Flynn Postgres 的备份来恢复数据库,通过 pg_dump 来创建备份文件:

    1. $ 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 集群默认配置了三个实例。如果一个实例不可用了,调度程序会创建一个新的实例,并且由主实例自动重新配置,无需人为干预。当用户运行命令时,会在默认的集群上创建一个新的用户和数据库。