MongoDB 副本集:在副本集完成初始化之前无法使用非本地读取关注

Mac*_*cab 19 mongodb replicaset mongodb-replica-set

我尝试按照以下指令创建副本集,例如: https: //hevodata.com/learn/mongodb-replica-set-3-easy-methods/

\n

可悲的是,我在第一步遇到了问题:

\n

问题

\n

命令 :

\n
\nmongod --port 27017 --dbpath "C:\\Program Files\\MongoDB\\Server\\5.0\\data" --replSet replicaSet1\n
\n

日志档案

\n
“创建,cache_size = 3525M,session_max = 33000,驱逐=(threads_min = 4,threads_max = 4),config_base = false,统计=(快速),log =(启用= true,archive = true,path = Journal,compressor = snappy),builtin_extension_config=(zstd=(compression_level=6)),file_manager=(close_idle_time=600,close_scan_interval=10,close_handle_minimum=250),statistics_log=(wait=0),verbose=[recovery_progress,checkpoint_progress,compact_progress]," }}\n{"t":{"$date":"2021-11-23T13:24:05.330+01:00"},"s":"I", "c":"存储", "id ":22430, "ctx":"initandlisten","msg":"WiredTiger 消息","attr":{"message":"[1637670245:330481][2852:140718885658272], txn-recover: [WT_VERB_RECOVERY_PROGRESS] 正在恢复记录 55 到 56"}}\n{"t":{"$date":"2021-11-23T13:24:05.406+01:00"},"s":"I", "c":"存储”,“id”:22430,“ctx”:“initandlisten”,“msg”:“WiredTiger消息”,“attr”:{“消息”:“[1637670245:405280][2852:140718885658272],txn恢复: [WT_VERB_RECOVERY_PROGRESS] 正在恢复日志 56 到 56"}}\n{"t":{"$date":"2021-11-23T13:24:05.500+01:00"},"s":"I", “c”:“存储”,“id”:22430,“ctx”:“initandlisten”,“msg”:“WiredTiger消息”,“attr”:{“消息”:“[1637670245:500025][2852:140718885658272” ],txn-recover:[WT_VERB_RECOVERY | WT_VERB_RECOVERY_PROGRESS] 主恢复循环:从 55/55552 开始到 56/256"}}\n{"t":{"$date":"2021-11-23T13:24:05.656+01:00"},"s ":"I", "c":"STORAGE", "id":22430, "ctx":"initandlisten","msg":"WiredTiger 消息","attr":{"message":"[1637670245: 656606][2852:140718885658272],txn-recover:[WT_VERB_RECOVERY_PROGRESS] 正在恢复日志 55 到 56"}}\n{"t":{"$date":"2021-11-23T13:24:05.749+01:00 "},"s":"I", "c":"STORAGE", "id":22430, "ctx":"initandlisten","msg":"WiredTiger 消息","attr":{"消息" :"[1637670245:748359][2852:140718885658272], txn-recover: [WT_VERB_RECOVERY_PROGRESS] 正在恢复日志 56 到 56"}}\n{"t":{"$date":"2021-11-23T13:24: 05.821+01:00"},"s":"I", "c":"存储", "id":22430, "ctx":"initandlisten","msg":"WiredTiger 消息","attr" :{“消息”:“[1637670245:821165][2852:140718885658272],txn恢复:[WT_VERB_RECOVERY | WT_VERB_RECOVERY_PROGRESS] 设置全局恢复时间戳: (0, 0)"}}\n{"t":{"$date":"2021-11-23T13:24:05.821+01:00"},"s":" I", "c":"STORAGE", "id":22430, "ctx":"initandlisten","msg":"WiredTiger 消息","attr":{"message":"[1637670245:821165][ 2852:140718885658272],txn-恢复:[WT_VERB_RECOVERY | WT_VERB_RECOVERY_PROGRESS] 设置全局最旧时间戳: (0, 0)"}}\n{"t":{"$date":"2021-11-23T13:24:05.826+01:00"},"s":" I", "c":"STORAGE", "id":22430, "ctx":"initandlisten","msg":"WiredTiger 消息","attr":{"message":"[1637670245:826155][ 2852:140718885658272], WT_SESSION.checkpoint: [WT_VERB_CHECKPOINT_PROGRESS] 保存检查点快照最小值: 1, 快照最大值: 1 快照计数: 0, 最旧时间戳: (0, 0) , 元检查点时间戳: (0, 0) 基本写入生成: 68329"}}\n{"t":{"$date":"2021-11-23T13:24:05.840+01:00"},"s":"I", "c":"存储", "id":4795906, "ctx":"initandlisten","msg":"WiredTiger 打开","attr":{"durationMillis":542}}\n{"t":{"$date":"2021 -11-23T13:24:05.841+01:00"},"s":"I","c":"恢复","id":23987,"ctx":"initandlisten","msg":" WiredTiger recoveryTimestamp","attr":{"recoveryTimestamp":{"$timestamp":{"t":0,"i":0}}}}\n{"t":{"$date":"2021 -11-23T13:24:05.854+01:00"},"s":"我","c":"存储","id":4366408,"ctx":"initandlisten","msg":"现有 WiredTiger 表无需修改表日志记录设置","attr":{"loggingEnabled":false}}\n{"t":{"$date":"2021-11-23T13:24:05.858+01 :00"},"s":"I", "c":"STORAGE", "id":22262, "ctx":"initandlisten","msg":"时间戳监视器启动"}\n{"t ":{"$date":"2021-11-23T13:24:05.865+01:00"},"s":"W", "c":"CONTROL", "id":22120, "ctx" :"initandlisten","msg":"数据库未启用访问控制。对数据和配置的读写访问不受限制","tags":["startupWarnings"]}\n{"t":{"$date":"2021-11-23T13:24:05.866+01:00" },“s”:“W”,“c”:“控制”,“id”:22140,
\n

我认为问题出在这句话上:

\n
\n“NotYetInitialized:在副本集完成初始化之前无法使用非本地读关注”\n
\n

关于在这里做什么有什么想法吗?我在 Windows 10 上。

\n

更多信息

\n
\n# mongod.conf\n\n# 有关所有选项的文档,请参阅:\n# http://docs.mongodb.org/manual/reference/configuration-options/\n\n# 存储位置和方式数据。\ns存储:\n dbPath: C:\\Program Files\\MongoDB\\Server\\5.0\\data\n 日志:\n 启用: true\n# 引擎:\n#wiredTiger:\n\n # 写入日志数据的位置。\nsystemLog:\n 目标: 文件\n logAppend: true\n 路径: C:\\Program Files\\MongoDB\\Server\\5.0\\log\\mongod.log\n\ n# 网络接口\nnet:\n 端口: 27017\n bindIp: 127.0.0.1\n\n\n#processManagement:\n\n#security:\n\n#operationProfiling:\n\n#replication:\ n\n#sharding:\n\n## 仅限企业选项:\n\n#auditLog:\n\n#snmp:\n\n
\n

Mat*_*ser 12

您需要初始化replicaSet

$ mongo --port 27017
> rs.initiate()
Run Code Online (Sandbox Code Playgroud)

然后部署更多成员

$ mongod --port 27018 --dbpath "C:\Program Files\MongoDB\Server\5.0\data2" --replSet replicaSet1
Run Code Online (Sandbox Code Playgroud)

确保每个新节点的port&dbpath都不同。

从 shell 将每个新节点添加到副本集

$ mongo --port 27017
PRIMARY> rs.add("localhost:27018")
Run Code Online (Sandbox Code Playgroud)


小智 9

我遇到了同样的问题,但正在使用 docker-compose。
解决了:

这是我的docker-compose.yaml文件:

version: "3"
services:
  mongo1:
    hostname: mongo1
    container_name: localmongo1
    image: mongo
    expose:
      - 27017
    restart: always
    entrypoint: [ "/usr/bin/mongod", "--bind_ip_all", "--replSet", "rs0" ]
  mongo2:
    hostname: mongo2
    container_name: localmongo2
    image: mongo
    expose:
      - 27017
    restart: always
    entrypoint: [ "/usr/bin/mongod", "--bind_ip_all", "--replSet", "rs0" ]
  mongo3:
    hostname: mongo3
    container_name: localmongo3
    image: mongo
    expose:
      - 27017
    restart: always
    entrypoint: [ "/usr/bin/mongod", "--bind_ip_all", "--replSet", "rs0" ]
  mongosetup:
    image: mongo
    depends_on:
      - mongo1
      - mongo2
      - mongo3
    volumes:
      - .:/scripts
    restart: "no"
    entrypoint: [ "bash", "/scripts/mongo_setup.sh"]
Run Code Online (Sandbox Code Playgroud)

这是副本集初始化的配置文件(mongo_setup.sh 文件名):

#!/bin/bash
echo "sleeping for 10 seconds"
sleep 10

echo mongo_setup.sh time now: `date +"%T" `
mongosh --host mongo1:27017 <<EOF
  var cfg = {
    "_id": "rs0",
    "version": 1,
    "members": [
      {
        "_id": 0,
        "host": "mongo1:27017",
        "priority": 2
      },
      {
        "_id": 1,
        "host": "mongo2:27017",
        "priority": 0
      },
      {
        "_id": 2,
        "host": "mongo3:27017",
        "priority": 0
      }
    ]
  };
  rs.initiate(cfg);
EOF
Run Code Online (Sandbox Code Playgroud)


小智 -1

这是预期的。当 mongod 守护进程在另一个终端中运行时,您必须打开一个新终端。

并继续使用“mongo”命令打开 mongo shell。