MongoDB最新4.2.7版本三分片集群修改IP实操演练
背景
重新组网,需要对现有MongoDB分片集群服务器的IP进行更改,因此也需要对MongoDB分片集群的IP也进行相应的更新,而MongoDB分片集群的IP修改不能单纯的通过配置来进行,需要一番折腾后才能正常更新,这里对整个MongoDB集群的IP修改过程做下记录,希望对有同样需求的小伙伴有所帮助。
作者:依乐祝
原文地址:https://www.cnblogs.com/yilezhu/p/13536628.html
原有集群配置如下
| 192.168.147.11 | 192.168.147.16 | 192.168.147.21 |
|---|---|---|
| mongos | mongos | mongos |
| config server | config server | config server |
| shard server1 主节点 | shard server1 副节点 | shard server1 仲裁 |
| shard server2 仲裁 | shard server2 主节点 | shard server2 副节点 |
| shard server3 副节点 | shard server3 仲裁 | shard server3 主节点 |
这里的端口分配如下所示:
| mongos | 20000 |
|---|---|
| config server | 21000 |
| shard server1 | 27001 |
| shard server2 | 27002 |
| shard server3 | 27003 |
IP修改对应关系如下:
| 172.168.7.11 | 172.168.7.11 |
|---|---|
| 172.168.7.16 | 172.168.7.16 |
| 172.168.7.21 | 172.168.7.21 |
更改IP步骤
升级过程是先升级 Config 服务,再分别升级三个 Shard 配置,最后修改一个 mongos 的路由。当然了,在开始之前需要确保MongDB分片集群都已经停掉了。
停掉的步骤也很简单。 ps -ef | grep mongo 找到对应的线程id,然后 kill 掉即可。
修改config 节点的IP
- 用如下命令,以
standlone模式启动一个Config服务
/usr/mongod/bin/mongod --port 21000 --dbpath=/usr/mongod/data
- 新打开一个shell,连接上这个config服务
/usr/mongod/bin/mongo --port 21000
- 进入到
local数据库查看replset集合,并修改对应的host
use local
db.system.replset.find()
cfg = db.system.replset.findOne({_id: 'configs'})
cfg.members[0].host = "172.168.7.11:21000"
cfg.members[1].host = "172.168.7.16:21000"
cfg.members[2].host = "172.168.7.21:21000"
db.system.replset.update({_id: 'configs'}, cfg)
db.system.replset.find()
- 上面最后一行是把修改好的内容查出来以便于查看下修改是否成功。
- 按照同样的步骤以
standlone模式启动启动另外两个config节点,并修改另外两个config服务节点的信息。 - 停掉这三个以
standlone模式启动的config服务节点 - 分别按照正常集群模式启动这三个config节点
/usr/mongod/bin/mongod -f /usr/mongod/conf/config.conf
看到如下所示,说明选举成功了。

登录到
primary节点,修改分片信息
use config
cfg=db.shards.findOne({_id:'shard1'})
cfg.host="shard1/172.168.7.11:27001,172.168.7.16:27001"
db.shards.update({_id:'shard1'},cfg)
cfg = db.shards.findOne({_id: 'shard2'})
cfg.host = "shard2/172.168.7.16:27002,172.168.7.21:27002"
db.shards.update({_id: 'shard2'}, cfg)
cfg = db.shards.findOne({_id: 'shard3'})
cfg.host = "shard3/172.168.7.11:27003,172.168.7.21:27003"
db.shards.update({_id: 'shard3'}, cfg)
- 至此config服务节点的修改完成,接下来进行shard节点的修改
修改shard分片的IP信息
- 以
standlone模式启动分片1,然后登录进去
/usr/mongod/bin/mongod --port 27001 --dbpath=/usr/mongod/shard1/
/usr/mongod/bin/mongo --port 27001
- 切换到
admin数据库的version集合查看下config配置信息,如果有_id:shardIdentity的数据则进行下更新,当然这里如果有_id:minOpTimeRecovery的数据也需要更新
use admin
db.system.version.find()
db.system.version.update({"_id" : "shardIdentity"},{"$set":{"configsvrConnectionString" : "configs/172.168.7.11:21000,172.168.7.16:21000,172.168.7.21:21000"}})
db.system.version.update({"_id" : "minOpTimeRecovery"},{"$set":{"configsvrConnectionString" : "configs/172.168.7.11:21000,172.168.7.16:21000,172.168.7.21:21000"}})
- 修改复制集的配置信息,复制集的配置信息都保存再
local库的system.replset集合中
use local
cfg = db.system.replset.findOne({_id: 'shard1'})
cfg.members[0].host="172.168.7.11:27003"
cfg.members[1].host="172.168.7.16:27003"
cfg.members[2].host="172.168.7.21:27003"
db.system.replset.update({_id:'shard3'},cfg)
db.system.replset.findOne({_id: 'shard3'})
- 重复上述步骤分别对shaed2,shard3进行ip的更改
- 最后按照集群的模式启动你的三个分片即可。
/usr/mongod/bin/mongod -f /usr/mongod/conf/shard1.conf
修改mongos服务的路由信息
- 用vim打开mongos的配置文件,修改对应的
configserver配置项为最新的configderver地址
vim /usr/mongod/conf/mongos.conf

- 按集群模式启动mongos服务即可
/usr/mongod/bin/mongos -f /usr/mongod/conf/mongos.conf
- 登录验证下即可
/usr/mongod/bin/mongo --port 20000
至此,MongoDB分片集群IP修改结束。
MongoDB最新4.2.7版本三分片集群修改IP实操演练的更多相关文章
- mongodb 通过mongodump来备份Sharded Cluste分片集群
1,mongodb所有组件官方文档地址:https://docs.mongodb.com/manual/reference/command/,所有的基础组件都在里面,包括备份恢复的mongodump. ...
- mongoDB研究笔记:分片集群部署
前面几篇文章的分析复制集解决了数据库的备份与自动故障转移,但是围绕数据库的业务中当前还有两个方面的问题变得越来越重要.一是海量数据如何存储?二是如何高效的读写海量数据?尽管复制集也可以实现读写分析,如 ...
- MongoDB 分片集群技术
在了解分片集群之前,务必要先了解复制集技术! 1.1 MongoDB复制集简介 一组Mongodb复制集,就是一组mongod进程,这些进程维护同一个数据集合.复制集提供了数据冗余和高等级的可靠性,这 ...
- (转)MongoDB 分片集群技术
1.1 MongoDB复制集简介 一组Mongodb复制集,就是一组mongod进程,这些进程维护同一个数据集合.复制集提供了数据冗余和高等级的可靠性,这是生产部署的基础. 1.1.1 复制集的目的 ...
- MongoDB 搭建分片集群
在MongoDB(版本 3.2.9)中,分片是指将collection分散存储到不同的Server中,每个Server只存储collection的一部分,服务分片的所有服务器组成分片集群.分片集群(S ...
- MongoDB 分片集群搭建
一.概述 分片是一种在多台机器上分配数据的方法.MongoDB使用分片来支持具有非常大的数据集和高吞吐量操作.有两种解决系统增长的方法:垂直扩展和水平扩展. 垂直扩展涉及增加单个服务器的容量,例如使用 ...
- Mongodb分片集群技术+用户验证
随着数据量持续增多,后续迟早会出现一台机器硬件瓶颈问题的.而mongodb主打的就是海量数据架构,“分片”就用这个来解决这个问题. 从图中可以看到有四个组件:mongos.config server. ...
- 分布式mongodb分片集群
本博客先简单介绍mongodb入门以及单实例以及mongodb的主从(主从官网是不提倡用的,原因后续介绍),副本集,分片. 第一:nosql介绍: 数据库分为关系型数据库与非关系型数据库,及具代表性的 ...
- Mongodb主从复制/ 副本集/分片集群介绍
前面的文章介绍了Mongodb的安装使用,在 MongoDB 中,有两种数据冗余方式,一种 是 Master-Slave 模式(主从复制),一种是 Replica Sets 模式(副本集). Mong ...
随机推荐
- NGINX 上的限流
NGINX 上的限流(译) zlup YP小站 今天 前言 本文是对Rate Limiting with NGINX and NGINX Plus的主要内容(去掉了关于NGINX Plus相关内容) ...
- 动态页面技术(JSP)
JSP技术 jsp脚本和注释 jsp脚本: 1)<%java代码%> ----- 内部的java代码翻译到service方法的内部 2)<%=java变量或表达式> ----- ...
- proj0的具体实现 #CS61B-sp18
https://github.com/Centurybbx/sp18-century/tree/master/proj0 proj0的具体实现在上面的Github中. 在proj0中我明显感受到国外大 ...
- 4-Pandas之数据类型与数据筛选
一.数据类型 1.Pandas的数据类型主要结合了pandas和numpy两个模块中的数据类型,包括以下几种: float int bool datetime64[ns]------>日期类型 ...
- PHP is_link() 函数
定义和用法 The is_link() 函数检查指定的文件是否是一个连接. 如果文件是一个连接,该函数返回 TRUE. 语法 is_link(file) 参数 描述 file 必需.规定要检查的文件. ...
- PHP fstat() 函数
定义和用法 fstat() 函数返回关于一个打开的文件的信息. 该函数将返回一个包含下列元素的数组: [0] 或 [dev] - 设备编号 [1] 或 [ino] - inode 编号 [2] 或 [ ...
- 面试题:JVM 堆内存溢出后,其他线程是否可继续工作?
来源:http://sina.lt/gqaM 最近网上出现一个美团面试题:“一个线程OOM后,其他线程还能运行吗?”.我看网上出现了很多不靠谱的答案.这道题其实很有难度,涉及的知识点有jvm内存分配. ...
- 在新的线程中使用session 出现的问题
Exception in thread "Thread-15" java.lang.IllegalStateException: No thread-bound request f ...
- 网站favicon.ico 图标
favicon.ico一般用于作为缩略的网站图标,它显示在浏览器的地址栏或者标签上.目前主要的浏览器都支持favicon.ico图标. 一.制作favicon图标 1.把图标切成png图片. 2.把p ...
- 【LeetCode/LintCode】 题解丨微软面试题:大楼轮廓
水平面上有 N 座大楼,每座大楼都是矩阵的形状,可以用一个三元组表示 (start, end, height),分别代表其在x轴上的起点,终点和高度.大楼之间从远处看可能会重叠,求出 N 座大楼的外轮 ...