本教程概述了部署过程副本集 与在多个位置的成员。本教程介绍三成员副本集和五成员副本集。如果您有偶数个副本集成员,请添加另一个数据承载成员(如果可能)以部署奇数个投票成员。[1]
有关分布式副本集的更多信息,请参阅跨两个或多个数据中心分布的副本集 。另请参见副本集部署体系结构和复制。
[1] | 如果情况不允许其他数据承载成员,并且投票成员的数量为偶数,则可以添加仲裁器。有关使用仲裁器的注意事项,请参阅 副本集仲裁器。 |
小费
如果可能,请使用逻辑DNS主机名而不是IP地址,尤其是在配置副本集成员或分片群集成员时。逻辑DNS主机名的使用避免了由于IP地址更改而导致的配置更改。
使用该bind_ip
选项可确保MongoDB在配置的地址上侦听来自应用程序的连接。
从MongoDB 3.6,MongoDB二进制文件mongod
和开始
mongos
,默认情况下绑定到localhost。如果
为二进制net.ipv6
文件设置了
配置文件设置或--ipv6
命令行选项,则二进制文件还会绑定到本地IPv6地址。
以前,从MongoDB 2.6开始,默认情况下,只有正式的MongoDB RPM(Red Hat,CentOS,Fedora Linux和衍生产品)和DEB(Debian,Ubuntu和衍生产品)的二进制文件才绑定到localhost。
当仅绑定到本地主机时,这些MongoDB 3.6二进制文件只能接受来自mongo
在同一台计算机上运行的客户端(包括Shell,副本集中部署的其他成员和分片群集)中的连接。远程客户端无法连接到仅绑定到本地主机的二进制文件。
要覆盖并绑定到其他IP地址,可以使用
net.bindIp
配置文件设置或
--bind_ip
命令行选项来指定主机名或IP地址的列表。
例如,以下mongod
实例绑定到localhost和My-Example-Associated-Hostname
与ip地址关联的主机名198.51.100.1
:
为了连接到该实例,远程客户端必须指定主机名或其关联的IP地址198.51.100.1
:
确保网络流量可以在集合的所有成员与网络中的所有客户端之间安全地传递。
考虑以下:
确保可以通过可解析的DNS或主机名访问副本集的每个成员。您应该适当地配置DNS名称或设置系统/etc/hosts
文件以反映此配置。
每个成员都必须能够连接到其他每个成员。有关如何检查连接的说明,请参阅 测试所有成员之间的连接。
在部署MongoDB之前,请创建MongoDB用来存储数据文件的目录。
mongod
在存储在
或相关位置的配置文件中指定配置/etc/mongod.conf
。
有关配置选项的更多信息,请参阅“ 配置文件选项”。
如果可能,请使用奇数个数据中心,并选择成员分布,以最大程度地保证即使丢失数据中心,其余副本集成员也可以构成多数或最少提供数据副本的可能性。
决不能部署超过七个投票成员。
对于本教程中的所有配置,请将每个副本集成员部署在单独的系统上。尽管您可能在一个系统上部署多个副本集成员,但是这样做会降低副本集的冗余性和容量。此类部署通常用于测试目的。
本教程假定您已在副本集的每个系统上安装了MongoDB。如果尚未安装MongoDB,请参阅安装教程。
小费
如果可能,请使用逻辑DNS主机名而不是IP地址,尤其是在配置副本集成员或分片群集成员时。逻辑DNS主机名的使用避免了由于IP地址更改而导致的配置更改。
对于地理上冗余的三成员副本集部署,您必须决定如何分发系统。这三个成员可能的分布是:
注意
在两个数据中心之间分布副本集成员可提供优于单个数据中心的好处。在两个数据中心分布中,
如果可能,请在至少三个数据中心中分配成员。对于配置服务器副本集(CSRS),最佳实践是分布在三个(或更多,取决于成员的数量)中心中。如果第三个数据中心的成本过高,则一种分配可能性是,在公司政策允许的情况下,在两个数据中心之间平均分配数据承载成员,并将剩余成员存储在云中。
对于每个成员,mongod
使用以下设置启动实例:
设置replication.replSetName
选项为副本集名称,
如果您的应用程序连接到多个副本集,则每个副本集应具有不同的名称。某些驱动程序通过副本集名称对副本集连接进行分组。
将net.bindIp
选项设置为主机名/ ip或以逗号分隔的主机名/ ips列表,以及
根据您的部署设置任何其他设置。
在本教程中,这三个mongod
实例与以下主机相关联:
副本集成员 | 主机名 |
---|---|
会员0 | mongodb0.example.net |
成员1 | mongodb1.example.net |
成员2 | mongodb2.example.net |
以下示例通过--replSet
和--bind_ip
命令行选项指定副本集名称和ip绑定:
对于,请指定实例的主机名和/或ip地址,远程客户端(包括副本集的其他成员)可以使用该主机名和/或ip地址连接到该实例。<hostname(s)|ip address(es)>
mongod
或者,您也可以在配置文件中指定和:replica set name
ip addresses
要从mongod
配置文件开始,请使用以下--config
选项指定配置文件的路径:
在生产部署中,您可以配置一个初始化脚本 来管理此过程。初始化脚本超出了本文档的范围。
在mongo
外壳上,rs.initiate()
在副本集成员0上运行。
重要
仅在副本集的一个实例rs.initiate()
上运行。
mongod
小费
如果可能,请使用逻辑DNS主机名而不是IP地址,尤其是在配置副本集成员或分片群集成员时。逻辑DNS主机名的使用避免了由于IP地址更改而导致的配置更改。
MongoDB使用默认副本集配置启动副本集。
在某些情况下,您可能希望将一个数据中心中的成员选为主要成员,然后再选择其他数据中心中的成员。您可以修改priority
成员的,使一个数据中心中priority
的成员高于
其他数据中心中的成员。
副本集的某些成员(例如具有网络限制或资源有限的成员)不应成为故障转移中的主要成员。将不应成为主要成员的成员配置为具有优先级0。
例如,要降低位于其中一个站点(在此示例中为mongodb2.example.net
)的成员的相对资格
,请将成员的优先级设置为0.5
。
查看副本集配置以确定members
该成员的
阵列位置。请注意,数组位置与_id
:
将副本集配置对象复制到变量(cfg
在下面的示例中为)。然后,在变量中,为成员设置正确的优先级。然后将变量传递rs.reconfig()
给以更新副本集配置。
例如,要为数组中的第三个成员(即位置2的成员)设置优先级,请发出以下命令序列:
注意
所述rs.reconfig()
壳方法可以强制当前主下台,引起选举。当主要服务器降级时,所有客户端都将断开连接。这是预期的行为。虽然选择一个新主数据库的中值时间通常不应超过12秒,但请始终确保在计划的维护期间进行任何副本配置更改。
这些命令返回后,您将获得一个具有地理位置冗余的三成员副本集。
使用rs.status()
来识别副本集的主。
小费
如果可能,请使用逻辑DNS主机名而不是IP地址,尤其是在配置副本集成员或分片群集成员时。逻辑DNS主机名的使用避免了由于IP地址更改而导致的配置更改。
对于地理上具有冗余性的五成员副本集部署,您必须决定如何分发系统。这五个成员的一些可能的分布是:
注意
在两个数据中心之间分布副本集成员可提供优于单个数据中心的好处。在两个数据中心分布中,
如果可能,请在至少三个数据中心中分配成员。对于配置服务器副本集(CSRS),最佳实践是分布在三个(或更多,取决于成员的数量)中心中。如果第三个数据中心的成本过高,则一种分配可能性是,在公司政策允许的情况下,在两个数据中心之间平均分配数据承载成员,并将剩余成员存储在云中。
对于每个成员,mongod
使用以下设置启动实例:
设置replication.replSetName
选项为副本集名称,
如果您的应用程序连接到多个副本集,则每个副本集应具有不同的名称。某些驱动程序通过副本集名称对副本集连接进行分组。
将net.bindIp
选项设置为主机名/ IP地址或以逗号分隔的主机名/ IP地址列表,以及
根据您的部署设置任何其他设置。
在本教程中,这五个mongod
实例与以下主机相关联:
副本集成员 | 主机名 |
---|---|
会员0 | mongodb0.example.net |
成员1 | mongodb1.example.net |
成员2 | mongodb2.example.net |
成员3 | mongodb3.example.net |
成员4 | mongodb4.example.net |
以下示例通过--replSet
和--bind_ip
命令行选项指定副本集名称和ip绑定:
对于,请指定实例的主机名和/或ip地址,远程客户端(包括副本集的其他成员)可以使用该主机名和/或ip地址连接到该实例。<hostname(s)|ip address(es)>
mongod
或者,您也可以在
配置文件中指定和:replica set name
hostnames/ip
addresses
要从mongod
配置文件开始,请使用以下--config
选项指定配置文件的路径:
在生产部署中,您可以配置一个初始化脚本 来管理此过程。初始化脚本超出了本文档的范围。