本篇文章给大家分享的是有关MONGODB复制集建立及节点的添加是怎样的,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
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 了
下面我们就需要去来做深层次的试验
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 服务后,毁掉的节点会自动添加回原来的复制集,并作为从节点工作。
这次继续刚才的试验
我们再次停止从库的写入,开始复制数据到新的从库,然后复制完毕,解开从库的写入限制,然后启动第二个从库。
启动成功
然后我们开始添加新的节点
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 的节点。
以上就是MONGODB复制集建立及节点的添加是怎样的,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注亿速云行业资讯频道。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。