mongodb部署

mongodb数据库安装、备份

下载安装包

curl -O https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.6.13.tgz

解压

tar -zxvf mongodb-linux-x86_64-3.6.13.tgz

移动文件

mv mongodb-linux-x86_64-3.6.13/* /usr/local/mongodb

在足够硬盘空间下创建文件夹,用户存储数据和日志

mkdir -p /home/mongodata_new2/mongo
mkdir -p /home/mongodata_new2/logs
touch  /home/mongodata_new2/logs/log.log


修改上述文件权限:

cd /home/mongodata_new2/
chmod 777 mongo

cd /home/mongodata_new2/logs
chmod 777 log.log

MongoDB配置用户名和密码

新建MongoDB服务:

/usr/local/mongodb/bin/mongod --port 27017 --dbpath=/home/mongodata_new2/mongo --logpath=/home/mongodata_new2/logs/log.log

开启MongoDB客户端shell:

/usr/local/mongodb/bin/mongo --port 27017

use admin

db.createUser(
  {
    user: "adminUser",
    pwd: "adminPass",
    roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
  }
)
#授权root,否则连接后提示授权失败
db.grantRolesToUser( "adminUser" , [ { role: "root", db: "admin" } ])

管理员创建成功,现在拥有了用户管理员
用户名:adminUser
密码:adminPass
然后,断开 mongodb 连接, 关闭数据库

use admin
db.shutdownServer()

MongoDB用户验证登陆

启动带访问控制的 MongoDB

/usr/local/mongodb/bin/mongod --auth --port 27017 --dbpath=/home/mongodata_new2/mongo

客户端连接后,再进行验证

/usr/local/mongodb/bin/mongod --auth --port 27017 --dbpath=/home/mongodata/mongo --logpath=/home/mongodb/logs/log.log --bind_ip=172.16.0.66 --fork

/usr/local/mongodb/bin/mongod --repair --dbpath=/home/mongodata/mongo

/usr/local/mongodb/bin/mongo --port 27017

use admin
db.auth("adminUser", "adminPass")
#输出 1 表示验证成功

创建普通用户

过程类似创建管理员账户,只是 role 有所不同

use vmapdb

db.createUser(
  {
    user: "vmapdb",
    pwd: "vmapdb1234",
    roles: [ { role: "readWrite", db: "vmapdb" },
             { role: "read", db: "vmapdb" } ]
  }
)


//如果需要创建新的数据库
use traffic_article_db
db.createUser(
  {
    user: "postgres",
    pwd: "lnalt123",
    roles: [ { role: "readWrite", db: "traffic_db" },
             { role: "read", db: "traffic_db" } ]
  }
)

use vmapdb
db.auth("vmapdb", "vmapdb1234")

ctrl+c 最后关闭MongoDB服务。

配置MongoDB开机启动

新建/usr/local/mongodb/mongodb.conf,并输入以下内容 注意:bind_ip一定要设定为0.0.0.0

port=27017
dbpath=/home/mongodata_new2/mongo
logpath=/home/mongodata_new2/logs/log.log
fork=true
logappend=true
bind_ip=0.0.0.0
auth=true

在文件目录“/lib/systemd/system/mongodb.service”下,新建mongodb.service文件,并输入以下内容,保存

[Unit] 
   
Description=mongodb  
After=network.target remote-fs.target nss-lookup.target 
   
[Service] 
Type=forking 
ExecStart=/usr/local/mongodb/bin/mongod --config  /usr/local/mongodb/mongodb.conf
ExecReload=/bin/kill -s HUP $MAINPID 
ExecStop=/usr/local/mongodb/bin/mongod --shutdown --config  /usr/local/mongodb/mongodb.conf
PrivateTmp=true 
     
[Install] 
WantedBy=multi-user.target

然后设置mongodb.service权限

chmod 777 /lib/systemd/system/mongodb.service

开启

#启动服务
systemctl start mongodb.service  
#停止服务
systemctl stop mongodb.service
#添加开机自启动
systemctl enable mongodb.service
#重启服务
systemctl restart mongodb.service

数据库备份、迁移

数据备份

cd /usr/local/mongodb/bin

./mongodump -h 127.0.0.1:27017 -d vmapdb -o /home/mongo_backup_files/mongodb_backup_20220214 -u=vmapdb -p=vmapdb1234 

./mongodump -h 127.0.0.1:27017 -d traffic_maintenance -o /home/mongo_backup_files/mongodb_backup_20220330 -u=lngl -p=lngl2020 

./mongodump -h 127.0.0.1:27017 -d vmapdb -o /home_vmapdbn/back -u=vmapdb -p=vmapdb1234


./mongodump -h 127.0.0.1:27017 -d vmapdb -u=vmapdb -p=vmapdb1234 --gzip --archive=/home/mongo_backup/20211105.archive

数据恢复

./mongorestore --host 127.0.0.1 --port 27017 -u vmapdb -p vmapdb1234 -d vmapdb --dir /home/mongodb_backup_20220219/vmapdb/ --drop



./mongorestore --host 127.0.0.1 --port 27017 -u lngl -p lngl2020 -d traffic_maintenance_temp --dir /home/mongo_backup_files/mongodb_backup_20220330/traffic_maintenance/ --drop

./mongorestore --host 127.0.0.1 --port 27017 -u vmapdb -p vmapdb1234 -d vmapdb --dir  /home/mogodata_vis/vmapdb/ --drop


./mongorestore --host 127.0.0.1 --port 27017 -u vmapdb -p vmapdb1234 -d vmapdb --dir  /home/mongo_backup/vmapdb-base/ --drop

./mongorestore --host 127.0.0.1 --port 27017 -u vmapdb -p vmapdb1234 -d vmapdb --dir /home/mongo_backup/data2/ --drop

./mongorestore --host 172.16.0.58 --port 27017 -d vmapdb --dir /home/mongo_backup/mongo_data_backup20201010/vmapdb/ --drop

./mongorestore --host 127.0.0.1 --port 27017 -u vmapdb -p vmapdb1234 -d vmapdb --gzip --archive=/home/database/20211105.archive --drop


./mongorestore --host 127.0.0.1 --port 27017 -u lanzhou -p lanzhou1234 -d lanzhou --dir /home/mongodata_frontimage/lanzhou/ --drop

其他问题

Too many open files 导致 MongoDB宕机的问题及解决方式

再一次业务中一个单节点MongoDB挂掉, 最开始看日志并没有提示错误信息, 找了半天没有发现到底是什么原因。
然后就直接重启,重启正常, 大概过了半天, 发现又挂掉了!!! 当时还是比较着急的,但是这次出现了日志 Too many open files。
有日志就好办了, 这是Linux的文件句柄限制最大打开文件为1024., 很显然在实际生产中是不能满足要求的, 这就需要对它默认值的更改了。

查看文件最大打开数量限制

ulimit -a
# 输出以下信息
core file size        (blocks, -c) 0
data seg size         (kbytes, -d) unlimited
file size             (blocks, -f) unlimited
max locked memory     (kbytes, -l) unlimited
max memory size       (kbytes, -m) unlimited
open files (-n) 1024  # 最大打开文件数
pipe size          (512 bytes, -p) 8
stack size            (kbytes, -s) 8192
cpu time             (seconds, -t) unlimited
max user processes            (-u) 7168
virtual memory        (kbytes, -v) unlimited

修改方式

1、临时改变 open file 值

ulimit -n 655350

可以满足当前登录 增大open file 值, 但是如果重新登录,或打开新的用户open file 值都会恢复默认
这样显然是不能满足要求的

2、永久修改open file 值

# 修改 /etc/security/limits.conf
# 添加以下代码
* soft nofile 655350
* hard nofile 655350

# 修改/etc/pam.d/login添加如下一行
session required /lib/security/pam_limits.so

可以通过 ulimit -a 查看是否修改成功。

即便如此,在市级平台的mongodb中,也出现了Too many open files的问题,这个时候只修改open files的值是无用的,还要按照以下步骤对系统中的其他参数进行调整。

# 修改/etc/systemd/system.conf
vim /etc/systemd/system.conf
# 在最后添加以下内容
DefaultLimitCORE=infinity
DefaultLimitNOFILE=100000
DefaultLimitNPROC=100000

#重启服务器
reboot

#重启mongodb
systemctl restart mongodb.service

MongoDB出现异常,因为挂载的分区存储不够了!

src/mongo/db/storage/wiredtiger/wiredtiger_util.cpp 361
2019-06-16T04:54:54.830+0800 I -        [thread2] 

***aborting after fassert() failure

应该修改--dbpath=/home/mongodb/data/db 参数为空间可用的文件夹地址。

遇到数据导入等问题时,查看日志文件

cat /home/mongodb/logs/log.log

你可能感兴趣的:(mongodb部署)