如何部署MongoDB数据库(YUM)?

MongoDB

1 理论知识

1.1 简介

MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。
Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。

1.2 基本概念

1.2.1 面向集合(Collection-Oriented)

– 即数据被分组存储在数据集中,被称为一个集合(Collection)。
– 每个集合在数据库中都有一个唯一的标识名,并且可以包含无限数目的文档。
注:
1)集合的概念类似关系型数据库(RDBMS)里的表(table),不同的是它不需要定义任何模式(schema)。
2)Nytro MegaRAID技术中的闪存高速缓存算法,能够快速识别数据库内大数据集中的热数据,提供一致的性能改进。

1.2.2 模式自由(schema-free)

即时,
– 无需关注数据库的任何结构定义
– 支持把不同结构的文件存储在同一个数据库里
所谓的模式自由,实现方法如下,
– 存储在集合中的文档,被存储为键-值对的形式
– 键用于唯一标识一个文档,为字符串类型
– 值则可以是各种复杂的文件类型

1.3 特点

它的特点是高性能、易部署、易使用,存储数据非常方便。主要功能特性有:
– 面向集合存储,易存储对象类型的数据
– 模式自由
– 支持动态查询
– 支持完全索引,包含内部对象
– 支持查询
– 支持复制和故障恢复
– 使用高效的二进制数据存储,包括大型对象(如视频等)
– 自动处理碎片,以支持云计算层次的扩展性。
– 支持RUBY,PYTHON,JAVA,C++,PHP,C#等多种语言
– 文件存储格式为BSON(一种JSON的扩展)
– 可通过网络访问。

1.4 应用场景

– 网站实时数据处理,适合实时的插入、更新与查询,并具备网站实时数据存储所需的复制及高度伸缩性
– 缓存,高性能适合作为架构的缓存层,在系统重启之后持久化缓存层可以避免下层的数据源过载
– 高伸缩性的架构,非常适合由数十或数百台服务器组成的数据库,(路线图中已经包含对MapReduce引擎的内置支持)

1.5 不适用的环境

– 要求高度事务性的系统
– 传统的商业智能应用
– 复杂的跨文档(表)级联查询

2 安装MongoDB

2.1 基础配置

2.1.1 配置yum源

curl https://repo.mongodb.org/yum/redhat/mongodb-org-3.0.repo > /etc/yum.repos.d/mongodb-org-3.0.repo

另外,如果以上源过期或无法使用,请从如下连接选择新的源,
http://repo.mongodb.org/

2.1.2 安装基础包

yum install -y mongodb-org
yum install -y policycoreutils-python

2.1.3 配置SELinux

semanage port -a -t mongod_port_t -p tcp 27017
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

2.1.4 配置防火墙

firewall-cmd --permanent --add-port 27017/tcp
firewall-cmd --reload
firewall-cmd --list-all

2.2 安装配置

2.2.1 配置安装目录

mkdir -p /data/mongodb
chown mongod:mongod /data/mongodb/
chmod 755 /data/mongodb/

2.2.2 准备配置文件

cp /etc/mongod.conf /etc/mongod.conf.defautl
vim /etc/mongod.conf

修改配置如下:

logpath=/var/log/mongodb/mongod.log
logappend=true
fork=true
dbpath=/data/mongodb
pidfilepath=/var/run/mongodb/mongod.pid
bind_ip=0.0.0.0

另外,某些版本的参数定义格式可能会有所不同,

systemLog:
  destination: file
  logAppend: true
  path: /var/log/mongodb/mongod.log

storage:
  dbPath: /data/mongodb
  journal:
    enabled: true

processManagement:
  fork: true
  pidFilePath: /var/run/mongodb/mongod.pid

net:
  port: 27017
  bindIp: 0.0.0.0

2.2.3 重启服务使配置生效

/etc/init.d/mongod start
chkconfig mongod on

另外,某些系统的启动方法可能会有差异,

systemctl start mongod
systemctl enable mongod

如果启动遇到问题,可以使用如下命令查看启动日志或调试,

grep mongod /var/log/messages
mongod --repair

2.2.4 启用安全认证

1)增加管理账户

mongo

输入如下配置:

use admin
db.createUser(
  {
    user: "root",
    pwd: "rootpwd",
    roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
  }
)
quit()

2)启用认证

vim /etc/mongod.conf

增加如下参数:

auth=true

另外,某些版本的参数定义格式可能会有所不同,

security:
    authorization: enabled

2.2.5 配置Limits

vim /etc/security/limits.d/mongod.conf

输入如下配置:

mongod     soft    nofile    65536
mongod     hard    nofile    65536
mongod     soft    nproc     65536
mongod     hard    nproc     65536
mongod     soft    fsize     unlimited
mongod     hard    fsize     unlimited
mongod     soft    cpu       unlimited
mongod     hard    cpu       unlimited
mongod     soft    as        unlimited
mongod     hard    as        unlimited

2.2.6 重启服务使配置生效

/etc/init.d/mongod restart

另外,某些系统的启动方法可能会有差异,

systemctl restart mongod

2.2.7 测试

mongo -u "root" -p "rootpwd"  --authenticationDatabase "admin"

或者

mongo

输入如下认证命令:

use admin
db.auth("root","rootpwd")

2.3 配置日志切割

如何配置mongoDB日志切割?

参阅文档:
================================================
https://docs.mongodb.com/manual/tutorial/install-mongodb-on-red-hat/
https://docs.mongodb.com/manual/tutorial/enable-authentication/
https://docs.mongodb.com/manual/reference/ulimit/index.html

没有评论

发表回复

MongoDB
如何配置mongoDB日志切割?

1 前言 一个问题,一篇文章,一出故事。 笔者今天某应用链接MongoDB异常于是去查看DB的日志, …

MongoDB
如何导入mongoDB的所有数据?

1 前言 一个问题,一篇文章,一出故事。 上一个章节,我们使用导出脚本导出mongoDB的数据,详细 …

MongoDB
如何导出mongoDB的所有数据?

1 前言 一个问题,一篇文章,一出故事。 mongoDB的mongoexport工具貌似不支持整库导 …