Mongo数据库集群搭建

news2024/11/19 2:08:55

目录

1、Mongo集群优势

1.1 高可用性

1.2 水平扩展性

1.3 高性能

1.4 灵活的架构设计

1.5 数据安全

1.6 管理与监控

2、下载指定操作系统版本包

3、部署和验证工作

3.1 准备配置文件及依赖

3.2 启动第一个节点

3.3 部署更多的节点

3.4 初始化副本集

3.5 设置管理员账户和密码

3.6 验证集群功能

4、常见问题


MongoDB因为使用比较方便,在研发或测试团队用的比较普遍,有时候可能因为成本和预算等原因,短期无法在云上买集群资源,只能在物理机器上部署,考虑一般机器部署的服务和使用的同学都比较多,单节点故障容错率较低,因此一般建议是部署集群模式,否则一台机器故障,可能导致服务不可用或数据丢失。下文简单介绍了Mongo集群优势、部署方法、常见问题。

1、Mongo集群优势

1.1 高可用性

  • 复制集实现故障转移:MongoDB 通过复制集(Replica Set)提供了高可用性。复制集包含一个主节点(Primary)和多个从节点(Secondary),当主节点发生故障时,从节点可以自动提升为主节点,确保服务不中断。
  • 读写分离:可以配置从节点处理读请求,降低主节点的负载,提高整体可用性。

1.2 水平扩展性

  • 分片(Sharding)支持大规模数据集
    • MongoDB 的分片功能允许将数据分布在多个服务器上,以便处理更大的数据集。
    • 分片支持自动均衡,确保各分片数据量和访问负载保持均衡。
  • 无单点瓶颈:通过增加节点,集群可以无限制扩展存储和计算能力,适合高增长的业务场景。

1.3 高性能

  • 并行处理:多个节点可以同时处理请求,利用分片和复制集的架构,支持更高的吞吐量。
  • 内存优先:MongoDB 使用内存映射机制,对于频繁访问的数据,性能优势明显。
  • 灵活的分片键:合理选择分片键可以优化查询性能,减少节点间的网络流量。

1.4 灵活的架构设计

  • 动态模式:MongoDB 以文档为中心的存储方式,不需要预定义模式(Schema),可以快速响应业务需求的变化。
  • 弹性伸缩:支持在运行时扩展和收缩集群,无需停机。
  • 地理分布:通过分片键设计和配置,可以根据地理位置分布数据,提高本地访问速度。

1.5 数据安全

  • 数据冗余:复制集通过多副本存储,提供数据冗余,防止单点故障导致数据丢失。
  • 数据一致性:通过写入确认机制(Write Concern),可以实现不同级别的数据一致性。

1.6 管理与监控

  • 自动化管理:MongoDB 提供工具如 MongoDB AtlasOps Manager,帮助快速部署和管理集群。
  • 实时监控:支持实时监控查询性能、节点状态和集群活动,便于发现和解决问题。

2、下载指定操作系统版本包

下载地址:MongoDB Atlas Database | Multi-Cloud Database Service | MongoDB,如下图所示,按需下载即可。

3、部署和验证工作

3.1 准备配置文件及依赖

以解压后bin文件夹所在的目录为根目录,建议使用配置文件方式启动。为了让目录结构更清晰,可以手动新建一些目录和文件:./logs日志文件夹、数据文件夹./data/db、配置文件./conf/config.yaml

除了基本的配置,那集群之间各节点的如何通信的呢?这个就涉及到keyFile文件的生成。

在MongoDB集群中,使用keyFile进行鉴权是一种常见的方法,它确保只有持有相同keyFile的节点能够相互通信和验证身份

假设我们的文件名为key_file,可以执行如下命令生成keyFile,目录根据实际需要指定就行。

openssl rand -base64 756 > key_file

设置keyFile权限:

  • 出于安全考虑,keyFile必须对MongoDB用户可读,并且其他用户不可读。你可以使用chmod命令将keyFile的权限设置为600(或400,但600更常见,因为它允许文件所有者读写文件,但不允许其他用户访问)。
  • 未设置时./logs/mongod.log日志可能会报错:"msg":"Error creating service context","attr":{"error":"Location5579201: Unable to acquire security key[s]"}}
chmod 600 /path/to/your/key_file

最后完整的./conf/config.yaml文件内容示例如下,注意将/path/to/your/dir改为你自己的地址。

systemLog:
    destination: file
    path: /path/to/your/dir/logs/mongod.log
    logAppend: true
storage:
    dbPath: /path/to/your/dir/data/db
    wiredTiger:         # 最大缓存大小为50G,可选设置
        engineConfig:
            cacheSizeGB: 50.0 
net:
    bindIp: 0.0.0.0
    port: 8017
replication: # 副本集名称
    replSetName: mongoClusterTest
processManagement:
    fork: true
security: 
    authorization: enabled
    keyFile: /path/to/your/dir/data/key_file # 各节点相互通信和验证身份

3.2 启动第一个节点

./bin/mongod --fork -f ./conf/config.yaml

预期成功会输出:

% ./bin/mongod --fork -f ./conf/config.yaml
about to fork child process, waiting until server is ready for connections.
forked process: 84352
child process started successfully, parent exiting

此时我们已经成功启动了一个节点。

3.3 部署更多的节点

部署第二个、第三个或更多的节点方法和第一个节点类似,注意版本和配置文件保持一样即可。注意给key_file加权限。

chmod 600 /path/to/your/key_file

为了演示方便,假设现在我们在同一台机器成功启动了另外2个节点,端口分别为8018、8019,实际部署时建议在不同机房的机器。

3.4 初始化副本集

在部署机器上通过MongoDB Shell连接其中一个节点,比如第一个:

./bin/mongo --port 8017

如果没有./mongo,可以手动下载mongo shell工具,如果远程连接需要指定--host,也就是mongo部署的机器信息。

在 MongoDB Shell 中执行以下命令,初始化副本集,注意_id需要和配置文件中的replSetName字段值保持一致。

rs.initiate({
    _id: "mongoClusterTest", // 副本集名称,需与配置文件一致
    members: [
        { _id: 0, host: "127.0.0.1:8017" },
        { _id: 1, host: "127.0.0.1:8018" },
        { _id: 2, host: "127.0.0.1:8019" }
    ]
});

 预期成功后信息如下:

检查副本集状态, 使用以下命令查看详细信息,确保所有节点的状态为 PRIMARYSECONDARY

rs.conf();
rs.status();

3.5 设置管理员账户和密码

按需常见即可,可以设置数据库级别的权限。下面给出管理员用户的账户和密码示例。管理员用户负责管理整个 MongoDB 集群的权限。以下是创建管理员用户的步骤:

1、以无身份验证模式连接 MongoDB

 连接到primary主节点的 MongoDB(默认无身份验证时)。设置了后,后面连接时需要指定账户和密码。

2、切换到 admin 数据库

use admin;

3、创建管理员用户

假设账户名为zhangsan,密码为abc123456,按需来改就行。

db.createUser({
    user: "zhangsan",
    pwd: "abc123456", // 替换为强密码
    roles: [ { role: "root", db: "admin" } ]
});

 成功操作后的返回信息示例为:

3.6 验证集群功能

为了方便手动操作,我们可以结合一些可视化的工具来操作,比如:Studio 3T。

  • 连接信息,输入节点信息和账户密码。

  • 连接成功后可以看到集群各节点的信息。
  • 如果没问题了就可以右键创建数据库、表,测试数据的增删改查。

4、常见问题

1、报错『ERROR: child process failed, exited with error number 1』退出。

答:可以通过less ./logs/mongod.log查看日志。

2、缓存设置可以结合实际情况设置,比如最大限制为50G,默认为系统可用资源的一半左右。

答:在配置文件中的设置示例。

3、连接方式建议换成集群形式,不推荐使用单节点连接,因为集群节点重启可能会引起重新选举primary节点。手动重新选举有很多方式,可以参考:

强制重新选举(Step Down):

MongoDB提供了rs.stepDown()方法,使当前primary节点放弃主节点角色,重新触发选举过程。新的primary节点会在剩余secondary节点中根据优先级选出。
rs.stepDown()
此命令需要在primary节点执行。执行后,当前primary节点会立即转换为secondary,且一段时间内不能重新竞选为primary。

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

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

相关文章

创建vue3项目步骤

脚手架创建项目: pnpm create vue Cd 项目名称安装依赖:Pnpm iPnpm Lint:修复所有文件风格 ,不然eslint语法警告报错要双引号Pnpm dev启动项目 拦截错误代码提交到git仓库:提交前做代码检查 pnpm dlx husky-in…

C语言项⽬实践-贪吃蛇

目录 1.项目要点 2.窗口设置 2.1mode命令 2.2title命令 2.3system函数 2.Win32 API 2.1 COORD 2.2 GetStdHandle 2.3 CONSOLE_CURSOR_INFO 2.4 GetConsoleCursorInfo 2.5 SetConsoleCursorInfo 2.5 SetConsoleCursorPosition 2.7 GetAsyncKeyState 3.贪吃蛇游戏设…

nfs服务器--RHCE

一,简介 NFS(Network File System,网络文件系统)是FreeBSD支持的文件系统中的一种,它允许网络中的计 算机(不同的计算机、不同的操作系统)之间通过TCP/IP网络共享资源,主要在unix系…

自动化运维(k8s):一键获取指定命名空间镜像包脚本

前言:脚本写成并非一蹴而就,需要不断的调式和修改,这里也是改到了7版本才在 生产环境 中验证成功。 该命令 和 脚本适用于以下场景:在某些项目中,由于特定的安全或政策要求,不允许连接到你的镜像仓库。然而…

HuggingFace:基于YOLOv8的人脸检测模型

个人操作经验总结 1、YOLO的环境配置 github 不论base环境版本如何,建议在conda的虚拟环境中安装 1.1、创建虚拟环境 conda create -n yolov8-face python3.9conda create :创建conda虚拟环境, -n :给虚拟环境命名的…

Unet++改进28:添加PPA(2024最新改进方法)|多分支特征提取策略,捕获不同尺度和层次的特征信息。

本文内容:添加PPA 目录 论文简介 1.步骤一 2.步骤二 3.步骤三 4.步骤四 论文简介 红外小目标检测是一项重要的计算机视觉任务,涉及对红外图像中通常只有几个像素的微小目标进行识别和定位。然而,由于红外图像中物体的体积小,背景一般比较复杂,这给红外图像的识别带来…

CTF攻防世界小白刷题自学笔记13

1.fileinclude,难度:1,方向:Web 题目来源:宜兴网信办 题目描述:无 给一下题目链接:攻防世界Web方向新手模式第16题。 打开一看给了很多提示,什么language在index.php的第九行,flag在flag.php中,但事情显…

同三维T610UDP-4K60 4K60 DP或HDMI或手机信号采集卡

1路DP/HDMI/TYPE-C(手机/平板等)视频信号输入1路MIC1路LINE OUT,带1路HDMI环出,USB免驱,分辨率4K60,可采集3路信号中其中1路,按钮切换,可采集带TYPE-C接口的各品牌手机/平板/笔记本电脑等 同三维…

小程序如何完成订阅

小程序如何完成订阅 参考相关文档实践问题处理授权弹窗不再触发引导用户重新授权 参考相关文档 微信小程序实现订阅消息推送的实现步骤 发送订阅消息 小程序订阅消息(用户通过弹窗订阅)开发指南 实践 我们需要先选这一个模板,具体流程参考…

解决Xeyes: Error can‘t open display,远程X无法连通问题。

一、问题分析 提前申明: 本次实验使用REHL 8 进行操作! 客户机 A 为X-Client ,即远程X的客户端。 服务机 B 为X-Server,即远程X的服务端。 问题的所有操作均在已经配置好Xorg的前提下进行的,不知道不配置会有什么影响&…

JS学习日记(jQuery库)

前言 今天先更新jQuery库的介绍,它是一个用来帮助快速开发的工具 介绍 jQuery是一个快速,小型且功能丰富的JavaScript库,jQuery设计宗旨是“write less,do more”,即倡导写更少的代码,做更多的事&#xf…

华为HCIP——MSTP/RSTP与STP的兼容性

一、MSTP/RSTP与STP的兼容性的原理: 1.BPDU版本号识别:运行MSTP/RSTP协议的交换机会根据收到的BPDU(Bridge Protocol Data Unit,桥协议数据单元)版本号信息自动判断与之相连的交换机的运行模式。如果收到的是STP BPDU…

基于YOLOv8深度学习的智慧课堂学生专注度检测系统(PyQt5界面+数据集+训练代码)

本研究提出了一种基于YOLOv8深度学习的智慧课堂学生专注度检测系统,旨在实现对课堂中学生专注度的实时分析与评估。随着智慧教育的快速发展,学生的课堂表现和专注度成为评估学习效果的重要因素之一。然而,传统的专注度评估方法往往依赖于主观…

【汇编】c++游戏开发

由一起学编程创作的‘C/C项目实战:2D射击游戏开发(简易版), 440 行源码分享来啦~’: C/C项目实战:2D射击游戏开发(简易版), 440 行源码分享来啦~_射击c-CSDN博客文章浏览…

QT_CONFIG宏使用

时常在Qt代码中看到QT_CONFIG宏,之前以为和#define、DEFINES 差不多,看了定义才发现不是那么回事,定义如下: 看注释就知道了QT_CONFIG宏,其实是:实现了一个在编译时期安全检查,检查指定的Qt特性…

Area-Composition模型部署指南

一、介绍 本模型可以通过输入不同的提示词,然后根据各部分提示词进行融合生成图片。如下图: 此图像包含 4 个不同的区域:夜晚、傍晚、白天、早晨 二、部署 环境要求: 最低显存:10G 1. 部署ComfyUI 本篇的模型部署…

计算机网络 (1)互联网的组成

一、互联网的边缘部分 互联网的边缘部分由所有连接在互联网上的主机组成,这些主机又称为端系统(end system)。端系统可以是各种类型的计算机设备,如个人电脑、智能手机、网络摄像头等,也可以是大型计算机或服务器。端系…

构建SSH僵尸网络

import argparse import paramiko# 定义一个名为Client的类,用于表示SSH客户端相关操作 class Client:# 类的初始化方法,接收主机地址、用户名和密码作为参数def __init__(self, host, user, password):self.host hostself.user userself.password pa…

永磁同步电机负载估计算法--直接计算法

一、原理介绍 本文采用直接计算法估计负载转矩并将估计值前馈至转速环输出,来提高PI调节器应对负载扰动的性能。直接计算法是一种将 PMSM 的运动方程中的负载转矩项直接作为观测量,通过公式的逆向推导整理,将负载转矩项提取出来移到等式的一…

Java:什么是RPC框架?

RPC 远程调用的通信(RPC) RPC(Remote Procedure Call Protocol)是指远程过程调用协议。 通俗描述 客户端在不知道调用细节的情况下,可以像调用本地应用程序中的对象一样,调用存在于远程计算机上的某个对…