MongoDB高可用方案-主从复制

MongoDB 是当前比较流行的文档型数据库,其拥有易使用、易扩展、功能丰富、性能卓越等特性。

主节点会记录写有关的操作,读操作不记录。这些操作记录在 local 数据库中的 oplog.admin 和 slave 两个集合。slave 记录从节点信息。

从节点会定时去连接主节点,获取主节点的操作日志从而执行主节点一样的操作,从而达到数据同步。从节点的 local 数据库会有 source、me 两个集合。source 记录主节点信息,me 记录从节点标识。

下面看一下怎么一步步搭建 MongoDB 的主从复制节点:

准备两台机器 192.168.1.101 和 192.168.1.102。192.168.1.101 当作主节点, 192.168.1.102 作为从节点。

分别下载 MongoDB 安装程序包。在 192.168.1.101 上建立文件夹/data/MongoDBtest/master,192.168.1.102 建立文件夹/data/MongoDBtest/slave。

在 192.168.1.101 启动 MongoDB 主节点程序。注意后面的这个 “ –master ”参数,标示主节点:

mongod –dbpath /data/MongoDBtest/master–master

输出日志如下,成功:

[initandlisten] MongoDB starting :pid=18285 port=27017 dbpath=/data/MongoDBtest/master master=1

在 192.168.1.102 启动 MongoDB 从节点程序。关键配置:指定主节点 ip 地址和端口 –source 192.168.1.101:27017 和标示从节点 –slave 参数:

mongod –dbpath /data/MongoDBtest/slave–slave –source 192.168.1.101:27017

 

输出日志如下,成功:

[initandlisten] MongoDB starting : pid=17888port=27017 dbpath=/data/MongoDBtest/slave slave=1

 

日志显示从节点从主节点同步复制数据 :

[replslave] repl: from host: 192.168.1.101:27017

 

这样,主从结构的 MongoDB 集群就搭建好了,是不是很简单?

下面我们来看看这个集群能做什么?先登录到从节点 shell 上,执行插入数据:

mongo 127.0.0.1:27017
> db.testdb.insert({"test3":"testval3"});
not master

 

可以看到 MongoDB 的从节点是只能读,不能执行写操作的。

那么如果主服务器挂掉,从服务器可以接替工作吗?

可以试一下,强制关掉主节点上的 MongoDB 进程,登录在从节点上,再次执行插入数据:

> db.testdb.insert({"test3":"testval3"});
not master

看来从节点并没有自动接替主节点的工作,那就只有人工处理了,停止从节点,再以 master 的方式启动从节点,由于从节点上数据跟主节点一样,此时从节点是可以替代主节点工作的,这属于人工切换。

此外,我们可以搭建多个从节点,实现数据库的读写分离,比如主节点负责写,多个从节点负责读,对于移动 APP,绝大部分操作都是读操作,可以实现负荷分担。

© 版权声明

☆ END ☆
喜欢就点个赞吧
点赞0 分享
图片正在生成中,请稍后...