MongoDB副本集群搭建和基础配置

MongoDB副本集群

文章目录

1.MongoDB副本集介绍

MongoDB的副本集就是主从复制,由于之前3.0版本之前就有主从复制的说法,后来更新迭代,起名叫副本集
副本集建议最少3台机器,一个主及诶单,两个从节点,如果是偶数台机器,需要在部署一个仲裁节点,否则会这导致集群选举异常
副本集(Replica Set)是一组MongoDB实例组成的集群,由一个主(Primary)服务器和多个备份(Secondary)服务器构成。通过复制(Replication),将数据的更新由Primary推送到其他实例上,在一定的延迟之后,每个MongoDB实例维护相同的数据集副本。通过维护冗余的数据库副本,能够实现数据的异地备份,读写分离和自动故障转移
从节点登陆数据后,无法查看数据,需要执行rs.slaveOK()之后才可以查看集群信息

1.1.副本集角色:

主节点
负责读写
副本节点
同步主节点 shell下连接默认不可读
仲裁节点
不是必须的,不存储数据,也不参与竞选,只投票

2.副本集介绍

MongoDB副本集群搭建和基础配置

MongoDB副本集群搭建和基础配置

MongoDB副本集群搭建和基础配置
MongoDB副本集群搭建和基础配置

MongoDB副本集群搭建和基础配置

; 2.1.副本集目录规划

以/opt/Mongo+端口号为单机多实例存放目录

3.MOngoDB副本集

3.1.创建多实例目录

[root@localhost mongo_clusetr]

3.2.创建配置文件

vim /opt/mongo_clusetr/mongodb_28017/conf/mongodb.yml
systemLog:
  destination: file
  logAppend: true
  path: /opt/mongo_clusetr/mongodb_28017/logs/mongodb.log

storage:
  journal:
    enabled: true
  dbPath: /data/mongo_clusetr/mongodb_28017/data
  directoryPerDB: true
  wiredTiger:
    engineConfig:
        cacheSizeGB: 1
        directoryForIndexes: true
    collectionConfig:
        blockCompressor: zlib
    indexConfig:
        prefixCompression: true

processManagement:
  fork: true
  pidFilePath: /opt/mongo_clusetr/mongodb_28017/pid/mongod.pid

net:
  port: 27017
  bindIp: 127.0.0.1,192.168.40.4
reclication:
  oplogSizeMB: 1024
  replSetName: dba1

2.3.创建其他两个配置文件

[root@localhost mongo_clusetr]
[root@localhost mongo_clusetr]

修改端口号
[root@localhost mongo_clusetr]
[root@localhost mongo_clusetr]

3.3.创建数据目录

[root@localhost mongo_clusetr]

3.4.启动所有节点

启动第一个节点
[root@localhost mongo_clusetr]
启动第二个节点
[root@localhost mongo_clusetr]
启动第三个节点
[root@localhost mongo_clusetr]

3.5.查看启动情况

[root@localhost mongo_clusetr]
tcp        0      0 192.168.40.4:28017      0.0.0.0:*               LISTEN      12177/mongodb/bin/m
tcp        0      0 127.0.0.1:28017         0.0.0.0:*               LISTEN      12177/mongodb/bin/m
tcp        0      0 192.168.40.4:28018      0.0.0.0:*               LISTEN      12639/mongodb/bin/m
tcp        0      0 127.0.0.1:28018         0.0.0.0:*               LISTEN      12639/mongodb/bin/m
tcp        0      0 192.168.40.4:28019      0.0.0.0:*               LISTEN      13021/mongodb/bin/m
tcp        0      0 127.0.0.1:28019         0.0.0.0:*               LISTEN      13021/mongodb/bin/m

4.初始化集群集

定义副本集群
config = {
_id : "dba1",
members : [
{_id : 0, host : "db:28017"},
{_id : 1, host : "db:28018"},
{_id : 2, host : "db:28019"},
] }

使副本集群生效
rs.initiate(config)

查看副本集状态
rs.status()

4.1.生成副本集群

MongoDB副本集群搭建和基础配置

输入之后直接生效,直接变成主库

MongoDB副本集群搭建和基础配置

; 4.2.测试数据同步

登录主库
[root@localhost mongo_clusetr]
查看当前所在库和表
dba1:PRIMARY> db
test
dba1:PRIMARY> show tables

在主库写入数据
dba1:PRIMARY> db.te.insert({"name":"zhang","age":10})
WriteResult({ "nInserted" : 1 })

在主库查看数据
dba1:PRIMARY> db.te.find()
{ "_id" : ObjectId("636f63745a73f86992679cef"), "name" : "zhang", "age" : 10 }
{ "_id" : ObjectId("636f63be5a73f86992679cf0"), "name" : "gao", "age" : 11

4.3.从库插入数据报错

可以看到主库是可以正常插入数据的,但是从库不能读不能写入数据

副本集默认是只能复制但是不能读写的

dba1:SECONDARY> show tables
2022-11-12T17:18:03.351+0800 E QUERY    [thread1] Error: listCollections failed: {
    "operationTime" : Timestamp(1668244677, 1),
    "ok" : 0,
    "errmsg" : "not master and slaveOk=false",
    "code" : 13435,
    "codeName" : "NotMasterNoSlaveOk",
    "$clusterTime" : {
        "clusterTime" : Timestamp(1668244677, 1),
        "signature" : {
            "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
            "keyId" : NumberLong(0)
        }
    }
}

4.4.从库插入无法数据临时解决方法

这个是MongoDB库的一种保护机制,下面我们来解决这个问题。

但是每次登陆都需要只用这个命令。

解决方法
rs.slaveOK();

执行命令
dba1:SECONDARY> rs.slaveOk();
WARNING: slaveOk() is deprecated and may be removed in the next major release. Please use secondaryOk() instead.

然后我们就可以正常的查看数据了
dba1:SECONDARY> db.te.find()
{ "_id" : ObjectId("636f63745a73f86992679cef"), "name" : "zhang", "age" : 10 }
{ "_id" : ObjectId("636f63be5a73f86992679cf0"), "name" : "gao", "age" : 11 }

4.5.登陆的永久解决方法

如果不想每次登陆都使用这个命令

下面为大家提供方法

我的用户时root可以在数据库用户下找到.mongorc.js的隐藏文件
[root@localhost ~]
-rw-------.  1 root root         0 Jul 25 16:57 .mongorc.js

在文件中写入内容

[root@localhost ~]
[root@localhost ~]
rs.slaveOK();

我们再次登陆数据库

可以看到不用再次输入命令可以直接查看
[root@localhost mongo_clusetr]
dba1:SECONDARY> show dbs
admin   0.000GB
config  0.000GB
local   0.000GB
test    0.000GB

cat .mongorc.js
rs.slaveOK();


我们再次登陆数据库

可以看到不用再次输入命令可以直接查看
[root@localhost mongo_clusetr]# mongodb/bin/mongo db:28018
dba1:SECONDARY> show dbs
admin   0.000GB
config  0.000GB
local   0.000GB
test    0.000GB

Original: https://blog.csdn.net/qq_46020071/article/details/127823185
Author: 武子豪、
Title: MongoDB副本集群搭建和基础配置

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/659046/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球