在本页面
对于大多数副本集,该members[n].host
字段中的主机名
永不更改。但是,如果组织需求发生变化,则可能需要迁移部分或全部主机名。
注意
members[n].host
在副本集配置中,始终将可解析的主机名用作该字段的值,
以避免混淆和复杂性。
小费
如果可能,请使用逻辑DNS主机名而不是IP地址,尤其是在配置副本集成员或分片群集成员时。逻辑DNS主机名的使用避免了由于IP地址更改而导致的配置更改。
本文档提供了两个单独的过程来更改members[n].host
字段中的主机名。使用以下两种方法之一:
在不中断可用性的情况下更改主机名。这种方法可确保您的应用程序始终能够将数据读取和写入副本集,但是这种方法可能会花费很长时间,并且可能会导致应用程序层停机。
如果使用第一个过程,则必须将应用程序配置为在旧位置和新位置都连接到副本集,这通常需要在应用程序层重新启动和重新配置,这可能会影响应用程序的可用性。重新配置应用程序超出了本文档的范围。
立即停止所有使用旧主机名运行的成员。这种方法的维护周期较短,但是副本集在操作过程中将不可用。
也可以看看
副本集重新配置过程, 部署副本集以及 将成员添加到副本集中。
database0.example.com:27017
(主要的)database1.example.com:27017
database2.example.com:27017
并具有以下rs.conf()
输出:
以下过程按如下方式更改成员的主机名:
mongodb0.example.net:27017
(首要的)mongodb1.example.net:27017
mongodb2.example.net:27017
使用最适合您的部署过程。
此过程使用以上假设。
对于副本集中的每个辅助节点,执行以下操作序列:
停止辅助服务器。
在新位置重新启动辅助服务器。
打开mongo
连接到副本集主数据库的外壳。在我们的示例中,主要服务器在端口上运行,27017
因此您将发出以下命令:
用于使用新的主机名rs.reconfig()
更新副本集配置文档。
例如,以下命令序列在副本集配置文档1
中的
members
阵列(即members[1]
)的阵列索引处更新辅助服务器的主机名:
有关更新配置文档的更多信息,请参见 示例。
确保您的客户端应用程序能够在新位置访问集合,并且辅助应用程序有机会赶上集合的其他成员。
对集合中的每个非主要成员重复上述步骤。
打开mongo
连接到主节点的外壳,然后使用以下rs.stepDown()
方法退出主节点:
副本集选举另一个成员成为主要成员。
降级成功后,请关闭旧的主数据库。
mongod
在新位置启动将成为新主实例的实例。
连接到刚刚选择的当前主节点,并使用要成为新主节点的节点的主机名更新副本集配置文档。
例如,如果旧的主服务器在位,0
新的主服务器的主机名为mongodb0.example.net:27017
,则应运行:
打开mongo
连接到新主数据库的外壳。
要确认新配置,请rs.conf()
在
mongo
外壳中调用。
您的输出应类似于:
此过程使用以上假设。
以下过程读取并更新数据库中的system.replset
集合local
。
如果您的部署强制访问控制,执行过程的用户必须
find
和update
对特权行为
system.replset
的集合。
要创建提供必要特权的角色:
以具有管理用户和角色(例如具有userAdminAnyDatabase
角色的用户)特权的用户身份登录。以下过程使用myUserAdmin
在“ 启用访问控制 ”中创建的
。
创建一个用户角色,该角色为数据库中的system.replset
集合提供必要的特权
local
:
将角色授予将执行重命名过程的用户。例如,以下假定现有的用户
"userPerformingRename"
在admin
数据库中。