0

对于 symfony 应用程序,我们有如下所述的 DB 连接和 parameters.yml:

parameters:
     database_host: db-service-01
     database_port: 3306
     database_name: sample
     database_user: dbuser
     database_password: dbpwd

在我们拥有一台数据库主机之前,这一切正常。现在我们已经迁移到 AWS 云,并且我们有多个数据库主机作为 db-service-01、db-service-02、db-service-03 来支持其中一台主机的数据库故障转移。因此,当我们启动应用程序并且 db-service-01 主机关闭时,它将连接到第二台主机 db-service-02 或者当第二台主机发生故障时,它将连接到第三台主机 db-service-03 反之亦然. 现在,当我在以逗号分隔的 parameters.yml 中添加这个多数据库主机时,它无法正常工作,因为它需要一个合法的主机名。以下是仅主机更改而其余部分保持不变的片段。

parameters:
    database_host: db-service-01,db-service-02,db-service-03
    database_port: 3306
    database_name: sample
    database_user: dbuser
    database_password: dbpwd

我知道使用超过 1 个连接连接到多个数据库,但不确定我们如何让这个故障转移场景开始工作。

任何想法/建议/帮助将不胜感激。

4

1 回答 1

0

经过一些分析和搜索,我无法得到任何解决方案。Doctrine 本身不支持此类功能。我尝试了另一种方法来实现这一点。我尽量遵循 symfony 的结构。以下是我的工作解决方案。

我在我的配置文件夹中添加了带有数据库连接参数的 parameters.php,并在 config.yml 中导入了文件,这将覆盖 parameters.yml 文件。

在parameters.php中,我手动检查所有数据库主机,无论哪个先连接在参数中设置。同样从主机列表中,如果第一个没有连接,那么它会检查第二个,依此类推。

这对我有用。感谢@dbrumann 的建议。

于 2021-05-04T13:28:01.693 回答