mongodb 主从配置

#进入主节点
mongosh 主机名(ip):port
rs.initiate() 进入节点配置
回车一直到现在primary 模式
rs0 [direct: primary] test>

rs.status() 查看主节点的信息
有一个members属性 显示的是主节点有哪些节点

{
  set: 'rs0',
  date: ISODate("2023-05-31T06:19:01.043Z"),
  myState: 2,
  term: Long("1"),
  syncSourceHost: 'zyj:28017',
  syncSourceId: 0,
  heartbeatIntervalMillis: Long("2000"),
  majorityVoteCount: 2,
  writeMajorityCount: 2,
  votingMembersCount: 3,
  writableVotingMembersCount: 3,
  optimes: {
    lastCommittedOpTime: { ts: Timestamp({ t: 1685513939, i: 1 }), t: Long("1") },
    lastCommittedWallTime: ISODate("2023-05-31T06:18:59.097Z"),
    readConcernMajorityOpTime: { ts: Timestamp({ t: 1685513939, i: 1 }), t: Long("1") },
    appliedOpTime: { ts: Timestamp({ t: 1685513939, i: 1 }), t: Long("1") },
    durableOpTime: { ts: Timestamp({ t: 1685513939, i: 1 }), t: Long("1") },
    lastAppliedWallTime: ISODate("2023-05-31T06:18:59.097Z"),
    lastDurableWallTime: ISODate("2023-05-31T06:18:59.097Z")
  },
  lastStableRecoveryTimestamp: Timestamp({ t: 1685513919, i: 1 }),
  members: [
    {
      _id: 0,
      name: 'zyj:28017',
      health: 1,
      state: 1,
      stateStr: 'PRIMARY',
      uptime: 9333,
      optime: { ts: Timestamp({ t: 1685513939, i: 1 }), t: Long("1") },
      optimeDurable: { ts: Timestamp({ t: 1685513939, i: 1 }), t: Long("1") },
      optimeDate: ISODate("2023-05-31T06:18:59.000Z"),
      optimeDurableDate: ISODate("2023-05-31T06:18:59.000Z"),
      lastAppliedWallTime: ISODate("2023-05-31T06:18:59.097Z"),
      lastDurableWallTime: ISODate("2023-05-31T06:18:59.097Z"),
      lastHeartbeat: ISODate("2023-05-31T06:19:00.716Z"),
      lastHeartbeatRecv: ISODate("2023-05-31T06:19:00.718Z"),
      pingMs: Long("0"),
      lastHeartbeatMessage: '',
      syncSourceHost: '',
      syncSourceId: -1,
      infoMessage: '',
      electionTime: Timestamp({ t: 1685503988, i: 2 }),
      electionDate: ISODate("2023-05-31T03:33:08.000Z"),
      configVersion: 5,
      configTerm: 1
    }
  ],
  ok: 1,
  '$clusterTime': {
    clusterTime: Timestamp({ t: 1685513939, i: 1 }),
    signature: {
      hash: Binary(Buffer.from("0000000000000000000000000000000000000000", "hex"), 0),
      keyId: Long("0")
    }
  },
  operationTime: Timestamp({ t: 1685513939, i: 1 })
}
rs.add("主机名:port")

![[Pasted image 20230531114343.png]]

##现在主节点的成员节点变成了2个


members: [
    {
      _id: 0,
      name: 'zyj:28017',
      health: 1,
      state: 1,
      stateStr: 'PRIMARY',
      uptime: 1329,
      optime: { ts: Timestamp({ t: 1685504628, i: 1 }), t: Long("1") },
      optimeDate: ISODate("2023-05-31T03:43:48.000Z"),
      lastAppliedWallTime: ISODate("2023-05-31T03:43:48.781Z"),
      lastDurableWallTime: ISODate("2023-05-31T03:43:48.781Z"),
      syncSourceHost: '',
      syncSourceId: -1,
      infoMessage: '',
      electionTime: Timestamp({ t: 1685503988, i: 2 }),
      electionDate: ISODate("2023-05-31T03:33:08.000Z"),
      configVersion: 3,
      configTerm: 1,
      self: true,
      lastHeartbeatMessage: ''
    },
    {
      _id: 1,
      name: 'zyj:28018',
      health: 1,
      state: 2,
      stateStr: 'SECONDARY',
      uptime: 24,
      optime: { ts: Timestamp({ t: 1685504628, i: 1 }), t: Long("1") },
      optimeDurable: { ts: Timestamp({ t: 1685504628, i: 1 }), t: Long("1") },
      optimeDate: ISODate("2023-05-31T03:43:48.000Z"),
      optimeDurableDate: ISODate("2023-05-31T03:43:48.000Z"),
      lastAppliedWallTime: ISODate("2023-05-31T03:43:48.781Z"),
      lastDurableWallTime: ISODate("2023-05-31T03:43:48.781Z"),
      lastHeartbeat: ISODate("2023-05-31T03:43:51.166Z"),
      lastHeartbeatRecv: ISODate("2023-05-31T03:43:50.167Z"),
      pingMs: Long("0"),
      lastHeartbeatMessage: '',
      syncSourceHost: 'zyj:28017',
      syncSourceId: 0,
      infoMessage: '',
      configVersion: 3,
      configTerm: 1
    }
  ],

验证

# 第一次进入从节点会报错
rs0 [direct: secondary] test> db.test.find()
MongoServerError: not primary and secondaryOk=false - consider using db.getMongo().setReadPref() or readPreference in the connection string

# 需要设置从节点允许读操作
db.getMongo().setReadPref("secondary")
# 现在查询就不会报错了
rs0 [direct: secondary] test> db.fruit.findOne()
{ _id: ObjectId("6476c59c7776dcfd03e5b6d0"), name: 'apple' }



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Mongodb主从数据库是一种数据同步和备份的配置模式。在这种模式下,Mongodb将数据复制到一个或多个从数据库(slaves),以实现数据的冗余备份和读写分离。为了配置主从模式,您需要进行以下步骤: 1. 准备环境:确保您的系统已经安装了Mongodb,并且您知道主数据库(master)和从数据库(slave)的IP地址和端口号。 2. 配置数据库:在主数据库上,您需要启动Mongodb并指定角色为主(master)。您可以使用命令行或配置文件来设置。 3. 配置数据库:在从数据库上,您需要启动Mongodb并指定角色为从(slave),同时指定数据源地址为主数据库的地址和端口号。您可以使用命令行来设置。 具体的配置过程和命令如下: 1. 启动主数据库(master):在命令行中输入以下命令来启动主数据库mongod --dbpath=/path/to/data --replSet=[name] --port=[port] 其中,/path/to/data是主数据库的数据存储路径,[name]是主数据库的名称,[port]是主数据库的端口号。 2. 初始化主数据库(master):在命令行中输入以下命令来初始化主数据库mongo --port=[port] 在mongo shell中,执行以下命令: rs.initiate() 这将初始化主数据库并设置复制集。 3. 启动从数据库(slave):在命令行中输入以下命令来启动从数据库mongod --dbpath=/path/to/data --replSet=[name] --port=[port] --slave --source=[master_ip:port] 其中,/path/to/data是从数据库的数据存储路径,[name]是从数据库的名称,[port]是从数据库的端口号,[master_ip:port]是主数据库的IP地址和端口号。 4. 验证配置:在命令行中输入以下命令来验证主从配置mongo --port=[port] 在mongo shell中,执行以下命令: rs.status() 如果配置正确,您将看到主数据库和从数据库的状态信息。 通过配置主从模式,您可以实现Mongodb数据的同步和备份,以及读写分离,提高数据库的可靠性和性能。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [详解mongodb 主从配置](https://download.csdn.net/download/weixin_38607971/12832213)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Mongodb配置主从模式,进行数据的同步与备份](https://blog.csdn.net/zwq912318834/article/details/78971029)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值