Mongodb Replica Sets 副本集群搭建

Replica Sets 复制集搭建

MongoDB 有三种集群架构模式,分别为主从复制(Master-Slaver)、副本集(Replica Set)和分片(Sharding)模式。

Master-Slaver 是一种主从复制的模式,目前已经不推荐使用

ReplicaSet模式取代了Master-Slaver模式,是一种互为主从的关系。Replica Set 将数据复制多份保存,不同服务器保存同一份数据,在出现故障时自动切换,实现故障转移。

MongoDB复制集主要用于实现服务的高可用性,与Redis中的哨兵模式相似。它的核心作用是数据的备份和故障转移。

Sharding 模式适合处理大量数据,它将数据分开存储,不同服务器保存不同的数据,所有服务器数据的总和即为整个数据集。

本文档主要内容为复制集的搭建和操作

一、操作系统参数优化
1.1 关闭内存大页

echo never > /sys/kernel/mm/transparent_hugepage/enabled

echo never > /sys/kernel/mm/transparent_hugepage/defrag

并追加⽌⽂件中

/etc/rc.local

[root@localhost ~]# vim /etc/rc.d/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

保存并退出,然后给rc.local添加可执行权限。

[root@localhost ~]# chmod +x /etc/rc.d/rc.local

最后重启。

1.2 禁用numa架构

使用普通用户启动命令之前添加 sudo -u mongo numactl --interleave=all

修改内核参数

echo 0 > /proc/sys/vm/zone_reclaim_mode

echo vm.zone_reclaim_mode = 0 >> /etc/sysctl.conf

1.3 设置 vm.swappiness

临时修改

sysctl -w vm.swappiness=0

永久修改

vim /etc/sysctl.conf

vm.swappiness = 0

1.4 修改打开⽂件数限制

vim /etc/security/limits.conf

mongo soft nofile 65535

mongo hard nofile 65535

mongo soft nproc 65535

mongo hard nproc 65535

mongo soft stack 10240

mongo hards stack 10240

二、基础安装
2.1 一主二从副本集搭建

节点名

IP

端口

配置文件

M1

127.0.0.1

27018

/u01/mongodb/node1/conf/mongodb.conf

S1

127.0.0.1

27019

/u01/mongodb/node2/conf/mongodb.conf

S2

127.0.0.1

27020

/u01/mongodb/node3/conf/mongodb.conf

2.2下载安装包并解压

cd /u01

tar -zxvf  mongodb-linux-x86_64-rhel70-4.4.26.tgz

移动目录

mv mongodb-linux-x86_64-rhel70-4.4.26.tgz mongodb

创建目录

mkdir  key  node1

cd /u01/mongodb/node1

mkdir data log conf

cd /u01/mongodb

cp -r node1 node2

cp -r node2 node3

创建启动账号

groupadd mongo

useradd -M -g mongo mongo

生成keyfile,如果部署到不同主机,需要拷贝到其他主机上

openssl rand -base64 159 >  /u01/mongodb/key/mongo_cluster.key

chmod 600 /u01/mongodb/key/mongo_cluster.key

修改目录权限

chown -R mongo:mongo /u01/mongodb

三、配置文件

systemLog:

  destination: file

  path: /u01/mongodb/node1/log/mongod.log # log path

  logAppend: true

   logRotate: reopen

   destination: file

   timeStampFormat: "iso8601-local"

storage:

  dbPath: /u01/mongodb/node1/data # data directory

  journal: #是否启用journal日志

enabled: true

directoryPerDB: true

syncPeriodSecs: 60

  engine: wiredTiger #存储引擎

wiredTiger:

engineConfig:

cacheSizeGB: 10

journalCompressor: "snappy"

directoryForIndexes: false

collectionConfig:

blockCompressor: "snappy"

indexConfig:

prefixCompression: true

net:

 port: 27018 # port

  bindIpAll: true

  maxIncomingConnections: 50000

  wireObjectCheck: true

  ipv6: false

  unixDomainSocket:

      enabled: true

      pathPrefix: "/u01/mongodb/node1/tmp"

      filePermissions: 0700

processManagement:

 fork: true

 pidFilePath: /u01/mongodb/node1/node1.pid

security:

 keyFile: "/u01/mongodb/key/mongo_cluster.key"

 clusterAuthMode: "keyFile"

 authorization: "enabled"

 javascriptEnabled: true

operationProfiling:

    slowOpThresholdMs: 100

    mode: slowOp

replication:

 oplogSizeMB: 20480

 replSetName: "repl_cluster"

 enableMajorityReadConcern: false

3个节点配置文件一致,根据需要更改相应值即可

四、启动并初始化
4.1 启动3个数据节点

sudo -u mongo numactl --interleave=all mongod -f  /u01/mongodb/node1/conf/mongodb.conf

sudo -u mongo numactl --interleave=all mongod -f  /u01/mongodb/node2/conf/mongodb.conf

sudo -u mongo numactl --interleave=all mongod -f  /u01/mongodb/node3/conf/mongodb.conf

4.2 初始化配置

use admin

cfg={_id:"repl_cluster",

members:[{_id:0,host:"localhost:27018",priority:1},

{_id:1,host:"localhost:27019"},

{_id:2,host:"localhost:27020"}]

}

rs.initiate(cfg);

4.3 查看复制集状态

repl_cluster:PRIMARY> rs.status()

{

        "set" : "repl_cluster",

        "date" : ISODate("2024-01-05T06:35:09.080Z"),

        "myState" : 1,

        "term" : NumberLong(2),

        "syncSourceHost" : "",

        "syncSourceId" : -1,

        "heartbeatIntervalMillis" : NumberLong(2000),

        "majorityVoteCount" : 2,

        "writeMajorityCount" : 2,

        "votingMembersCount" : 3,

        "writableVotingMembersCount" : 3,

        "members" : [

                {

                        "_id" : 0,

                        "name" : "localhost:27018",

                        "health" : 1,

                        "state" : 1,

                        "stateStr" : "PRIMARY",

                        "uptime" : 78682,

                        "optime" : {

                                "ts" : Timestamp(1704436504, 1),

                                "t" : NumberLong(2)

                        },

                        "optimeDate" : ISODate("2024-01-05T06:35:04Z"),

                        "lastAppliedWallTime":ISODate("2024-01-05T06:35:04.073Z"),

                        "lastDurableWallTime":ISODate("2024-0105T06:35:04.073Z"),

                        "syncSourceHost" : "",

                        "syncSourceId" : -1,

                        "infoMessage" : "",

                        "electionTime" : Timestamp(1704357871, 1),

                        "electionDate" : ISODate("2024-01-04T08:44:31Z"),

                        "configVersion" : 1,

                        "configTerm" : 2,

                        "self" : true,

                        "lastHeartbeatMessage" : ""

                },

                {

                        "_id" : 1,

                        "name" : "localhost:27019",

                        "health" : 1,

                        "state" : 2,

                        "stateStr" : "SECONDARY",

                        "uptime" : 78647,

                        "optime" : {

                                "ts" : Timestamp(1704436504, 1),

                                "t" : NumberLong(2)

                        },

                        "optimeDurable" : {

                                "ts" : Timestamp(1704436504, 1),

                                "t" : NumberLong(2)

                        },

                        "optimeDate" : ISODate("2024-01-05T06:35:04Z"),

                        "optimeDurableDate" : ISODate("2024-01-05T06:35:04Z"),

                        "lastAppliedWallTime":ISODate("2024-01-05T06:35:04.073Z"),

                        "lastDurableWallTime":ISODate("2024-0105T06:35:04.073Z"),

                        "lastHeartbeat" : ISODate("2024-01-05T06:35:07.970Z"),

                        "lastHeartbeatRecv" : ISODate("2024-01-05T06:35:08.967Z"),

                        "pingMs" : NumberLong(0),

                        "lastHeartbeatMessage" : "",

                        "syncSourceHost" : "localhost:27020",

                        "syncSourceId" : 2,

                        "infoMessage" : "",

                        "configVersion" : 1,

                        "configTerm" : 2

                },

                {

                        "_id" : 2,

                        "name" : "localhost:27020",

                        "health" : 1,

                        "state" : 2,

                        "stateStr" : "SECONDARY",

                        "uptime" : 78642,

                        "optime" : {

                                "ts" : Timestamp(1704436504, 1),

                                "t" : NumberLong(2)

                        },

                        "optimeDurable" : {

                                "ts" : Timestamp(1704436504, 1),

                                "t" : NumberLong(2)

                        },

                        "optimeDate" : ISODate("2024-01-05T06:35:04Z"),

                        "optimeDurableDate" : ISODate("2024-01-05T06:35:04Z"),

                        "lastAppliedWallTime":ISODate("2024-01-05T06:35:04.073Z"),

                        "lastDurableWallTime":ISODate("2024-0105T06:35:04.073Z"),

                        "lastHeartbeat" : ISODate("2024-01-05T06:35:07.971Z"),

                        "lastHeartbeatRecv" : ISODate("2024-01-05T06:35:08.465Z"),

                        "pingMs" : NumberLong(0),

                        "lastHeartbeatMessage" : "",

                        "syncSourceHost" : "localhost:27018",

                        "syncSourceId" : 0,

                        "infoMessage" : "",

                        "configVersion" : 1,

                        "configTerm" : 2

                }

        ],

        "ok" : 1,

        "$clusterTime" : {

                "clusterTime" : Timestamp(1704436504, 1),

                "signature" : {

                        "hash" : BinData(0,"v2qzTOmGVCC4cSO2EF38WQ3TGLM="),

                        "keyId" : NumberLong("7319816138693541892")

                }

        },

        "operationTime" : Timestamp(1704436504, 1)

}

查看Replica Sets 状态

repl_cluster:PRIMARY> rs.isMaster()

{

        "topologyVersion" : {

                "processId" : ObjectId("65966fc3b2be80d8248ff95e"),

                "counter" : NumberLong(6)

        },

        "hosts" : [

                "localhost:27018",

                "localhost:27019",

                "localhost:27020"

        ],

        "setName" : "repl_cluster",

        "setVersion" : 1,

        "ismaster" : true,

        "secondary" : false,

        "primary" : "localhost:27018",

        "me" : "localhost:27018",

        "electionId" : ObjectId("7fffffff0000000000000002"),

        "lastWrite" : {

                "opTime" : {

                        "ts" : Timestamp(1704436574, 1),

                        "t" : NumberLong(2)

                },

                "lastWriteDate" : ISODate("2024-01-05T06:36:14Z"),

                "majorityOpTime" : {

                        "ts" : Timestamp(1704436574, 1),

                        "t" : NumberLong(2)

                },

                "majorityWriteDate" : ISODate("2024-01-05T06:36:14Z")

        },

        "maxBsonObjectSize" : 16777216,

        "maxMessageSizeBytes" : 48000000,

        "maxWriteBatchSize" : 100000,

        "localTime" : ISODate("2024-01-05T06:36:19.346Z"),

        "logicalSessionTimeoutMinutes" : 30,

        "connectionId" : 39,

        "minWireVersion" : 0,

        "maxWireVersion" : 9,

        "readOnly" : false,

        "ok" : 1,

        "$clusterTime" : {

                "clusterTime" : Timestamp(1704436574, 1),

                "signature" : {

                        "hash" : BinData(0,"GIed52Qk4RdLOy9M0YmdT2z76NA="),

                        "keyId" : NumberLong("7319816138693541892")

                }

        },

        "operationTime" : Timestamp(1704436574, 1)

}

4.4 创建账号并认证

db.createUser({user:"admin", pwd: "123456",roles:[{role:"root",db:"admin"}]})

db.auth("admin", "123456");

4.5 重新登录并验证

mongo --port 27018 -u admin -p 

rs.status()

五、replica Set 管理

5.1 读写分离

主库插入测试数据

use test

j={name:"mongo_new",age:5}

i={x:3}

db.test.insert(j)

db.test.insert(i)

db.test.save(i)

db.test.save(j)

db.test.find()

repl_cluster:PRIMARY>use test

switched to db test

repl_cluster:PRIMARY> db.test.find()

{ "_id" : ObjectId("65962274d846bcd325533e5b"), "x" : 3 }

{ "_id" : ObjectId("659626a1d846bcd325533e5c"), "name" : "mongo_new", "age" : 5 }

从库进行查询操作

repl_cluster:SECONDARY> show collections

uncaught exception: Error: listCollections failed: {

        "topologyVersion" : {

                "processId" : ObjectId("65966fe4c8db6c6ee7ee58fa"),

                "counter" : NumberLong(4)

        },

        "operationTime" : Timestamp(1704422833, 1),

        "ok" : 0,

        "errmsg" : "not master and slaveOk=false",

        "code" : 13435,

        "codeName" : "NotPrimaryNoSecondaryOk",

        "$clusterTime" : {

                "clusterTime" : Timestamp(1704422833, 1),

                "signature" : {

                        "hash" : BinData(0,"zp3Q5q7KdZpW6jlTQSwi3bbLgkA="),

                        "keyId" : NumberLong("7319816138693541892")

                }

        }

查询报错,从库无法执行查询操作

开启从库查询操作

repl_cluster:SECONDARY> db.getMongo().setSecondaryOk()

repl_cluster:SECONDARY> show collections

test

repl_cluster:SECONDARY> db.test.find()

{ "_id" : ObjectId("65962274d846bcd325533e5b"), "x" : 3 }

{ "_id" : ObjectId("659626a1d846bcd325533e5c"), "name" : "mongo_new", "age" : 5 }

repl_cluster:SECONDARY>

5.2 故障转移

模拟主库down机,验证故障是否自动转移

杀掉主库进程

[root@erp-db ~]# ps -ef |grep mongo | more

mongo    15862     1  0 Jan04 ?        00:12:23 mongod -f /u01/mongodb/node1/conf/mongodb.conf

mongo    16006     1  0 Jan04 ?        00:12:25 mongod -f /u01/mongodb/node2/conf/mongodb.conf

mongo    16111     1  0 Jan04 ?        00:12:38 mongod -f /u01/mongodb/node3/conf/mongodb.conf

[root@erp-db ~]# kill -9 15862

查看副本集群状态

repl_cluster:PRIMARY> rs.status()

{

        "set" : "repl_cluster",

        "date" : ISODate("2024-01-05T06:45:16.062Z"),

        "myState" : 1,

        "term" : NumberLong(3),

        "syncSourceHost" : "",

        "syncSourceId" : -1,

        "heartbeatIntervalMillis" : NumberLong(2000),

        "majorityVoteCount" : 2,

        "writeMajorityCount" : 2,

        "votingMembersCount" : 3,

        "writableVotingMembersCount" : 3,

        "members" : [

                {

                        "_id" : 0,

                        "name" : "localhost:27018",

                        "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("2024-01-05T06:44:34.087Z"),

                        "lastDurableWallTime":ISODate("2024-0105T06:44:34.087Z"),

                        "lastHeartbeat" : ISODate("2024-01-05T06:45:15.756Z"),

                        "lastHeartbeatRecv" : ISODate("2024-01-05T06:44:37.970Z"),

                        "pingMs" : NumberLong(0),

                        "lastHeartbeatMessage" : "Error connecting to localhost:27018 (127.0.0.1:27018) :: caused by :: Connection refused",

                        "syncSourceHost" : "",

                        "syncSourceId" : -1,

                        "infoMessage" : "",

                        "configVersion" : 1,

                        "configTerm" : 2

                },

                {

                        "_id" : 1,

                        "name" : "localhost:27019",

                        "health" : 1,

                        "state" : 1,

                        "stateStr" : "PRIMARY",

                        "uptime" : 79256,

                        "optime" : {

                                "ts" : Timestamp(1704437107, 1),

                                "t" : NumberLong(3)

                        },

                        "optimeDate" : ISODate("2024-01-05T06:45:07Z"),

                        "lastAppliedWallTime":ISODate("2024-01-05T06:45:07.750Z"),

                        "lastDurableWallTime":ISODate("2024-0105T06:45:07.750Z"),

                        "syncSourceHost" : "",

                        "syncSourceId" : -1,

                        "infoMessage" : "",

                        "electionTime" : Timestamp(1704437087, 1),

                        "electionDate" : ISODate("2024-01-05T06:44:47Z"),

                        "configVersion" : 1,

                        "configTerm" : 3,

                        "self" : true,

                        "lastHeartbeatMessage" : ""

                },

                {

                        "_id" : 2,

                        "name" : "localhost:27020",

                        "health" : 1,

                        "state" : 2,

                        "stateStr" : "SECONDARY",

                        "uptime" : 79248,

                        "optime" : {

                                "ts" : Timestamp(1704437107, 1),

                                "t" : NumberLong(3)

                        },

                        "optimeDurable" : {

                                "ts" : Timestamp(1704437107, 1),

                                "t" : NumberLong(3)

                        },

                        "optimeDate" : ISODate("2024-01-05T06:45:07Z"),

                        "optimeDurableDate" : ISODate("2024-01-05T06:45:07Z"),

                        "lastAppliedWallTime":ISODate("2024-01-05T06:45:07.750Z"),

                        "lastDurableWallTime":ISODate("2024-0105T06:45:07.750Z"),

                        "lastHeartbeat" : ISODate("2024-01-05T06:45:15.742Z"),

                        "lastHeartbeatRecv" : ISODate("2024-01-05T06:45:14.249Z"),

                        "pingMs" : NumberLong(0),

                        "lastHeartbeatMessage" : "",

                        "syncSourceHost" : "localhost:27019",

                        "syncSourceId" : 1,

                        "infoMessage" : "",

                        "configVersion" : 1,

                        "configTerm" : 3

                }

        ],

        "ok" : 1,

        "$clusterTime" : {

                "clusterTime" : Timestamp(1704437107, 1),

                "signature" : {

                        "hash" : BinData(0,"Q6vILQyJe0QvnCDuZZUfS2IJafA="),

                        "keyId" : NumberLong("7319816138693541892")

                }

        },

        "operationTime" : Timestamp(1704437107, 1)

}

27018端口mongodb出现异常,状态为(not reachable/healthy)",系统自动选举了27019端口为主,实现了故障的自动转移

当原主进程启动后,自动加入到集群中,角色为SECONDARY

5.3 增加节点
5.3.1 通过oplog来增加节点

1、 配置并启动新节点,启用20721作为新节点端口,配置文件根据需要更改

sudo -u mongo numactl --interleave=all mongod -f  /u01/mongodb/node4/conf/mongodb.conf

about to fork child process, waiting until server is ready for connections.

forked process: 25698

child process started successfully, parent exiting

2、 添加新节点到现有Replica Set

repl_cluster:PRIMARY> rs.add("localhost:27021")

{

        "ok" : 1,

        "$clusterTime" : {

                "clusterTime" : Timestamp(1704439046, 1),

                "signature" : {

                        "hash" : BinData(0,"S8ApX1WUo83welNeMKf5jkBdj+Q="),

                        "keyId" : NumberLong("7319816138693541892")

                }

        },

        "operationTime" : Timestamp(1704439046, 1)

}

3、 查看集群状态

                {

                        "_id" : 3,

                        "name" : "localhost:27021",

                        "health" : 1,

                        "state" : 2,

                        "stateStr" : "SECONDARY",

                        "uptime" : 10,

                        "optime" : {

                                "ts" : Timestamp(1704439046, 1),

                                "t" : NumberLong(3)

                        },

                        "optimeDurable" : {

                                "ts" : Timestamp(1704439046, 1),

                                "t" : NumberLong(3)

                        },

                        "optimeDate" : ISODate("2024-01-05T07:17:26Z"),

                        "optimeDurableDate" : ISODate("2024-01-05T07:17:26Z"),

                        "lastAppliedWallTime":ISODate("2024005T07:17:26.414Z"),

                       "lastDurableWallTime":ISODate("20240105T07:17:26.414Z"),

                        "lastHeartbeat" : ISODate("2024-01-05T07:17:36.481Z"),

                        "lastHeartbeatRecv":ISODate("2024-0105T07:17:36.772Z"),

                        "pingMs" : NumberLong(0),

                        "lastHeartbeatMessage" : "",

                        "syncSourceHost" : "",

                        "syncSourceId" : -1,

                        "infoMessage" : "",

                        "configVersion" : 2,

                        "configTerm" : 3

                }

        ],

        "ok" : 1,

4、 验证数据同步

repl_cluster:SECONDARY> rs.secondaryOk()

repl_cluster:SECONDARY> db.test.find()

{ "_id" : ObjectId("65962274d846bcd325533e5b"), "x" : 3 }

{ "_id" : ObjectId("659626a1d846bcd325533e5c"), "name" : "mongo_new", "age" : 5 }

通过oplog日志进行添加节点操作简单,但oplog是capped collection,采用循环的方式处理日志,通过oplog日志来添加节点,可能导致数据的不一致(日志被刷新),因此我们引出快照和oplog相结合的方式来添加节点,保证数据的一致性。

方式:复制一份副本集的物理文件来做初始化数据,然后使用oplog日志来追溯数据,最终达到数据的一致性。

5.3.2 通过数据库快照(--fastsync)和oplog来增加节点

1、复制一份副本集成员的物理文件做初始数据

cp –r /u01/mongodb/node4 /u01/mongodb/node5

2、复制完成后,清理不需要的文件,并插入一条新文档,作为同步验证使用

repl_cluster:PRIMARY> j={name:"node5",age:27022}

{ "name" : "node5", "age" : 27022 }

repl_cluster:PRIMARY> db.test.insert(j)

WriteResult({ "nInserted" : 1 })

repl_cluster:PRIMARY> db.test.find()

{ "_id" : ObjectId("65962274d846bcd325533e5b"), "x" : 3 }

{ "_id" : ObjectId("659626a1d846bcd325533e5c"), "name" : "mongo_new", "age" : 5 }

{ "_id" : ObjectId("6597b42827437b37032f0aa2"), "name" : "node5", "age" : 27022 }

3、启动新节点27022端口

[root@erp-db]# sudo -u mongo numactl --interleave=all mongod -f  /u01/mongodb/node5/conf/mongodb.conf

about to fork child process, waiting until server is ready for connections.

forked process: 2520

child process started successfully, parent exiting

4、添加新节点到现有Replica Set

repl_cluster:PRIMARY> rs.add("localhost:27022")

{

        "ok" : 1,

        "$clusterTime" : {

                "clusterTime" : Timestamp(1704442052, 1),

                "signature" : {

                        "hash" : BinData(0,"nQHjkoZke4XsoroiK8SqqisCfsA="),

                        "keyId" : NumberLong("7319816138693541892")

                }

        },

        "operationTime" : Timestamp(1704442052, 1)

}

5、 验证数据同步

repl_cluster:SECONDARY> rs.secondaryOk()

repl_cluster:SECONDARY> db.test.find()

{ "_id" : ObjectId("65962274d846bcd325533e5b"), "x" : 3 }

{ "_id" : ObjectId("659626a1d846bcd325533e5c"), "name" : "mongo_new", "age" : 5 }

{ "_id" : ObjectId("6597b42827437b37032f0aa2"), "name" : "node5", "age" : 27022 }

5.4减少节点

将刚刚添加的两个新节点27021和27022从复制集中去除掉,只需执行rs.remove 指令

就可以了,具体如下:

repl_cluster:PRIMARY> rs.remove("localhost:27021")

{

        "ok" : 1,

        "$clusterTime" : {

                "clusterTime" : Timestamp(1704444644, 1),

                "signature" : {

                        "hash" : BinData(0,"2XlJmd+hB0L2oNeXGO4GNwS3E1U="),

                        "keyId" : NumberLong("7319816138693541892")

                }

        },

        "operationTime" : Timestamp(1704444644, 1)

}

repl_cluster:PRIMARY> rs.remove("localhost:27022")

{

        "ok" : 1,

        "$clusterTime" : {

                "clusterTime" : Timestamp(1704444654, 1),

                "signature" : {

                        "hash" : BinData(0,"d1MJJ3p+dzvKBS63W3DWVWteb0k="),

                        "keyId" : NumberLong("7319816138693541892")

                }

        },

        "operationTime" : Timestamp(1704444654, 1)

}

查看集群状态,27021,27022节点已经删除

repl_cluster:PRIMARY> rs.status()

{

        "set" : "repl_cluster",

        "date" : ISODate("2024-01-05T08:51:31.008Z"),

        "myState" : 1,

        "term" : NumberLong(3),

        "syncSourceHost" : "",

        "syncSourceId" : -1,

        "heartbeatIntervalMillis" : NumberLong(2000),

        "majorityVoteCount" : 2,

        "writeMajorityCount" : 2,

        "votingMembersCount" : 3,

        "writableVotingMembersCount" : 3,

        "members" : [

                {

                        "_id" : 0,

                        "name" : "localhost:27018",

                        "health" : 1,

                        "state" : 2,

                        "stateStr" : "SECONDARY",

                        "uptime" : 7101,

                        "optime" : {

                                "ts" : Timestamp(1704444687, 1),

                                "t" : NumberLong(3)

                        },

                        "optimeDurable" : {

                                "ts" : Timestamp(1704444687, 1),

                                "t" : NumberLong(3)

                        },

                        "optimeDate" : ISODate("2024-01-05T08:51:27Z"),

                        "optimeDurableDate" : ISODate("2024-01-05T08:51:27Z"),

                        "lastAppliedWallTime":ISODate("2024-01-05T08:51:27.956Z"),

                        "lastDurableWallTime":ISODate("2024-0105T08:51:27.956Z"),

                        "lastHeartbeat" : ISODate("2024-01-05T08:51:30.974Z"),

                        "lastHeartbeatRecv" : ISODate("2024-01-05T08:51:30.977Z"),

                        "pingMs" : NumberLong(0),

                        "lastHeartbeatMessage" : "",

                        "syncSourceHost" : "localhost:27020",

                        "syncSourceId" : 2,

                        "infoMessage" : "",

                        "configVersion" : 5,

                        "configTerm" : 3

                },

                {

                        "_id" : 1,

                        "name" : "localhost:27019",

                        "health" : 1,

                        "state" : 1,

                        "stateStr" : "PRIMARY",

                        "uptime" : 86831,

                        "optime" : {

                                "ts" : Timestamp(1704444687, 1),

                                "t" : NumberLong(3)

                        },

                        "optimeDate" : ISODate("2024-01-05T08:51:27Z"),

                        "lastAppliedWallTime":ISODate("2024-01-05T08:51:27.956Z"),

                        "lastDurableWallTime":ISODate("2024-0105T08:51:27.956Z"),

                        "syncSourceHost" : "",

                        "syncSourceId" : -1,

                        "infoMessage" : "",

                        "electionTime" : Timestamp(1704437087, 1),

                        "electionDate" : ISODate("2024-01-05T06:44:47Z"),

                        "configVersion" : 5,

                        "configTerm" : 3,

                        "self" : true,

                        "lastHeartbeatMessage" : ""

                },

                {

                        "_id" : 2,

                        "name" : "localhost:27020",

                        "health" : 1,

                        "state" : 2,

                        "stateStr" : "SECONDARY",

                        "uptime" : 86823,

                        "optime" : {

                                "ts" : Timestamp(1704444687, 1),

                                "t" : NumberLong(3)

                        },

                        "optimeDurable" : {

                                "ts" : Timestamp(1704444687, 1),

                                "t" : NumberLong(3)

                        },

                        "optimeDate" : ISODate("2024-01-05T08:51:27Z"),

                        "optimeDurableDate" : ISODate("2024-01-05T08:51:27Z"),

                        "lastAppliedWallTime":ISODate("2024-01-05T08:51:27.956Z"),

                        "lastDurableWallTime":ISODate("2024-0105T08:51:27.956Z"),

                        "lastHeartbeat" : ISODate("2024-01-05T08:51:30.975Z"),

                        "lastHeartbeatRecv" : ISODate("2024-01-05T08:51:30.977Z"),

                        "pingMs" : NumberLong(0),

                        "lastHeartbeatMessage" : "",

                        "syncSourceHost" : "localhost:27019",

                        "syncSourceId" : 1,

                        "infoMessage" : "",

                        "configVersion" : 5,

                        "configTerm" : 3

                }

        ],

        "ok" : 1,

        "$clusterTime" : {

                "clusterTime" : Timestamp(1704444687, 1),

                "signature" : {

                        "hash" : BinData(0,"bBPDXuxrAqjzfO86rcj13v7mKQI="),

                        "keyId" : NumberLong("7319816138693541892")

                }

        },

        "operationTime" : Timestamp(1704444687, 1)

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/310929.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Spring MVC 的RequestMapping注解

RequestMapping注解 使用说明 作用:用于建立请求URL和处理请求方法之间的对应关系。 出现位置: 类上: 请求 URL的第一级访问目录。此处不写的话,就相当于应用的根目录。写的话需要以/开头。它出现的目的是为了使我们的 URL 可以…

解决:TypeError: ‘dict_keys’ object does not support indexing

解决:TypeError: ‘dict_keys’ object does not support indexing 文章目录 解决:TypeError: dict_keys object does not support indexing背景报错问题报错翻译报错位置代码报错原因解决方法方法一:方法二:方法三:今…

CES2024:智能戒指、全息技术、AI家居机器人等有趣的小工具

在CES2024的展会上上,我们见证了一系列充满创意和未来感的科技产品。从智能戒指到全息技术,再到AI家居机器人,这些有趣的小工具不仅展现了技术的进步,更预示着未来生活的可能性。现在就来给大家介绍九个实用有趣的小工具。 1、华…

单因素方差分析--R

任务说明 三个剂量水平的药物处理受试者,每个剂量水平十个受试者,现在收集到数据后,问: 药物剂量水平显著影响受试者的response? 或者不同剂量药物处理受试者有显著效果的差异吗? 数据 library(tidyvers…

stable diffusion代码学习笔记

前言:本文没有太多公式推理,只有一些简单的公式,以及公式和代码的对应关系。本文仅做个人学习笔记,如有理解错误的地方,请指出。 资源 本文学习的代码;相关文献: Denoising Diffusion Probab…

Linux学习之网络编程1(纯理论)

写在前面 刚刚更新完Linux系统编程,特别推荐大家去看的Linux系统编程,总共44个小时,老师讲的非常好,我是十天肝完的,每天大概看20集,每天还要以写blog的形式来写笔记来总结一下,虽然这十天有点…

ubuntu18.04 TensorRT 部署 yolov5-7.0推理

文章目录 1、环境配置2、推理部分2.1、检测2.2、分类2.3、分割2.4、INT8 量化 1、环境配置 链接: TensorRT cuda环境安装 2、推理部分 下载yolov5对应版本的包 https://github.com/wang-xinyu/tensorrtx/tree/master/yolov5 2.1、检测 1、源码模型下载 git clone -b v7.0 …

Python—使用LangCahin调用千帆大模型

文章目录 前言一、安装LangChain二、获取千帆API Key、Secret Key三、简单对话案例实现四、构建语言模型应用程序:LLM1.初始化模型2.LLM初始化和调用 五、提示词模板(PromptTemplate): 管理 LLM 的提示1.定义提示模板2.组合 LLM 和提示词3.组合输出解析器…

浮动差价这么受欢迎Anzo Capital找了1个理由

在交易市场中,浮动差价是如今最常见的差价类型,也是最受欢迎的的差价类型。Anzo Capital认为它受欢迎的理由只有一条,那就是因为它对参与交易的各方都有利可图。 不仅是交易者本身,就连经纪人和交易商这三者都可以同时受益&…

Apipost接口自动化测试如何操作

Apipost提供可视化的API自动化测试功能,使用Apipost研发人员可以设计、调试接口,测试人员可以基于同一数据源进行测试,Apipost 接口自动化功能在上次更新中进行了逻辑调整,带来更好的交互操作、更多的控制器选择,同时新…

【python】内存管理和数据类型问题

一、内存管理 Python有一个自动内存管理机制,但它并不总是按照期望的方式工作。例如,如果创建了一个大的列表或字典,并且没有删除它,那么这个对象就会一直占用内存,直到Python的垃圾回收器决定清理它。为了避免这种情…

记录仪可作为XCP从站进行数据转发

车辆数据采集系统通常包含多种数据采集设备、多路总线或传感器信号,为了集中监控和管理,需要将这些设备的实时数据传输到上位机。对此,我们将使用基于XCP(Universal Measurement and Calibration Protocol)协议的数据记…

redis复习笔记03(小滴课堂)

Redis6常见数据结构概览 0代表存在,1代表不存在。 1表示删除成功,0表示失败。 查看类型,默认string类型。 也可以设置set类型。 list类型。 查看key的过期时间: Redis6数据结构之String类型介绍和应用场景 批量设置: …

期待!《数字化运维路线图》震撼发布(第一部分)

在时代的激流中,数字化浪潮奔涌而至,机遇与挑战在此交汇。各行业正步入持续变革阶段,一场技术的竞争与博弈正拉开帷幕。科技革命与产业变革如同疾风骤雨,加速进行,市场格局在不断重塑。各类因素叠加之下,一…

搜维尔科技:【简报】元宇宙数字人赛道,《全息影像技术应用》!

期待着看展的主角来到今天要参观的全息影像展,平时就喜欢看展的她对于所谓的全息影像非常好奇,于是她带着期待的心情进入展内。进入展内的主角看到的是与之前完全不同的画展,每幅画看起来就像真的一样,充满好奇的她在展览的各处游…

千问写作——论文写作

【千问写作】 千问写作是运用通义千问720亿参数的语言模型(qwen-72b-chat)进行基于目录的论文创作,通过python-docx设置文档格式然后写出文档 ,其他免费模型(qwen-1.8b-chat)暂时无法生成目录 1. 请求延时 …

怎么做UI自动化测试?不会代码也可以?

UI自动化测试已经成为现代软件开发过程中不可或缺的一部分。它能够提供诸多优势,包括提高测试效率、减少人力成本、提升软件质量等。同时,可视化工具为UI自动化测试带来了更多便利和灵活性。然而,可视化工具也存在一些潜在的劣势。本文将探讨…

工程中的SOVD——从ECU到车辆

SOVD标准正在改变诊断方式,特别是在互联网上当多个合作方进行交互时,其提供了很大的优势。在开发的早期阶段,需要使用附加的方法来利用这个标准,因为该标准并不是专为ECU诊断而开发的,而且还需格外注意数据的处理&…

在统信UOS Linux下用opencv-python捕获摄像头输入保存到视频文件

☞ ░ 前往老猿Python博客 ░ https://blog.csdn.net/LaoYuanPython 一、引言 老猿在CSDN的《opencv-python图形图像处理入门基础知识》介绍了一个利用电脑摄像头获取输入视频生成到文件的案例,这个案例当时基于windows的。在《统信UOS Linux下安装opencv-python过…

软件测评中心▏性能测试之压力测试、负载测试的区别和联系简析

在如今的信息时代,软件已经成为人们日常工作和生活不可或缺的一部分。然而,随着软件的发展和应用范围的不断扩大,软件性能的优劣也成为了影响用户使用体验的重要因素。 软件性能测试即对软件在不同条件下的性能进行评估和验证的过程。通过模…
最新文章