mongodb 4.2版本安装维护手册

一,MONGODB安装

注:安装前或新机器上架前,请先运行初始化脚本

 1,卸载系老版本mongodb

rm -rf /opt/mongodb

 2,安装mongodb

下载mongodb程序,地址为:Download
MongoDB Community Server | MongoDB
,注意清选择Version;Platform;Package

解压并进行重命名

tar -xf mongodb-linux-x86_64-rhel70-4.2.23.tgz
mv mongodb-linux-x86_64-rhel70-4.2.23 mongodb4

进入mongodb4 目录下有以下文件

[root@xxxxxx mongodb4]# ll 
total 316 
drwxr-xr-x 2 root root   4096 Dec 15 11:08 bin 
-rw-r--r-- 1 root root  30608 Sep 29 23:36 LICENSE-Community.txt 
-rw-r--r-- 1 root root  16726 Sep 29 23:36 MPL-2 
-rw-r--r-- 1 root root   2581 Sep 29 23:37 README 
-rw-r--r-- 1 root root  75405 Sep 29 23:37 THIRD-PARTY-NOTICES 
-rw-r--r-- 1 root root 183512 Sep 29 23:38 THIRD-PARTY-NOTICES.gotools

我们最主要关注bin这个目录下的文件即可。

MongoDB 在 bin 目录下提供了一系列有用的工具,这些工具提供了 MongoDB 在运维管理上的方便。

工具 描述
bsodump 将 bson 格式的文件转储为 json 格式的数据
install_compass 该脚本将按照 Mongodb Compass 社区版本
mongo 客户端命令行工具,其实也是个js解释器,支持js语法
mongod 是MongoDB系统的主要守护进程。它处理数据请求,管理数据访问并执行后台管理操作。
mongodump MongoDB数据备份工具
mongoexport MongoDB 数据导出工具
mongofiles GridFS 管理工具,可实现二
mongoimport MongoDB 数据导入工具
mongoreplay MongoDB的流量捕获和重播工具
mongorestore MongoDB 数据恢复工具
mongos 分片路由,如果使用了 sharding 功能,则应用程序连接的是 mongos 而不是 mongod
mongostat 提供当前正在运行mongod 或mongos 实例的状态的快速概述
mongotop 跟踪一个MongoDB的实例,查看哪些大量的时间花费在读取和写入数据

 3,运行MongoDB

Mongdb 有几种启动方式,我这里使用的是配置文件方式。

# vim mongo.conf 
port=12345
bind_ip=10.xx.xx.xx
dbpath=/opt/mongodb4/data 
logpath=/opt/mongodb4/logs/mongod.log 
pidfilepath=/opt/mongodb4/logs/mongod.pid 
logappend=true fork=true 
# /opt/mongodb4/bin/mongod -f /opt/mongodb4/mongo.conf 
about to fork child process, waiting until server is ready for connections. 
forked process: 29076 child process started 
successfully, parent exiting

如果需要开启密码登录,需要在配置文件里加上 auth=true。

如果要使用其他参数,请参考:MongoDB
mongod.exe - MongoDB服务启动工具

二,MONGODB复制

MongoDB复制集间的数据复制类似MySQL主从复制,当一个修改操作(包括插入/更新/删除)到达主节点时,它对数据的操作会被记录到oplog文件中,从节点从主节点上不断获取新进入主节点的oplog,并在自身数据上回放,以此保持跟主节点的数据一致。mongodb复制主要有以下三个方面的优点:

  • <1>如果主服务器出问题,可以快速的切换到从服务器提供服务。
  • <2>可以读写分离,在主服务器上执行写操作,而将查询操作放在从服务器上,降低主服务器的访问压力。
  • <3>可以在从服务器上执行备份,以避免备份期间影响主服务的服务。

 1,mongodb主从复制的配置

  1. 确保主从服务器上安装了相同版本的mongodb服务器,安装步骤见上。在主服务器上修改配置文件。例如:
# vim mongo_master.conf 
port=12345 
bind_ip=10.12.113.61 
dbpath=/opt/mongodb4/data 
logpath=/opt/mongodb4/logs/mongod.log 
pidfilepath=/opt/mongodb4/logs/mongod.pid 
logappend=true 
fork=true 
master=true
  1. 修改mongodb 从服务器配置文件。
# vim mongo_slave.conf 
port=23456 
bind_ip=10.12.113.50 
dbpath=/opt/mongodb4/data 
logpath=/opt/mongodb4/logs/mongod.log 
pidfilepath=/opt/mongodb4/logs/mongod.pid 
logappend=true 
fork=true 
slave=true 
source=10.12.113.61:12345
  1. 修改完主从配置文件后就可以启动了
/opt/mongodb4/bin/mongod -f /opt/mongodb4/mongo_master.conf 
/opt/mongodb4/bin/mongod -f /opt/mongodb4/mongo_slave.conf

 2,mongodb主从复制日常维护

  1. 从服务器复制出错的处理

如果mongodb 出现 error RS102 too stale to catch up 错误是因为启动的时候指定 配置文件里参数oplogSize=128,(主节点的oplog日志大小,单位为M,更改oplog大小时,删除local.,然后加 oplogSize= 重新启动即可,*代表大小)在对主库大数据插入的时候,可能会出现来不及同步到从库的现象。

三,mongodb日常维护

 1,忘记admin密码

操作步骤如下所示:

1. 通过 ps -ef |grep mongod 找个配置文件 
2. 修改配置文件, 把auth修改为false,auth=false #关闭用户认证 
3. 重启mongodb 
4. 删除mongo用户 
   use admin
   db.system.users.find() 
   db.system.users.remove({})
   db.createUser({user:'root',pwd:'abc123',roles:['admin','userAdminAnyDatabase']}) # 添加admin帐户
5. 修改配置文件, 把auth修改为true,auth=true #关闭用户认证 
6. 重启mongodb

 2,开启慢查询日志

数据查询慢,影响数据库性能。为了准确获知是那些sql语句导致查询慢,我们需要开启慢查询日志功能来帮助我们分析优化我们的数据库。

  1. 重启数据库开启慢查询日志。在配置文件中添加
#开启慢查询,200毫秒的记录
profile=1  #0:关闭,不收集任何数据。 1:收集慢查询数据,默认是100毫秒。 2:收集所有数据
slowms=200

 3,mongodb用户权限管理

建议使用图形化工具管理用户,比如:Robo 3T,Studio 3T。

 4,mongodb性能优化

第一步:找出慢语句 一般来说查询语句太慢和性能问题瓶颈有着直接的关系,所以可以用MongoDB的性能分析工具来找出这些慢语句: db.setProfilingLevel(1, 100);  

第二步:使用explain分析 通过使用explain来对这些慢语句进行诊断。此外还可以mtools来分析日志。  

第三步:创建索引 分析完之后需要创建新的索引(index)来提升查询的性能。别忘了在MondoDB中可以在后台创建索引以避免collections 锁和系统崩溃。  

第四步:使用稀疏索引来减少空间占用 如果使用sparse documents,并重度使用关键字$exists,可以使用sparse indexes来减少空间占用提升查询的性能。  

第五步:读写分离 如果读写都在主节点的话,从节点就一直处在空置状态,这是一种浪费。对于报表或者搜索这种读操作来说完全可以在从节点实现,因此要做的是在connection
string中设置成secondarypreferred。

发表回复 0

Your email address will not be published. Required fields are marked *