【史上最细教程】1台服务器部署2台MongoDB实例

文章目录

  • 【史上最全教程】1台服务器部署2台MongoDB实例
    • 1.下载解压安装包
    • 2.配置系统环境变量
    • 3.创建实例27017
      • 扩展内容(可跳过)
    • 4.配置安全组、防火墙
    • 5.可视化工具连接
    • 问题1:not authorized on admin to execute command

【史上最全教程】1台服务器部署2台MongoDB实例

1.下载解压安装包

# 下载
#curl:是一个命令行工具,用于在终端或shell脚本中传输数据,常用于从Web服务器上下载文件。
#-O:表示将下载的文件保存到本地,并使用远程文件的名称
root@songdanminserver:[/usr/local]curl -O https://fastdl.mongodb.org/linux/ongodb-linux-x86_64-3.2.9.tgz#解压
#tar:是一个命令行工具,用于在Linux系统中创建、压缩和解压文件归档。
#z:表示使用gzip格式进行压缩或解压缩。在这个命令中,它表示要对MongoDB的安装包进行解压缩。
#x:表示要从归档文件中提取文件。
#v:表示在解包时显示详细输出信息。
#f:表示要解压缩的文件名。在这个命令中,它是MongoDB的安装包文件名mongodb-linux-x86_64-3.2.9.tgz。
root@songdanminserver:[/usr/local]tar zxvf mongodb-linux-x86_64-3.2.9.tgz

image-20231229104419720

2.配置系统环境变量

# 配置环境变量,然后就可以直接在命令行使用mongo连接mongo服务
root@songdanminserver:[/usr/local/mongodb-linux-x86_64-3.2.9/bin]vim ~/.bashrc# i 进入编辑   
# 进入后,最后一样添加  
export PATH=$PATH:/usr/local/mongodb-linux-x86_64-3.2.9/bin
# 添加完,ctrl + c,输入 :wq 保存退出# 使配置生效
root@songdanminserver:[/usr/local/mongodb-linux-x86_64-3.2.9/bin]source ~/.bashrc

image-20231229132401800

3.创建实例27017

打开xftp,新建 27017、27018实例文件夹:

image-20231229153029784

进入27017,创建以下内容:

image-20231229153151469

mongodb.conf内容复制进去:

systemLog:destination: filelogAppend: truepath: /usr/local/mongodb-linux-x86_64-3.2.9/27017/mongod.logstorage:dbPath: /usr/local/mongodb-linux-x86_64-3.2.9/27017/datajournal:enabled: truenet:bindIp: 0.0.0.0port: 27017security:authorization: enabledprocessManagement:fork: truepidFilePath: /usr/local/mongodb-linux-x86_64-3.2.9/27017/run/mongodb.pid

security:
authorization: enabled

启用身份验证 。开启后,用户登录时不指定授权数据库进去查看就会报错 not authorized on admin to execute command,这时需要给用户赋予能操作的角色权限、或者指定已经授权访问的数据库;关闭后,就不报错了

启动实例 27017:

# 启动实例 27017
root@songdanminserver:[/usr/local/mongodb-linux-x86_64-3.2.9/bin]./mongod --config /usr/local/mongodb-linux-x86_64-3.2.9/27017/mongodb.conf# 指定连接实例 27017   
# mongo --host localhost --port 端口号
root@songdanminserver:[/usr/local/mongodb-linux-x86_64-3.2.9/bin]mongo --port 27017
# 这时候执行 show dbs 有报错: not authorized on admin to execute command
# 因为通过 mongo 命令行工具登录到 MongoDB 时,默认的用户名是空字符串(即没有用户名),也没有分配角色权限
# 先查看当前的用户身份和权限,发现啥都没有
# 所以现在可以新建一个用户,给他指定角色,赋予他角色查看数据库的权限
> db.runCommand({ connectionStatus: 1 })
{"authInfo" : {"authenticatedUsers" : [ ],"authenticatedUserRoles" : [ ]},"ok" : 1
}
# 切换到 admin 数据库
> use admin
switched to db admin
# 创建一个 sdm 用户,给他赋予 root 角色,该角色具有管理整个 MongoDB 实例的权限
# sdm/sdm  root/root
> db.createUser({ user: "sdm", pwd: "sdm", roles: [ { role: "root", db: "admin" } ] })
Successfully added user: {"user" : "root","roles" : [{"role" : "root","db" : "admin"}]
}# 然后退出、重新通过 sdm 登录  
> exit
bye
# mongo --host localhost --port 27017 -u username -p password --authenticationDatabase admin
root@songdanminserver:[/usr/local/mongodb-linux-x86_64-3.2.9]mongo --port 27017 -u sdm -p sdm --authenticationDatabase admin# 查看数据库列表,这时就可以成功查看到
> show dbs
admin  0.000GB
local  0.000GB
# 切换到 admin 库
> use admin
switched to db admin
# 查看集合
> show collections
system.users
system.version
# 查看用户信息
> db.system.users.find()
{ "_id" : "admin.sdm", "user" : "sdm", "db" : "admin", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "Pm/im+6aPpxw6h4BiTKVXQ==", "storedKey" : "BbGaCuR90YEDH07ClhEEAfwq4ss=", "serverKey" : "3m02iu4xMoiyzslm0ZhiEKjlDME=" } }, "roles" : [ { "role" : "root", "db" : "admin" } ] }
{ "_id" : "test.root", "user" : "root", "db" : "admin", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "HN6SGZFBtQGB2RGJyTwa5A==", "storedKey" : "V8Y2QV/v59H3ceE3YDPjW16Pw2w=", "serverKey" : "94F4gwGly/9j2pdoGnC3xe+nh1s=" } }, "roles" : [ { "role" : "root", "db" : "admin" } ] }
# 如果你登录的用户没有权限,就给他赋予权限对应的角色、或修改可操作数据库
# 例如:修改 root用户可操作数据库为 admin
> db.system.users.update({user: "root"}, {$set: {db: "admin"}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

扩展内容(可跳过)

启动时有很多警告含义:

image-20231229165216518

这些警告信息是 MongoDB 运行时检测到的一些问题,建议你解决它们以确保 MongoDB 的正常运行。不要使用 root 用户运行 MongoDB第一个警告信息是关于正在使用 root 用户运行 MongoDB。在生产环境中,使用 root 用户运行 MongoDB 是不安全的,因为这会给攻击者提供许多可能性。建议使用普通用户来运行 MongoDB。关闭透明大页(Transparent Huge Pages)透明大页(Transparent Huge Pages)是从 Linux 内核 2.6.38 开始引入的内存管理技术,旨在提高系统性能。然而,在某些情况下,它可能会导致 MongoDB 性能下降。因此,MongoDB 引入了两个警告,提示用户关闭透明大页。你可以按照以下步骤关闭透明大页:a. 检查当前的透明大页设置。shell
cat /sys/kernel/mm/transparent_hugepage/enabled
cat /sys/kernel/mm/transparent_hugepage/defrag
如果输出为 always,则表示启用了透明大页。b. 临时禁用透明大页。shell
echo never | sudo tee /sys/kernel/mm/transparent_hugepage/enabled
echo never | sudo tee /sys/kernel/mm/transparent_hugepage/defrag
该命令将禁用透明大页,但此更改在重启后将失效。c. 永久禁用透明大页。要使该更改永久生效,请编辑 /etc/rc.local 文件,添加以下两行命令:shell
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
保存更改并退出文件。现在,MongoDB 将在每次启动时自动禁用透明大页。提高软限制最后一个警告是关于软限制(soft rlimits)过低。软限制指的是进程能够使用的资源量,包括文件描述符和进程数。MongoDB 建议软限制的文件数应该至少是进程数的一半,因此建议你提高软限制以确保 MongoDB 的正常运行。你可以按照以下步骤提高软限制:a. 检查当前的软限制设置。shell
ulimit -n
ulimit -u
如果输出值过低,则需要增加软限制。b. 修改软限制编辑 /etc/security/limits.conf 文件,添加以下两行内容:* soft nofile 65535
* soft nproc 32767
这将为所有用户增加文件描述符和进程数的软限制。保存文件并退出。然后,编辑 /etc/pam.d/common-session 文件,在文件末尾添加以下一行:session required pam_limits.so
保存文件并退出。现在,MongoDB 将能够正常运行。希望这些解决方案能够帮助你解决 MongoDB 运行时的警告信息。

4.配置安全组、防火墙

配置安全组:

登录阿里云服务器实例,添加安全组配置,放行MongoDB 服务的 27017 端口

image-20231229105352663

配置防火墙:

在任意路径执行:

# 查看防火墙状态
systemctl status firewalld
# 如果不是显示active状态,需要打开防火墙
systemctl start firewalld# 查看所有已开放的临时端口(默认为空)
firewall-cmd --list-ports
# 添加临时开放端口(例如:比如我修改ssh远程连接端口是3306,则需要开放这个端口)
firewall-cmd --add-port=27017/tcp
# 添加永久开放的端口(例如:223端口)
firewall-cmd --add-port=27017/tcp --permanent# 关闭临时端口
# firewall-cmd --remove-port=80/tcp
# 关闭永久端口
# firewll-cmd --remove-port=80/tcp --permanent# 配置结束后需要输入重载命令并重启防火墙以生效配置
firewall-cmd --reload
systemctl restart firewalld

5.可视化工具连接

image-20231229171017459

撒花!!!
image-20231229171644113

27018实例创建如上,配置文件端口等信息改下就行。

问题1:not authorized on admin to execute command

执行 show dbs 后报错:not authorized on admin to execute command

image-20231229134151443

原因:安装mongo数据库时,配置文件中加了安全权限的设置。

去步骤3可以看到原因:
image-20231230082013764

解决办法:创建一个具有足够权限的MongoDB用户,使用这个用户重新登录image-20231230081923719

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/585831.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Flink(十一)【状态管理】

Flink 状态管理 我们一直称 Flink 为运行在数据流上的有状态计算框架和处理引擎。在之前的章节中也已经多次提到了“状态”(state),不论是简单聚合、窗口聚合,还是处理函数的应用,都会有状态的身影出现。状态就如同事务…

Java日期工具类LocalDate

Java日期工具类LocalDate 嘚吧嘚java.util.DateJava8新增日期类时区 LocalDate - API创建日期获取年月日修改年月日日期比较 嘚吧嘚 java.util.Date 在Java8之前通常会使用Date结合SimpleDateFormat、Calender来处理时间和日期的相关需求。 1、可读性差、易用性差、使用起来冗…

C#的checked关键字判断是否溢出

目录 一、定义 二、示例: 三、生成: 一、定义 使用checked关键字处理溢出。 在进行数学运算时,由于变量类型不同,数值的值域也有所不同。如果变量中的数值超出了变量的值域,则会出现溢出情况,出现溢出…

12.21自动售货机,单物品,多物品

自动售货机 if朴素方法 一种思路是用寄存器cnt记录已有的最小单位货币量,这里就是0.5 当d1时,cnt1;d2时,cnt2;d3时,cnt4; timescale 1ns/1ns module seller1(input wire clk ,input wire rst ,input wire d1 ,input wire d2 …

vue3 组件之间传值

vue3 组件之间传值 非常好,为啥突然开这样一篇博文,首先是因为 vue3 是未来发展的趋势。其次,vue 官方已经确认,将于2023年最后一天停止对 vue2 项目的维护,这个是官方发出的通知,并且呢,尤雨溪…

面试算法78:合并排序链表

题目 输入k个排序的链表,请将它们合并成一个排序的链表。 分析:利用最小堆选取值最小的节点 用k个指针分别指向这k个链表的头节点,每次从这k个节点中选取值最小的节点。然后将指向值最小的节点的指针向后移动一步,再比较k个指…

统信UOS及麒麟KYLINOS操作系统上设置GRUB密码

原文链接:给单用户模式上一层保险!!! hello,大家好啊!今天我要给大家介绍的是在统信UOS及麒麟KYLINOS操作系统上设置GRUB密码的方法。GRUB(GRand Unified Bootloader)是Linux系统中的…

利用F12和Fiddler抓包

网络基础 http 而http协议又分为下面的部分,点击具体条目后可以查看详细信息 http请求消息:请求行(请求方法),请求路径,请求头,请求体(载荷) http响应消息:响应行(响应状态码),响应头,响应体 请求行 即请求方法 get post put patch 响应行 即响应码,常见响应状态…

祖先是否安宁,直接关系到个人以及家运哦!

一直以来,中国古代流传下来的思想就认为,祖先安葬在好的风水福地,一定能给子孙后代带来吉祥如意。相反的,假如祖坟风水不好,则会影响到后人的运气,轻者诸事不顺、重者家庭破裂、噩运连连,所以&a…

【C++杂货铺】C++11新特性——lambda

文章目录 一、C98中的排序二、先来看看 lambda 表达式长什么样三、lambda表达式语法3.1 捕捉列表的使用细节 四、lambda 的底层原理五、结语 一、C98中的排序 在 C98 中,如果要对一个数据集合中的元素进行排序,可以使用 std::sort 方法,下面…

二叉树顺序结构与堆的概念及性质(c语言实现堆)

上次介绍了树,二叉树的基本概念结构及性质:二叉树数据结构:深入了解二叉树的概念、特性与结构 今天带来的是:二叉树顺序结构与堆的概念及性质,还会用c语言来实现堆 文章目录 1. 二叉树的顺序结构2.堆的概念和结构3.堆…

推荐几个开源HTTP服务接口快速生成工具

在现在流行微服务、前后端分离软件开发架构下,基于标准RESTful/JSON的HTTP接口已经成为主流。在实际业务中有很多需要快速开发调用数据服务接口的需求,但团队中缺乏专业的后端开发人员,比如: (1)数据库表已…

PHP开发日志 ━━ 基于PHP和JS的AES相互加密解密方法详解(CryptoJS) 适合CryptoJS4.0和PHP8.0

最近客户在做安全等保,需要后台登录密码采用加密方式,原来用个base64变形一下就算了,现在不行,一定要加密加key加盐~~ 前端使用Cypto-JS加密,传输给后端使用PHP解密,当然,前端虽然有key有盐&…

如何学习计算机编程?零基础入门,轻松成为编程达人!

在这个信息爆炸的时代,计算机编程已经成为一项炙手可热的技能。如果你也对编程充满兴趣,但又不知从何入手,那么本文将为你提供一条通往编程世界的捷径。掌握了这些技巧,相信你一定能够轻松成为编程达人! 一、选择合适…

lag-llama源码解读(Lag-Llama: Towards Foundation Models for Time Series Forecasting)

Lag-Llama: Towards Foundation Models for Time Series Forecasting 文章内容: 时间序列预测任务,单变量预测单变量,基于Llama大模型,在zero-shot场景下模型表现优异。创新点,引入滞后特征作为协变量来进行预测。 获得…

爬虫工作量由小到大的思维转变---<第三十五章 Scrapy 的scrapyd+Gerapy 部署爬虫项目>

前言: 项目框架没有问题大家布好了的话,接着我们就开始部署scrapy项目(没搭好架子的话,看我上文爬虫工作量由小到大的思维转变---<第三十四章 Scrapy 的部署scrapydGerapy>-CSDN博客) 正文: 1.创建主机: 首先gerapy的架子,就相当于部署服务器上的;所以…

Ubuntu 18.04搭建RISCV和QEMU环境

前言 因为公司项目代码需要在RISCV环境下测试,因为没有硬件实体,所以在Ubuntu 18.04上搭建了riscv-gnu-toolchain QEMU模拟器环境。 安装riscv-gnu-toolchain riscv-gnu-toolchain可以从GitHub上下载源码编译,地址为:https://…

大华主动注册协议介绍

一、大华主动注册协议介绍 前面写了一篇文章,介绍一些设备通过大华主动注册协议接入到AS-V1000的文章,很多问我关于大华主动注册协议的相关知识。 由于大华主动注册协议是一种私有协议,通常不对外公开详细的协议规范和技术细节。因此…

C++ Primer Plus----第十二章--类和动态内存分布

本章内容包括:对类成员使用动态内存分配;隐式和显式复制构造函数;隐式和显式重载赋值运算符;在构造函数中使用new所必须完成的工作;使用静态类成员;将定位new运算符用于对象;使用指向对象的指针…

ssm基于web的志愿者管理系统的设计与实现+vue论文

摘 要 使用旧方法对志愿者管理系统的信息进行系统化管理已经不再让人们信赖了,把现在的网络信息技术运用在志愿者管理系统的管理上面可以解决许多信息管理上面的难题,比如处理数据时间很长,数据存在错误不能及时纠正等问题。这次开发的志愿者…