单服务器部署mongodb数据库三节点集群详细教程
参考链接: CentOS7.4搭建基于用户认证的MongoDB4.0三节点副本集集群详细文档 - xshrim - 博客园
注意:
多服务器和单服务器各项配置和操作略有不同,需要区分清楚,
本教程使用的是mongodb 4.2.11版本。
测试的服务器配置为 1核CPU,2G内存 40G ssd硬盘 的阿里云服务器,系统为CentOS 7.9版本
目录
第一步, 创建目录结构
第二步, 安装数据库及配置环境
第三步, 创建和部署配置文件mongod.conf
第四步, 执行启动命令,启动三个数据库(无用户登录认证)
第五步, 配置集群.
第六步, 添加用户
第七步,关闭数据库
第八步,生成keyFile
第九步,修改mongod.conf文件,取消注释信息
第十步,再次启动三个节点的数据库,开启用户登录认证
第十一步,再次登录数据库,验证创建的用户是否正常
第十二步,远程连接数据库
节点规划:
节点名 |
节点用途 |
节点IP |
节点端口 |
集群名称 |
node01 |
主节点(PRIMARY) |
127.0.0.1 |
27017 |
mongodbData |
node02 |
从节点(SECONDARY) |
127.0.0.1 |
27018 |
mongodbData |
node03 |
仲裁节点(ARBITER) |
127.0.0.1 |
27019 |
mongodbData |
数据库安装目录:(3个节点)
目录 |
用途 |
/mongodbData |
//这里是集群目录,也是存放下载安装包的目录 |
/mongodbData/node01 |
//主节点(PRIMARY)目录 |
/mongodbData/node01 |
//从节点(SECONDARY)目录 |
/mongodbData/node01 |
//仲裁节点(ARBITER)目录 |
目录规划:node01(节点名)目录下需要创建以下三个子目录,三个节点(node01、node02、node03)都需要创建:
目录 |
用途 |
/node01/data |
Mongo集群数据文件目录 |
/node01/logs |
Mongo集群系统日志目录 |
/node01/conf |
Mongo集群配置文件目录 |
三节点mongodb安装及配置均需要执行以下操作步骤:
1 |
下载 |
|
2 |
解压 |
|
3 |
安装 |
|
4 |
环境配置 |
|
5 |
使配置生效 |
|
6 |
查看安装情况 |
|
如果打印以下信息泽成功:
|
注意1:三个节点下的mongod.conf除了路径与端口不同,其它都一样。
端口 |
所在上级目录 |
27017 |
node01 |
27018 |
node02 |
27019 |
node03 |
注意2:security部分和setParameter部分的参数,用于启用集群用户认证, 需要先注释掉, 等集群搭建完成再启用。也就是在未创建完成密钥之前注释。即是几个#号后面是注释的内容。
#security: |
完整的mongod.conf文件(这个是XX项目数据库的设置)内容如下:
systemLog: |
注意的错误情况
创建mongod.conf文件时,一定要注意文件内容是否按照上面每一行的空格严格编写,如果不是,则容易出现错误。
mongod.conf文件存放相关目录如下:
/mongodbData/node01/conf/mongod.conf
/mongodbData/node02/conf/mongod.conf
/mongodbData/node03/conf/mongod.conf
相关目录与mongod.conf也放置好后,依次执行以下三个启动命令:
注意:此时是无验证的启动,暴露全部的数据库给任意登录的用户进程操作,非常危险,所以第八步开始,用于配置和启用有用户登录的认证
|
注意的错误情况
执行 命令时出现以下情况,是因为可能确实data文件夹和logs文件夹,增加后解决
about to fork child process, waiting until server is ready for connections.
forked process: 21988
ERROR: child process failed, exited with 1
To see additional information in this output, start without the "--fork" option.
注意报错的地方2:
下面报这个错误是因为conf配置表的空格问题
Unrecognized option: path
try 'mongod --help' for more information
进入其中一个节点(主节点)的mongo控制台, 配置集群(务必保证节点防火墙关闭或开放mongo服务端口).
仅在一个节点执行命令进入mongo控制台: mongo 127.0.0.1:27017
方法:
1 |
生成集群配置变量并加入3个节点配置 |
|
2 |
根据变量配置集群 |
|
3 |
查看集群是否配置成功 |
|
4 |
退出shell |
|
集群配置完成后, 仍然在主节点的mongo控制台中添加三个用户:数据库管理员, 集群管理员和访问特定数据库的用户.
仅在一个节点执行命令进入mongo控制台: mongo 127.0.0.1:27017
1 |
使用内置的admin库 |
|
2 |
创建数据库管理员 |
|
3 |
创建集群管理员 |
|
4 |
切换到testdb数据库,(不用事先创建) |
|
5 |
创建特定库的特定用 |
|
6 |
切换到admin数据库 |
|
7 |
查看创建的用户 |
|
8 |
退出shell |
同时按下Ctrl+C |
注意事项:
用户添加完成后需要关闭所有节点(先关闭仲裁和从节点, 再关闭主节点, 避免主节点切换):
关闭三个节点,按顺序执行执行:
1-1 |
进入仲裁节点执行命令 |
|
1-2 |
进入数据库 |
|
1-3 |
关闭mongo后台进程 |
|
1-4 |
退出shell |
|
2-1 |
进入从节点执行命令 |
|
2-2 |
进入数据库 |
|
2-3 |
关闭mongo后台进程 |
|
2-4 |
退出shell |
|
3-1 |
进入主节点执行命令 |
|
3-2 |
进入数据库 |
|
3-3 |
关闭mongo后台进程 |
|
3-4 |
退出shell |
|
keyFile的长度必须在6-1024个字符之间。keyFile的用途是作为所有mongod后台进程允许加入集群的凭证, 所有集群中的节点共用一个keyFile, 避免其他mongod非法加入集群):
仅在一个节点执行(本机执行),步骤如下:
1 |
生成keyFile并放入node01(主节点) |
|
2 |
设置keyFile文件为只读 |
|
3 |
将keyFile复制到node02(从节点) |
|
4 |
将keyFile复制到node03(仲裁节点) |
|
完成后取消三个节点mongod.conf文件中security与setParameter部分的注释,然后重新启动即是带权限的方式了,之前的都是没有权限的启动
|
依次启动主节点, 从节点和仲裁节点的mongod后台进程:
|
进入主节点执行命令: mongo 127.0.0.1:27017
操作一:
1 |
使用内置的admin数据库 |
use admin |
2 |
使用数据库管理员认证 |
db.auth('root', 'root_jY_2021') |
3 |
退出shell |
同时按下Ctrl+C |
操作二:
1 |
使用内置的admin数据库 |
use admin |
2 |
切换到集群管理员用户 |
db.auth('root', 'root_jY_2021') |
3 |
查看创建的用户 |
db.auth('suroot', 'suroot_jY_2021') |
4 |
退出shell |
同时按下Ctrl+C |
操作三:
1 |
切换到testdb数据库 |
use testdb |
2 |
切换到切换到test用户 |
db.auth('test', 'test') |
3 |
退出shell |
同时按下Ctrl+C |
至此, 单服务器下基于用户认证的MongoDB4.2.11三节点副本集集群环境已经搭建完成,下面连接数据库.
方法一:
使用Studio 3T可视化工具远程连接(超级管理员)配置如下,只需要连接单节点
方法二:
let MongoClient=require('mongodb').MongoClient;
let mongoUrl="mongodb://root:[email protected]:27017/admin";
MongoClient.connect(mongoUrl,{ useNewUrlParser: true,useUnifiedTopology: true }, async function(err, pt_clientObj) {
if(err) {console.error("发生错误",err);}
let client = pt_clientObj.db();
console.log("连接成功");
});