MongoDB 主从复制小实验
操作环境描述:WIN8 64位操作系统,内装虚拟机为CentOS 5.5 32位系统。
操作描述:跟其他关系型数据库类似,在主库进行数据操作,将数据同步到从节点,从节点可以配置多个。在本次试验中,master节点为主节点,我们在master节点中的对数据的插入、修改、删除操作都会同步到slave1和slave2节点。
以下为实验步骤:
(1)建立数据目录,数据目录用来存放过程中的数据。
[root@h3 dbs]# pwd
/var/lib/mongo/dbs
[root@h3 dbs]# ls
master slave1 slave2
[root@h3 dbs]#
(2)启动master节点:
启动master
[root@h3 dbs]# mongod --dbpath /var/lib/mongo/dbs/master --port 10000 --master --rest --nojournal
Fri Aug 2 14:10:25.498 [initandlisten] MongoDB starting : pid=19491 port=10000 dbpath=/var/lib/mongo/dbs/master master=1 32-bit host=h3
Fri Aug 2 14:10:25.498 [initandlisten]
Fri Aug 2 14:10:25.498 [initandlisten] ** NOTE: This is a 32 bit MongoDB binary.
Fri Aug 2 14:10:25.498 [initandlisten] ** 32 bit builds are limited to less than 2GB of data (or less with --journal).
Fri Aug 2 14:10:25.498 [initandlisten] ** Note that journaling defaults to off for 32 bit and is currently off.
Fri Aug 2 14:10:25.499 [initandlisten] ** See http://dochub.mongodb.org/core/32bit
Fri Aug 2 14:10:25.499 [initandlisten]
Fri Aug 2 14:10:25.500 [initandlisten] db version v2.4.5
Fri Aug 2 14:10:25.500 [initandlisten] git version: a2ddc68ba7c9cee17bfe69ed840383ec3506602b
Fri Aug 2 14:10:25.500 [initandlisten] build info: Linux bs-linux32.10gen.cc 2.6.21.7-2.fc8xen #1 SMP Fri Feb 15 12:39:36 EST 2008 i686 BOOST_LIB_VERSION=1_49
Fri Aug 2 14:10:25.500 [initandlisten] allocator: system
Fri Aug 2 14:10:25.500 [initandlisten] options: { dbpath: "/var/lib/mongo/dbs/master", master: true, nojournal: true, port: 10000, rest: true }
Fri Aug 2 14:10:25.540 [FileAllocator] allocating new datafile /var/lib/mongo/dbs/master/local.ns, filling with zeroes...
Fri Aug 2 14:10:25.542 [FileAllocator] creating directory /var/lib/mongo/dbs/master/_tmp
Fri Aug 2 14:10:26.094 [FileAllocator] done allocating datafile /var/lib/mongo/dbs/master/local.ns, size: 16MB, took 0.545 secs
Fri Aug 2 14:10:26.094 [FileAllocator] allocating new datafile /var/lib/mongo/dbs/master/local.0, filling with zeroes...
Fri Aug 2 14:10:26.763 [FileAllocator] done allocating datafile /var/lib/mongo/dbs/master/local.0, size: 16MB, took 0.667 secs
Fri Aug 2 14:10:26.785 [initandlisten] command local.$cmd command: { create: "startup_log", size: 10485760, capped: true } ntoreturn:1 keyUpdates:0 reslen:37 12 45ms
Fri Aug 2 14:10:26.796 [initandlisten] ******
Fri Aug 2 14:10:26.796 [initandlisten] creating replication oplog of size: 50MB...
Fri Aug 2 14:10:26.799 [FileAllocator] allocating new datafile /var/lib/mongo/dbs/master/local.1, filling with zeroes...
Fri Aug 2 14:10:30.116 [FileAllocator] done allocating datafile /var/lib/mongo/dbs/master/local.1, size: 64MB, took 3.314 secs
Fri Aug 2 14:10:30.243 [initandlisten] ******
Fri Aug 2 14:10:30.245 [initandlisten] waiting for connections on port 10000
Fri Aug 2 14:10:30.247 [websvr] admin web console waiting for connections on port 11000
Fri Aug 2 14:16:52.604 [initandlisten] connection accepted from 127.0.0.1:33749 #1 (1 connection now open)
Fri Aug 2 14:16:53.885 [slaveTracking] build index local.slaves { _id: 1 }
Fri Aug 2 14:16:53.894 [slaveTracking] build index done. scanned 0 total records. 0.008 secs
(3)启动slave1节点:
[root@h3 ~]# mongod -dbpath /var/lib/mongo/dbs/slave1 --port 10001 --slave --rest --nojournal --source localhost:10000
Fri Aug 2 14:16:50.050 [initandlisten] MongoDB starting : pid=19513 port=10001 dbpath=/var/lib/mongo/dbs/slave1 slave=1 32-bit host=h3
Fri Aug 2 14:16:50.051 [initandlisten]
Fri Aug 2 14:16:50.052 [initandlisten] ** NOTE: This is a 32 bit MongoDB binary.
Fri Aug 2 14:16:50.053 [initandlisten] ** 32 bit builds are limited to less than 2GB of data (or less with --journal).
Fri Aug 2 14:16:50.053 [initandlisten] ** Note that journaling defaults to off for 32 bit and is currently off.
Fri Aug 2 14:16:50.054 [initandlisten] ** See http://dochub.mongodb.org/core/32bit
Fri Aug 2 14:16:50.055 [initandlisten]
Fri Aug 2 14:16:50.055 [initandlisten] db version v2.4.5
Fri Aug 2 14:16:50.056 [initandlisten] git version: a2ddc68ba7c9cee17bfe69ed840383ec3506602b
Fri Aug 2 14:16:50.056 [initandlisten] build info: Linux bs-linux32.10gen.cc 2.6.21.7-2.fc8xen #1 SMP Fri Feb 15 12:39:36 EST 2008 i686 BOOST_LIB_VERSION=1_49
Fri Aug 2 14:16:50.057 [initandlisten] allocator: system
Fri Aug 2 14:16:50.058 [initandlisten] options: { dbpath: "/var/lib/mongo/dbs/slave1", nojournal: true, port: 10001, rest: true, slave: true, source: "localhost: 10000" }
Fri Aug 2 14:16:50.080 [FileAllocator] allocating new datafile /var/lib/mongo/dbs/slave1/local.ns, filling with zeroes...
Fri Aug 2 14:16:50.081 [FileAllocator] creating directory /var/lib/mongo/dbs/slave1/_tmp
Fri Aug 2 14:16:50.520 [FileAllocator] done allocating datafile /var/lib/mongo/dbs/slave1/local.ns, size: 16MB, took 0.412 secs
Fri Aug 2 14:16:50.521 [FileAllocator] allocating new datafile /var/lib/mongo/dbs/slave1/local.0, filling with zeroes...
Fri Aug 2 14:16:51.512 [FileAllocator] done allocating datafile /var/lib/mongo/dbs/slave1/local.0, size: 16MB, took 0.989 secs
Fri Aug 2 14:16:51.520 [initandlisten] command local.$cmd command: { create: "startup_log", size: 10485760, capped: true } ntoreturn:1 keyUpdates:0 reslen:37 14 41ms
Fri Aug 2 14:16:51.524 [websvr] admin web console waiting for connections on port 11001
Fri Aug 2 14:16:51.525 [initandlisten] waiting for connections on port 10001
Fri Aug 2 14:16:52.577 [replslave] build index local.sources { _id: 1 }
Fri Aug 2 14:16:52.583 [replslave] build index done. scanned 0 total records. 0.004 secs
Fri Aug 2 14:16:52.595 [replslave] repl: syncing from host:localhost:10000
Fri Aug 2 14:16:52.657 [replslave] build index local.me { _id: 1 }
Fri Aug 2 14:16:52.662 [replslave] build index done. scanned 0 total records. 0.004 secs
Fri Aug 2 14:19:24.330 [replslave] repl: checkpoint applied 15 operations
Fri Aug 2 14:19:24.330 [replslave] repl: syncedTo: Aug 2 14:19:14 51fb4f62:1
(4)启动slave2节点:
[root@h3 ~]# mongod -dbpath /var/lib/mongo/dbs/slave2 --port 10002 --slave --rest --nojournal --source localhost:10000
Fri Aug 2 14:22:07.693 [initandlisten] MongoDB starting : pid=19596 port=10002 dbpath=/var/lib/mongo/dbs/slave2 slave=1 32-bit host=h3
Fri Aug 2 14:22:07.694 [initandlisten]
Fri Aug 2 14:22:07.695 [initandlisten] ** NOTE: This is a 32 bit MongoDB binary.
Fri Aug 2 14:22:07.696 [initandlisten] ** 32 bit builds are limited to less than 2GB of data (or less with --journal).
Fri Aug 2 14:22:07.696 [initandlisten] ** Note that journaling defaults to off for 32 bit and is currently off.
Fri Aug 2 14:22:07.697 [initandlisten] ** See http://dochub.mongodb.org/core/32bit
Fri Aug 2 14:22:07.698 [initandlisten]
Fri Aug 2 14:22:07.698 [initandlisten] db version v2.4.5
Fri Aug 2 14:22:07.699 [initandlisten] git version: a2ddc68ba7c9cee17bfe69ed840383ec3506602b
Fri Aug 2 14:22:07.700 [initandlisten] build info: Linux bs-linux32.10gen.cc 2.6.21.7-2.fc8xen #1 SMP Fri Feb 15 12:39:36 EST 2008 i686 BOOST_LIB_VERSION=1_49
Fri Aug 2 14:22:07.700 [initandlisten] allocator: system
Fri Aug 2 14:22:07.701 [initandlisten] options: { dbpath: "/var/lib/mongo/dbs/slave2", nojournal: true, port: 10002, rest: true, slave: true, source: "localhost:10000" }
Fri Aug 2 14:22:07.713 [FileAllocator] allocating new datafile /var/lib/mongo/dbs/slave2/local.ns, filling with zeroes...
Fri Aug 2 14:22:07.714 [FileAllocator] creating directory /var/lib/mongo/dbs/slave2/_tmp
Fri Aug 2 14:22:07.997 [FileAllocator] done allocating datafile /var/lib/mongo/dbs/slave2/local.ns, size: 16MB, took 0.278 secs
Fri Aug 2 14:22:07.999 [FileAllocator] allocating new datafile /var/lib/mongo/dbs/slave2/local.0, filling with zeroes...
Fri Aug 2 14:22:08.373 [FileAllocator] done allocating datafile /var/lib/mongo/dbs/slave2/local.0, size: 16MB, took 0.373 secs
Fri Aug 2 14:22:08.381 [initandlisten] command local.$cmd command: { create: "startup_log", size: 10485760, capped: true } ntoreturn:1 keyUpdates:0 reslen:37 668ms
Fri Aug 2 14:22:08.383 [initandlisten] waiting for connections on port 10002
Fri Aug 2 14:22:08.386 [websvr] admin web console waiting for connections on port 11002
Fri Aug 2 14:22:09.391 [replslave] build index local.sources { _id: 1 }
Fri Aug 2 14:22:09.397 [replslave] build index done. scanned 0 total records. 0.005 secs
Fri Aug 2 14:22:09.398 [replslave] repl: syncing from host:localhost:10000
Fri Aug 2 14:22:09.405 [replslave] build index local.me { _id: 1 }
Fri Aug 2 14:22:09.409 [replslave] build index done. scanned 0 total records. 0.003 secs
(5)链接master,插入一条数据:
[root@h3 ~]# mongo localhost:10000
MongoDB shell version: 2.4.5
connecting to: localhost:10000/test
Server has startup warnings:
Mon Aug 12 08:23:21.713 [initandlisten]
Mon Aug 12 08:23:21.713 [initandlisten] ** NOTE: This is a 32 bit MongoDB binary.
Mon Aug 12 08:23:21.713 [initandlisten] ** 32 bit builds are limited to less than 2GB of data (or less with --journal).
Mon Aug 12 08:23:21.714 [initandlisten] ** Note that journaling defaults to off for 32 bit and is currently off.
Mon Aug 12 08:23:21.714 [initandlisten] ** See http://dochub.mongodb.org/core/32bit
Mon Aug 12 08:23:21.714 [initandlisten]
> use test;
switched to db test
> db.test.find();
> db.test.insert({'host': '1000'});
> db.test.find();
{ "_id" : ObjectId("52082b99d30e16a12c0f4277"), "host" : "1000" }
>
(6)连接slave1节点,查询结果:
[root@h3 ~]# mongo localhost:10001
MongoDB shell version: 2.4.5
connecting to: localhost:10001/test
Server has startup warnings:
Mon Aug 12 08:23:34.870 [initandlisten]
Mon Aug 12 08:23:34.872 [initandlisten] ** NOTE: This is a 32 bit MongoDB binary.
Mon Aug 12 08:23:34.872 [initandlisten] ** 32 bit builds are limited to less than 2GB of data (or less with --journal).
Mon Aug 12 08:23:34.872 [initandlisten] ** Note that journaling defaults to off for 32 bit and is currently off.
Mon Aug 12 08:23:34.872 [initandlisten] ** See http://dochub.mongodb.org/core/32bit
Mon Aug 12 08:23:34.872 [initandlisten]
> use test;
switched to db test
> db.test.find();
{ "_id" : ObjectId("52082b99d30e16a12c0f4277"), "host" : "1000" }
>
(7)连接slave2节点,查询结果:
[root@h3 ~]# mongo localhost:10002
MongoDB shell version: 2.4.5
connecting to: localhost:10002/test
Server has startup warnings:
Mon Aug 12 08:23:38.074 [initandlisten]
Mon Aug 12 08:23:38.075 [initandlisten] ** NOTE: This is a 32 bit MongoDB binary.
Mon Aug 12 08:23:38.076 [initandlisten] ** 32 bit builds are limited to less than 2GB of data (or less with --journal).
Mon Aug 12 08:23:38.077 [initandlisten] ** Note that journaling defaults to off for 32 bit and is currently off.
Mon Aug 12 08:23:38.078 [initandlisten] ** See http://dochub.mongodb.org/core/32bit
Mon Aug 12 08:23:38.078 [initandlisten]
> use test;
switched to db test
> db.test.find();
{ "_id" : ObjectId("52082b99d30e16a12c0f4277"), "host" : "1000" }
>
(8)执行修改操作,结果如下:
> db.test.update({'host': '1000'}, {'server': 'master'}); // master节点修改数据
> db.test.find() //master节点查看数据
{ "_id" : ObjectId("52082b99d30e16a12c0f4277"), "server" : "master" }
>
> db.test.find(); // slave1 节点查看数据
{ "_id" : ObjectId("52082b99d30e16a12c0f4277"), "server" : "master" }
>
> db.test.find(); // slave2节点查看数据
{ "_id" : ObjectId("52082b99d30e16a12c0f4277"), "server" : "master" }
>
(9)执行删除操作,结果如下:
> db.test.remove(); //master节点删除数据
> db.test.find(); //master节点查看数据
>
> db.test.find(); //slave1节点查看数据
>
> db.test.find(); //slave2节点查看数据
>
(9)在slave节点上进行数据插入和修改:
> db.test.insert({"host": "10001"});
not master
> db.test.remove();
not master
>
备注:
(1)MongoDB通过以上方式配置的主从同步只能在master端对数据进行新增、修改、删除操作,在slave节点只能进行查看操作。
(2)启动服务参数解释:
--dbpath /var/lib/mongo/dbs/master 指定数据存放目录为 /var/lib/mongo/dbs/master
--port 10000指定监听端口为10000
--master说明开启的是master服务进程
--slave 说明开启的是slave服务进程
--source localhost:10000 指定数据源为的地址为 localhost:100000
(3)服务启动后,可以通过:http://localhost:11000 查看master相关信息;查看http://localhost:10001、http://localhost:10002查看slave节点的信息。
分享到:
相关推荐
实验目的搭建mongoDB主从复制 主 192.168.0.4 从 192.168.0.7 mongodb的安装 1: 下载mongodb www.mongodb.org 下载最新的stable版 查看自己服务器 适合哪个种方式下载(wget 不可以的 可以用下面方式下载) wget ...
主从复制可以用来做数据库的备份,故障恢复,读写分离。 本实验使用Mongodb 3.2版本,我们先查看一下mongod的帮助 [root@localhost mongodb]# mongod --help .....省略 Master/slave options (old; use replica ...
在分布式系统中,为了确保数据的高可用性和容错性,MongoDB提供了两种复制模式:master-slave(主从模式)和master-master(主主模式)。本实验将深入探讨这两种模式的工作原理、设置方法以及它们在实际应用中的优...
- MySQL用户授权和主从复制:学习如何使用GRANT命令进行权限管理,以及MySQL的bin-log日志在主从复制中的作用。 - MySQL分区理论与实验:介绍MySQL的分区技术,包括范围分区、列表分区、哈希分区等,以及如何在实际...
例如,主从复制可以确保数据的一致性,而分布式数据库则能处理更大的数据量和更高的并发访问。 在这个压缩包中,可能包含的资料可能有: 1. 教程文档:介绍数据库基础、SQL语法、数据库设计等内容。 2. 实验指导书...
在本笔记中,我们将详细介绍 Redis 的基本概念、安装、数据类型、Keys 命令、持久化方案、主从复制、集群等方面的知识点。 1. 什么是 NoSql? NoSql 是为了解决高并发、高可用、高可扩展、大数据存储等一系列问题...
对于大型项目,数据库的复制与集群也是重要课题,如主从复制、读写分离等。 在"db_lab-master"文件中,你可能还会遇到数据库脚本、实验报告模板、测试数据和解决方案。通过这些实践,你可以深化对数据库概念的理解...
3. **复制与集群**:通过主从复制或集群技术,确保数据冗余和高可用性。例如,MySQL的主从复制,Google Cloud Spanner的全局一致性。 4. **并行处理与查询优化**:在大规模数据集上执行查询时,数据库会使用并行...
主从复制、分片和读写分离是优化数据库性能的常见策略。 5. **缓存技术**:为了加速数据访问,网站会使用缓存,如Redis、Memcached。它们存储常用数据,减少对数据库的直接访问,提高响应速度。 6. **CDN(Content ...
8. **数据库集群与复制**: 集群可以提高数据库的可用性和可扩展性,主从复制可以实现数据冗余和故障切换,提高服务稳定性。 9. **NoSQL数据库**: 在大数据和分布式计算背景下,NoSQL数据库如MongoDB、Cassandra提供...
9. **数据库复制与集群**:了解主从复制、读写分离以及数据库集群的概念,以提高可用性和容错性。 10. **云数据库服务**:如AWS的RDS、Azure SQL Database或Google Cloud SQL等,了解如何在云端部署和管理数据库。 ...
这个项目压缩包文件"uth-distributed-systems-projects-main"很可能包含了学生们的项目代码、文档和实验报告,这些资料可以为我们揭示以下几个关键知识点: 1. 分布式计算模型:学生们可能会研究和实现不同的分布式...