简介
在 MongoDB 中,副本集指的是一组 MongoDB 服务器实例掌管同一个数据集,实例可以在不同的机器上。
其中一个用于处理写操作的是主节点(Primary),还有多个用于保存主节点的数据副本的从节点(Secondary)。如果主节点崩溃了,则从节点会从其中选取出一个新的主节点。
副本集保证数据在生产部署时的冗余和可靠性,通过在不同的机器上保存副本来保证数据不会因为单点损坏而丢失,能够随时应对数据丢失、机器损坏带来的风险。
从另一个角度上看,还能提高读取能力,用户的读取服务器和写入服务器在不同的地方,由不同的服务器为不同的用户提供服务,提高了整个系统的负载能力。
复制集工作原理:
复制集通过local库下的oplog.rs集合进行数据同步。
mongodb 官方下载地址
https://www.mongodb.com/download-center?jmp=nav#community
https://www.mongodb.com/download-center/enterprise/releases
01.安装依赖包
mount /dev/cdrom /mnt
yum install -y cyrus-sasl cyrus-sasl-plain cyrus-sasl-gssapi krb5-libs \
lm_sensors-libs net-snmp-agent-libs net-snmp openssl openssl-devel rpm-libs tcp_wrappers-libs
02.关闭防火墙
systemctl disable firewalld
vi /etc/selinux/config
SELINUX=disabled
03.优化内核参数
echo "vm.zone_reclaim_mode=0" >> /etc/sysctl.conf
sysctl -p
04.禁用THP
vi /etc/rc.local
if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi
05.创建目录及用户
mkdir -p /mongodb
mkdir -p /mongodb/{data,logs,apps}
/usr/sbin/groupadd -g 10001 mongodb
/usr/sbin/useradd -u 10001 -g mongodb mongodb
echo "mongodb" | passwd --stdin mongodb
chown -R mongodb:mongodb /mongodb
chmod -R 775 /mongodb
06.修改最大连接数
echo "mongodb hard nofile 25600" >>/etc/security/limits.conf
echo "mongodb soft nofile 25600" >>/etc/security/limits.conf
echo "mongodb hard nproc 25600" >>/etc/security/limits.conf
echo "mongodb soft nproc 25600" >>/etc/security/limits.conf
07.安装mongodb
su - mongodb
cd /mongodb/apps
tar zxvf /soft/mongodb-linux-x86_64-enterprise-rhel70-4.4.19.tgz
ln -s /mongodb/apps/mongodb-linux-x86_64-enterprise-rhel70-4.4.19 /mongodb/apps/mongodb
vi ~/.bash_profile
PATH=$PATH:$HOME/.local/bin:/mongodb/apps/mongodb/bin:$HOME/bin
source ~/.bash_profile
08.配置mongodb
vi /mongodb/apps/mongodb/bin/mongodb.conf
mongodb.conf文件配置内容如下:
dbpath=/mongodb/data
logpath=/mongodb/logs/mongodb.log
port=27017
fork=true
noauth=true
journal = true
maxConns=500
logappend=true
directoryperdb=true
bind_ip=127.0.0.1,10.100.2.31
09.启动和停止mongodb
mongod --config /mongodb/apps/mongodb/bin/mongodb.conf
or
mongod -f /mongodb/apps/mongodb/bin/mongodb.conf
or
nohup mongod --dbpath /mongodb/data --config /mongodb/apps/mongodb/bin/mongodb.conf &
停止(kill -2在退出进程之前保存数据):
kill -2 `ps -ef|grep mongod|grep -v grep|awk '{print $2}'`
[mongodb@mongo mongodb]# mongo --host 10.100.2.31:27017
MongoDB shell version v4.4.19
connecting to: mongodb://10.100.2.31:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("012a90c6-2f1c-4dd2-8f12-37f5fd592d4b") }
MongoDB server version: 4.4.19
---
The server generated these startup warnings when booting:
2023-03-08T17:31:48.383+08:00: Access control is not enabled for the database. Read and write access to data and configuration is unrestricted
2023-03-08T17:31:48.383+08:00: Soft rlimits too low
2023-03-08T17:31:48.383+08:00: currentValue: 25600
2023-03-08T17:31:48.383+08:00: recommendedMinimum: 64000
MongoDB Enterprise > help
db.help() help on db methods
db.mycoll.help() help on collection methods
sh.help() sharding helpers
rs.help() replica set helpers
help admin administrative help
help connect connecting to a db help
help keys key shortcuts
help misc misc things to know
help mr mapreduce
show dbs show database names
show collections show collections in current database
show users show users in current database
show profile show most recent system.profile entries with time >= 1ms
show logs show the accessible logger names
show log [name] prints out the last segment of log in memory, 'global' is default
use <db_name> set current database
db.mycoll.find() list objects in collection mycoll
db.mycoll.find( { a : 1 } ) list objects in mycoll where a == 1
it result of the last line evaluated; use to further iterate
DBQuery.shellBatchSize = x set default number of items to display on shell
exit quit the mongo shell
mongodb数据库复制集
MongoDB4.0之前一直使用的master/salve主从架构,
MongoDB4.0版本后不支持master/salve这种方式了,故使用了新的复制集(Replica Sets):副本集
3台机器
10.100.2.31 mongo01 主节点
10.100.2.57 mongo02 从节点
10.100.2.250 mongo03 仲裁节点
主库:
vi /mongodb/apps/mongodb/bin/mongodb.conf
mongodb.conf文件配置内容如下:
dbpath=/mongodb/data
logpath=/mongodb/logs/mongodb.log
port=27017
fork=true
maxConns=500
logappend=true
journal = true
pidfilepath=/mongodb/apps/mongo.pid
directoryperdb=true
replSet=mongo
bind_ip=127.0.0.1,10.100.2.31
从库:
vi /mongodb/apps/mongodb/bin/mongodb.conf
mongodb.conf文件配置内容如下:
dbpath=/mongodb/data
logpath=/mongodb/logs/mongodb.log
port=27017
fork=true
maxConns=500
logappend=true
pidfilepath=/mongodb/apps/mongo.pid
journal = true
directoryperdb=true
replSet=mongo
bind_ip=127.0.0.1,10.100.2.57
仲裁节点:
vi /mongodb/apps/mongodb/bin/mongodb.conf
mongodb.conf文件配置内容如下:
dbpath=/mongodb/data
logpath=/mongodb/logs/mongodb.log
port=27017
fork=true
journal = true
maxConns=500
logappend=true
pidfilepath=/mongodb/apps/mongo.pid
directoryperdb=true
replSet=mongo
bind_ip=127.0.0.1,10.100.2.250
01.配置mongodb复制集
51.主库:
mongod -f /mongodb/apps/mongodb/bin/mongodb.conf
52.从库:
mongod -f /mongodb/apps/mongodb/bin/mongodb.conf
53.仲裁节点:
mongod -f /mongodb/apps/mongodb/bin/mongodb.conf
1)初始化复制集primary节点、添加second节点和arbiter节点:
[mongodb@mongo01 mongodb]$ mongo 10.100.2.31:27017
MongoDB Enterprise
>rs.initiate({_id:'mongo',members:[{_id:1,host:'10.100.2.31:27017'}]})
MongoDB Enterprise mongo:SECONDARY> rs.conf()
{
"_id" : "mongo",
"version" : 1,
"term" : 1,
"protocolVersion" : NumberLong(1),
"writeConcernMajorityJournalDefault" : true,
"members" : [
{
"_id" : 1,
"host" : "10.100.2.31:27017",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 1,
"tags" : {
},
"slaveDelay" : NumberLong(0),
"votes" : 1
}
],
"settings" : {
"chainingAllowed" : true,
"heartbeatIntervalMillis" : 2000,
"heartbeatTimeoutSecs" : 10,
"electionTimeoutMillis" : 10000,
"catchUpTimeoutMillis" : -1,
"catchUpTakeoverDelayMillis" : 30000,
"getLastErrorModes" : {
},
"getLastErrorDefaults" : {
"w" : 1,
"wtimeout" : 0
},
"replicaSetId" : ObjectId("640856a658a1c608313bf709")
}
}
2)添加second节点和arbiter节点
MongoDB Enterprise >rs.add("10.100.2.57:27017")
{
"ok" : 1,
"$clusterTime" : {
"clusterTime" : Timestamp(1678268122, 1),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
},
"operationTime" : Timestamp(1678268122, 1)
}
MongoDB Enterprise >rs.addArb("10.100.2.250:27017")
{
"ok" : 1,
"$clusterTime" : {
"clusterTime" : Timestamp(1678268140, 1),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
},
"operationTime" : Timestamp(1678268140, 1)
}
MongoDB Enterprise >rs.conf()
{
"_id" : "mongo",
"version" : 3,
"term" : 1,
"protocolVersion" : NumberLong(1),
"writeConcernMajorityJournalDefault" : true,
"members" : [
{
"_id" : 1,
"host" : "10.100.2.31:27017",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 1,
"tags" : {
},
"slaveDelay" : NumberLong(0),
"votes" : 1
},
{
"_id" : 2,
"host" : "10.100.2.57:27017",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 1,
"tags" : {
},
"slaveDelay" : NumberLong(0),
"votes" : 1
},
{
"_id" : 3,
"host" : "10.100.2.250:27017",
"arbiterOnly" : true,
"buildIndexes" : true,
"hidden" : false,
"priority" : 0,
"tags" : {
},
"slaveDelay" : NumberLong(0),
"votes" : 1
}
],
"settings" : {
"chainingAllowed" : true,
"heartbeatIntervalMillis" : 2000,
"heartbeatTimeoutSecs" : 10,
"electionTimeoutMillis" : 10000,
"catchUpTimeoutMillis" : -1,
"catchUpTakeoverDelayMillis" : 30000,
"getLastErrorModes" : {
},
"getLastErrorDefaults" : {
"w" : 1,
"wtimeout" : 0
},
"replicaSetId" : ObjectId("640856a658a1c608313bf709")
}
}
3)检查各个节点local库信息:
复制集工作原理:
复制集通过local库下的oplog.rs集合进行数据同步。
4)检查复制集状态
MongoDB Enterprise mongo:PRIMARY> rs.status()
MongoDB Enterprise mongo:PRIMARY> rs.status()
{
"set" : "mongo",
"date" : ISODate("2023-03-08T09:38:17.827Z"),
"myState" : 1,
"term" : NumberLong(1),
"syncSourceHost" : "",
"syncSourceId" : -1,
"heartbeatIntervalMillis" : NumberLong(2000),
"majorityVoteCount" : 2,
"writeMajorityCount" : 2,
"votingMembersCount" : 3,
"writableVotingMembersCount" : 2,
"optimes" : {
"lastCommittedOpTime" : {
"ts" : Timestamp(1678268290, 1),
"t" : NumberLong(1)
},
"lastCommittedWallTime" : ISODate("2023-03-08T09:38:10.961Z"),
"readConcernMajorityOpTime" : {
"ts" : Timestamp(1678268290, 1),
"t" : NumberLong(1)
},
"readConcernMajorityWallTime" : ISODate("2023-03-08T09:38:10.961Z"),
"appliedOpTime" : {
"ts" : Timestamp(1678268290, 1),
"t" : NumberLong(1)
},
"durableOpTime" : {
"ts" : Timestamp(1678268290, 1),
"t" : NumberLong(1)
},
"lastAppliedWallTime" : ISODate("2023-03-08T09:38:10.961Z"),
"lastDurableWallTime" : ISODate("2023-03-08T09:38:10.961Z")
},
"lastStableRecoveryTimestamp" : Timestamp(1678268250, 1),
"electionCandidateMetrics" : {
"lastElectionReason" : "electionTimeout",
"lastElectionDate" : ISODate("2023-03-08T09:34:30.902Z"),
"electionTerm" : NumberLong(1),
"lastCommittedOpTimeAtElection" : {
"ts" : Timestamp(0, 0),
"t" : NumberLong(-1)
},
"lastSeenOpTimeAtElection" : {
"ts" : Timestamp(1678268070, 1),
"t" : NumberLong(-1)
},
"numVotesNeeded" : 1,
"priorityAtElection" : 1,
"electionTimeoutMillis" : NumberLong(10000),
"newTermStartDate" : ISODate("2023-03-08T09:34:30.916Z"),
"wMajorityWriteAvailabilityDate" : ISODate("2023-03-08T09:34:30.929Z")
},
"members" : [
{
"_id" : 1,
"name" : "10.100.2.31:27017",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 390,
"optime" : {
"ts" : Timestamp(1678268290, 1),
"t" : NumberLong(1)
},
"optimeDate" : ISODate("2023-03-08T09:38:10Z"),
"lastAppliedWallTime" : ISODate("2023-03-08T09:38:10.961Z"),
"lastDurableWallTime" : ISODate("2023-03-08T09:38:10.961Z"),
"syncSourceHost" : "",
"syncSourceId" : -1,
"infoMessage" : "",
"electionTime" : Timestamp(1678268070, 2),
"electionDate" : ISODate("2023-03-08T09:34:30Z"),
"configVersion" : 3,
"configTerm" : 1,
"self" : true,
"lastHeartbeatMessage" : ""
},
{
"_id" : 2,
"name" : "10.100.2.57:27017",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 175,
"optime" : {
"ts" : Timestamp(1678268290, 1),
"t" : NumberLong(1)
},
"optimeDurable" : {
"ts" : Timestamp(1678268290, 1),
"t" : NumberLong(1)
},
"optimeDate" : ISODate("2023-03-08T09:38:10Z"),
"optimeDurableDate" : ISODate("2023-03-08T09:38:10Z"),
"lastAppliedWallTime" : ISODate("2023-03-08T09:38:10.961Z"),
"lastDurableWallTime" : ISODate("2023-03-08T09:38:10.961Z"),
"lastHeartbeat" : ISODate("2023-03-08T09:38:16.568Z"),
"lastHeartbeatRecv" : ISODate("2023-03-08T09:38:17.553Z"),
"pingMs" : NumberLong(0),
"lastHeartbeatMessage" : "",
"syncSourceHost" : "10.100.2.31:27017",
"syncSourceId" : 1,
"infoMessage" : "",
"configVersion" : 3,
"configTerm" : 1
},
{
"_id" : 3,
"name" : "10.100.2.250:27017",
"health" : 1,
"state" : 7,
"stateStr" : "ARBITER",
"uptime" : 157,
"lastHeartbeat" : ISODate("2023-03-08T09:38:16.568Z"),
"lastHeartbeatRecv" : ISODate("2023-03-08T09:38:16.568Z"),
"pingMs" : NumberLong(0),
"lastHeartbeatMessage" : "",
"syncSourceHost" : "",
"syncSourceId" : -1,
"infoMessage" : "",
"configVersion" : 3,
"configTerm" : 1
}
],
"ok" : 1,
"$clusterTime" : {
"clusterTime" : Timestamp(1678268290, 1),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
},
"operationTime" : Timestamp(1678268290, 1)
}
5)测试MongoDB复制集
主节点插入数据:
mongo 10.100.2.31:27017
use mongo
db.mongo.insert({"xiaomi":"qichebu"})
从节点检查复制情况:
mongo 10.100.2.57:27017
use mongo
rs.secondaryOk()
show collections
db.mongo.find()
mongo 10.100.2.250:27017
use mongo
rs.secondaryOk()
show collections
db.mongo.find()
02.mongodb复制集自动故障转移功能
01.MongoDB的second节点宕机
通过kill second节点进行测试:
1)查看集群状态,所有节点运行正常:
MongoDB Enterprise mongo:SECONDARY> rs.status()
"_id" : 2,
"name" : "10.100.2.57:27017",
"health" : 0,
"state" : 8,
"stateStr" : "(not reachable/healthy)",
2)主节点向测试表插入一条记录,一切操作正常
mongo 10.100.2.31:27017
use mongo
db.mongo.insert({"tengxuyun":"mysql"})
db.mongo.find()
3)再次启动从节点,检查步骤,发现数据正常同步到从节点:
mongod -f /mongodb/apps/mongodb/bin/mongodb.conf
mongo 10.100.2.57:27017
use mongo
rs.secondaryOk()
db.mongo.find()
02.MongoDB的primary节点宕机
1)检查复制集运行状态
rs.status()
2)kill掉主节点
kill -2 `ps -ef|grep mongod|grep -v grep|awk '{print $2}'`
3)再次检查集群运行状态
mongo 10.100.2.57:27017
rs.status()
MongoDB Enterprise mongo:SECONDARY> //从提示我们可以看到secondary节点已经变成了主节点
MongoDB Enterprise mongo:SECONDARY> rs.status()
{
"set" : "mongo",
"date" : ISODate("2023-03-08T09:59:00.737Z"),
"myState" : 1,
"term" : NumberLong(3),
"syncSourceHost" : "",
"syncSourceId" : -1,
"heartbeatIntervalMillis" : NumberLong(2000),
"majorityVoteCount" : 2,
"writeMajorityCount" : 2,
"votingMembersCount" : 3,
"writableVotingMembersCount" : 2,
"optimes" : {
"lastCommittedOpTime" : {
"ts" : Timestamp(1678269521, 1),
"t" : NumberLong(1)
},
"lastCommittedWallTime" : ISODate("2023-03-08T09:58:41.217Z"),
"readConcernMajorityOpTime" : {
"ts" : Timestamp(1678269521, 1),
"t" : NumberLong(1)
},
"readConcernMajorityWallTime" : ISODate("2023-03-08T09:58:41.217Z"),
"appliedOpTime" : {
"ts" : Timestamp(1678269536, 2),
"t" : NumberLong(3)
},
"durableOpTime" : {
"ts" : Timestamp(1678269536, 2),
"t" : NumberLong(3)
},
"lastAppliedWallTime" : ISODate("2023-03-08T09:58:56.587Z"),
"lastDurableWallTime" : ISODate("2023-03-08T09:58:56.587Z")
},
"lastStableRecoveryTimestamp" : Timestamp(1678269501, 1),
"electionCandidateMetrics" : {
"lastElectionReason" : "electionTimeout",
"lastElectionDate" : ISODate("2023-03-08T09:58:56.545Z"),
"electionTerm" : NumberLong(3),
"lastCommittedOpTimeAtElection" : {
"ts" : Timestamp(1678269521, 1),
"t" : NumberLong(1)
},
"lastSeenOpTimeAtElection" : {
"ts" : Timestamp(1678269521, 1),
"t" : NumberLong(1)
},
"numVotesNeeded" : 2,
"priorityAtElection" : 1,
"electionTimeoutMillis" : NumberLong(10000),
"numCatchUpOps" : NumberLong(0),
"newTermStartDate" : ISODate("2023-03-08T09:58:56.587Z")
},
"members" : [
{
"_id" : 1,
"name" : "10.100.2.31:27017",
"health" : 0,
"state" : 8,
"stateStr" : "(not reachable/healthy)",
"uptime" : 0,
"optime" : {
"ts" : Timestamp(0, 0),
"t" : NumberLong(-1)
},
"optimeDurable" : {
"ts" : Timestamp(0, 0),
"t" : NumberLong(-1)
},
"optimeDate" : ISODate("1970-01-01T00:00:00Z"),
"optimeDurableDate" : ISODate("1970-01-01T00:00:00Z"),
"lastAppliedWallTime" : ISODate("2023-03-08T09:58:41.217Z"),
"lastDurableWallTime" : ISODate("2023-03-08T09:58:41.217Z"),
"lastHeartbeat" : ISODate("2023-03-08T09:59:00.598Z"),
"lastHeartbeatRecv" : ISODate("2023-03-08T09:58:46.749Z"),
"pingMs" : NumberLong(0),
"lastHeartbeatMessage" : "Error connecting to 10.100.2.31:27017 :: caused by :: Connection refused",
"syncSourceHost" : "",
"syncSourceId" : -1,
"infoMessage" : "",
"configVersion" : 3,
"configTerm" : 1
},
{
"_id" : 2,
"name" : "10.100.2.57:27017",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 1625,
"optime" : {
"ts" : Timestamp(1678269536, 2),
"t" : NumberLong(3)
},
"optimeDate" : ISODate("2023-03-08T09:58:56Z"),
"lastAppliedWallTime" : ISODate("2023-03-08T09:58:56.587Z"),
"lastDurableWallTime" : ISODate("2023-03-08T09:58:56.587Z"),
"syncSourceHost" : "",
"syncSourceId" : -1,
"infoMessage" : "",
"electionTime" : Timestamp(1678269536, 1),
"electionDate" : ISODate("2023-03-08T09:58:56Z"),
"configVersion" : 3,
"configTerm" : 3,
"self" : true,
"lastHeartbeatMessage" : ""
},
{
"_id" : 3,
"name" : "10.100.2.250:27017",
"health" : 1,
"state" : 7,
"stateStr" : "ARBITER",
"uptime" : 1400,
"lastHeartbeat" : ISODate("2023-03-08T09:59:00.597Z"),
"lastHeartbeatRecv" : ISODate("2023-03-08T09:59:00.596Z"),
"pingMs" : NumberLong(0),
"lastHeartbeatMessage" : "",
"syncSourceHost" : "",
"syncSourceId" : -1,
"infoMessage" : "",
"configVersion" : 3,
"configTerm" : 3
}
],
"ok" : 1,
"$clusterTime" : {
"clusterTime" : Timestamp(1678269536, 2),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
},
"operationTime" : Timestamp(1678269536, 2)
}
4)新主节点插入测试数据,一切操作正常
mongo 10.100.2.57:27017
use mongo
db.mongo.insert({"aliyun":"oracle"})
db.mongo.find()
5)重新启动原主节点,查看集群状态
mongod -f /mongodb/apps/mongodb/bin/mongodb.conf
mongo 10.100.2.31:27017
rs.status()
MongoDB Enterprise mongo:SECONDARY> rs.status()
{
"set" : "mongo",
"date" : ISODate("2023-03-08T10:00:19.413Z"),
"myState" : 2,
"term" : NumberLong(3),
"syncSourceHost" : "10.100.2.57:27017",
"syncSourceId" : 2,
"heartbeatIntervalMillis" : NumberLong(2000),
"majorityVoteCount" : 2,
"writeMajorityCount" : 2,
"votingMembersCount" : 3,
"writableVotingMembersCount" : 2,
"optimes" : {
"lastCommittedOpTime" : {
"ts" : Timestamp(1678269616, 1),
"t" : NumberLong(3)
},
"lastCommittedWallTime" : ISODate("2023-03-08T10:00:16.642Z"),
"readConcernMajorityOpTime" : {
"ts" : Timestamp(1678269616, 1),
"t" : NumberLong(3)
},
"readConcernMajorityWallTime" : ISODate("2023-03-08T10:00:16.642Z"),
"appliedOpTime" : {
"ts" : Timestamp(1678269616, 1),
"t" : NumberLong(3)
},
"durableOpTime" : {
"ts" : Timestamp(1678269616, 1),
"t" : NumberLong(3)
},
"lastAppliedWallTime" : ISODate("2023-03-08T10:00:16.642Z"),
"lastDurableWallTime" : ISODate("2023-03-08T10:00:16.642Z")
},
"lastStableRecoveryTimestamp" : Timestamp(1678269521, 1),
"members" : [
{
"_id" : 1,
"name" : "10.100.2.31:27017",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 12,
"optime" : {
"ts" : Timestamp(1678269616, 1),
"t" : NumberLong(3)
},
"optimeDate" : ISODate("2023-03-08T10:00:16Z"),
"lastAppliedWallTime" : ISODate("2023-03-08T10:00:16.642Z"),
"lastDurableWallTime" : ISODate("2023-03-08T10:00:16.642Z"),
"syncSourceHost" : "10.100.2.57:27017",
"syncSourceId" : 2,
"infoMessage" : "",
"configVersion" : 3,
"configTerm" : 3,
"self" : true,
"lastHeartbeatMessage" : ""
},
{
"_id" : 2,
"name" : "10.100.2.57:27017",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 9,
"optime" : {
"ts" : Timestamp(1678269616, 1),
"t" : NumberLong(3)
},
"optimeDurable" : {
"ts" : Timestamp(1678269616, 1),
"t" : NumberLong(3)
},
"optimeDate" : ISODate("2023-03-08T10:00:16Z"),
"optimeDurableDate" : ISODate("2023-03-08T10:00:16Z"),
"lastAppliedWallTime" : ISODate("2023-03-08T10:00:16.642Z"),
"lastDurableWallTime" : ISODate("2023-03-08T10:00:16.642Z"),
"lastHeartbeat" : ISODate("2023-03-08T10:00:18.837Z"),
"lastHeartbeatRecv" : ISODate("2023-03-08T10:00:18.788Z"),
"pingMs" : NumberLong(2),
"lastHeartbeatMessage" : "",
"syncSourceHost" : "",
"syncSourceId" : -1,
"infoMessage" : "",
"electionTime" : Timestamp(1678269536, 1),
"electionDate" : ISODate("2023-03-08T09:58:56Z"),
"configVersion" : 3,
"configTerm" : 3
},
{
"_id" : 3,
"name" : "10.100.2.250:27017",
"health" : 1,
"state" : 7,
"stateStr" : "ARBITER",
"uptime" : 9,
"lastHeartbeat" : ISODate("2023-03-08T10:00:18.843Z"),
"lastHeartbeatRecv" : ISODate("2023-03-08T10:00:18.700Z"),
"pingMs" : NumberLong(0),
"lastHeartbeatMessage" : "",
"syncSourceHost" : "",
"syncSourceId" : -1,
"infoMessage" : "",
"configVersion" : 3,
"configTerm" : 3
}
],
"ok" : 1,
"$clusterTime" : {
"clusterTime" : Timestamp(1678269616, 1),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
},
"operationTime" : Timestamp(1678269616, 1)
}
use mongo
rs.secondaryOk()
db.mongo.find()
集群运转正常,数据已经正常同步过来。
常用状态查看命令
主从状态查询
>rs.status()
>use local;
>rs.isMaster()
MongoDB Enterprise mongo:SECONDARY> rs.isMaster()
{
"topologyVersion" : {
"processId" : ObjectId("64085ca7005e4ebf786b37d0"),
"counter" : NumberLong(4)
},
"hosts" : [
"10.100.2.31:27017",
"10.100.2.57:27017"
],
"arbiters" : [
"10.100.2.250:27017"
],
"setName" : "mongo",
"setVersion" : 3,
"ismaster" : false,
"secondary" : true,
"primary" : "10.100.2.57:27017",
"me" : "10.100.2.31:27017",
"lastWrite" : {
"opTime" : {
"ts" : Timestamp(1678269786, 1),
"t" : NumberLong(3)
},
"lastWriteDate" : ISODate("2023-03-08T10:03:06Z"),
"majorityOpTime" : {
"ts" : Timestamp(1678269786, 1),
"t" : NumberLong(3)
},
"majorityWriteDate" : ISODate("2023-03-08T10:03:06Z")
},
"maxBsonObjectSize" : 16777216,
"maxMessageSizeBytes" : 48000000,
"maxWriteBatchSize" : 100000,
"localTime" : ISODate("2023-03-08T10:03:07.798Z"),
"logicalSessionTimeoutMinutes" : 30,
"connectionId" : 21,
"minWireVersion" : 0,
"maxWireVersion" : 9,
"readOnly" : false,
"ok" : 1,
"$clusterTime" : {
"clusterTime" : Timestamp(1678269786, 1),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
},
"operationTime" : Timestamp(1678269786, 1)
}
>db.system.replset.find()
查看当前主库:
db.$cmd.findOne({ismaster:1});
rs.isMaster()
#查看各Collection状态
db.printCollectionStats();
#查看主从复制状态
db.printReplicationInfo();
configured oplog size: 2253.3109369277954MB
log length start to end: 2087secs (0.58hrs)
oplog first event time: Wed Mar 08 2023 17:35:22 GMT+0800 (CST)
oplog last event time: Wed Mar 08 2023 18:10:09 GMT+0800 (CST)
now: Wed Mar 08 2023 18:10:11 GMT+0800 (CST)
#查看主从同步信息:
db.printSlaveReplicationInfo();
show dbs;
主节点降为secondary
mongo>use admin
mongo>rs.stepDown(60)#单位为 秒