Mongo服务器集群配置学习一——主从复制

来源:互联网 发布:阿里云代码托管 编辑:程序博客网 时间:2024/04/19 18:05

主从复制是MongoDB最常用也是最简单的复制操作。常用于数据备份和故障修复等。

下面这个图就是最简单的主从复制的服务器架构

 

 

我将以实验的方式来实现MongoDB的主从复制

实验环境:windows操作系统(一台机器启动多个MongoDB数据库),MongoDB 2.4

说明:

1.MongoDB以配置文件的形式启动

2.以执行保存的bat文件代替每次输入CMD中输入命令

步骤:

1.配置主节点并启动,端口为10001,下图为配置的文件结构

其中config.cnf的内容为

dbpath=D:\mongodb\test\copy\10001\Data
bind_ip=127.0.0.1
port=10001
master=true

用startup.bat启动主节点:mongod -f config.cnf

用shell.bat启动shell:mongo 127.0.0.1:10001

其中master参数为true说明这台是主节点

2.配置从数据库,端口为10002

config.cnf的内容为

dbpath=D:\mongodb\test\copy\10002\Data
bind_ip=127.0.0.1
port=10002
slave=true
source=127.0.0.1:10001

用startup.bat启动从节点:mongod -f config.cnf

用shell.bat启动shell:mongo 127.0.0.1:10002

slave参数设置从节点,source从数据库对应的主节点的地址

3.下面就来做下验证,在10001主节点上的person数据库添加集合baseinfo,并添加一条文档

这个时候再来10002从节点查询,就可以看到这条同样的数据已经复制过来了。

4.其他参数

--only 从节点配置,只复制特定某个数据库

--autoresync 从节点配置,如果主节点与从节点数据不同,则自动重新同步。配置这个节点可以给运行了一段时间的主节点加上一个新节点,则这个新节点会把之前的主节点数据全部同步过来,而不是从现在这个时间同步。

--slavedelay 从节点配置,从数据库延迟同步主数据库的时间

--fastsync 从节点配置,以主节点的数据库快照启动从节点,可以加快启动速度。

--oplogsize 主节点配置,主节点oplog大小,主节点会把数据库操作的日志写在oplog中,从节点参考oplog做复制操作,可以根据自身情况调节日志大小。如果不指定oplogsize大小,mongod将指配5%的可用磁盘空间给他,32位机最小是50M,64位机最小是1G。

动态添加删除主从节点

先看看从节点的对于主节点的配置在哪,在从节点的local数据库的sources集合中,查看信息如下:

现在再启动一台普通的节点,不设置任何主从,端口设为10003

dbpath=D:\mongodb\test\copy\10003\Data
bind_ip=127.0.0.1
port=10003
slave=true

启动后,动态的把10003加入到主从架构中,形成如下的结构

在10003的shell中执行下面脚本即可。

use local

db.sources.insert({"host":"127.0.0.1:10001"})

这样10003就作为10001的从节点了

删除主从关系就用db.sources.remove({"host":"127.0.0.1:10001"})

 

主节点往从节点转移

永久的转移一个损坏的和不可用的主节点A到从节点B,有以下步骤:

1.关闭A节点

2.停止B节点的Mongod

3.对B节点的dbpath目录下的文件进行备份和移动

注:删除local.*是不可撤销的。执行此步骤非常谨慎。

4.在B节点上用--master参数重启Mongod

调换主节点和从节点

有一个主节点A和一个从节点B,如果想调换他们的角色,请按下面的步骤,这里假设A是健康的,可更新的可用的

如果A是不是健康的,但硬件是好的(停电,服务器崩溃等),跳过步骤1和2,并在第8步用B的文件取代所有的文件。

如果A是不是健康的,硬件是不好的,将A替换为一台新机器。可以按照上段中的说明。

1.暂停在A上使用fsync命令

2.确定B是在同步节点A

3.关闭B节点

4.从B的DBPATH目录备份和移动的所有数据文件,并删除现有的数据local.sources。

5.用master选项启动B

6.往B中写入数据,用oplog设置新的同步开始时间点

7.关闭B,当重启时B就有新的一组本地数据

8.关闭A,用备份B的dbpath目录文件复制到A的dbpath中

9.用master选项启动B

10.用通常slave选项启动A,但要包括fastsync参数

 

 


<script type="text/javascript"><!--google_ad_client = "ca-pub-1944176156128447";/* cnblogs 首页横幅 */google_ad_slot = "5419468456";google_ad_width = 728;google_ad_height = 90;//--></script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>