如何为MongoDB主/从副本配置Doctrine以自动进行故障转移

时间:2017-02-03 12:08:15

标签: php mongodb symfony doctrine-orm doctrine

我有两个MongoDB实例 - 一个奴隶和一个主人。还有一个仲裁者。

基本上设置如下: enter image description here图片来源:https://docs.mongodb.com/manual/replication/

在我的Symfony应用程序中,在config.yml中我有这个用于MongoDB:

# Mongo DB
doctrine_mongodb:
connections:
    default:
        server: %database_mongodb_access%
        options: {}
default_database: %database_mongodb_name%
document_managers:
    default:
        auto_mapping: true

其中%database_mongodb_access%'mongodb://mongo:27017'

如果主节点发生故障,如何配置我的Symfony / Doctrine应用程序以自动故障转移到从属MongoDB实例,以便应用程序继续工作?

我从文档中不清楚: http://symfony.com/doc/master/bundles/DoctrineMongoDBBundle/config.html

1 个答案:

答案 0 :(得分:1)

如果您通过将连接字符串中的所有服务器列为逗号分隔列表来使用副本集,则可以在一个连接上连接到多个mongodb服务器。

OPTIND=1
while getopts "b:a:" option
do
    case "${option}"
    in
        b) MERGE_BRANCH=${OPTARG};;
        a) ACTION=${OPTARG};;
    esac
done

if [[ "$ACTION" != "dry" && "$ACTION" != "prune" ]]
then
    echo "Invalid"
fi

shift $((OPTIND-1))
[ "$1" = "--" ] && shift

(( 1 <= ${#} )) || { echo "missing mandatory argument" 2>&1 ; exit 1;     };

http://symfony.com/doc/master/bundles/DoctrineMongoDBBundle/config.html#connecting-to-a-pool-of-mongodb-servers-on-1-connection

并检查故障转移的重试机制:

http://symfony.com/doc/master/bundles/DoctrineMongoDBBundle/config.html#retrying-connections-and-queries