MongoDB主从复制

本文涉及的产品
云数据库 MongoDB,通用型 2核4GB
简介:

  在生产环境中单台数据库已不能满足业务需求,数据库主从复制在架构中使用很常见,用于备份、高可用、读写分离来提高数据处理性能和冗余,常用架构模式是一主一从、一主多从、双主。但MongoDB中还不能做到双向同步,因此无法实现双主。那我们这次架构采用的是一主一从,在生产环境中主主要承担写操作,从承担读操作。

环境说明:

OS:CentOS6.5_x64

主(Master):192.168.0.201

从(Slave):192.168.0.202

主从数据库目录都在 /usr/local/mongodb/data

日志目录 /usr/local/mongodb/logs

1、主mongodb配置

1
2
3
[root@localhost ~] # mkdir /usr/local/mongodb/data
[root@localhost ~] # mkdir /usr/local/mongodb/logs
[root@localhost ~] # mkdir /usr/local/mongodb/conf

1
2
3
4
5
6
7
8
9
[root@localhost ~] # vi /usr/local/mongodb/conf/mongod.conf
port=27017        #端口号
fork= true         #以守护进程方式运行
logpath= /usr/local/mongodb/logs/mongodb .log   #日志文件
logappend= true    #日志输出方式
dbpath= /usr/local/mongodb/data   #数据库位置
maxConns=1024     #数据库最大连接数
master= true       #主模式
oplogSize=2048    #日志滚动,单位M

2、从Mongodb配置

1
2
3
[root@localhost ~] # mkdir /usr/local/mongodb/data
[root@localhost ~] # mkdir /usr/local/mongodb/logs
[root@localhost ~] # mkdir /usr/local/mongodb/conf

1
2
3
4
5
6
7
8
9
10
[root@localhost ~] # vi /usr/local/mongodb/conf/mongod.conf
port=27017
fork= true
logpath= /usr/local/mongodb/logs/mongodb .log
logappend= true
dbpath= /usr/local/mongodb/data
maxConns=1024
slave= true                   #从模式
source =192.168.0.201:27017   #指定主Mongodb
autoresync= true              #自动同步

3、添加环境变量并启动Mongodb

1
2
3
4
5
6
[root@localhost ~] # echo "PATH=$PATH:/usr/local/mongodb/bin" >> /etc/profile
[root@localhost ~] # source /etc/profile
[root@localhost ~] # mongod -f /usr/local/mongodb/conf/mongod.conf #启动
[root@localhost ~] # netstat -tupln | grep mongod
tcp     0  0 0.0.0.0:28017  0.0.0.0:*     LISTEN     1923 /mongod 
tcp     0  0 0.0.0.0:27017  0.0.0.0:*     LISTEN     1923 /mongod

#主上日志信息看出主数据库允许让192.168.0.202从数据库45458端口连接

wKioL1LIzS7yUi5ZAADOoAuUd2s661.jpg

#从上日志信息看出开始同步192.168.0.201主数据库

wKiom1LIzSfzEVdvAAC24wIiJrU519.jpg

4、测试Mongodb主从复

#创建一个数据库test,集合名也是test,插入一个字段AGE:18。然后再从数据库showdbs;查看已经同步过去。语法与Mysql有很大区别。

1
2
3
4
5
6
7
8
9
10
[root@localhost ~] # mongo
MongoDB shell version:2.4.9-rc0
> use  test
> db. test .save({AGE:18})
> db. test . find ()
"_id"  :ObjectId( "52addd66124c02eb8b2d1a5a" ),  "AGE"  : 18 }
> show dbs
local    2.0771484375GB
test     0.203125GB
>

主日志

wKiom1LIzdbh614lAADq-fpf3yk473.jpg

从日志

wKiom1LIzf_w7fOIAAClPWySRiM169.jpg

创建数据库后,由上主从日志看出,主允许从连接,从同步主数据(applied 1 operations)。主数据库操作记录为OpLog日志,说明主从数据库原理是定期从主服务器中获取oplog记录,然后在本机上执行。

5、查看主从复制状态

#查看主

wKioL1LIziuC2LXOAAGv_bRs8cA553.jpg

1
2
3
4
5
6
7
8
9
10
[root@localhost ~] # mongo
MongoDB shell version:2.4.9-rc0
connecting to:  test
>db.printReplicationInfo()
configured oplog size:   2048MB
log length start to end:1494secs (0.42hrs)
oplog first event  time :  Sun Dec 15 2013 10:55:37 GMT-0500 (EST)
oplog last event  time :   Sun Dec 15 2013 11:20:31 GMT-0500 (EST)
now:                     Sun Dec 15 2013 11:20:33GMT-0500 (EST)
>

#查看从

wKioL1LIzjehSOsgAAFfgtITTFE089.jpg

1
2
3
4
5
6
7
8
9
[root@localhost ~] # mongo
MongoDB shell version: 2.4.9-rc0
connecting to:  test
>db.printReplicationInfo()
this is a slave, printingslave replication info.
source :   192.168.0.201:27017
          syncedTo: Sun Dec 15 2013 11:18:31GMT-0500 (EST)
                  = 21 secs ago (0.01hrs)
>

#关闭Mongodb数据库

[root@localhost ~]# mongod -f/usr/local/mongodb/conf/mongod.conf --shutdown

#写一个简单的SysV管理脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[root@localhost ~] # vim /etc/init.d/mongod
#!/bin/bash
#chkconfig: 35 80 20
#description: Mongodb service control script
PROG= "/usr/local/mongodb/bin/mongod"
CONF= "/usr/local/mongodb/conf/mongod.conf"
case  $1  in
         start)
         $PROG -f $CONF &>  /dev/null
         echo  "Starting mongodb:                 [ OK ]"
         ;;
         stop)
         $PROG -f $CONF -- shutdown  &>  /dev/null
         echo  "Shutting down mongodb:                    [ OK ]"
         ;;
         restart)
         $0 stop
         $0 start
         ;;
         *)
         echo  "Usage: $0 {start|stop|restart}"
esac

1
2
3
[root@localhost ~] # chmod +x /etc/init.d/mongod
[root@localhost ~] # chkconfig --add mongod
[root@localhost ~] # chkconfig mongod on

Mongdb主从复制就完事了,比Myslq简单吧,比较灵活。


相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。   相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
目录
相关文章
|
5月前
|
NoSQL Cloud Native MongoDB
MongoDB 主从集群 2
MongoDB 主从集群 2
|
17天前
|
监控 NoSQL 算法
【MongoDB】 MongoDB的副本集是什么?
【4月更文挑战第1天】【MongoDB】 MongoDB的副本集是什么?
|
5月前
|
存储 NoSQL 网络协议
MongoDB 主从集群 1
MongoDB 主从集群 1
|
2月前
|
运维 NoSQL Linux
MongoDB详解(六)——MongoDB主从同步配置
MongoDB详解(六)——MongoDB主从同步配置
48 5
|
9月前
|
NoSQL MongoDB 数据库
【mongo 系列】mongodb 学习九,MongoDB 主从集群 2
继续咱们 mongodb 集群的学习和分享 上次分享了 mongodb 主从集群的同步机制(oplog),心跳机制,这次我们继续看看选举机
|
8月前
|
NoSQL MongoDB 数据库
MongoDB-复制集特点
MongoDB 复制集特点 !> 复制集中必须有一个主节点 • 主节点主要负责写入数据和读取 • 复制集中除了主节点以外的节点我们称之为 副节点: • 副节点默认情况下只能读取数据, 不能写入数据 • 副节点主要负责从主节点不断复制数据
35 0
|
9月前
|
存储 NoSQL 网络协议
【mongo 系列】mongodb 学习八,MongoDB 主从集群 1
说到集群,生产环境中很多服务都会进行集群部署,那么 mongodb 的集群都有哪些知识点需要掌握呢
100 0
|
12月前
|
NoSQL Linux MongoDB
MongoDB学习笔记(四) 集群搭建之主从复制
MongoDB学习笔记(四) 集群搭建之主从复制
526 0
|
NoSQL Shell 数据库