
2.6 版本之前,在 secondary server 中即使使用 background 方式建立索引,secondary 还是会以
foreground 方式建立索引,它导致 secondary 同样引发数据库阻塞问题。2.6 版本修复了这个 Bug,2.6 版之后使用
background 方式建立索引时,真正转向后台运行了。
为了尽量降低建立索引对 MongoDB Server 的影响,有一种方法是把 MongoDB Server 转换成 standalone 模式后建立。具体做法如下:
1.首先把 secondary server 停止,在取消 --replSet 参数,并且更改 MongoDB port 之后重新启动 MongoDB,这时候 MongoDB 将进入 standalone 模式;
2.在 standalone 模式下运行命令 ensureIndex 建立索引,建议使用 foreground 方式运行;
3.建立索引完毕之后关闭 secondary server 按正常方式启动
4.根据上述 1~3 的步骤轮流为 secondary 建立索引,最后把 primary server 临时转换为 secondary server,同样按 1~3 的方法建立索引,再把其转换为 primary server。
这种方式还是比较麻烦的,但可以把建立索引 *** 作对 MongoDB 的影响降到最低,在有些情况下还是值得做的。
首先来说说副本集的添加,由于我们配置了key文件认证,所以启动新节点时,必须制定keyFile,同时制定相同副本集名称。replSet=yuanfenkeyFile=/usr/local/mongodb/etc/mongodb-keyfile启动成功之后,进入副本集的主节点,通过命令rs.add来添加,成功之后,返回OK,如图:查看副本集配置文件,可以看出,新的节点已经加入到配置文件中了。查看集群状态,可以看出,新的节点已经投票选举出身份secondary。"health":1表示节点正常工作了。添加新的节点之后,新的节点需要进行数据同步,通过命令“rs.printSlaveReplicationInfo()”可以看出所有从节点的同步信息。自此我们就可以确定该节点完全OK了。有添加节点需要,就有删除节点需要,删除节点很简单,通过命令rs.remove("ip+端口")。如我删除刚刚添加的节点。也是通过查看配置文件和节点状态来确认节点是否已经删除。有时候想手动更改主节点,可以通过修改节点的优先权来触发节点重新投票。如图先重新申请一个配置文件,将原来的配置文件导入进来。然后修改权限,最后初始化配置文件。7最后通过查看集群状态可以看到集群状态已经改变,主节点和从节点重新切换。主从复制作用:数据备份、读写分离双机热备份:部署两个节点的MongoDB服务,配置一主一从,主节点添加数据,将自动备份到从节点上面,保证主机宕机后数据不丢失,同时可以继续提供数据读取服务(主服务挂掉,从服务将无法在进行写入数据,只能提供数据读取服务)
一主多从:部署多个节点的MongoDB服务,配置一主多从,数据也会自动备份到所有从节点上面,保证主机宕机后数据不丢失,同时可以根据从节点的优先级进行选取新的主节点,继续提供读写服务(主从关系跟服务设置的优先级有直接关系 优先级参数:priority 数字越大优先级越高)
使用上面的方式,在不同服务器上安装并启动MongoDB服务
将启动时使用的配置文件mongodb.conf中添加下面的副文本集名称配置,将权限控制参数改为false(auth=false),然后将服务进行重新启动即可(testrs是自定义的副本集名称)
#使用此设置来配置复制副本集。指定一个副本集名称作为参数,所有主机都必须有相同的名称作为同一个副本集
replSet=testrs
然后启动每个服务的客户端查看当前节点为主节点还是从节点;
1). 如果服务部署在不同服务器上,直接启动/bin目录下的mongo即可 命令:./ mongo
2). 如果服务部署在同一台服务器上,使用不同端口及配置文件进行启动的,启动客户端使用该命令 命令:./mongo 127.0.0.1:27018/
经过上面的一系列 *** 作后,主从配置就完成了,接下来可以进行数据同步测试
第一步:在主库上面切换到admin,然后进行添加数据(命令:db.testdb1.insert([{"name":"zs"}]))
在从库上查询该数据(命令:db.testdb1.find({name:"zs"})),会出现下面如图的错误,因为从库没有查询数据权限,所以需要设置查询权限
设置从库查询权限,使用命令:rs.secondaryOk()
然后在使用查询命令进行查询(命令:db.testdb1.find({name:"zs"}))就会看到如下图的查询结果:
如上图所示,数据已经同步到从库上面了,这样双机热备份就已经实现了,上面的情况不包含权限控制
上面的情况已经完成了MongoDB的主从复制功能,但是我们把权限没有开放,启动时使用的配置中auth配置的值为false,说明没有添加权限,接下来就开放一下权限配置;
首先需要主从之间通信的一个keyFile文件,根据官网提供的说明,这个keyfile是可以任意内容的,只要保证所有集群中的机器都拥有同样的文件即可。
我这里将keyFile文件放到了MongoDB的bin目录下了,使用openssl rand -base64 1024 >/usr/local/mongodb-master/bin/mongodb.key 命令生成;
然后将mongodb.key文件复制到每台从服务上面,在每台服务的启动文件上添加 keyFile=/usr/local/mongodb-master/keyfile/mongodb.key 配置项 ,然后将auth属性值改为true,这样就完成了权限配置
重启主从两个节点,这样主机添加的数据,就会同步到从机上面了!!!
添加或删除从节点参考文章:
https://blog.csdn.net/weixin_44839444/article/details/105666163
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)