appsver安装后mysql未启动_mongodb数据库安装

什么是MongoDB?

MongoDB是一个基于分布式的文档数据库,由 C++ 语言编写,MongoDB是专为可扩展性,高性能和高可用性而设计的文件数据库。它可以从单服务器部署扩展到大型、复杂的多数据中心架构。利用内存计算的优势,MongoDB能够提供高性能的数据读写操作。 MongoDB的本地复制和自动故障转移功能使您的应用程序具有企业级的可靠性和操作灵活性。

环境:

CentOS Linux release 7.4.1708 (Core) x86_64

IP addr:10.28.204.66

1.安装MongoDB

说明:官方不建议使用二进制压缩包安装,除非您有一个特定的需求。那咱就使用yum安装即可,功能都一样。

创建一个mongodb镜像源文件,这样就可以直接安装最新版MongoDB。

$ vim /etc/yum.repos.d/mongodb-org-3.4.repo

添加以下内容:

[mongodb-org-3.4]

name=MongoDB Repository

baseurl=//repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.4/x86_64/

gpgcheck=1

enabled=1

gpgkey=//www.mongodb.org/static/pgp/server-3.4.asc

执行以下命令开始安装:

$ yum install -y mongodb-org

安装完成后的目录如下:

/etc/mongod.conf – 配置文件

/var/lib/mongo – 数据目录

/var/log/mongodb/mongod.log – 日志文件

2.配置 mongod.conf

在生产环境中,我们不可能将重要数据放在系统盘,例如:/var/lib/mongo 否则一旦系统故障,你的数据可能将不复存在。因此我的数据盘是挂在apps目录,所以创建mongo数据存储目录。

创建数据库存放目录并赋予权限:

$ mkdir -p /apps/mongodb/data/db

$ chown -R mongod.mongod /apps/mongodb/data/db

设置SeLinux 安全上下文

$ sudo chcon -Rv --type=mongod_var_lib_t /apps/mongodb

如果未设置,无法启动且日志中会报如下错误:

exception in initAndListen: 20 Attempted to create a lock file on a read-only directory: /apps/mongodb/data/db, terminating

配置完成后的内容如下:

$ egrep -v "^$|^#|^;" /etc/mongod.conf

systemLog:

destination: file

logAppend: true

path: /var/log/mongodb/mongod.log

storage:

dbPath: /apps/mongodb/data/db

journal:

enabled: true

processManagement:

fork: true # fork and run in background

pidFilePath: /var/run/mongodb/mongod.pid # location of pidfile

net:

port: 27017

bindIp: 127.0.0.1,10.28.204.66 # Listen to local interface only, comment to listen on all interfaces.

security:

authorization: enabled

注意:配置文件需要缩进2个空格,这是yaml语法所要求的,否则无法启动。

3.设置 SELinux

semanage命令是用来查询与修改SELinux默认目录的安全上下文。CentOS系统自带的chcon工具只能修改文件、目录等文件类型和策略,无法对端口、消息接口和网络接口等进行管理,semanage能有效胜任SELinux的相关配置工作。

安装semanage

$ yum provides semanage

$ yum -y install policycoreutils-python

$ semanage port -a -t mongod_port_t -p tcp 27017

你也可以直接关闭SELINUX:

$ vim /etc/selinux/config

默认值:

SELINUX=disabled

修改为:

SELINUX=enforcing

或者允许:

SELINUX=permissive

修改完成后记得重启服务器。此外我个人不建议关闭SELINUX,因为它关乎到Linux系统的本身安全。

4.设置 UNIX ulimit

您可以在系统提示符下使用该命令检查系统限制,如以下示例所示:

$ ulimit -a

core file size (blocks, -c) 0

data seg size (kbytes, -d) unlimited

scheduling priority (-e) 0

file size (blocks, -f) unlimited

pending signals (-i) 7243

max locked memory (kbytes, -l) 64

max memory size (kbytes, -m) unlimited

open files (-n) 1024

pipe size (512 bytes, -p) 8

POSIX message queues (bytes, -q) 819200

real-time priority (-r) 0

stack size (kbytes, -s) 8192

cpu time (seconds, -t) unlimited

max user processes (-u) 7243

virtual memory (kbytes, -v) unlimited

file locks (-x) unlimited

官方推荐设置:

-f (file size): unlimited

-t (cpu time): unlimited

-v (virtual memory): unlimited [1]

-n (open files): 64000

-m (memory size): unlimited [1] [2]

-u (processes/threads): 64000

设置资源限制:

$ vim /etc/security/limits.conf

在文件末端添加以下内容:

mongod soft fsize unlimited

mongod hard fsize unlimited

mongod soft cpu unlimited

mongod hard cpu unlimited

mongod soft as unlimited

mongod hard as unlimited

mongod soft nofile 64000

mongod hard nofile 64000

mongod soft nproc 64000

mongod hard nproc 64000

以上参数说明:

mongod – 资源限制指定的用户名(你也可以用*代替全局)。

soft – 当前系统生效的设置值。

hard – 系统中所能设定的最大值。

注:这里需要说明 soft 的限制值不能比 hard 大。用 – 就表明同时设置了 soft 和 hard 的值。

5.启动mongod数据库

后期管理可以使用以下命令:

$ systemctl start mongod.service

$ systemctl restart mongod.service

$ systemctl stop mongod.service

6.查看mongod用户资源限制情况

查看mongod进程PID号:

$ ps -ef | grep mongod

mongod 1540 1 0 Oct18 ? 00:06:15 /usr/bin/mongod -f /etc/mongod.conf

root 6631 2256 0 08:39 pts/0 00:00:00 grep --color=auto mongod

$ cat /proc/1540/limits

Limit Soft Limit Hard Limit Units

Max cpu time unlimited unlimited seconds

Max file size unlimited unlimited bytes

Max data size unlimited unlimited bytes

Max stack size 8388608 unlimited bytes

Max core file size 0 unlimited bytes

Max resident set unlimited unlimited bytes

Max processes 64000 64000 processes

Max open files 64000 64000 files

Max locked memory 65536 65536 bytes

Max address space unlimited unlimited bytes

Max file locks unlimited unlimited locks

Max pending signals 7243 7243 signals

Max msgqueue size 819200 819200 bytes

Max nice priority 0 0

Max realtime priority 0 0

Max realtime timeout unlimited unlimited us

其中1540是Mongod的PID号。

如果不生效, 重启服务器即可。

7.设置 zone_reclaim_mode

$ echo 0 > /proc/sys/vm/zone_reclaim_mode

$ echo 2 > /proc/sys/vm/overcommit_memory

如果不设置其参数,长时间运行mongodb会出现以下报错信息:

[initandlisten] connection refused because too many open connections: 819 of 819

8.关闭Transparent Huge Pages (THP)大页面

注意:如果不设置启动的时候会有警告,但不影响使用。生产环境建议设置。

9.通过以下命令查看mongod启动信息及重要消息

$ cat /var/log/mongodb/mongod.log

...

** WARNING: Access control is not enabled for the database.

** Read and write access to data and configuration is unrestricted.

...

上述日志中显示两条警告:

数据库未启用访问控制。

对数据的读写访问和配置是不受限制的。

这样是极其不安全的,下面来创建安全数据库:

10.连接到实例

$ mongo --port 27017

MongoDB shell version v3.4.9

connecting to: mongodb://127.0.0.1:27017/

MongoDB server version: 3.4.9

Server has startup warnings:

2017-10-19T13:15:54.817+0800 I CONTROL [initandlisten]

2017-10-19T13:15:54.818+0800 I CONTROL [initandlisten] ** WARNING: Access control is not enabled for the database.

2017-10-19T13:15:54.818+0800 I CONTROL [initandlisten] ** Read and write access to data and configuration is unrestricted.

2017-10-19T13:15:54.818+0800 I CONTROL [initandlisten]

>

11.创建用户管理员(在admin数据库中认证)

> use admin

db.createUser(

{

user: "myrenwole",

pwd: "myrenwole",

roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]

}

)

Successfully added user: {

"user" : "myrenwole",

"roles" : [

{

"role" : "userAdminAnyDatabase",

"db" : "admin"

}

]

}

>

12.连接并认证

$ mongo --port 27017 -u "myrenwole" -p "myrenwole" --authenticationDatabase "admin"

13.添加额外权限用户

use test

db.createUser(

{

user: "renwolecom",

pwd: "renwolecom",

roles: [ { role: "readWrite", db: "test" },

{ role: "read", db: "reporting" } ]

}

)

Successfully added user: {

"user" : "renwolecom",

"roles" : [

{

"role" : "readWrite",

"db" : "test"

},

{

"role" : "read",

"db" : "reporting"

}

]

}

>

添加完成,查看是否存在警告:

$ mongo

MongoDB shell version v3.4.9

connecting to: mongodb://127.0.0.1:27017

MongoDB server version: 3.4.9

>

已经没有警告信息了。

调用连接MongoDB数据库必须要添加必要参数,例如:

var mongoose = require('mongoose');

var db = mongoose.createConnection('localhost', 'test', 27017, {user: 'renwolecom', pass: 'renwolecom'});

说明:当mongo命令连接失败时,请尝试删除mongod.lock文件,该文件位于你的数据库目录下,之后重启mongodb数据库,如果问题依旧,请查看日志具体报错。

14.配置Firewall防火墙

$ firewall-cmd --zone=public --add-port=27017/tcp --permanent

$ firewall-cmd --reload

15.卸载/删除MongoDB

$ systemctl stop mongod

$ yum erase $(rpm -qa | grep mongodb-org)

$ rm -rf /var/log/mongodb

$ rm -rf /var/lib/mongo

注意:此过程将完全删除MongoDB数据库,因此请确保在继续之前备份所有配置和数据。

结语:

关于MongoDB的安装配置已经完成,说难不难,说不难也有些坑,不过主要还是配置比较麻烦。其实MongoDB的基础配置已经可以满足生产需求,除非有特殊要求,需要手动添加配置项。后期我也会写一些关于MongoDB的使用方法。

参考教程:

//docs.mongodb.com/manual/administration/install-on-linux/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值