• MongoDB副本集


    在使用MongoDB的时候,为了保证数据的安全,就要考虑数据备份和故障恢复了;同时出于性能的考虑,能够进行读写分离肯定能提升数据库性能。

    所以,在这篇文章中进行副本集的介绍。副本集(Replica Set),就是有自动故障恢复能力的主从集群。

    副本集有一个主节点,同时有一个或多个备份节点。当主节点出现故障的时候,备份节点会通过投票的方式选择出一个新的备份节点。

    副本集初始化

    下面通过一些具体的实践感受一下副本集。

    首先通过下面三个命令启动三个mongodb服务器。其中,"replSet"选项指定了副本集的名称。

    mongod.exe --dbpath="c:mongodbdb
    ode1" --port=11111 --replSet myReplSet --oplogSize=50
    mongod.exe --dbpath="c:mongodbdb
    ode2" --port=22222 --replSet myReplSet --oplogSize=50
    mongod.exe --dbpath="c:mongodbdb
    ode3" --port=33333 --replSet myReplSet --oplogSize=50

    通过服务器的输出可以看到,我们现在需要"rs.initiate()"来初始化副本集。

    下面我们就进行副本集的初始化工作,主要以下步骤:

    1. 首先通过一个MongoDB shell执行"mongo –port=11111"连接到"port=11111"的服务器上
    2. 然后定义配置信息"myReplSet_config"
    3. 最后通过"rs.initiate(myReplSet)"初始化副本集

    在初始化命令完成后,可以通过"rs.status()"命令查看副本集的状态。

    在上面的输出中,有几个字段需要注意一下:

    • "health":这个表示该节点的状态是否正常
    • "state":这个字段表示该节点是什么类型的节点
    • "stateStr":表示当前同步的状态,RECOVERING表示正在同步数据;SECONDARY表示已经成功同步,可以正常使用

    现在,通过"Ctrl+c"命令来停止"port=11111"这个节点,然后打开一个新的cmd窗口连接到"port=22222"的服务器上。

    再次使用"rs.status()"命令查看副本集的状态。可以看到"port=11111"的"health"状态变成了0,同时"port=22222"的服务器变成了主节点。

    如果,我们再次启动"port=11111",那么它将成为一个备份节点,这里就不截图演示了。

    动态添加删除节点

    有些时候,会有需求加入新的节点,那么就可以使用下面的命令来动态添加删除节点

    1 mongod.exe --dbpath="c:mongodbdb
    ode4" --port=44444 --replSet myReplSet --oplogSize=50
    2 rs.add("127.0.0.1:44444")
    3 rs.status()
    4 rs.remove("127.0.0.1:44444")
    5 rs.status()

     

    读写分离

    副本集不仅仅可以保证数据的安全,还可以通过读写分离来降低主节点的读数据压力。

    接着上面的例子,通过主节点插入一些数据。

    当我们想通过备份节点读取数据的时候,将得到以下错误,提示我们"slaveOk"属性是false。

    但是,通过"rs.slaveOk()"命令,就可以设置备份节点的读操作了。

    通过读写分离可以很大程度上建设主节点的读写压力,但是这种方式也有一些问题,备份节点的数据会相对滞后,所以读出的数据可能不是最新的。

    总结

    通过这篇文章,大概了解了副本集的使用。通过使用副本集,可以使数据得到进一步的保护,通过读写分离也可以进行读写性能的优化。

    Ps:本文中所有的命令都可以参考以下链接

    http://files.cnblogs.com/wilber2013/replicaSet.js

  • 相关阅读:
    【状压】孤岛营救问题
    【网络流】魔术球问题
    【状压】软件补丁问题
    [网络流]最大流
    [网络流]小M的作物
    简单版AC自动机
    KMP
    sql 检索字符串
    Mysql触发器 :当一个表发生插入或更新时,将数据同步到另一张表中
    sql server触发器 :当一个表发生插入或更新时,将数据同步到另一张表中
  • 原文地址:https://www.cnblogs.com/wilber2013/p/4152121.html
Copyright © 2020-2023  润新知