MongoDB
MongoDB是专为可扩展性,高性能和高可用性而设计的数据库。它可以从单服务器部署扩展到大型、复杂的多数据中心架构。利用内存计算的优势,MongoDB能够提供高性能的数据读写操作。 MongoDB的本地复制和自动故障转移功能使您的应用程序具有企业级的可靠性和操作灵活性。
Replication:
Replica Sets:
一组mongod进程,用来提供相同的数据集。
副本集提供的数据冗余以及数据高可用是软件开发以及部署的基础。
由一些数据节点和可选的仲裁节点组成,其中数据节点只有一个primary node,其他都为secondary nodes。
Redundancy and Data Availability:
Replication提供了数据冗余及数据高可用性,通过将数据拷贝到不同的数据服务器,相较于单节点部署数据服务,Replication提供了数据容错性,可以避免数据的丢失。
有时,还可提高数据的读取能力,当客户端读取数据时,可以在不同的数据服务器上面获取数据。将数据拷贝到不同的数据服务器可以构建一个分布式的存储系统。
Primary Node:
primary node接受所有的读请求。
将所有的操作记录都记录到了oplog 中。
默认情况下,读取的操作也是发生在primary node。
如图所示:主节点接受所有的写操作,然后从节点复制oplog进行数据同步。
一个 replica set中至多一个 primary node,当parimary node失效,将会从secondary nodes中选取一个新的 primary node。
在一个三节点的replica set中,primary node失效,将从secondary nodes中选取新的 primary node
在 replica set中,一般设计的node数量都为奇数,若为偶数的话,需要添加一个 arbiter node。 arbiter不存储数据,只用来选举。
当主节点失效时,可以将secondary变为primary
Secondary Node:
secondary node通过读取primary node 上面的 oplog 来异步拷贝数据。
一个副本集可以有不止一个secondary node。
副本集不可以用来写数据,但可以通过配置,来从副本集读取数据。
一个三节点副本集有两个secondary node 和一个 primary node
Sharding:
是一种在多台机器上构建分布式数据存储的方法。
对于单节点的数据服务系统,存储大量的数据或构建高吞吐量的应用是一项艰巨的挑战。举例来说:频繁的查询会耗尽CPU的资源,当存储很大的数据时会占用很多的磁盘空间。
对于这种问题来说 ,一般有两种方式去解决:
垂直拓展:
通过增加单个服务器的能力来实现, 比如使用更强大的CPU, 增加更多的内存或存储空间(由于现有技术的局限性, 不能无限地增加单个机器的配置)
水平拓展:
通过将系统数据集划分到多台机器, 并根据需要添加服务器来提升容量.(可以降低总体成本, 但这种方式会提高基础设施部署维护的复杂性)MongoDB通过分片来支持水平拓展。
Sharded Cluster:
Shard:每个shard包含被分片数据集中的一个子集。
mongos:查询路由,在客户端和sharded cluster之间。
config servers:存储shard的元数据信息。