MongoDB(来自于英文单词“Humongous”,中文含义为“庞大”)是可以应用于各种规模的企业、各个行业以及各类应用程序的开源数据库。作为一个适用于敏捷开发的数据库,MongoDB的数据模式可以随着应用程序的发展而灵活地更新。与此同时,它也为开发人员 提供了传统数据库的功能:二级索引,完整的查询系统以及严格一致性等等。 MongoDB能够使企业更加具有敏捷性和可扩展性,各种规模的企业都可以通过使用MongoDB来创建新的应用,提高与客户之间的工作效率,加快产品上市时间,以及降低企业成本。
MongoDB是专为可扩展性,高性能和高可用性而设计的数据库。它可以从单服务器部署扩展到大型、复杂的多数据中心架构。利用内存计算的优势,MongoDB能够提供高性能的数据读写操作。 MongoDB的本地复制和自动故障转移功能使您的应用程序具有企业级的可靠性和操作灵活性。
在大数据的时代,传统的关系型数据库要能更高的服务必须要解决高并发读写、海量数据高效存储、高可扩展性和高可用性这些难题。不过就是因为这些问题Nosql诞生了。
在nosql数据库里,大部分的查询都是键值对(key、value)的方式。MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中最像关系数据库的。支持类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。所以这个非常方便,我们可以用sql操作MongoDB,从关系型数据库迁移过来,开发人员学习成本会大大减少。如果再对底层的sql API做一层封装,开发基本可以感觉不到mongodb和关系型数据库的区别。同样MongoDB也是号称自己能够快速搭建一个高可用可扩展的的分布式集群,网上有很多搭建的文章,在我们搭建的时候还需要查找修改很多东西,所以把自己实战的步骤记录下来以备忘。我们看看如何一步一步搭建这个东东。
副本集具有多个副本保证了容错性,就算一个副本挂掉了还有很多副本存在,并且解决了“主节点挂掉了,整个集群内会自动切换”。
由图可以看到客户端连接到整个副本集,不关心具体哪一台机器是否挂掉。主服务器负责整个副本集的读写,副本集定期同步数据备份,一但主节点挂掉,副本节点就会选举一个新的主服务器,这一切对于应用服务器不需要关心。我们看一下主服务器挂掉后的架构:
副本集中的副本节点在主节点挂掉后通过心跳机制检测到后,就会在集群内发起主节点的选举机制,自动选举一位新的主服务器。看起来很牛X的样子,我们赶紧操作部署一下!
官方推荐的副本集机器数量为至少3个,那我们也按照这个数量配置测试。
1、学习了搭建 MongDB 复制环境,实验环境是在虚拟机上同一系统,并搭建三节点 Replica Set。192.168.119.136:27018当作副本集主节点,192.168.119.136:27019、192.168.119.136:27020、192.168.119.136:27021作为副本集副本节点。
2、分别在每台机器上建立mongodb副本集测试文件夹
mkdir -p /home/marsli/mongodb/data01
mkdir -p /home/marsli/mongodb/data02
mkdir -p /home/marsli/mongodb/data03
mkdir -p /home/marsli/mongodb/data04
配置文件
touch /home/marsli/mongodb/data01/mongodb_27018.conf
vi写入
fork = true
port = 27018
dbpath = /home/marsli/mongodb/data01
logpath = /home/marsli/mongodb/data01/mongo.log
logappend = true
replSet = xy
touch /home/marsli/mongodb/data02/mongodb_27019.conf
vi写入
fork = true
port = 27019
dbpath = /home/marsli/mongodb/data02
logpath = /home/marsli/mongodb/data02/mongo.log
logappend = true
replSet = xy
touch /home/marsli/mongodb/data03/mongodb_27020.conf
vi写入
fork = true
port = 27020
dbpath = /home/marsli/mongodb/data03
logpath = /home/marsli/mongodb/data03/mongo.log
logappend = true
replSet = xy
touch /home/marsli/mongodb/data04/mongodb_27021.conf
vi写入
fork = true
port = 27021
dbpath = /home/marsli/mongodb/data04
logpath = /home/marsli/mongodb/data04/mongo.log
logappend = true
replSet = xy
启动任意一个节点mongodb
连接mongo
初始化副本集
config = {_id:"xy", members:[{_id:0,host:"192.168.119.136:27018"},{_id:1,host:"192.168.119.136:27019"},{_id:2,host:"192.168.119.136:27020"},{_id:3,host:"192.168.119.136:27021",arbiterOnly:true}]}
#初始化副本集配置
rs.initiate(config);
#查看集群节点的状态
rs.status();