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

2023-12-30 11:02:59

【史上最全教程】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: file
    logAppend: true
    path: /usr/local/mongodb-linux-x86_64-3.2.9/27017/mongod.log

storage:
    dbPath: /usr/local/mongodb-linux-x86_64-3.2.9/27017/data
    journal:
        enabled: true

net:
    bindIp: 0.0.0.0
    port: 27017


security:
    authorization: enabled


processManagement:
    fork: true
    pidFilePath: /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

文章来源:https://blog.csdn.net/MS_SONG/article/details/135301859
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。