当前位置:操作系统 > Unix/Linux >>

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

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

主从复制是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参数
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,