MongoDB称为分布式数据库,主要原因是1.基于副本集的数据备份, 2.基于切片的数据扩容。副本集解决数据的读写性能问题,切片解决了MongoDB的数据扩容问题。
事实上,MongoDB提供了主从复制和副本复制两种备份方式,在MongoDB的主从复制和副本复制集群环境中,只有一台作为主服务器,另外一台或者多台服务器作为从服务器。
MongoDB称为分布式数据库,主要原因是1.基于副本集的数据备份, 2.基于切片的数据扩容。副本集解决数据的读写性能问题,切片解决了MongoDB的数据扩容问题。
事实上,MongoDB提供了主从复制和副本复制两种备份方式,在MongoDB的主从复制和副本复制集群环境中,只有一台作为主服务器,另外一台或者多台服务器作为从服务器。
Master/Slave主从复制
port=27017 bind_ip=127.0.0.1 dbpath=~/development/mongoDBdata/Master master=true
port=27018 bind_ip=127.0.0.1 dbpath=~/development/mongoDBdata/Slave slave=true source=127.0.0.1:27017
2. 启动主服务器
mongod --bind_ip 127.0.0.1 --dbpath ~/development/mongoDBdata/Master --port 27017 --master
mongod --config Master.conf
mongod --bind_ip 127.0.0.1 --dbpath ~/development/mongoDBdata/Slave --port 27018 --source 127.0.0.1 --slave
mongod --config Slave.conf
mongo 127.0.0.1:27017 use foolbar db.persons.insert({"name":"tom","job":"SE"}); db.persons.find(); >>>{ "_id" : ObjectId("53e0e9afa341791bae80ebc2"), "name" : "tom", "job" : "SE" }
mongo 127.0.0.1:27018 use foolbar db.persons.find(); >>>{ "_id" : ObjectId("53e0e9afa341791bae80ebc2"), "name" : "tom", "job" : "SE" }
db.persons.insert({"name":"Jack","job":"CT"}); >>>not master
Tue Aug 5 22:15:01.954 [initandlisten] waiting for connections on port 27017 Tue Aug 5 22:16:56.748 [initandlisten] connection accepted from 127.0.0.1:59106 #1 (1 connection now open) Tue Aug 5 22:16:57.923 [slaveTracking] build index local.slaves { _id: 1 } --local.slaves是什么?? Tue Aug 5 22:16:57.948 [slaveTracking] build index done. scanned 0 total records. 0.024 secs Tue Aug 5 22:25:29.076 [initandlisten] connection accepted from 127.0.0.1:59247 #2 (2 connections now open) Tue Aug 5 22:26:55.931 [FileAllocator] allocating new datafile ~/development/mongoDBdata/Master/foolbar.ns, filling with zeroes... Tue Aug 5 22:26:56.011 [FileAllocator] done allocating datafile ~/development/mongoDBdata/Master/foolbar.ns, size: 16MB, took 0.079 secs Tue Aug 5 22:26:56.024 [FileAllocator] allocating new datafile ~/development/mongoDBdata/Master/foolbar.0, filling with zeroes... Tue Aug 5 22:26:56.386 [FileAllocator] done allocating datafile ~/development/mongoDBdata/Master/foolbar.0, size: 64MB, took 0.361 secs Tue Aug 5 22:26:56.386 [FileAllocator] allocating new datafile ~/development/mongoDBdata/Master/foolbar.1, filling with zeroes... Tue Aug 5 22:26:56.386 [conn2] build index foolbar.persons { _id: 1 } ---时时的创建索引 Tue Aug 5 22:26:56.387 [conn2] build index done. scanned 0 total records. 0 secs Tue Aug 5 22:26:56.387 [conn2] insert foolbar.persons ninserted:1 keyUpdates:0 locks(micros) w:456090 455ms Tue Aug 5 22:26:56.516 [FileAllocator] done allocating datafile ~/development/mongoDBdata/Master/foolbar.1, size: 128MB, took 0.129 secs Tue Aug 5 22:26:57.295 [initandlisten] connection accepted from 127.0.0.1:59273 #3 (3 connections now open) Tue Aug 5 22:26:57.659 [conn3] end connection 127.0.0.1:59273 (2 connections now open) Tue Aug 5 22:27:14.189 [conn2] end connection 127.0.0.1:59247 (1 connection now open) Tue Aug 5 22:37:32.765 [initandlisten] connection accepted from 127.0.0.1:59454 #4 (2 connections now open) Tue Aug 5 22:37:32.768 [conn4] end connection 127.0.0.1:59454 (1 connection now open)
主从复制配置简单,但是如本文开头所说,主从复制的最大问题在于主服务器的单点故障问题,因此在生产环境中,主从复制使用较少,下一篇将介绍复制的另一种方式副本集复制,这种方式解决了主服务器的单点故障问题(主服务器挂了,Mongo集群自动从从服务器中选出一个Leader来做主服务器)。主从复制和副本集还有一个区别就是主从复制默认情况下已经打开了从服务器的数据读取功能,但是副本集却没有
9. mongoDB关于Master-Slave的配置选项
Master/slave options (old; use replica sets instead): //不推荐使用主从复制,推荐使用副本集
--master master mode //作为主服务器启动MongoDB
--slave slave mode //作为从服务器启动MongoDB
--source arg when slave: specify master as <server:port> //针对从服务器配置,指定主服务器(server:port)
--only arg when slave: specify a single database to replicate //针对从服务器配置,只针对主服务器的一个数据库进行复制,其它的数据库不复制
--slavedelay arg specify delay (in seconds) to be used when applying master ops to slave //针对主服务器配置,指定主从复制的时间间隔,
--autoresync automatically resync if slave data is stale //针对从服务器的设置,数据过期自动同步
10. Master/Slave的动态配置
10.1 上面配置的Master和Slave是在启动时指定了以Master启动还是以Slave启动,MongoDB也支持在运行时由Javascript命令终端动态的对Master和Slave进行配置。
首先可以在从节点的local.sources集合中察看主服务器的server:port以及同步的状态(为什么127.0.0.1没有端口信息?难道是因为默认端口不显示?)
use local db.sources.find() >>>{ "host" : "127.0.0.1", "source" : "main", "syncedTo" : Timestamp(1407254957, 1) }
10.2 停止从服务器,使用如下命令启动服务器(没有指定--source和--slave)
mongod --bind_ip 127.0.0.1 --dbpath ~/development/mongoDBdata/Slave --port 27018
做use local; db.persons.find();操作,发现有一条记录,所以,看到这条文档,以为着这个服务器上次作为Slave启动的,它的Slave角色没有改变,如果不带--slave和--source参数启动,那么主从复制不再维持,主服务器的数据更新不会同步到这台机器,只有以Slave的参数启动才能接收主服务器的数据同步
{ "host" : "127.0.0.1", "source" : "main", "syncedTo" : Timestamp(1407254957, 1) }
10.3 对于全新的数据库,比如删除目录~/development/mongoDBData/Slave之后,再执行10.2的启动脚本,此时通过在local.sources添加一个文档{"host":"127.0.0.1:27017"}会把新启动的独立服务器变为从服务器。
相关推荐
MongoDB是一个广泛使用的开源NoSQL文档数据库,它采用了面向集合的存储方式,使得存储的数据更加灵活。学习MongoDB不仅需要理解其基本的数据操作和管理,还需要了解其高级特性、集群部署、索引机制、日志系统、数据...
此笔记是我个人通过自学整理出来的。希望看到的人有什么建议告诉我。也可以共同去学习!里面内容包括:安装配置、增删改查、用户管理、主从复制、分片、副本集以及和JAVA的结合案例等等!
本压缩包中的学习笔记涵盖了五大主流数据库系统:Oracle、MySQL、MongoDB、Redis以及Neo4j,它们各自拥有独特的特性和用途,适用于不同的场景。 1. Oracle数据库: Oracle是一款关系型数据库管理系统(RDBMS),在...
“Recommended Production Architectures”部分介绍了在生产环境中部署MongoDB的推荐架构,包括主从复制、分片集群和地理冗余方案。这部分内容对于规划和实现高可用性和可扩展性的数据库系统非常有帮助。 #### ...
其次,`mongo笔记.txt`可能是一份文本笔记,包含了个人学习或教学过程中的要点,可能包括更深入的实践细节、示例代码或者常见问题解答。这部分内容可能涵盖: 1. **命令行操作**:如启动、停止MongoDB服务,以及...
以上只是Java中间件学习笔记的部分概述,实际学习中还需要深入理解每个技术的细节,如故障切换逻辑、数据一致性策略、性能调优等,以应对不同场景的需求。对于Java开发者来说,熟练掌握这些中间件技术,能够提升开发...
Redis还支持主从复制和哨兵机制(Sentinel),前者可以实现数据的同步备份,后者则用于管理多个Redis服务器,实现故障转移。Redis集群的建立和管理可以进一步提升数据库的高可用性和扩展性,支持数据分片和负载均衡...
在本视频教程中,我们将深入学习Redis的安装配置、基本操作、数据类型使用、主从复制、持久化策略以及在实际项目中的应用案例。 【MongoDB】 MongoDB是一款面向文档的分布式数据库,适合处理大规模数据。它采用JSON...
在大型项目中,数据库的扩展性和高可用性也需考虑,例如分库分表、读写分离、主从复制等策略。 【开发过程遇到的问题】 开发过程中会遇到各种问题,如代码逻辑错误、异常处理、性能优化等。错误处理是确保程序稳定...
2009年的数据库系统工程师学习笔记可能涵盖了当时该领域的核心概念和技术。以下是对这些笔记可能包含的一些关键知识点的详细说明: 1. **数据库基础理论**: - 数据模型:包括关系模型(如SQL)、网络模型、层次...
主从复制是 Redis 提供的一种高可用性解决方案,通过复制数据到多个从节点,可以在主节点故障时切换到从节点,保证服务不间断。Redis 集群则进一步扩展了这一概念,支持数据的分布式存储和多节点间的自动数据分片,...
数据库学习笔记中涵盖了数据库的多个重要知识点和操作流程,对于想要掌握MySQL的初学者和中级开发者来说,都是非常实用的学习资源。以下是根据提供的文件内容生成的详细知识点: ### MySQL基础安装部署 MySQL安装...
### Redis详细笔记 #### 1. Redis介绍 Redis是一种高性能的键值对存储数据库,它使用C语言编写,能够提供非常高的读写速度。作为NoSQL数据库的一种,Redis旨在解决传统关系型数据库面临的高并发、高可扩展性、高...
它的数据类型包括字符串、哈希、列表、集合和有序集合,以及一些高级特性如发布/订阅、事务、持久化(RDB和AOF)、主从复制和集群等。理解Redis的工作机制和最佳实践,可以帮助我们构建高并发、低延迟的应用。 综上...
7. **数据库**:SQL优化、事务管理、索引原理、主从复制、分布式数据库解决方案如MySql、Oracle、Redis、MongoDB等。 8. **网络编程**:TCP/IP协议、HTTP协议、Socket编程、WebSocket等网络基础知识,以及Netty、...
5,表设计7,锁机制8,分区分表分库9,主从复制 雷迪斯 5.0.6 弹性搜索 亚马逊S3 MongoDB 快速DFS :desktop_computer_selector:服务器 项目 版 文章 Linux CentOS版本6.10 Nginx的 1.16.1 :seedling: 泉全家福...
考虑到文件名 "stepien_tomasz_repo_bazy_danych-main" 中的 "main",这可能是一个项目的主分支,可能包含了源代码、教程、示例、笔记或者测试用例等,帮助学习者深入理解和实践数据库相关的技术。通过这些内容,...