Mongodb 学习笔记7:复制

主从复制——数据备份、数据恢复、读写分离

建立一个主节点和一个或者多个从节点,每个从节点要知道主节点的地址。

  • mongodb文件夹放在D盘和E盘,模拟放在多服务器上。
  • 启动D盘上的mongodb,把该数据库指定为主数据库:

>mongod --dbpath='XXX' --master, 端口还是默认的27017。

 

  • 同样的方式启动E盘上的mongodb,指定该数据库为从属数据库,命令也很简单,当然我们要换一个端口, source 表示主数据库的地址。

           >mongod --dbpath=xxxx --port=8888 --slave --source=127.0.0.1:27017

数据同步测试:

  • 再增加一台从属数据库,而不一开始指定主数据库。主或者从属数据库中都有一个叫做local的集合,主要是用于存放内部复制信息。F盘再拷贝一份mongodb的运行程序。如图:红色框内提示没有主数据库。

增加主数据库,完成同步:


 副本集 ——自动故障恢复功能的主从集群。

与上面最大区别是: 

  1. 该集群没有特定的主数据库,整个集群选举出一个“主节点”
  2.  如果哪个主数据库宕机了,集群中就会推选出一个从属数据库作为主数据库顶上,这就具备了自动故障恢复功能 
  •  初始化副本集

 首先,给副本集起名,为了易于区别其他副本集,也为了将整个集合视为一个整体,这里取名为“sunny”。

--replSet作用是让服务器知道在这个副本集下还有哪些服务器。(此处需要计算机主机名:LLT。不能用127.0.0.1

 

 

 

 

也可以继续添加服务器:

>mongod --dbpath=f:\mongodb\db --port=4444 --replSet sunny/127.0.0.1:3333

或者

>mongod --dbpath=f:\mongodb\db --port=4444 --replSet sunny/127.0.0.1:3333,127.0.0.1::2222

副本集的一个亮点就是有自动检测功能:在其中指定单台服务器后,mongodb就会自动搜索并连接其余的节点。

启动几台服务器之后,log日志显示:副本集没有初始化。

 

在shell中初始化副本集:

可以任意连接其中一台服务器,但是一定要进入admin集合。

 

 查看日志:端口为2222的已经成为主数据库服务器。

  •  副本集中的节点
  1. standard:常规节点,存储完整数据副本,可参与投票,能成为活跃节点,优先权大的成为活动节点可能性大
  2. passive:被动节点,优先权为0,存储完整数据副本,可参与投票,不能成为活跃节点
  3. arbiter:仲裁节点,只参与投票,不接收复制数据,也不能成为活跃节点。

 设置仲裁节点:

先添加一个节点F

设置仲裁节点:

查看各节点的状态:

 

  •  故障切换和活跃节点选举

如果活跃节点坏了,其余节点会选一个新的活跃节点。新的活跃节点将是优先级最高的节点,优先级相同则数据较新的节点获胜。

 


 oplog——operation log,主节点的操作记录,存储在local数据库(用于存放所有内部复制状态,主从节点都有,其内容不会被复制)oplog.$main集合中。 每个文档都代表主节点上执行的一个操作。只记录改变数据库状态的操作,因为其只是作为主从节点保持数据同步的机制。

其中一些键的含义:

  •  ts  跟踪执行操作的时间
  • ns 执行操作的命名空间(集合名)
  • op 操作类型 (i 插入)
  • o 执行操作的文档

 从节点跟不上同步时,复制就会停下,从节点需要重新做完整的同步。可以用{“resync”:1}命令手动执行重新同步,也可以启动从节点时使用--autoresync自动重新同步。重新同步的代价很大,应该避免。因此主节点的oplog要足够大,能放相当长时间的操作记录。启动服务器时可以用 --oplpgSize指定大小 ,单位MB。


复制认证

主从节点都需要在本地数据库中添加用户,每个节点的用户名和口令都要相同。local数据库中的用户类似admin中的用户,能够读写整个服务器。

posted @ 2013-05-03 14:57  lucyawei  阅读(178)  评论(0编辑  收藏  举报