Mongodb复制集群部署

本文详细介绍如何在三台CentOS 7服务器上部署MongoDB 4.2集群,包括配置文件修改、服务启动、集群初始化及状态检查等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

安装mongodb服务

        参考:Mongodb4.2+Centos7 liunx单机版部署_RunTimeExcepti0n的博客-CSDN博客

此步骤需在三台服务器同时进行。

修改配置文件

进入配置文件目录 cd /opt/software/mongodb4.2/mongodb/config

修改配置文件增加集群配置:vim mongodb.conf

systemLog:
  destination: file
  path: /opt/software/mongodb4.2/mongodb/log/mongodb.log  #日志文件存放目录
  logAppend: true
storage:
  dbPath: /opt/software/mongodb4.2/mongodb/data/db  #数据文件存放目录
net:
  bindIp: 0.0.0.0  # 配置任意地址可以连接
  port: 28017 # port
#复制集群配置
replication:
  replSetName: rs0
processManagement:
  fork: true   #后台进程启动

分别启动mongodb数据库

任意目录下执行: mongod --config /opt/software/mongodb4.2/mongodb/config/mongodb.conf

增加集群配置

因为mongodb集群各节点具有同等地址,在任一节点执行如下命令mongo 连接数据库

执行如下命令:

命令中 rs0 为上面配置文件中的集群名称:replSetName

host 为虚拟机IP

rs.initiate({
	_id: "rs0",
		members: [{
			_id: 0,
			"host": "192.168.0.105:27017"
		},{
			_id: 1,
			"host": "192.168.0.106:27017"
		},{
			_id: 2,
			"host": "192.168.0.108:27017"
		}]
})

 

 再按一次enter 可能会发生节点类型变化,可能的意思是,当前节点可能会成为PRIMARY,也可能不会

在另外两台服务器上用mongo 命令连接数据库,查看此时节点的状态

在任一节点查看集群状态

rs.status()

返回如下结果:

rs0:PRIMARY> rs.status()
{
        "set" : "rs0",
        "date" : ISODate("2021-09-16T17:07:03.614Z"),
        "myState" : 1,
        "term" : NumberLong(1),
        "syncingTo" : "",
        "syncSourceHost" : "",
        "syncSourceId" : -1,
        "heartbeatIntervalMillis" : NumberLong(2000),
        "majorityVoteCount" : 2,
        "writeMajorityCount" : 2,
        "optimes" : {
                "lastCommittedOpTime" : {
                        "ts" : Timestamp(1631812014, 1),
                        "t" : NumberLong(1)
                },
                "lastCommittedWallTime" : ISODate("2021-09-16T17:06:54.127Z"),
                "readConcernMajorityOpTime" : {
                        "ts" : Timestamp(1631812014, 1),
                        "t" : NumberLong(1)
                },
                "readConcernMajorityWallTime" : ISODate("2021-09-16T17:06:54.127Z"),
                "appliedOpTime" : {
                        "ts" : Timestamp(1631812014, 1),
                        "t" : NumberLong(1)
                },
                "durableOpTime" : {
                        "ts" : Timestamp(1631812014, 1),
                        "t" : NumberLong(1)
                },
                "lastAppliedWallTime" : ISODate("2021-09-16T17:06:54.127Z"),
                "lastDurableWallTime" : ISODate("2021-09-16T17:06:54.127Z")
        },
        "lastStableRecoveryTimestamp" : Timestamp(1631811984, 1),
        "lastStableCheckpointTimestamp" : Timestamp(1631811984, 1),
        "electionCandidateMetrics" : {
                "lastElectionReason" : "electionTimeout",
                "lastElectionDate" : ISODate("2021-09-16T17:00:23.989Z"),
                "electionTerm" : NumberLong(1),
                "lastCommittedOpTimeAtElection" : {
                        "ts" : Timestamp(0, 0),
                        "t" : NumberLong(-1)
                },
                "lastSeenOpTimeAtElection" : {
                        "ts" : Timestamp(1631811613, 1),
                        "t" : NumberLong(-1)
                },
                "numVotesNeeded" : 2,
                "priorityAtElection" : 1,
                "electionTimeoutMillis" : NumberLong(10000),
                "numCatchUpOps" : NumberLong(0),
                "newTermStartDate" : ISODate("2021-09-16T17:00:24.042Z"),
                "wMajorityWriteAvailabilityDate" : ISODate("2021-09-16T17:00:25.210Z")
        },
        "members" : [
                {
                        "_id" : 0,
                        "name" : "192.168.0.105:27017",
                        "health" : 1,
                        "state" : 1,
                        "stateStr" : "PRIMARY",
                        "uptime" : 732,
                        "optime" : {
                                "ts" : Timestamp(1631812014, 1),
                                "t" : NumberLong(1)
                        },
                        "optimeDate" : ISODate("2021-09-16T17:06:54Z"),
                        "syncingTo" : "",
                        "syncSourceHost" : "",
                        "syncSourceId" : -1,
                        "infoMessage" : "",
                        "electionTime" : Timestamp(1631811623, 1),
                        "electionDate" : ISODate("2021-09-16T17:00:23Z"),
                        "configVersion" : 1,
                        "self" : true,
                        "lastHeartbeatMessage" : ""
                },
                {
                        "_id" : 1,
                        "name" : "192.168.0.106:27017",
                        "health" : 1,
                        "state" : 2,
                        "stateStr" : "SECONDARY",
                        "uptime" : 409,
                        "optime" : {
                                "ts" : Timestamp(1631812014, 1),
                                "t" : NumberLong(1)
                        },
                        "optimeDurable" : {
                                "ts" : Timestamp(1631812014, 1),
                                "t" : NumberLong(1)
                        },
                        "optimeDate" : ISODate("2021-09-16T17:06:54Z"),
                        "optimeDurableDate" : ISODate("2021-09-16T17:06:54Z"),
                        "lastHeartbeat" : ISODate("2021-09-16T17:07:02.536Z"),
                        "lastHeartbeatRecv" : ISODate("2021-09-16T17:07:01.704Z"),
                        "pingMs" : NumberLong(0),
                        "lastHeartbeatMessage" : "",
                        "syncingTo" : "192.168.0.105:27017",
                        "syncSourceHost" : "192.168.0.105:27017",
                        "syncSourceId" : 0,
                        "infoMessage" : "",
                        "configVersion" : 1
                },
                {
                        "_id" : 2,
                        "name" : "192.168.0.108:27017",
                        "health" : 1,
                        "state" : 2,
                        "stateStr" : "SECONDARY",
                        "uptime" : 409,
                        "optime" : {
                                "ts" : Timestamp(1631812014, 1),
                                "t" : NumberLong(1)
                        },
                        "optimeDurable" : {
                                "ts" : Timestamp(1631812014, 1),
                                "t" : NumberLong(1)
                        },
                        "optimeDate" : ISODate("2021-09-16T17:06:54Z"),
                        "optimeDurableDate" : ISODate("2021-09-16T17:06:54Z"),
                        "lastHeartbeat" : ISODate("2021-09-16T17:07:02.537Z"),
                        "lastHeartbeatRecv" : ISODate("2021-09-16T17:07:01.697Z"),
                        "pingMs" : NumberLong(0),
                        "lastHeartbeatMessage" : "",
                        "syncingTo" : "192.168.0.105:27017",
                        "syncSourceHost" : "192.168.0.105:27017",
                        "syncSourceId" : 0,
                        "infoMessage" : "",
                        "configVersion" : 1
                }
        ],
        "ok" : 1,
        "$clusterTime" : {
                "clusterTime" : Timestamp(1631812014, 1),
                "signature" : {
                        "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
                        "keyId" : NumberLong(0)
                }
        },
        "operationTime" : Timestamp(1631812014, 1)
}
rs0:PRIMARY>

 members中记录了集群各个节点的信息,例:

        stateStr: 节点属性,PRIMARY还是SECONDARY

        uptime: 节点运行时间

        optime: 从节点同步时间戳,这个在集群选举时有重要用处,Mongodb复制集群与选举中有说到。

新增删除节点

// 删除复制节点

rs.remove("192.168.0.108:27017")

// 插入新的复制节点

rs.add("192.168.0.108:27017")

数据验证

在PRIMARY节点新增数据

db.test.insert({a:"PRIMARY INSERT"})

        

在任一SECONDARY节点读取数据

报错,意思是当前是从节点,不支持读操作。

解决,执行如下命令:

 rs.slaveOk()  或者 rs.secondaryOk()  再执行查询操作

这里rs.slaveOk() 已经不推荐使用了(很多集群都慢慢的摒弃了slave的说法,例如redis.kafka)

 可以看到SECONDARY节点查询OK

完结

        若没有三台服务器的可以在同一条服务器启动三个实例,但是需要配置不同的 dbpath 和config文件,此处不做赘述。

        至此,mongodb复制集群宣告搭建完成。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值