前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MONGODB 复制集建立及节点的添加

MONGODB 复制集建立及节点的添加

作者头像
AustinDatabases
发布2019-08-06 10:50:04
1.6K0
发布2019-08-06 10:50:04
举报
文章被收录于专栏:AustinDatabasesAustinDatabases
本来今天应该是MYSQL 的文字,但最近MONGODB 群里面貌似很多人有类似的问题,所以MYSQL 直方图的文字的下个礼拜 1 了

MONGODB 复制集合添加从节点其实并不难,但有些事情越是觉得容易,越容易出问题。最近某些事情的原因,公司的MONGODB 需要添加一个从节点,hidden 不进行投票选举,供给第三方使用。

首先强调一点,任何操作必须先经过检验,下面就从一个测试复制集群的搭建到一个节点的添加来做一个完整的试验。

试验包含三台机器,244 245 246

为了操作添加节点的事宜,先将244,245 两个节点作为MONGODB 的初始集群。其实网络上安装的帖子很多,总结以下的一些问题

1 以root 账号来操作数据库,在任何数据库中都不要使用ROOT 来作为操作数据库的账号

2 建议安装时不要使用RPM包,其实这个事情在其他数据库也是一样,PG,MYSQL, 都不建议你用RPM包来进行安装。

3 安装集群比安装单机多一道的手续,就是需要在确定的第一台MONGODB 上添加账号信息,需要添加 root权限的账号 而这台primary(有可能是也有可能不是),在添加账号时,需要时单机的模式

4 生成keyfile file 文件的权限需要 600并且所有集群中的 keyfile文件的内容需要时一致的

例如,下面的错误其实就是因为 keyfile 的内容存在问题,而导致的MONGODB 的节点无法加入的错误信息。

在生成正确的 keyfile 后,初始化集群就OK 了

OK 下面我们就需要去来做深层次的试验

1 添加一个新的节点, 而添加一个新的节点也有几种情况

1.1 添加的节点的集群,没有什么数据(只比第二种方式减少锁库,解库,拷贝时间紧的环节)

1.2 添加节点的集群,已经有了大量的数据

我们先讨论 1.2 的情况,如果我现在的集群已经有大量的数据的情况下,是否需要先将数据直接拷贝到需要添加的节点后,在添加节点,这样的方式是被推荐的,而一般来说我们需要先锁定被拷贝的数据库,然后拷贝数据,在拷贝完毕后,在将数据库解锁。

一般为了避免影响业务(一般来说已经有了1主两从的情况下),我们找到一台从库,将数据库锁定(也就是不在接受新的数据)

操作步骤

1 登录到从库,rs.slaveOk() 运行此命令保证可以在从库可以进行相关后续命令的操作

2 我们将数据目录下的数据拷贝到需要添加的节点,此时要加入的节点不应该启动

而不巧的是,在测试时我拷贝的数据,拷贝错误,拷贝到了primary 库(当然是成心的),而primary 库不会阻拦你copy 数据并且覆盖数据,在拷贝的同时 mongo 的服务直接就停止了,并且在次启动mongodb 报错

并且系统提示4.03 版本可能会修复这个问题,但是目前这样的错误,是无法补救的,所以拷贝数据的时候一定要看清楚位置。

OK 为了继续做这个实验,我们将mongodb 中已经被毁掉的主库的数据清空,在此重新启动被损坏的服务器,启动后,再次查看rs.status()

可以看到 主库已经变为 原来的从库

这也是提醒大家,MONGODB 的重要库一定要跑在复制集中,并且就算主库被毁,将数据清空后,从新启动mongo 服务后,毁掉的节点会自动添加回原来的复制集,并作为从节点工作。

OK ,这次继续刚才的试验

我们再次停止从库的写入,开始复制数据到新的从库,然后复制完毕,解开从库的写入限制,然后启动第二个从库。

启动成功

然后我们开始添加新的节点

rs.add({host:"10.50.132.246:27027"})

添加成功

但我们现在的要求是,新添加的节点要hidden 并且不能进行选举和被选举。

1 cfg_rs = rs.conf();

我们将系统中已经存在的信息复制到变量当中

2 cfg_rs;

查看变量是否正确

3

cfg_rs.members[2].votes = 0;

cfg_rs.members[2].priority = 0;

我们将需要改变的节点进行设置

rs.reconfig(cfg_rs);

整体的任务结束,我们来查看我们当前的设置是否生效

OK 设置已经完成,节点2 已经配置成功 成功hidden, no-votes , priority = 0 的节点。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-08-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AustinDatabases 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 MongoDB
腾讯云数据库 MongoDB(TencentDB for MongoDB)是腾讯云基于全球广受欢迎的 MongoDB 打造的高性能 NoSQL 数据库,100%完全兼容 MongoDB 协议,支持跨文档事务,提供稳定丰富的监控管理,弹性可扩展、自动容灾,适用于文档型数据库场景,您无需自建灾备体系及控制管理系统。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档