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

news2024/12/23 0:25:11

一 副本集介绍

在这里插入图片描述

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

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

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

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 })
}

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

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

相关文章

whois命令常见用法

whois命令常见用法whois命令简介安装whoisWindows使用whoisLinux安装whoiswhois常见用法Linux下whois查询域名注册信息whois命令简介 whois就是一个用来查询域名是否已经被注册&#xff0c;以及注册域名的详细信息的数据库&#xff08;如域名所有人、域名注册商&#xff09;。…

分析第一个安卓项目

整体分析 .gradle和.idea 这两个目录下放置的都是Android Studio自动生成的一些文件&#xff0c;我们无须关心&#xff0c;也不要去手动编辑。 app 项目中的代码、资源等内容几乎都是放置在这个目录下的。 gradle 这个目录下包含了gradle wrapper的配置文件&#xff0c;使…

flowable流程设计器的几个bug修改记录

今天根据客户反馈开源项目宁波阿成 (nbacheng) - Gitee.com 有一些bug&#xff0c;主要是前端的&#xff0c;所以今天修正一下 1、对于第一个节点是发起人&#xff0c;后面是多人选择的时候&#xff0c;approval数据被清空了 就是上面的流程&#xff0c;发现有问题 对这种情…

实例13:体育竞技分析

高手过招&#xff0c;胜负只在毫厘之间 计算思维&#xff1a;抽象自动化 模拟&#xff1a;抽象比赛过程自动化执行N场比赛 当N越大时&#xff0c;比赛结果分析会越科学 自顶向下&#xff1a;解决复杂问题的有效方法&#xff0c;将总问题拆分为小问题&#xff0c;分而治之自底向…

【微服务】分布式搜索引擎elasticsearch(3)

分布式搜索引擎elasticsearch&#xff08;3&#xff09;1.数据聚合1.1.聚合的种类1.2.DSL实现聚合1.2.1.Bucket聚合语法1.2.2.聚合结果排序1.2.3.限定聚合范围1.2.4.Metric聚合语法1.2.5.小结1.3.RestAPI实现聚合1.3.1.API语法1.3.2.业务需求1.3.3.业务实现2.自动补全2.1.拼音分…

微信小程序 java php校园快递物流取件及上门服务

系统分为用户和管理员两个角色 用户的主要功能有&#xff1a; 1.用户注册和登陆系统 2.用户查看系统的公告信息 3.用户在线快递下单&#xff0c;支付订单&#xff0c;在线订购快递取件 4.用户在线预约快递&#xff0c;填写快递预约信息 5.用户个人中心在线充值 6.用户个人中心修…

若依配置教程(七)Excel预览功能实现

实现效果及源码 实现效果如下图所示&#xff1a; 实现思路&#xff1a; 1.动态表格&#xff1a;定义表头数组&#xff0c;表格遍历表头生成表格列 2.读取excel文件内容&#xff0c;封装表头&#xff0c;绑定表格数据 代码修改 首先参考若依官网&#xff0c;先实现excel导入功…

浅析综合型大厦视频监控平台建设的必要性和重点功能

一、方案背景随着现代科学技术的发展&#xff0c;监控系统已成为综合型大厦安全防范必不可少的一部分。为了保障整个大厦的安全管理&#xff0c;借助安防监控系统能够迅速而有效地全面管理、禁止或处理突发性事件。因此建设一套优良的监控系统对于大厦各方面的管理都显得尤为重…

从零开始配置vim(31)——git 配置

很抱歉又拖更了这么久了&#xff0c;在这个新公司我想快速度过试用期&#xff0c;所以大部分的精力主要花在日常工作上面。但是这个系列还是得更新下去&#xff0c;平时只能抽有限的业余时间来准备。这就导致我写这些文章就慢了一些。 废话不多说&#xff0c;咱们正式开始有关g…

【Leetcode】面试题 01.06. 字符串压缩、面试题 05.07. 配对交换

作者&#xff1a;一个喜欢猫咪的的程序员 专栏&#xff1a;《Leetcode》 喜欢的话&#xff1a;世间因为少年的挺身而出&#xff0c;而更加瑰丽。 ——《人民日报》 目录 面试题 01.06. 字符串压缩&#xff1a; 面试题 05.07. 配对交换 面试题…

【贪心数学困难题】1739. 放置盒子

⭐️前面的话⭐️ 本篇文章介绍【贪心数学困难题】1739. 放置盒子题解&#xff0c;展示语言java。 &#x1f4d2;博客主页&#xff1a;未见花闻的博客主页 &#x1f389;欢迎关注&#x1f50e;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; &#x1f4cc;本文由未见花闻原创&am…

20份可视化大屏模板,直接套用真香(文末附源码)

最近有不少小伙伴问我&#xff1a;有没有数据可视化大屏模板&#xff0c;而且要B格很高的。 这不&#xff0c;立马安排。特地给大家准备了20张精美、炫酷而且十分实用的可视化大屏模板&#xff0c;涉及机械、加工、零售、银行、交通等行业。 只要你有数据就能够迅速套用到模板…

Spring-IOC/DI配置管理第三方bean

Spring-IOC/DI配置管理第三方bean 1&#xff0c;IOC/DI配置管理第三方bean 1.1 案例:数据源对象管理 本次案例将使用咱们前面提到过的数据源Druid(德鲁伊)和C3P0来配置学习下。 1.1.1 环境准备 学习之前&#xff0c;先来准备下案例环境: 创建一个Maven项目 pom.xml添加依…

代码随想录day52 动态规划

代码随想录day52 动态规划 题1143.最长公共子序列 1&#xff0c;本题和最长重复子数组的区别在于本题不要求连续&#xff0c;那么当遇到元素不相同时不能重头开始累计&#xff0c;而应该取前面情况中的最大值。 2&#xff0c;dp数组依然为dp[i][j]&#xff1a;长度为[0, i -…

提取页码去重再编号

实例需求&#xff1a;A列为档号数据&#xff0c;由多段数字组成&#xff0c;使用减号作为分隔符&#xff0c;最后一段数字代表页数&#xff0c;注意页数是不连续的&#xff0c;倒数第二段数字是代表档案中的第几本&#xff0c;每个档案都是从1开始。现在需要在B列创建“卷内顺序…

A股level2行情数据接口可以获取可转债数据吗?

可以的&#xff0c;究竟如何通过level2行情获取可转债数据&#xff1f; level2行情数据接口数据包括每只股票每3秒的快照数据&#xff0c;每10秒的快照数据毫秒级差别推送数据&#xff0c;收集多个逐笔成交数据和逐笔委托数据。 通过数据提供商获取即时收集数据和盘后数据。数…

七、请求和响应

请求和响应 web框架本质就是处理用户发起的请求&#xff0c;然后返回响应结果。请求&#xff0c;和响应就是框架中的数据流。 请求 当页面被请求时&#xff0c;django会创建一个HttpRequest对象&#xff0c;该对象包含关于请求的元数据。然后django加载适当的视图&#xff0…

[NOI Online 2021 入门组] 切蛋糕

题目描述: Alice、Bob 和 Cindy 三个好朋友得到了一个圆形蛋糕&#xff0c;他们打算分享这个蛋糕。 三个人的需求量分别为 a,b,c现在请你帮他们切蛋糕&#xff0c;规则如下&#xff1a; 每次切蛋糕可以选择蛋糕的任意一条直径&#xff0c;并沿这条直径切一刀&#xff08;注意…

【C++】模板进阶:非类型的模板参数与模板的特化

一、非类型模板参数 模板参数分类&#xff1a;类型形参与非类型形参。 类型形参&#xff1a;出现在模板参数列表中&#xff0c;跟在class或者typename之后的参数类型名称。 非类型形参&#xff0c;就是用一个常量作为类(函数)模板的一个参数&#xff0c;在类(函数)模板中可将…

GMP调度模型

GMP的发展: go 1.1版本之前时候过使用的是GM模型全局队列的模式。GM模型全局队列的模式M&#xff1a;1 内核线程&#xff1a;协程新建一个协程G的时候会放入全局队列中&#xff0c;每次执行一个协程G的时候&#xff0c;内核线程M会从全局队列中获取一个协程G执行,因为内核线程…