未加星标

mongodb 集群迁移

字体大小 | |
[数据库(综合) 所属分类 数据库(综合) | 发布者 店小二05 | 时间 2017 | 作者 红领巾 ] 0人收藏点击收藏

问题:测试机上有一台全部运行在本地的mongodb集群。由于网络变化。现在本机的ip发生改变。因此 原来配置的绝对ip地址全部不可用。需要迁移。

简单版 每个sharding如果是replica set那么需要重新设置replica set的配置信息到新的ip地址。 停止rs的所有副本。 以standalone模式启动其中一个副本,修改rs.conf 重复以上操作到其他所有副本 重新以rs模式启动所有副本。查看rs的状态确认正确。 修改config server的meta信息为正确的ip地址。 连接到config server 修改 config数据库下 shards集合里的关于sharding的地址为正确的地址。 重启 mongos 和 config server。 详细版 原有配置 mongos实例 x1:运行在192.168.6.81:20202 config server实例 x3:运行在192.168.6.81:36000, 192.168.6.81:36001, 192.168.6.81:36002 三副本replica set实例 x2: 分别运行在 sh0/192.168.6.81:23000,192.168.6.81:23001,192.168.6.81:23002 和 sh1/192.168.6.81:24000,192.168.6.81:24001,192.168.6.81:24002 replica set sh0和sh1已经添加为mongos的两个分片

现在由于路由器配置改变,192.168.6.81这台测试机所在的子网不再可达,因此需要配置此机器的静态IP到新的网段,192.168.1.81。于是原来的mongodb的集群变得不再可用,需要进行迁移。

注意,mongodb要求在配置replica set和sharding时不能使用localhost或127.0.0.1这样的本地环回地址。因此之前虽然所有集群实例都运行在同一台机器上,但是不能用本地环回IP,导致本机IP改变后需要迁移。

0. 停止所有mongodb集群的实例 1. 修改本机IP

打开配置文件修改IP和网关 vim /etc/sysconfig/network-scripts/ifcfg-eth0

2. 修改replica set的配置 以standalone模式运行sh0的其中一个副本 mongod --dbpath sh0-rs0 --port 33333 用mongodb客户端mongo 连接到这个实例 mongo --port 33333 修改replica set的配置信息, replica set的信息都保存在local数据库的system.replset集合中。 use local cfg = db.system.replset.findOne({_id: 'sh0'}) cfg.member[0].host = "192.168.1.81:23000" cfg.member[1].host = "192.168.1.81:23001" cfg.member[2].host = "192.168.1.81:23002" db.system.replset.update({_id: 'sh0'}, cfg) 停止该mongod实例。 对sh0的另外两个副本重复2.1到2.4的操作。 对sh1的三个副本重复2.1到2.4的操作,注意replica set的名字为sh1,端口对应为24000,24001,24002。 mongod --dbpathsh1-rs0 --port 33333 mongo --port 33333 use localcfg = db.system.replset.findOne({_id: 'sh1'}) cfg.member[0].host = "192.168.1.81:24000" cfg.member[1].host = "192.168.1.81:24001" cfg.member[2].host = "192.168.1.81:24002" db.system.replset.update({_id: 'sh1'}, cfg) 3. 重新以replica set模式启动两个副本集sh0 和sh1

配置文件如下


mongodb 集群迁移

此时两个副本集应该已经正常运作,用mongo cli连接后使用命令rs.status()可以查看到状态如下:


mongodb 集群迁移
4. 修改config server的meta信息使得mongos能正确找到后端的mongod实例。 停止之前已经修正并启动的replica set实例。 正常启动第一个config server, 配置如下
mongodb 集群迁移
用cli连接上这台config server实例 mongo --port 36000 修改分片的meta信息 use config cfg = db.shards.findOne({_id: 'sh0'}) cfg.host = "sh0/1921.168.1.81:23000,192.168.1.81:23001,192.168.1.81:23002" db.shards.update({_id: 'sh0'}, cfg) cfg = db.shards.findOne({_id: 'sh1'}) cfg.host = "sh1/1921.168.1.81:24000,192.168.1.81:24001,192.168.1.81:24002" db.shards.update({_id: 'sh1'}, cfg) 重启config server 用上述config server的数据文件到替换另外两个config server的原来的数据文件。 rm -r config1 rm -r config2 cp -r config0config1 cp -r config0config2 启动两个分片副本集sh0, sh1 启动剩下两个config server, config1, config2。 5. 修改mongos的启动配置文件,设置正确的config server地址。
mongodb 集群迁移
6. 启动mongos,此时集群应该已经能正确工作了。

如果出现提示config server无法确认的问题。尝试再次重启config server和mongos。

参考资料 改变replica set主机地址: https://docs.mongodb.com/v2.6/tutorial/change-hostnames-in-a-replica-set/ 迁移config server: https://docs.mongodb.com/v2.6/tutorial/migrate-config-servers-with-different-hostnames/

本文数据库(综合)相关术语:系统安全软件

主题: 360路由器数据数据库
分页:12
转载请注明
本文标题:mongodb 集群迁移
本站链接:http://www.codesec.net/view/520245.html
分享请点击:


1.凡CodeSecTeam转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责;
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。
登录后可拥有收藏文章、关注作者等权限...
技术大类 技术大类 | 数据库(综合) | 评论(0) | 阅读(75)