阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

RHEL7下MongoDB 3.0安装及启动

215次阅读
没有评论

共计 10234 个字符,预计需要花费 26 分钟才能阅读完成。

MongoDB 简介

MongoDB 是一个开源的文档型数据库,支持索引,有复制功能(复制集 replSet),支持数据分片等,可以搭建一个高性能,高可用,易扩展的服务器集群。

与 MySQL 相比不同有:
1. 非关系型,数据自包含,虽然相似的文档存储在一个集合中,但文档之间没有关系,集合与集合之间也类似
2. 没有表,行的概念,与之对应的是集合和文档,也没有外键,连接,但在 3.2 版本,提供了左外连接另一个集合
3. 无模式,集合中的文档结构不固定,可以存储各式各样的文档
4. 不支持事务,但不代表不能用于管理重要数据(MySQL 的 MYISAM 存储引擎也不支持事务 …)

数据库中的一条记录就是一个文档,文档可以嵌套文档,结构类似于 JSON,官方称 BSON,多个文档组成集合,多个集合组成了数据库。

本文主要记录一下,MongoDB 一些概念和术语,关于 MongoDB 的操作、集群的搭建、会在后续整理

database:存储文档和集合,和 MySQL 一样,可以使用 use <db> 选择一个数据库,如果选中的数据库不存在,在第一次操作数据库时直接创建数据库
      比如:
    use myDb
    db.book.insert({“x”:1})
    就会创建一个 myDb 数据库和一个 book 集合
collection:存储文档,相当于 RDBMS 的表,我们可以对集合进行,添加,删除,更新,查询文档,创建和删除索引等,当第一次插入数据时就隐式的创建集合,
      还可以使用 db.createCollection() 显式的创建集合,在 3.2 版本可以指定插入时,对文档验证。
      此外还有一个特殊的集合,固定集合,它的大小是固定的,
      比如 db.createCollection(“log”, { capped: true, size: 10000} )    只能存储 10000 字节的数据
            db.createCollection(“log”, { capped : true, size : 10000, max : 5000} ) 只能存储 10000 字节的数据并且文档数目不超过 5000 条
document:数据存储的地方,文档结构就和 JSON 类似

首先看一下 MongoDB 支持的数据类型:
1. String:字符串 UTF-8;
2. Integer:32 位 int or 64 位 long;
3. Double:浮点数;
4. Boolean:true or false;
5. Null:空值或不存在的字段;
6. Array:[1, 2, 3]
7. ObjectId:每个文档都有一个唯一标识 “_id”,它就是 ObjectId 类型的,再插入时,一般不用我们指定,数据库会自动生成,当然我们也可以在插入文档时指定这个字段的值,但要    保证唯一,不然插入会报错,”_id” 是数据库默认的一个索引;
8. Date:64 位整数,存储的是从 1970.1.1 到现在的毫秒数,var date = new Date(); 直接存储的话,在数据库好像慢了 8h,(+ 8 时区)
9. Timestamp:时间戳,64 位的值,var a = new Timestamp();
10. Regular Expression:正则表达式,查询时的限定条件,语法与 JavaScript 的相同
11. Binary:二进制数据
11. Min key,
12. Max key。

当不同的类型进行排序时,各类型的值从低到高为:
1. MinKey (internal type)
2. Null
3. Numbers (ints, longs, doubles)
4. Symbol, String
5. Object
6. Array
7. BinData
8. ObjectId
9. Boolean
10. Date
11. Timestamp
12. Regular Expression
13. MaxKey (internal type)

以上是一些常用的类型
文档的局限性:每个文档最大不能超过 16M,对于向电影,图片等大文件 MongoDB 使用 GridFS 来进行分块存储

> db.foo.insert({
… … “String”:”UTF-8 string”,
… … “Integer”:NumberLong(1461334508012),
… … “Double”:3.14159265,
… … “Boolean”:true,
… … “Null”:”null”,
… … “Array”:[1, 2, 3, “a”],
… … “Date”:new Date(),
… … “Timestamp”:new Timestamp()
… … })
WriteResult({“nInserted” : 1})
> db.foo.find()
{“_id” : ObjectId(“571a33d6ef35d50971b1c675”),  “String” : “UTF-8 string”,
  “Integer” : NumberLong(“1461334508012”),        “Double” : 3.14159265,
  “Boolean” : true,      “Null” : “null”,        “Array” : [1, 2, 3, “a”],
  “Date” : ISODate(“2016-04-22T14:23:18.762Z”),  “Timestamp” : Timestamp(1461334998, 1)
}

索引,同关系型数据库一样,都是为了提高查询速度的,再分片时,片键的前提是索引,随着索引的增加,数据总容量的增加,数据库写入的速度逐渐变慢,之前专门针对 MongoDB 进行了测试,测试服务器是 128G 内存,34CPU… 测试报告也会整理贴出来,找机会把 MySQL 也测试对比一下。

关于聚合,目前项目主要的操作就是插入和查询,暂不写了,以后用到在更新

存储引擎 :3.0 以前默认的存储引擎是 MMAPV1,3.0 版本开始支持 WiredTiger 存储引擎,3.2 版本 WT 引擎设置为了默认,这两个的一些区别,简单说下,锁的粒度不同,MMAPV1 为 集合级别锁 ,WT 为 文档级别锁,在高并发写入时,WT 性能高;WT 引擎应该是完全兼容 MMAPV1 引擎的,支持文档压缩,更详细的看 MongoDB 的发布说明吧

复制:就是跨多个服务器数据同步的过程,能够提高数据的冗余性和可用性。
副本集 replSet 其实就是拥有相同数据集的一组 mongod 进程,其中包含三种类型的成员:主节点,次要节点,仲裁节点(不存储数据,只是用来投票的)。
客户端所有的写操作均在主节点上执行,相关的操作都记录在 oplog 操作日志里,从节点通过异步复制 oplog,然后把相应的操作应用到自己的数据集上。当主节点不可用或者和其他节点不通讯超过 10 秒,自动故障转移,副本集会自动选出一个节点当主节点,而仲裁服务器就是确保这个选举正常进行。
副本集最低要求是:一个主节点,一个从节点,一个仲裁节点
一个标准的配置是一个主节点,两个次要节点,共三个成员
如果你的副本集成员数为偶数个,那么添加一个仲裁节点,变成奇数

关于副本集更多的介绍详见官方文档 https://docs.mongodb.org/manual/core/replication-introduction/

分片:就是把数据按照指定的规则(片键)拆分到分片服务器上,减轻服务器的读写压力,另外可以很方便的扩展

身份验证:MongoDB 默认是不开启访问控制的,可使用 –auth 或者 设置 security.authorization 启用认证,
MongoDB 的用户权限有:
“read”:读权限
“readWrite”:读写权限
“dbAdmin”:执行管理命令权限,如创建或删除索引,查看统计
“dbOwner”:相当于联合 readWrite,dbAdmin 和 userAdmin
“userAdmin”:创建,删除和管理用户的权限

admin 数据库中相关权限,只在 admin 数据库中可用
“clusterAdmin”:分片和复制集命令权限,最大的集群操作权限
“readAnyDatabase”:所有数据库的读权限
“readWriteAnyDatabase”:所有数据库的读写权限
“dbAdminAnyDatabase”:所有数据库的 dbAdmin 权限
“userAdminAnyDatabase”:所有数据库的 userAdmin 权限

超级用户权限
“root”:可访问所有资源,所有操作
此外还可以自定义用户角色

写得有点乱,,接下来就在虚拟机里面模拟一个 MongoDB 集群,并用 Java 写个客户端测试,搭建和测试集群时,分为开启访问控制和不开启访问控制两种。

更多详情见请继续阅读下一页的精彩内容:http://www.linuxidc.com/Linux/2016-04/130593p2.htm

更多 MongoDB 相关教程见以下内容

CentOS 编译安装 MongoDB 与 mongoDB 的 php 扩展 http://www.linuxidc.com/Linux/2012-02/53833.htm

CentOS 6 使用 yum 安装 MongoDB 及服务器端配置 http://www.linuxidc.com/Linux/2012-08/68196.htm

Ubuntu 13.04 下安装 MongoDB2.4.3 http://www.linuxidc.com/Linux/2013-05/84227.htm

MongoDB 入门必读(概念与实战并重) http://www.linuxidc.com/Linux/2013-07/87105.htm

Ubunu 14.04 下 MongoDB 的安装指南 http://www.linuxidc.com/Linux/2014-08/105364.htm

《MongoDB 权威指南》(MongoDB: The Definitive Guide)英文文字版[PDF] http://www.linuxidc.com/Linux/2012-07/66735.htm

Nagios 监控 MongoDB 分片集群服务实战 http://www.linuxidc.com/Linux/2014-10/107826.htm

基于 CentOS 6.5 操作系统搭建 MongoDB 服务 http://www.linuxidc.com/Linux/2014-11/108900.htm

MongoDB 安装

 使用的版本为 3.0,虚拟机操作系统为 rhel-server-7.0-x86_64
1. 将 mongodb-linux-x86_64-rhel70-3.0.11.tgz 上传并解压到 /usr/local/mongodb 目录下
2. 设置环境变量
# vi /etc/profile
添加 export PATH=$PATH:/usr/local/mongodb/bin
# source /etc/profile
# mongo -version
MongoDB shell version: 3.0.11

Ok 接下测试一下

首先新建一个目录,MongoDB 相关的数据文件都在放在此目录下
# mkdir /data/mongodb

MongoDB 启动


 

启动 MongoDB 时,可以在命令行中添加参数,也能把参数写在配置文件中
1. 参数写在配置文件中
参数种类有很多,有关于日志的,数据库的,网络的,集群的等 …
详细的参数以及说明详见官网:https://docs.mongodb.org/manual/reference/configuration-options/

在 /data/mongodb 目录下新建一个配置文件 mongo.conf
注意:缩进内容不支持 tab 只能用空格 …
配置文件的内容为:
systemLog:
  destination: file
  path: “/data/mongod.log”
  logAppend: true
storage:
  dbPath: /data/mongodb
  journal:
      enabled: true
  directoryPerDB: true
processManagement:
  fork: true
net:
  bindIp: 127.0.0.1
  port: 27017

启动 mongod 服务
# mongod –config /data/mongodb/mongo.conf
about to fork child process, waiting until server is ready for connections.
forked process: 3037
child process started successfully, parent exiting

服务启动成功
# ps -aux|grep mongod
root      3037  1.8  1.6 490120 46544 ?        Sl  10:28  0:00 mongod –config /data/mongodb/mongo.conf
root      3049  0.0  0.0 112640  980 pts/0    S+  10:28  0:00 grep –color=auto mongod

连接到 mongo shell
# mongo –port 27017
MongoDB shell version: 3.0.11
connecting to: 127.0.0.1:27017/test
>

Ok 启动完毕

2. 命令行指定参数
命令行启动就更简单了直接输入命令回车即可
mongod –port=27017 –dbpath=/data/mongodb –logpath=/data/mongod.log –logappend –directoryperdb –fork

关于配置文件和命令行选项参数,我觉得可以把各个服务器共享的配置写在文件里,针对性的配置,放在命令行中,比较好统一管理

简单说明一下使用到的参数:
–port:端口号
–dbpath:数据库文件存放路径
–logpath:日志存放位置
–logappend:日志追加到文件末尾
–directoryperdb:true 使用一个单独的目录为每个数据库来存储数据
–fork:后台运行
journal:启用日志记录,当服务器断电,意外重启等可以防止数据丢失

此外,现在的机器基本是多 CPU,多内存块,如果我们直接使用 mongod 命令启用会得到一个警告
WARNING: You are running on a NUMA machine.

只需要在原启动命令前添加  numactl –interleave=all  即可,比如上面的启动命令
# cd /usr/local/mongodb/bin/
numactl –interleave=all ./mongod –port=27017 –dbpath=/data/mongodb –logpath=/data/mongod.log –logappend –directoryperdb –fork

MongoDB 的详细介绍:请点这里
MongoDB 的下载地址:请点这里

本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-04/130593.htm

MongoDB 简介

MongoDB 是一个开源的文档型数据库,支持索引,有复制功能(复制集 replSet),支持数据分片等,可以搭建一个高性能,高可用,易扩展的服务器集群。

与 MySQL 相比不同有:
1. 非关系型,数据自包含,虽然相似的文档存储在一个集合中,但文档之间没有关系,集合与集合之间也类似
2. 没有表,行的概念,与之对应的是集合和文档,也没有外键,连接,但在 3.2 版本,提供了左外连接另一个集合
3. 无模式,集合中的文档结构不固定,可以存储各式各样的文档
4. 不支持事务,但不代表不能用于管理重要数据(MySQL 的 MYISAM 存储引擎也不支持事务 …)

数据库中的一条记录就是一个文档,文档可以嵌套文档,结构类似于 JSON,官方称 BSON,多个文档组成集合,多个集合组成了数据库。

本文主要记录一下,MongoDB 一些概念和术语,关于 MongoDB 的操作、集群的搭建、会在后续整理

database:存储文档和集合,和 MySQL 一样,可以使用 use <db> 选择一个数据库,如果选中的数据库不存在,在第一次操作数据库时直接创建数据库
      比如:
    use myDb
    db.book.insert({“x”:1})
    就会创建一个 myDb 数据库和一个 book 集合
collection:存储文档,相当于 RDBMS 的表,我们可以对集合进行,添加,删除,更新,查询文档,创建和删除索引等,当第一次插入数据时就隐式的创建集合,
      还可以使用 db.createCollection() 显式的创建集合,在 3.2 版本可以指定插入时,对文档验证。
      此外还有一个特殊的集合,固定集合,它的大小是固定的,
      比如 db.createCollection(“log”, { capped: true, size: 10000} )    只能存储 10000 字节的数据
            db.createCollection(“log”, { capped : true, size : 10000, max : 5000} ) 只能存储 10000 字节的数据并且文档数目不超过 5000 条
document:数据存储的地方,文档结构就和 JSON 类似

首先看一下 MongoDB 支持的数据类型:
1. String:字符串 UTF-8;
2. Integer:32 位 int or 64 位 long;
3. Double:浮点数;
4. Boolean:true or false;
5. Null:空值或不存在的字段;
6. Array:[1, 2, 3]
7. ObjectId:每个文档都有一个唯一标识 “_id”,它就是 ObjectId 类型的,再插入时,一般不用我们指定,数据库会自动生成,当然我们也可以在插入文档时指定这个字段的值,但要    保证唯一,不然插入会报错,”_id” 是数据库默认的一个索引;
8. Date:64 位整数,存储的是从 1970.1.1 到现在的毫秒数,var date = new Date(); 直接存储的话,在数据库好像慢了 8h,(+ 8 时区)
9. Timestamp:时间戳,64 位的值,var a = new Timestamp();
10. Regular Expression:正则表达式,查询时的限定条件,语法与 JavaScript 的相同
11. Binary:二进制数据
11. Min key,
12. Max key。

当不同的类型进行排序时,各类型的值从低到高为:
1. MinKey (internal type)
2. Null
3. Numbers (ints, longs, doubles)
4. Symbol, String
5. Object
6. Array
7. BinData
8. ObjectId
9. Boolean
10. Date
11. Timestamp
12. Regular Expression
13. MaxKey (internal type)

以上是一些常用的类型
文档的局限性:每个文档最大不能超过 16M,对于向电影,图片等大文件 MongoDB 使用 GridFS 来进行分块存储

> db.foo.insert({
… … “String”:”UTF-8 string”,
… … “Integer”:NumberLong(1461334508012),
… … “Double”:3.14159265,
… … “Boolean”:true,
… … “Null”:”null”,
… … “Array”:[1, 2, 3, “a”],
… … “Date”:new Date(),
… … “Timestamp”:new Timestamp()
… … })
WriteResult({“nInserted” : 1})
> db.foo.find()
{“_id” : ObjectId(“571a33d6ef35d50971b1c675”),  “String” : “UTF-8 string”,
  “Integer” : NumberLong(“1461334508012”),        “Double” : 3.14159265,
  “Boolean” : true,      “Null” : “null”,        “Array” : [1, 2, 3, “a”],
  “Date” : ISODate(“2016-04-22T14:23:18.762Z”),  “Timestamp” : Timestamp(1461334998, 1)
}

索引,同关系型数据库一样,都是为了提高查询速度的,再分片时,片键的前提是索引,随着索引的增加,数据总容量的增加,数据库写入的速度逐渐变慢,之前专门针对 MongoDB 进行了测试,测试服务器是 128G 内存,34CPU… 测试报告也会整理贴出来,找机会把 MySQL 也测试对比一下。

关于聚合,目前项目主要的操作就是插入和查询,暂不写了,以后用到在更新

存储引擎 :3.0 以前默认的存储引擎是 MMAPV1,3.0 版本开始支持 WiredTiger 存储引擎,3.2 版本 WT 引擎设置为了默认,这两个的一些区别,简单说下,锁的粒度不同,MMAPV1 为 集合级别锁 ,WT 为 文档级别锁,在高并发写入时,WT 性能高;WT 引擎应该是完全兼容 MMAPV1 引擎的,支持文档压缩,更详细的看 MongoDB 的发布说明吧

复制:就是跨多个服务器数据同步的过程,能够提高数据的冗余性和可用性。
副本集 replSet 其实就是拥有相同数据集的一组 mongod 进程,其中包含三种类型的成员:主节点,次要节点,仲裁节点(不存储数据,只是用来投票的)。
客户端所有的写操作均在主节点上执行,相关的操作都记录在 oplog 操作日志里,从节点通过异步复制 oplog,然后把相应的操作应用到自己的数据集上。当主节点不可用或者和其他节点不通讯超过 10 秒,自动故障转移,副本集会自动选出一个节点当主节点,而仲裁服务器就是确保这个选举正常进行。
副本集最低要求是:一个主节点,一个从节点,一个仲裁节点
一个标准的配置是一个主节点,两个次要节点,共三个成员
如果你的副本集成员数为偶数个,那么添加一个仲裁节点,变成奇数

关于副本集更多的介绍详见官方文档 https://docs.mongodb.org/manual/core/replication-introduction/

分片:就是把数据按照指定的规则(片键)拆分到分片服务器上,减轻服务器的读写压力,另外可以很方便的扩展

身份验证:MongoDB 默认是不开启访问控制的,可使用 –auth 或者 设置 security.authorization 启用认证,
MongoDB 的用户权限有:
“read”:读权限
“readWrite”:读写权限
“dbAdmin”:执行管理命令权限,如创建或删除索引,查看统计
“dbOwner”:相当于联合 readWrite,dbAdmin 和 userAdmin
“userAdmin”:创建,删除和管理用户的权限

admin 数据库中相关权限,只在 admin 数据库中可用
“clusterAdmin”:分片和复制集命令权限,最大的集群操作权限
“readAnyDatabase”:所有数据库的读权限
“readWriteAnyDatabase”:所有数据库的读写权限
“dbAdminAnyDatabase”:所有数据库的 dbAdmin 权限
“userAdminAnyDatabase”:所有数据库的 userAdmin 权限

超级用户权限
“root”:可访问所有资源,所有操作
此外还可以自定义用户角色

写得有点乱,,接下来就在虚拟机里面模拟一个 MongoDB 集群,并用 Java 写个客户端测试,搭建和测试集群时,分为开启访问控制和不开启访问控制两种。

更多详情见请继续阅读下一页的精彩内容:http://www.linuxidc.com/Linux/2016-04/130593p2.htm

更多 MongoDB 相关教程见以下内容

CentOS 编译安装 MongoDB 与 mongoDB 的 php 扩展 http://www.linuxidc.com/Linux/2012-02/53833.htm

CentOS 6 使用 yum 安装 MongoDB 及服务器端配置 http://www.linuxidc.com/Linux/2012-08/68196.htm

Ubuntu 13.04 下安装 MongoDB2.4.3 http://www.linuxidc.com/Linux/2013-05/84227.htm

MongoDB 入门必读(概念与实战并重) http://www.linuxidc.com/Linux/2013-07/87105.htm

Ubunu 14.04 下 MongoDB 的安装指南 http://www.linuxidc.com/Linux/2014-08/105364.htm

《MongoDB 权威指南》(MongoDB: The Definitive Guide)英文文字版[PDF] http://www.linuxidc.com/Linux/2012-07/66735.htm

Nagios 监控 MongoDB 分片集群服务实战 http://www.linuxidc.com/Linux/2014-10/107826.htm

基于 CentOS 6.5 操作系统搭建 MongoDB 服务 http://www.linuxidc.com/Linux/2014-11/108900.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-22发表,共计10234字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中