MongDB
MongoDB 是由C++语言编写的,基于分布式文件存储的开源数据库系统。是开源的、面向文档的NoSQL(Not Only SQL)数据库,也是当前最热门的NoSql数据库之一。
在高负载的情况下,添加更多的节点,可以保证服务器性能。旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB是介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富的。支持的数据结构非常松散,是类似json的bjson格式,可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
NoSQL的产生就是为了解决大数据量、高扩展性、高性能、灵活数据模型、高可用性。
NoSQL背景解决在Web2.0时代出现的三高要求:
l 对数据库高并发读写的需求
l 对海量数据的高效率存储和访问的需求
l 对数据库的高可扩展性和高可用性的需求
而RDB里面的一些特性,在web2.0里面往往变得不那么重要,比如:
l 数据库事务一致性
l 数据库的实时读写
l 复杂的SQL查询,特别是多表关联查询
CAP定理一个分布式计算系统来说,不可能同时满足以下三点:
l 强一致性(Consistency):系统在执行某项操作后数据状态仍然处于一致,例如在分布式系统中,更新操作执行成功后所有的用户都应该读取到最新的值,这样的系统被认为具有强一致性。
l 可用性(Availability):每一个操作总是能够在一定的时间内返回结果
l 分区容错性(Partitiontolerance):单个节点故障不应导致整个系统崩溃,也就是说尽管网络在节点之间丢弃(或延迟)任意数量的消息,但是系统继续操作。
根据CAP原理将数据库分成了满足CA原则、满足CP原则和满足AP原则三大类
l CA:单点集群,满足一致性,可用性,通常在可扩展性上不太强大,比如RDB
l CP:满足一致性和分区容错性,通常性能不是特别高,如分布式数据库
l AP:满足可用性和分区容错性,通常可能对一致性要求低一些,如大多数的NoSQL
概念副本集(replica set)
MongoDB在1.6版本的基础上开发了新功能replicaset,增加了故障自动切换和自动修复成员节点,各个DB之间数据完全一致,降低了维护成本。auto shared已经明确说明不支持replication Paris,建议使用replica set故障切换。
replica sets的结构类似一个集群,其中一个节点出现故障,其他节点马上回将业务接过来而无需停机操作。
MongoDB的replica set是一个mongod进程实例簇,数据在这个簇中相互复制,并自动进行故障切换。
MongoDB的数据库复制增加了冗余,确保了高可用性,简化了管理任务如备份,并且增加了读能力。大多数产品部署都使用了复制。MongoDB中primary处理写操作,其它进行复制的成员则是secondaries。
下载地址http://www.mongodb.org/downloads
安装使用解压:
# tar -xvfmongodb-linux-x86_64-rhel70-3.4.6.tgz
cd mongodb-linux-x86_64-rhel70-3.4.6
已有二进制文件可以直接运行。
创建数据库文件夹与日志文件
mkdir data
mkdir log
启动:
/root/mongodb-linux-x86_64-rhel70-3.4.6/bin/mongod--dbpath=/root/mongodb-linux-x86_64-rhel70-3.4.6/data --logpath=/root/mongodb-linux-x86_64-rhel70-3.4.6/logs--logappend --auth --port=27017 --fork
PS:配置文件bin/mongodb.conf,配置文件起作用,启动时候加入如下参数--config
内容如下:
dbpath= /root/mongodb-linux-x86_64-rhel70-3.4.6/data
logpath= /root/mongodb-linux-x86_64-rhel70-3.4.6/logs
logappend= true
port =27017
fork =true
auth = true
启动就变成了:
#/root/mongodb-linux-x86_64-rhel70-3.4.6/bin/mongod-f mongo.conf
或者
#/root/mongodb-linux-x86_64-rhel70-3.4.6/bin/mongod--config mongo.conf
客户端CLI只要执行如下:
cd到mongodb目录下的bin文件夹,执行命令./mongo
就可以执行命令:
例如
>show dbs
admin 0.000GB
local 0.000GB
常用参数解释--dbpath 数据库路径(数据文件)
--logpath 日志文件路径
--master 指定为主机器
--slave 指定为从机器
--source 指定主机器的IP地址
--pologSize 指定日志文件大小不超过64M.因为resync是非常操作量大且耗时,最好通过设置一个足够大的oplogSize来避免resync(默认的 oplog大小是空闲磁盘大小的5%)。
--logappend 日志文件末尾添加
--port 启用端口号
--fork 在后台运行
--only 指定只复制哪一个数据库
--slavedelay 指从复制检测的时间间隔
--auth 是否需要验证权限登录(用户名和密码)
问题l "No host described in new configuration 1 forreplica set mongod maps to this node"
答:将主机名字加入到/etc/hosts中
例如
127.0.0.1 hostname
l not authorized on admin to execute command
启动时去掉--auth认证即可。