mongodb 使用密钥文件身份验证部署副本集

时间:2024-01-10 01:02:37 标签:  MongoDB  MongoDB  数据库  nosql  

一 副本集介绍

在这里插入图片描述

集群中每个节点有心跳检测
在这里插入图片描述

如果由于资源限制,可以部署一主一从一仲裁

在这里插入图片描述
副本集集群可以实现主从的自动切换
在这里插入图片描述

Read Preference

在客户端连接中,可以实现读取优先,就是连接器会自动判断,把读取请求发送到副本集中的从节点,默认读写都发送到主节点。

在这里插入图片描述

二 部署

下面使用部署 3 成员的副本集集群为例介绍副本集的部署。
并且假设,部署方式是 docker-compose

参考官方连接 https://www.mongodb.com/docs/manual/tutorial/deploy-replica-set-with-keyfile-access-control/

compose 文档内容如下:

version: '3.9'
services:
  # mongodb server
  mongo:
    labels:
      co.elastic.logs/module: mongodb
    image: mongo:6.0.4
    command: --replSet rs0 --bind_ip localhost,<hostname> --wiredTigerCacheSizeGB 2 --keyFile /etc/keyfile.key
    network_mode: host
    restart: always
    environment:
      # 管理员用户
      MONGO_INITDB_ROOT_USERNAME: mongoadmin

      # 管理员密码
      MONGO_INITDB_ROOT_PASSWORD: password
    volumes:
      - "/etc/localtime:/etc/localtime"
      - "./data:/data/db"
      - "./keyfile.key:/etc/keyfile.key"
    expose:
      - "27017:27017"

<hostname> 是每个节点的主机名

生成 密钥文件 用于集群成员之间的认证。 6.0 版本使用认证所必须的

openssl rand -base64 756 >

应该将集群的每个节点部署在不同的服务器上,这里假设部署的服务器主机名为: node1,node2,node3

mongdb 的 docker-compose 目前结构

mongodb:
  |- data
  |- keyfile.key
  |_ compose.yml

将 mongodb 目录传输到每个节点,并修改 keyfile.key 权限

chmod 400 keyfile.key
chown 999.999 keyfile.key  data

启动每个节点的 mongo 后,停 35 秒左右之后,只需在其中 任意一个节点执行如下命令初始化集群即可:

docker-compose exec mongo mongosh -u mongoadmin -p password --eval
          "rs.initiate({_id : 'rs0', members: [{ _id : 0, host: 'node1:27017' },{ _id : 1, host : 'node2:27017' },{ _id : 2, host : 'node3:27017' }]})"

检查集群状态
任意一个节点执行如下命令即可

docker-compose exec mongo mongosh -u root -p mongo123 --eval "rs.status()"

输出示例:
主要观察 stateStr 字段的值: PRIMARY|SECONDARY

...
 members: [
    {
      _id: 0,
      name: 'node1:27017',
      health: 1,
      state: 1,
      stateStr: 'PRIMARY',
      uptime: 1874,
      optime: { ts: Timestamp({ t: 1675232833, i: 1 }), t: Long("1") },
      optimeDate: ISODate("2023-02-01T06:27:13.000Z"),
      lastAppliedWallTime: ISODate("2023-02-01T06:27:13.799Z"),
      lastDurableWallTime: ISODate("2023-02-01T06:27:13.799Z"),
      syncSourceHost: '',
      syncSourceId: -1,
      infoMessage: '',
      electionTime: Timestamp({ t: 1675231003, i: 1 }),
      electionDate: ISODate("2023-02-01T05:56:43.000Z"),
      configVersion: 1,
      configTerm: 1,
      self: true,
      lastHeartbeatMessage: ''
    },
    {
      _id: 1,
      name: 'node2:27017',
      health: 1,
      state: 2,
      stateStr: 'SECONDARY',
      uptime: 1847,
      optime: { ts: Timestamp({ t: 1675232833, i: 1 }), t: Long("1") },
      optimeDurable: { ts: Timestamp({ t: 1675232833, i: 1 }), t: Long("1") },
      optimeDate: ISODate("2023-02-01T06:27:13.000Z"),
      optimeDurableDate: ISODate("2023-02-01T06:27:13.000Z"),
      lastAppliedWallTime: ISODate("2023-02-01T06:27:13.799Z"),
      lastDurableWallTime: ISODate("2023-02-01T06:27:13.799Z"),
      lastHeartbeat: ISODate("2023-02-01T06:27:19.573Z"),
      lastHeartbeatRecv: ISODate("2023-02-01T06:27:18.571Z"),
      pingMs: Long("0"),
      lastHeartbeatMessage: '',
      syncSourceHost: 'node1:27017',
      syncSourceId: 0,
      infoMessage: '',
      configVersion: 1,
      configTerm: 1
    },
    {
      _id: 2,
      name: 'node3:27017',
      health: 1,
      state: 2,
      stateStr: 'SECONDARY',
      uptime: 1847,
      optime: { ts: Timestamp({ t: 1675232833, i: 1 }), t: Long("1") },
      optimeDurable: { ts: Timestamp({ t: 1675232833, i: 1 }), t: Long("1") },
      optimeDate: ISODate("2023-02-01T06:27:13.000Z"),
      optimeDurableDate: ISODate("2023-02-01T06:27:13.000Z"),
      lastAppliedWallTime: ISODate("2023-02-01T06:27:13.799Z"),
      lastDurableWallTime: ISODate("2023-02-01T06:27:13.799Z"),
      lastHeartbeat: ISODate("2023-02-01T06:27:19.565Z"),
      lastHeartbeatRecv: ISODate("2023-02-01T06:27:18.593Z"),
      pingMs: Long("0"),
      lastHeartbeatMessage: '',
      syncSourceHost: 'node1:27017',
      syncSourceId: 0,
      infoMessage: '',
      configVersion: 1,
      configTerm: 1
    }
  ],
  ok: 1,
  '$clusterTime': {
    clusterTime: Timestamp({ t: 1675232833, i: 1 }),
    signature: {
      hash: Binary(Buffer.from("5d771f4d9b817a799ab4c221590e12a6da31c9b6", "hex"), 0),
      keyId: Long("7195062371130277893")
    }
  },
  operationTime: Timestamp({ t: 1675232833, i: 1 })
}

来源:https://blоg.сsdn.nеt/qq_22648091/аrtiсlе/dеtаils/128820251

智能推荐

  当你需要用到一个MongoDB 副本集集群,用于开发测试时, 可以通过下面的步骤简单完成。&nbsp; &nbsp; &nbsp; 版本及环境 MongoDB4.4&nbsp; Centos6.5&nbsp;  一. 下载安装 MongoDB Server 及 MongoDB Shell  二. 副本集启动,初始化&nbsp; &nbsp; &nbsp; 三. 配置用户 增加 访问控制&nbsp;  一、下载 MongoDB Server 及 Mon

标签:集部  副本  访问控制  MongoDB  

每日一句Perfection is not just about control. Its also about letting go.完美不是控制出来的,是爆发出来的。概述MongoDB中的副本集(Replica Set)是一组维护相同数据集的mongod服务。副本集可提供冗余和高可用性,是所有生产部署的基础。副本集类似于有自动故障恢复功能的主从集群。通俗的讲就是用多台机器进行同一数据的异步同步,从而使多台机器拥有同一数据的多个副本,并且当主库当掉时在不需要用户干预的情况下自动切换其他备份服务器做主库。而且还可以利用副本服务器做只读服务器,实现读写分离,提高负载。

标签:副本  MongoDB  

MongoDB Replica Sets简介MongoDB中的副本集(Replica Set)是一组维护相同数据集的mongod服务。副本集可提供冗余和高可用性,是所有生产部署的基础。也可以说,副本集类似于有自动故障修复功能的主从集群。通俗的讲就使用多台机器进行同一数据的异步同步,从而使多台机器拥有同一数据的多个副本,并且当主库宕机时再不需要用户干预的情况下自动切换其他备份服务器做主库。而且还可以利用副本服务器做只读服务器,实现读写分离,提高负载。1

标签:副本  MongoDB  

使用内置身份验证 获取session         目前&

标签:vscode  node.js  microsoft  

简介在 MongoDB 中,副本集指的是一组 MongoDB 服务器实例掌管同一个数据集,实例可以在不同的机器上。其中一个用于处理写操作的是主节点(Primary),还有多个用于保存主节点的数据副本的从节点(Secondary)。如果主节点崩溃了,则从节点会从其中选取出一个新的主节点。副本集保证数据在生产部署时的冗余和可靠性,通过在不同的机器上保存副本来保证数

标签:副本  简介  MongoDB  

一、添加组1.1、在域服务器DC1上,打开服务器管理器,点击工具,选择Active Directory 用户和计算机。1.2、对着销售部点击右键,选择新建,然后点击组。

标签:学习笔记  身份验证  

在互联网世界,验证用户身份是一个常见又重要的场景,应用最广泛的方式当属帐号密码验证。随着开发者对身份验证安全性要求不断提升,加之用户更加注重过程中的隐私与便捷,身份验证的方式逐渐多样化,有动态令牌、短信验证码、生物特征认证等方式。本文主要从安全性的角度,探讨几种常见身份验证方式存在的安全漏洞,为开发者们提供更具优势的解决方案。常见身份验证方式的在安全性方面的隐患如下:

标签:身份验证  隐私  密码  用户  

  这是我在博客园的第一篇博客,也是我人生中的第一篇博客。希望它能够记录我的成长,帮助更多的人。  最近在写我们社团的社团网站,有一个页面不太希望普通访客能访问到,所以想做一个“统一身份验证验证”,但是又苦于社团网站搭建是纯静态站,没法做数据库,只能妥协,将账号密码字符串组写到JavaScript脚本里,最后再混淆加密。当然,现在我已经找到了更好的方法,可惜暂时没有时间完成,我将在后文简述思路,如有可能,我会另开一篇新方法实现过程。  思路如下:    1.首先建立一个遮罩层挡住你要验证后才能看的内容    2.建立一个form表单,为其赋予name    3.然后在表单中添加input密码账号输入框,同时

标签:身份验证  简单  css  html  javascript  

新建.net core web的api项目(.net core版本3.1)&nbsp;在Value控制器下写一个模拟登录接口,进行简单的名字和密码验证即可。验证通过后会返回一个token。 1

标签:身份认证  NET  Core  JWT  

本文更新于2022-01-08,使用MongoDB 4.4.5。目录单台服务器下创建副本集多台服务器下创建副本集重新启动并连接到副本集维护副本集节点单台服务器下创建副本集确保/data/db目录存在且当前系统用户有读写权限。例如(需根据实际情况设置权限):su rootmkdir -p /data/dbchmod 0777 /data /data/db

标签:副本  学习笔记  MongoDB  

目录Welcome to YARP - 1.认识YARP并搭建反向代理服务Welcome to YARP - 2.配置功能2.1 - 配置文件(Configuration Files)2.2 - 配置提供者(Configuration Providers)2.3 - 配置过滤器(Configuration Filters)Welcome to YARP - 3.负载均衡Welcome to YARP - 4.限流Welcome to YARP - 5.身份验证和授权Welcome to YA

标签:身份验证  YARP  

package org.flowable.ui.common.security;import org.fh.util.Jurisdiction;import

标签:自带  身份验证  flowable  IDM  

参考资料:远程连接身份验证错误,又找不到加密Oracle修正Win10远程桌面 出现 身份验证错误

标签:身份验证  又找  错误  oracle  

远程连接服务器出现了错误,错误信息为:远程连接身份验证错误,又找不到加密Oracle修正。服务器系统:Windows Server2016客户端系统:Windows10家庭版和专业版&nbsp;出错原因:Windows的CVE-2018-0886 的 CredSSP 更新将CredSSP 身份验证协议默认设置成了“缓解”,之前为“易受攻击”。&nbsp;解决方法:方法1(推荐):  WIN+R,输入regedit,进入注册表编辑器  依次打开:(本人操作时一直失败,

标签:身份验证  又找  错误  oracle  

  前文我们聊到了mongodb的索引的相关作用和介绍以及索引的管理,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/13950287.html;今天我们来聊下mongodb的副本集;  1、什么是副本集?主要作用是什么?它是怎么工作的呢?  所谓副本集是指服务于同一数据集的多个mongodb实例;这意味着在mongodb中数据集副本的数量可以是多个,每个副本的数据都是一样的;副本的存在主要作用是对mongodb数据库中的数据做冗余备份和提高数据服务的可用性;在mongodb中对数据做冗余的方式有两种,一种是主从架构(master/slave),这种架构和mysql中的主从架构没有什么不同,但是在mongodb中,主

标签:分布式  副本  文档  数据库  MongoDB  

猜你喜欢

Kerberos,在古希腊神话故事中,指的是一只三头犬守护在地狱之门外,禁止任何人类闯入地狱之中。那么在现实中,Kerberos指的是什么呢?一、Kerberos介绍01 Kerberos是什么根据百度词条释义,Kerberos是一种计算机网络授权协议,用来在非安全网络中,对个人通信以安全的手段进行身份认证。Kerberos旨在通过密钥加密技术为客户端/服务器应用程序提供身份验证,主要用在域环境下的身份验证。在此之前,通常只有服务器的运维管理人员在配置Active Directory之类的东西时才会接触到Kerberos,但随

标签:身份验证  Kerberos  ChunJun  

前言    事情是这样的,在我进入目前公司的时候。因为公司是一家创业公司,所以在我进去的时候,里面的开发配置就是web前端,ui设计,加我PHP后台各一个。接手的是一个公益小程序,业务倒是不怎么复杂,负责人说这个项目是之前委托外包公司开发的,用的是uniapp开发的小程序,基于ThinkPHP6.0做的接口开发,和一个CatchAdmin开发的管理后台。公司主要业务这个上面都已经开发完了,但是由于微信小程序的一些功能的限制,我们想把目前的这个项目转移到微信公众号上面,就是改成H5开发的模式。八月的雨    当时负责人,说前端可能需要重写,因为之前是小程序,现在是H5嘛,前端是一个刚服役退

标签:如何使用  接口  身份  代码  php  

前言说明&nbsp;Linux下安装MongoDB副本集我基本上是一次搭建,几百年不再碰,也记不住具体的命令,偶尔需要搭建都是直接网上找的教程。有些教程很精简,有些又版本不一样,所以索性我整合下别人的教程,把linux下搭建副本集的步骤记录下并分享出来,希望能够帮到你们。&nbsp;&nbsp;参考以下文章:https://developer.aliyun.com/article/983777https://developer.aliyun.com/article/485807&nbsp; -- 这个还有分片相关的东西,&nbsp;安装环境单台CENT O

标签:副本  节点  单机  MongoDB  linux  

双因子身份验证(Two-Factor Authentication, 2FA)是多因子身份验证(Multi-Factor Authentication, MFA)的一种。这两种身份验证解决方案都需要额外的身份验证因素来保障帐户的安全性。在区别 2FA 和 MFA 有什么不同之前,我们先来了解身份验证的概念和身份验证因素。什么是身份验证?身份验证是身份访问管理(Identity and Access Management, IAM)的一个基本概念,让系统能够验证用户的身份。身份验证因素是在授予访问权限之前证明用户本人身份的安全机制。目前存在三种类型的身份验证因素:

标签:因子  有什么区别  身份验证  

使用 ssh-keygen 生成密钥参考资料https://learn.microsoft.com/zh-cn/azure/virtual-machines/linux/create-ssh-keys-detailed快速开始以下 ssh-keygen 命令默认在 ~/.ssh 目录中生成 4096 位 SSH RSA 公钥和私钥文件。 如果当前位置存在 SSH 密钥对,这些文件将被覆盖。

标签:密钥  SSH  keygen  

内置账号密码登录因为自己搭建的环境存在一些问题,可能是版本过高的原因,(奇奇怪怪的问题,用户没有权限),所以目前仅仅做概念性验证,对漏洞的原理进行分析。在未登录的情况下访问接口&nbsp;/smartbi/vision/RMIServlet​

标签:漏洞  身份认证  smartbi  

相关问题

相关文章

热门文章

推荐文章

相关标签