Wat*_*att 3 mongodb database-replication
我是mongodb副本集的新手。
根据Replic Set Ref,这应该是我的应用程序中连接到mongodb的连接字符串
mongodb://db1.example.net,db2.example.net,db3.example.net:2500/?replicaSet=test
Run Code Online (Sandbox Code Playgroud)
假设这是生产副本集(即,我无法更改应用程序代码或停止所有mongo服务器),并且我想db4.example.net在test副本集中添加另一个mongo数据库实例。我该怎么做?
我的应用程序将如何了解新的 db4.example.net
如果您正在寻找真实的场景: 在任何现有服务器由于硬件故障等原因而关闭的情况下,自然会在副本集中添加另一个数据库服务器以保留冗余。但是,该怎么做。
连接字符串中的副本集主机列表是“种子列表”,并且不必包括副本集的所有成员。
应用程序使用的MongoDB客户端驱动程序将遍历种子列表,直到可以成功连接到主机为止,并使用该主机请求当前副本集配置,该配置将列出副本集的所有当前成员。根据文档,建议在连接字符串中至少包含两个主机,以便在第一个主机发生故障的情况下驱动程序仍然可以连接。
客户端驱动程序会自动发现副本集配置中的任何更改(即添加/删除成员或选择新的主副本),因此您不必对应用程序配置进行任何更改即可向副本集添加新成员。
副本集配置的更改可能会触发一个新主副本的选择,因此您的应用程序代码应期望在重新配置期间可以处理瞬态错误几秒钟。
一些有用的mongoshell命令:
rs.conf() -显示当前的复制配置db.isMaster().primary -显示当前的主要您应该在所返回的配置文档中注意到一个版本号rs.conf()。此版本在每次配置更改时都会增加,因此驱动程序和副本集节点可以检查它们是否具有陈旧的配置版本。
我的应用程序如何了解新的db4.example.net
Just rs.add("db4.example.net"),您的应用程序应自动发现该主机。
在您的方案中,如果要替换完全失效的主机,则可能还需要rs.remove()原始主机(添加替换主机后)以维持副本集的多数票。
或者,可以使用新的服务器替换死主机,而不必使用新名称添加主机,而该新服务器将使用与先前配置相同的主机名。例如,如果db3.example.net死亡,则可以将其替换为新的,db3.example.net然后按照重新同步副本集成员的步骤进行操作。
| 归档时间: |
|
| 查看次数: |
3830 次 |
| 最近记录: |