跳转至

4. 复制集

1. 基本原理

#基本构成是1主2从结构,自带互相监控投票机制(Raft)
#如果发生主库宕机,复制集内部会进行投票选举,选择一个新的主库替代原有主库对外提供服务。
#同时复制集会自动通知客户端程序,主库已经发生转换了,应用就会连接到新的主库。

2. 规划

#3个以上mongodb节点(或多实例)
#采用多实例
    192.168.178.151的多个端口:28017、28018、28019、28020

3. 创建多套目录

#注意:最后要更改属主属组!!!可以直接登录mongod用户创建
su - mongod
mkdir -p /mongodb/28017/conf  /mongodb/28017/data  /mongodb/28017/log
mkdir -p /mongodb/28018/conf  /mongodb/28018/data  /mongodb/28018/log
mkdir -p /mongodb/28019/conf  /mongodb/28019/data  /mongodb/28019/log
mkdir -p /mongodb/28020/conf  /mongodb/28020/data  /mongodb/28020/log

4. 创建多套配置文件

#此yaml文件启动时经常报错!!!查找原因啊
[mongod@151 ~]$ mongod -f /mongodb/28017/conf/mongo.conf
Error parsing YAML config file: yaml-cpp: error at line 5, column 8: illegal map value
try 'mongod --help' for more information
#发现错误,如下
systemLog:
    destination: file
    path: /mongodb/28017/log/mongodb.log
    logAppend:true #此行的:后面少了个空格!!!!


#再次启动测试,依旧报错。。。
[mongod@151 ~]$ mongod -f /mongodb/28017/conf/mongo.conf
Unrecognized option: storage.wiredTiger.collectionConfig.blockcompressor

#是不是存储引擎是单独的?不是storage后的内容?
    wiredTiger:
      engineConfig:
        cacheSizeGB: 1
        directoryForIndexes: true
      collectionConfig:
        blockcompressor: zlib #原来抄错了,C为大写:blockCompressor

#修改后再次测试
[mongod@151 ~]$ vim /mongodb/28017/conf/mongo.conf
[mongod@151 ~]$
[mongod@151 ~]$ mongod -f /mongodb/28017/conf/mongo.conf
about to fork child process, waiting until server is ready for connections.
forked process: 45004
child process started successfully, parent exiting
[mongod@151 ~]$
[mongod@151 ~]$ netstat -lnp|grep 28017
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
tcp        0      0 0.0.0.0:28017           0.0.0.0:*               LISTEN      45004/mongod
unix  2      [ ACC ]     STREAM     LISTENING     240096   45004/mongod         /tmp/mongodb-28017.sock
[mongod@151 ~]$

#启动成功!!!
#注意:最后要更改属主属组!!!可以直接登录mongod用户创建
vim /mongodb/28017/conf/mongo.conf
#yaml格式文件,注意只能使用空格,不可以使用tab
systemLog:
    destination: file
    path: /mongodb/28017/log/mongodb.log
    logAppend: true
storage: 
    journal:
      enabled: true
    dbPath: /mongodb/28017/data
    directoryPerDB: true
    #engine: wiredTiger
    wiredTiger:
      engineConfig:
        cacheSizeGB: 1
        directoryForIndexes: true
      collectionConfig:
        blockCompressor: zlib
      indexConfig:
        prefixCompression: true
processManagement:
    fork: true
net:
    port: 28017
replication:
    oplogSizeMB: 2048
    replSetName: my_repl
cp /mongodb/28017/conf/mongo.conf  /mongodb/28018/conf/
cp /mongodb/28017/conf/mongo.conf  /mongodb/28019/conf/
cp /mongodb/28017/conf/mongo.conf  /mongodb/28020/conf/
sed 's#28017#28018#g'  /mongodb/28018/conf/mongo.conf -i
sed 's#28017#28019#g'  /mongodb/28019/conf/mongo.conf -i
sed 's#28017#28020#g'  /mongodb/28020/conf/mongo.conf -i
[root@151 ~]# ls /mongodb/
bin  conf  data  log
[root@151 ~]#
[root@151 ~]# mkdir -p /mongodb/28017/conf  /mongodb/28017/data  /mongodb/28017/log
[root@151 ~]# mkdir -p /mongodb/28018/conf  /mongodb/28018/data  /mongodb/28018/log
[root@151 ~]# mkdir -p /mongodb/28019/conf  /mongodb/28019/data  /mongodb/28019/log
[root@151 ~]# mkdir -p /mongodb/28020/conf  /mongodb/28020/data  /mongodb/28020/log
[root@151 ~]#
[root@151 ~]# ls /mongodb/
28017  28018  28019  28020  bin  conf  data  log
[root@151 ~]#
[root@151 ~]# vim /mongodb/28017/conf/mongo.conf
[root@151 ~]#
[root@151 ~]# cp /mongodb/28017/conf/mongo.conf  /mongodb/28018/conf/
[root@151 ~]# cp /mongodb/28017/conf/mongo.conf  /mongodb/28019/conf/
[root@151 ~]# cp /mongodb/28017/conf/mongo.conf  /mongodb/28020/conf/
[root@151 ~]#
[root@151 ~]# sed 's#28017#28018#g'  /mongodb/28018/conf/mongo.conf -i
[root@151 ~]# sed 's#28017#28019#g'  /mongodb/28019/conf/mongo.conf -i
[root@151 ~]# sed 's#28017#28020#g'  /mongodb/28020/conf/mongo.conf -i
[root@151 ~]#
[root@151 ~]# cat /mongodb/28018/conf/mongo.conf
systemLog:
  destination: file
  path: /mongodb/28018/log/mongodb.log
  logAppend:true
storage:
  journal:
    enabled: true
  dbPath: /mongodb/28018/data
  directoryPerDB: true
  #engine: wiredTiger
  wiredTiger:
    engineConfig:
      cacheSizeGB: 1
      directoryForIndexes: true
    collectionConfig:
      blockcompressor: zlib
    indexConfig:
      prefixCompression: true
  processManagement:
    fork: true
  net:
    port: 28018
  replication:
    oplogSizeMB: 2048
    replSetName: my_repl
#由于yaml文件经常报错,统一整理到一起
#注意:1.冒号后要带空格! 2.大小写敏感!!! 3.只能使用空格缩进
#28017
vim /mongodb/28017/conf/mongo.conf
systemLog:
    destination: file
    path: /mongodb/28017/log/mongodb.log
    logAppend: true
storage: 
    journal:
      enabled: true
    dbPath: /mongodb/28017/data
    directoryPerDB: true
    #engine: wiredTiger
    wiredTiger:
      engineConfig:
        cacheSizeGB: 1
        directoryForIndexes: true
      collectionConfig:
        blockCompressor: zlib
      indexConfig:
        prefixCompression: true
processManagement:
    fork: true
net:
    port: 28017
replication:
    oplogSizeMB: 2048
    replSetName: my_repl

#28018
vim /mongodb/28017/conf/mongo.conf
systemLog:
    destination: file
    path: /mongodb/28017/log/mongodb.log
    logAppend: true
storage: 
    journal:
      enabled: true
    dbPath: /mongodb/28017/data
    directoryPerDB: true
    #engine: wiredTiger
    wiredTiger:
      engineConfig:
        cacheSizeGB: 1
        directoryForIndexes: true
      collectionConfig:
        blockCompressor: zlib
      indexConfig:
        prefixCompression: true
processManagement:
    fork: true
net:
    port: 28018
replication:
    oplogSizeMB: 2048
    replSetName: my_repl

#28019
vim /mongodb/28017/conf/mongo.conf
systemLog:
    destination: file
    path: /mongodb/28017/log/mongodb.log
    logAppend: true
storage: 
    journal:
      enabled: true
    dbPath: /mongodb/28017/data
    directoryPerDB: true
    #engine: wiredTiger
    wiredTiger:
      engineConfig:
        cacheSizeGB: 1
        directoryForIndexes: true
      collectionConfig:
        blockCompressor: zlib
      indexConfig:
        prefixCompression: true
processManagement:
    fork: true
net:
    port: 28019
replication:
    oplogSizeMB: 2048
    replSetName: my_repl


#28020
vim /mongodb/28017/conf/mongo.conf
systemLog:
    destination: file
    path: /mongodb/28017/log/mongodb.log
    logAppend: true
storage: 
    journal:
      enabled: true
    dbPath: /mongodb/28017/data
    directoryPerDB: true
    #engine: wiredTiger
    wiredTiger:
      engineConfig:
        cacheSizeGB: 1
        directoryForIndexes: true
      collectionConfig:
        blockCompressor: zlib
      indexConfig:
        prefixCompression: true
processManagement:
    fork: true
net:
    port: 28020
replication:
    oplogSizeMB: 2048
    replSetName: my_repl

5. 启动多实例备用

mongod -f /mongodb/28017/conf/mongo.conf
mongod -f /mongodb/28018/conf/mongo.conf
mongod -f /mongodb/28019/conf/mongo.conf
mongod -f /mongodb/28020/conf/mongo.conf
netstat -tunlp|grep 280

#老师的命令
netstat -nlp|grep 280
[root@151 ~]# su - mongod
Last login: Wed May 12 13:12:48 CST 2021 on pts/1
[mongod@151 ~]$ mongod -f /mongodb/28017/conf/mongo.conf
Error parsing YAML config file: yaml-cpp: error at line 5, column 8: illegal map value
try 'mongod --help' for more information
[mongod@151 ~]$ mongod -f /mongodb/28018/conf/mongo.conf
Error parsing YAML config file: yaml-cpp: error at line 5, column 8: illegal map value
try 'mongod --help' for more information
[mongod@151 ~]$ mongod -f /mongodb/28019/conf/mongo.conf
Error parsing YAML config file: yaml-cpp: error at line 5, column 8: illegal map value
try 'mongod --help' for more information
[mongod@151 ~]$ mongod -f /mongodb/28020/conf/mongo.conf
Error parsing YAML config file: yaml-cpp: error at line 5, column 8: illegal map value
try 'mongod --help' for more information
[mongod@151 ~]$

#貌似是没有权限,先赋予权限,再测试
[mongod@151 ~]$ exit
logout
[root@151 ~]# chown -R mongod:mongod /mongodb/
[root@151 ~]# ll /mongodb/
total 4
drwxr-xr-x 5 mongod mongod   41 May 12 16:42 28017
drwxr-xr-x 5 mongod mongod   41 May 12 16:42 28018
drwxr-xr-x 5 mongod mongod   41 May 12 16:42 28019
drwxr-xr-x 5 mongod mongod   41 May 12 16:42 28020
drwxr-xr-x 2 mongod mongod  242 May 12 10:39 bin
drwxr-xr-x 2 mongod mongod   24 May 12 13:12 conf
drwxr-xr-x 4 mongod mongod 4096 May 12 12:12 data
drwxr-xr-x 2 mongod mongod   25 May 12 10:46 log
[root@151 ~]# su - mongod
Last login: Wed May 12 16:45:05 CST 2021 on pts/1

#依旧报错,是配置文件的问题?
[mongod@151 ~]$ mongod -f /mongodb/28017/conf/mongo.conf
Error parsing YAML config file: yaml-cpp: error at line 5, column 8: illegal map value
try 'mongod --help' for more information
[mongod@151 ~]$ mongod -f /mongodb/28018/conf/mongo.conf
Error parsing YAML config file: yaml-cpp: error at line 5, column 8: illegal map value
try 'mongod --help' for more information
[mongod@151 ~]$ mongod -f /mongodb/28019/conf/mongo.conf
Error parsing YAML config file: yaml-cpp: error at line 5, column 8: illegal map value
try 'mongod --help' for more information
[mongod@151 ~]$ mongod -f /mongodb/28020/conf/mongo.conf
Error parsing YAML config file: yaml-cpp: error at line 5, column 8: illegal map value
try 'mongod --help' for more information

#查看配置文件,(先把用户管理弄完)发现最后几行空格有问题!!!重新修改配置文件,再次测试,依旧失败。。。
#已修改完配置文件,注意问题如上一节,再次启动
[mongod@151 ~]$ vim /mongodb/28018/conf/mongo.conf
[mongod@151 ~]$
[mongod@151 ~]$ vim /mongodb/28019/conf/mongo.conf
[mongod@151 ~]$
[mongod@151 ~]$ vim /mongodb/28020/conf/mongo.conf
[mongod@151 ~]$
[mongod@151 ~]$ mongod -f /mongodb/28018/conf/mongo.conf
about to fork child process, waiting until server is ready for connections.
forked process: 46652
child process started successfully, parent exiting
[mongod@151 ~]$ mongod -f /mongodb/28019/conf/mongo.conf
about to fork child process, waiting until server is ready for connections.
forked process: 46714
child process started successfully, parent exiting
[mongod@151 ~]$ mongod -f /mongodb/28020/conf/mongo.conf
about to fork child process, waiting until server is ready for connections.
forked process: 46770
child process started successfully, parent exiting
[mongod@151 ~]$    
[mongod@151 ~]$ netstat -lnp|grep 280
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
tcp        0      0 0.0.0.0:28017           0.0.0.0:*               LISTEN      45004/mongod
tcp        0      0 0.0.0.0:28018           0.0.0.0:*               LISTEN      46652/mongod
tcp        0      0 0.0.0.0:28019           0.0.0.0:*               LISTEN      46714/mongod
tcp        0      0 0.0.0.0:28020           0.0.0.0:*               LISTEN      46770/mongod
unix  2      [ ACC ]     STREAM     LISTENING     240096   45004/mongod         /tmp/mongodb-28017.sock
unix  2      [ ACC ]     STREAM     LISTENING     242350   46770/mongod         /tmp/mongodb-28020.sock
unix  2      [ ACC ]     STREAM     LISTENING     242243   46652/mongod         /tmp/mongodb-28018.sock
unix  2      [ ACC ]     STREAM     LISTENING     242299   46714/mongod         /tmp/mongodb-28019.sock

6. 配置1主2从复制集

#规划
28017:主
28018:从1
28019:从2
28020:备用

#1. 登录28017
mongo --port 28017 admin

#2. 编写配置信息
config={ _id: 'my_repl',members:[
    {_id: 0, host: '192.168.178.151:28017'},
    {_id: 1, host: '192.168.178.151:28018'},
    {_id: 2, host: '192.168.178.151:28019'}
]
}

#3.初始化
rs.initiate(config)

#4.分别登录查看
mongo --port 28017 admin
mongo --port 28018 admin
mongo --port 28019 admin

#5.临时打开从库可读
show dbs;
rs.slaveOk()
show databases;

#6.查看复制集状态信息(测试发现,每个节点都可以查看!!!)
rs.status();
#1.不带验证库登录
[mongod@151 ~]$ mongo --port 28017
MongoDB shell version: 3.2.22
connecting to: 127.0.0.1:28017/test
#发现没有权限
> show dbs
2021-05-12T18:07:05.770+0800 E QUERY    [thread1] Error: listDatabases failed:{ "ok" : 0, "errmsg" : "not master and slaveOk=false", "code" : 13435 } :
_getErrorWithCode@src/mongo/shell/utils.js:25:13
Mongo.prototype.getDBs@src/mongo/shell/mongo.js:62:1
shellHelper.show@src/mongo/shell/utils.js:781:19
shellHelper@src/mongo/shell/utils.js:671:15
@(shellhelp2):1:1

> exit
bye
#2.带验证库登录
[mongod@151 ~]$ mongo --port 28017 admin
MongoDB shell version: 3.2.22
connecting to: 127.0.0.1:28017/admin
#发现依旧没有权限。
> show dbs
2021-05-12T18:07:15.588+0800 E QUERY    [thread1] Error: listDatabases failed:{ "ok" : 0, "errmsg" : "not master and slaveOk=false", "code" : 13435 } :
_getErrorWithCode@src/mongo/shell/utils.js:25:13
Mongo.prototype.getDBs@src/mongo/shell/mongo.js:62:1
shellHelper.show@src/mongo/shell/utils.js:781:19
shellHelper@src/mongo/shell/utils.js:671:15
@(shellhelp2):1:1

#3.写入复制集配置
> config={ _id: 'my_repl',members:[
... {_id: 0, host: '192.168.178.151:28017'},
... {_id: 1, host: '192.168.178.151:28018'},
... {_id: 2, host: '192.168.178.151:28019'}
... ]
... }
{
        "_id" : "my_repl",
        "members" : [
                {
                        "_id" : 0,
                        "host" : "192.168.178.151:28017"
                },
                {
                        "_id" : 1,
                        "host" : "192.168.178.151:28018"
                },
                {
                        "_id" : 2,
                        "host" : "192.168.178.151:28019"
                }
        ]
}
#4.初始化配置
> rs.initiate(config)
{ "ok" : 1 }
my_repl:OTHER>
my_repl:SECONDARY>
my_repl:SECONDARY>
my_repl:PRIMARY>
my_repl:PRIMARY>
my_repl:PRIMARY>
my_repl:PRIMARY>
my_repl:PRIMARY> exit
bye

#5.登录主库测试
[mongod@151 ~]$ mongo --port 28017 admin
MongoDB shell version: 3.2.22
connecting to: 127.0.0.1:28017/admin
my_repl:PRIMARY>
my_repl:PRIMARY> exit
bye

#6.登录从库测试
[mongod@151 ~]$ mongo --port 28018 admin
MongoDB shell version: 3.2.22
connecting to: 127.0.0.1:28018/admin
my_repl:SECONDARY>
my_repl:SECONDARY> exit
bye
[mongod@151 ~]$
[mongod@151 ~]$ mongo --port 28019 admin
MongoDB shell version: 3.2.22
connecting to: 127.0.0.1:28019/admin
my_repl:SECONDARY>
my_repl:SECONDARY> exit
bye

#7.临时开启从库可读
[mongod@151 ~]$ mongo --port 28018 admin
MongoDB shell version: 3.2.22
connecting to: 127.0.0.1:28018/admin
my_repl:SECONDARY>
#未开启前
my_repl:SECONDARY> show dbs
2021-05-12T18:11:20.634+0800 E QUERY    [thread1] Error: listDatabases failed:{ "ok" : 0, "errmsg" : "not master and slaveOk=false", "code" : 13435 } :
_getErrorWithCode@src/mongo/shell/utils.js:25:13
Mongo.prototype.getDBs@src/mongo/shell/mongo.js:62:1
shellHelper.show@src/mongo/shell/utils.js:781:19
shellHelper@src/mongo/shell/utils.js:671:15
@(shellhelp2):1:1
#开启后
my_repl:SECONDARY> rs.slaveOk()
my_repl:SECONDARY> show dbs
local  0.000GB
my_repl:SECONDARY> exit
bye
#重新登录失效
[mongod@151 ~]$ mongo --port 28018 admin
MongoDB shell version: 3.2.22
connecting to: 127.0.0.1:28018/admin
my_repl:SECONDARY> show dbs
2021-05-12T18:11:40.933+0800 E QUERY    [thread1] Error: listDatabases failed:{ "ok" : 0, "errmsg" : "not master and slaveOk=false", "code" : 13435 } :
_getErrorWithCode@src/mongo/shell/utils.js:25:13
Mongo.prototype.getDBs@src/mongo/shell/mongo.js:62:1
shellHelper.show@src/mongo/shell/utils.js:781:19
shellHelper@src/mongo/shell/utils.js:671:15
@(shellhelp2):1:1

my_repl:SECONDARY> exit
bye

#8.查看复制集状态
[mongod@151 ~]$ mongo --port 28018 admin
MongoDB shell version: 3.2.22
connecting to: 127.0.0.1:28018/admin
my_repl:SECONDARY> rs.status()
{
        "set" : "my_repl",
        "date" : ISODate("2021-05-12T10:11:55.945Z"),
        "myState" : 2,
        "term" : NumberLong(1),
        "syncingTo" : "192.168.178.151:28017",
        "heartbeatIntervalMillis" : NumberLong(2000),
        "members" : [
                {
                        "_id" : 0,
                        "name" : "192.168.178.151:28017",
                        "health" : 1,
                        "state" : 1,
                        "stateStr" : "PRIMARY",
                        "uptime" : 240,
                        "optime" : {
                                "ts" : Timestamp(1620814084, 2),
                                "t" : NumberLong(1)
                        },
                        "optimeDate" : ISODate("2021-05-12T10:08:04Z"),
                        "lastHeartbeat" : ISODate("2021-05-12T10:11:54.363Z"),
                        "lastHeartbeatRecv" : ISODate("2021-05-12T10:11:55.356Z"),
                        "pingMs" : NumberLong(0),
                        "electionTime" : Timestamp(1620814084, 1),
                        "electionDate" : ISODate("2021-05-12T10:08:04Z"),
                        "configVersion" : 1
                },
                {
                        "_id" : 1,
                        "name" : "192.168.178.151:28018",
                        "health" : 1,
                        "state" : 2,
                        "stateStr" : "SECONDARY",
                        "uptime" : 474,
                        "optime" : {
                                "ts" : Timestamp(1620814084, 2),
                                "t" : NumberLong(1)
                        },
                        "optimeDate" : ISODate("2021-05-12T10:08:04Z"),
                        "syncingTo" : "192.168.178.151:28017",
                        "configVersion" : 1,
                        "self" : true
                },
                {
                        "_id" : 2,
                        "name" : "192.168.178.151:28019",
                        "health" : 1,
                        "state" : 2,
                        "stateStr" : "SECONDARY",
                        "uptime" : 240,
                        "optime" : {
                                "ts" : Timestamp(1620814084, 2),
                                "t" : NumberLong(1)
                        },
                        "optimeDate" : ISODate("2021-05-12T10:08:04Z"),
                        "lastHeartbeat" : ISODate("2021-05-12T10:11:54.368Z"),
                        "lastHeartbeatRecv" : ISODate("2021-05-12T10:11:54.367Z"),
                        "pingMs" : NumberLong(1),
                        "syncingTo" : "192.168.178.151:28017",
                        "configVersion" : 1
                }
        ],
        "ok" : 1
}
my_repl:SECONDARY> exit
bye

#9.登录主库写入数据测试
[mongod@151 ~]$ mongo --port 28017 admin
MongoDB shell version: 3.2.22
connecting to: 127.0.0.1:28017/admin
my_repl:PRIMARY>
my_repl:PRIMARY> show dbs
local  0.000GB
my_repl:PRIMARY> show tables
my_repl:PRIMARY> use test
switched to db test
my_repl:PRIMARY> show tables
my_repl:PRIMARY> db.t1.insert({id:1})
WriteResult({ "nInserted" : 1 })
my_repl:PRIMARY> db.t1.find()
{ "_id" : ObjectId("609baa9885a099fa7702cfbe"), "id" : 1 }
my_repl:PRIMARY> exit
bye

#10.登录从库查看数据
[mongod@151 ~]$ mongo --port 28019 admin
MongoDB shell version: 3.2.22
connecting to: 127.0.0.1:28019/admin
my_repl:SECONDARY> rs.slaveOk()
my_repl:SECONDARY> use test
switched to db test
my_repl:SECONDARY> show tables
t1
my_repl:SECONDARY> db.t1.find()
{ "_id" : ObjectId("609baa9885a099fa7702cfbe"), "id" : 1 }
my_repl:SECONDARY> exit
bye

7. 添加删除节点

#经测试,只能在主节点上添加删除从节点!!!
mongo --port 28017 admin

#1.添加节点
rs.add("ip:port")

#2.查看
rs.isMaster()

#3.删除节点
rs.remove("ip:port")

#4.查看
rs.isMaster()
#1.从库2查看是否是主机点
[mongod@151 ~]$ mongo --port 28019 admin
MongoDB shell version: 3.2.22
connecting to: 127.0.0.1:28019/admin
my_repl:SECONDARY> rs.isMaster()
{
        "hosts" : [
                "192.168.178.151:28017",
                "192.168.178.151:28018",
                "192.168.178.151:28019"
        ],
        "setName" : "my_repl",
        "setVersion" : 1,
        "ismaster" : false,
        "secondary" : true,
        "primary" : "192.168.178.151:28017",
        "me" : "192.168.178.151:28019",
        "maxBsonObjectSize" : 16777216,
        "maxMessageSizeBytes" : 48000000,
        "maxWriteBatchSize" : 1000,
        "localTime" : ISODate("2021-05-12T10:17:37.486Z"),
        "maxWireVersion" : 4,
        "minWireVersion" : 0,
        "ok" : 1
}
my_repl:SECONDARY> exit
bye

#2.主库查看是否是主节点
[mongod@151 ~]$ mongo --port 28017 admin
MongoDB shell version: 3.2.22
connecting to: 127.0.0.1:28017/admin
my_repl:PRIMARY> rs.isMaster()
{
        "hosts" : [
                "192.168.178.151:28017",
                "192.168.178.151:28018",
                "192.168.178.151:28019"
        ],
        "setName" : "my_repl",
        "setVersion" : 1,
        "ismaster" : true,
        "secondary" : false,
        "primary" : "192.168.178.151:28017",
        "me" : "192.168.178.151:28017",
        "electionId" : ObjectId("7fffffff0000000000000001"),
        "maxBsonObjectSize" : 16777216,
        "maxMessageSizeBytes" : 48000000,
        "maxWriteBatchSize" : 1000,
        "localTime" : ISODate("2021-05-12T10:17:55.999Z"),
        "maxWireVersion" : 4,
        "minWireVersion" : 0,
        "ok" : 1
}
my_repl:PRIMARY> exit
bye

#3.从库登录,添加节点测试-----添加失败!!!
[mongod@151 ~]$ mongo --port 28018 admin
MongoDB shell version: 3.2.22
connecting to: 127.0.0.1:28018/admin
my_repl:SECONDARY> rs.add("192.168.178.151:28020")
{
        "ok" : 0,
        "errmsg" : "replSetReconfig should only be run on PRIMARY, but my state is SECONDARY; use the \"force\" argument to override",
        "code" : 10107
}
my_repl:SECONDARY> rs.isMaster()
{
        "hosts" : [
                "192.168.178.151:28017",
                "192.168.178.151:28018",
                "192.168.178.151:28019"
        ],
        "setName" : "my_repl",
        "setVersion" : 1,
        "ismaster" : false,
        "secondary" : true,
        "primary" : "192.168.178.151:28017",
        "me" : "192.168.178.151:28018",
        "maxBsonObjectSize" : 16777216,
        "maxMessageSizeBytes" : 48000000,
        "maxWriteBatchSize" : 1000,
        "localTime" : ISODate("2021-05-12T10:18:32.159Z"),
        "maxWireVersion" : 4,
        "minWireVersion" : 0,
        "ok" : 1
}
my_repl:SECONDARY> rs.status()
{
        "set" : "my_repl",
        "date" : ISODate("2021-05-12T10:18:45.764Z"),
        "myState" : 2,
        "term" : NumberLong(1),
        "syncingTo" : "192.168.178.151:28017",
        "heartbeatIntervalMillis" : NumberLong(2000),
        "members" : [
                {
                        "_id" : 0,
                        "name" : "192.168.178.151:28017",
                        "health" : 1,
                        "state" : 1,
                        "stateStr" : "PRIMARY",
                        "uptime" : 649,
                        "optime" : {
                                "ts" : Timestamp(1620814488, 2),
                                "t" : NumberLong(1)
                        },
                        "optimeDate" : ISODate("2021-05-12T10:14:48Z"),
                        "lastHeartbeat" : ISODate("2021-05-12T10:18:45.079Z"),
                        "lastHeartbeatRecv" : ISODate("2021-05-12T10:18:44.150Z"),
                        "pingMs" : NumberLong(0),
                        "electionTime" : Timestamp(1620814084, 1),
                        "electionDate" : ISODate("2021-05-12T10:08:04Z"),
                        "configVersion" : 1
                },
                {
                        "_id" : 1,
                        "name" : "192.168.178.151:28018",
                        "health" : 1,
                        "state" : 2,
                        "stateStr" : "SECONDARY",
                        "uptime" : 884,
                        "optime" : {
                                "ts" : Timestamp(1620814488, 2),
                                "t" : NumberLong(1)
                        },
                        "optimeDate" : ISODate("2021-05-12T10:14:48Z"),
                        "syncingTo" : "192.168.178.151:28017",
                        "configVersion" : 1,
                        "self" : true
                },
                {
                        "_id" : 2,
                        "name" : "192.168.178.151:28019",
                        "health" : 1,
                        "state" : 2,
                        "stateStr" : "SECONDARY",
                        "uptime" : 649,
                        "optime" : {
                                "ts" : Timestamp(1620814488, 2),
                                "t" : NumberLong(1)
                        },
                        "optimeDate" : ISODate("2021-05-12T10:14:48Z"),
                        "lastHeartbeat" : ISODate("2021-05-12T10:18:45.107Z"),
                        "lastHeartbeatRecv" : ISODate("2021-05-12T10:18:45.107Z"),
                        "pingMs" : NumberLong(0),
                        "syncingTo" : "192.168.178.151:28017",
                        "configVersion" : 1
                }
        ],
        "ok" : 1
}
my_repl:SECONDARY>
my_repl:SECONDARY>
my_repl:SECONDARY> exit
bye


#4.主库登录,添加节点测试-----添加成功!!!
[mongod@151 ~]$ mongo --port 28017 admin
MongoDB shell version: 3.2.22
connecting to: 127.0.0.1:28017/admin
my_repl:PRIMARY>
my_repl:PRIMARY> rs.isMaster()
{
        "hosts" : [
                "192.168.178.151:28017",
                "192.168.178.151:28018",
                "192.168.178.151:28019"
        ],
        "setName" : "my_repl",
        "setVersion" : 1,
        "ismaster" : true,
        "secondary" : false,
        "primary" : "192.168.178.151:28017",
        "me" : "192.168.178.151:28017",
        "electionId" : ObjectId("7fffffff0000000000000001"),
        "maxBsonObjectSize" : 16777216,
        "maxMessageSizeBytes" : 48000000,
        "maxWriteBatchSize" : 1000,
        "localTime" : ISODate("2021-05-12T10:19:14.639Z"),
        "maxWireVersion" : 4,
        "minWireVersion" : 0,
        "ok" : 1
}
my_repl:PRIMARY> rs.status()
{
        "set" : "my_repl",
        "date" : ISODate("2021-05-12T10:19:17.894Z"),
        "myState" : 1,
        "term" : NumberLong(1),
        "heartbeatIntervalMillis" : NumberLong(2000),
        "members" : [
                {
                        "_id" : 0,
                        "name" : "192.168.178.151:28017",
                        "health" : 1,
                        "state" : 1,
                        "stateStr" : "PRIMARY",
                        "uptime" : 1187,
                        "optime" : {
                                "ts" : Timestamp(1620814488, 2),
                                "t" : NumberLong(1)
                        },
                        "optimeDate" : ISODate("2021-05-12T10:14:48Z"),
                        "electionTime" : Timestamp(1620814084, 1),
                        "electionDate" : ISODate("2021-05-12T10:08:04Z"),
                        "configVersion" : 1,
                        "self" : true
                },
                {
                        "_id" : 1,
                        "name" : "192.168.178.151:28018",
                        "health" : 1,
                        "state" : 2,
                        "stateStr" : "SECONDARY",
                        "uptime" : 684,
                        "optime" : {
                                "ts" : Timestamp(1620814488, 2),
                                "t" : NumberLong(1)
                        },
                        "optimeDate" : ISODate("2021-05-12T10:14:48Z"),
                        "lastHeartbeat" : ISODate("2021-05-12T10:19:16.195Z"),
                        "lastHeartbeatRecv" : ISODate("2021-05-12T10:19:17.111Z"),
                        "pingMs" : NumberLong(0),
                        "syncingTo" : "192.168.178.151:28017",
                        "configVersion" : 1
                },
                {
                        "_id" : 2,
                        "name" : "192.168.178.151:28019",
                        "health" : 1,
                        "state" : 2,
                        "stateStr" : "SECONDARY",
                        "uptime" : 684,
                        "optime" : {
                                "ts" : Timestamp(1620814488, 2),
                                "t" : NumberLong(1)
                        },
                        "optimeDate" : ISODate("2021-05-12T10:14:48Z"),
                        "lastHeartbeat" : ISODate("2021-05-12T10:19:16.195Z"),
                        "lastHeartbeatRecv" : ISODate("2021-05-12T10:19:17.057Z"),
                        "pingMs" : NumberLong(0),
                        "syncingTo" : "192.168.178.151:28017",
                        "configVersion" : 1
                }
        ],
        "ok" : 1
}
my_repl:PRIMARY>
my_repl:PRIMARY>
my_repl:PRIMARY>
my_repl:PRIMARY> rs.add("192.168.178.151:28020")
{ "ok" : 1 }
my_repl:PRIMARY> rs.isMaster()
{
        "hosts" : [
                "192.168.178.151:28017",
                "192.168.178.151:28018",
                "192.168.178.151:28019",
                "192.168.178.151:28020"
        ],
        "setName" : "my_repl",
        "setVersion" : 2,
        "ismaster" : true,
        "secondary" : false,
        "primary" : "192.168.178.151:28017",
        "me" : "192.168.178.151:28017",
        "electionId" : ObjectId("7fffffff0000000000000001"),
        "maxBsonObjectSize" : 16777216,
        "maxMessageSizeBytes" : 48000000,
        "maxWriteBatchSize" : 1000,
        "localTime" : ISODate("2021-05-12T10:19:31.773Z"),
        "maxWireVersion" : 4,
        "minWireVersion" : 0,
        "ok" : 1
}
my_repl:PRIMARY> rs.status()
{
        "set" : "my_repl",
        "date" : ISODate("2021-05-12T10:19:35.774Z"),
        "myState" : 1,
        "term" : NumberLong(1),
        "heartbeatIntervalMillis" : NumberLong(2000),
        "members" : [
                {
                        "_id" : 0,
                        "name" : "192.168.178.151:28017",
                        "health" : 1,
                        "state" : 1,
                        "stateStr" : "PRIMARY",
                        "uptime" : 1205,
                        "optime" : {
                                "ts" : Timestamp(1620814768, 1),
                                "t" : NumberLong(1)
                        },
                        "optimeDate" : ISODate("2021-05-12T10:19:28Z"),
                        "electionTime" : Timestamp(1620814084, 1),
                        "electionDate" : ISODate("2021-05-12T10:08:04Z"),
                        "configVersion" : 2,
                        "self" : true
                },
                {
                        "_id" : 1,
                        "name" : "192.168.178.151:28018",
                        "health" : 1,
                        "state" : 2,
                        "stateStr" : "SECONDARY",
                        "uptime" : 701,
                        "optime" : {
                                "ts" : Timestamp(1620814768, 1),
                                "t" : NumberLong(1)
                        },
                        "optimeDate" : ISODate("2021-05-12T10:19:28Z"),
                        "lastHeartbeat" : ISODate("2021-05-12T10:19:34.602Z"),
                        "lastHeartbeatRecv" : ISODate("2021-05-12T10:19:34.634Z"),
                        "pingMs" : NumberLong(0),
                        "syncingTo" : "192.168.178.151:28017",
                        "configVersion" : 2
                },
                {
                        "_id" : 2,
                        "name" : "192.168.178.151:28019",
                        "health" : 1,
                        "state" : 2,
                        "stateStr" : "SECONDARY",
                        "uptime" : 701,
                        "optime" : {
                                "ts" : Timestamp(1620814768, 1),
                                "t" : NumberLong(1)
                        },
                        "optimeDate" : ISODate("2021-05-12T10:19:28Z"),
                        "lastHeartbeat" : ISODate("2021-05-12T10:19:34.602Z"),
                        "lastHeartbeatRecv" : ISODate("2021-05-12T10:19:34.634Z"),
                        "pingMs" : NumberLong(0),
                        "syncingTo" : "192.168.178.151:28017",
                        "configVersion" : 2
                },
                {
                        "_id" : 3,
                        "name" : "192.168.178.151:28020",
                        "health" : 1,
                        "state" : 2,
                        "stateStr" : "SECONDARY",
                        "uptime" : 7,
                        "optime" : {
                                "ts" : Timestamp(1620814768, 1),
                                "t" : NumberLong(1)
                        },
                        "optimeDate" : ISODate("2021-05-12T10:19:28Z"),
                        "lastHeartbeat" : ISODate("2021-05-12T10:19:34.603Z"),
                        "lastHeartbeatRecv" : ISODate("2021-05-12T10:19:34.647Z"),
                        "pingMs" : NumberLong(1),
                        "configVersion" : 2
                }
        ],
        "ok" : 1
}
my_repl:PRIMARY> exit
bye

#5.从库删除节点测试------删除失败!
[mongod@151 ~]$ mongo --port 28019 admin
MongoDB shell version: 3.2.22
connecting to: 127.0.0.1:28019/admin
my_repl:SECONDARY>
my_repl:SECONDARY> rs.isMaster()
{
        "hosts" : [
                "192.168.178.151:28017",
                "192.168.178.151:28018",
                "192.168.178.151:28019",
                "192.168.178.151:28020"
        ],
        "setName" : "my_repl",
        "setVersion" : 2,
        "ismaster" : false,
        "secondary" : true,
        "primary" : "192.168.178.151:28017",
        "me" : "192.168.178.151:28019",
        "maxBsonObjectSize" : 16777216,
        "maxMessageSizeBytes" : 48000000,
        "maxWriteBatchSize" : 1000,
        "localTime" : ISODate("2021-05-12T10:23:44.270Z"),
        "maxWireVersion" : 4,
        "minWireVersion" : 0,
        "ok" : 1
}
my_repl:SECONDARY>
my_repl:SECONDARY> rs.remove("192.168.178.151:28020")
{
        "ok" : 0,
        "errmsg" : "replSetReconfig should only be run on PRIMARY, but my state is SECONDARY; use the \"force\" argument to override",
        "code" : 10107
}
my_repl:SECONDARY>
my_repl:SECONDARY> rs.isMaster()
{
        "hosts" : [
                "192.168.178.151:28017",
                "192.168.178.151:28018",
                "192.168.178.151:28019",
                "192.168.178.151:28020"
        ],
        "setName" : "my_repl",
        "setVersion" : 2,
        "ismaster" : false,
        "secondary" : true,
        "primary" : "192.168.178.151:28017",
        "me" : "192.168.178.151:28019",
        "maxBsonObjectSize" : 16777216,
        "maxMessageSizeBytes" : 48000000,
        "maxWriteBatchSize" : 1000,
        "localTime" : ISODate("2021-05-12T10:24:07.727Z"),
        "maxWireVersion" : 4,
        "minWireVersion" : 0,
        "ok" : 1
}
my_repl:SECONDARY>
my_repl:SECONDARY> exit
bye


#6.主库删除节点测试------删除成功!
[mongod@151 ~]$ mongo --port 28017 admin
MongoDB shell version: 3.2.22
connecting to: 127.0.0.1:28017/admin
my_repl:PRIMARY>
my_repl:PRIMARY> rs.remove("192.168.178.151:28020")
{ "ok" : 1 }
my_repl:PRIMARY> rs.isMaster()
{
        "hosts" : [
                "192.168.178.151:28017",
                "192.168.178.151:28018",
                "192.168.178.151:28019"
        ],
        "setName" : "my_repl",
        "setVersion" : 3,
        "ismaster" : true,
        "secondary" : false,
        "primary" : "192.168.178.151:28017",
        "me" : "192.168.178.151:28017",
        "electionId" : ObjectId("7fffffff0000000000000001"),
        "maxBsonObjectSize" : 16777216,
        "maxMessageSizeBytes" : 48000000,
        "maxWriteBatchSize" : 1000,
        "localTime" : ISODate("2021-05-12T10:24:19.579Z"),
        "maxWireVersion" : 4,
        "minWireVersion" : 0,
        "ok" : 1
}
my_repl:PRIMARY>
my_repl:PRIMARY> exit
bye

8. 1主2从转变为1主1从1仲裁复制集

#1.登录主库root
mongo --port 28017 admin

#2.删除要改为仲裁节点的从库
rs.remove("192.168.178.151:28019")

#3.重新加入仲裁节点
rs.addArb("192.168.178.151:28020")

#4.查看节点状态
rs.status();    #这个貌似看不出,只能看出不是从节点了。
rs.isMaster();  #这个可以看出是否是仲裁节点
#1.登录主库
[mongod@151 ~]$ mongo --port 28017 admin
MongoDB shell version: 3.2.22
connecting to: 127.0.0.1:28017/admin
my_repl:PRIMARY>
#2.删除一个节点
my_repl:PRIMARY> rs.remove("192.168.178.151:28019")
{ "ok" : 1 }
my_repl:PRIMARY> rs.isMaster()
{
        "hosts" : [
                "192.168.178.151:28017",
                "192.168.178.151:28018"
        ],
        "setName" : "my_repl",
        "setVersion" : 4,
        "ismaster" : true,
        "secondary" : false,
        "primary" : "192.168.178.151:28017",
        "me" : "192.168.178.151:28017",
        "electionId" : ObjectId("7fffffff0000000000000001"),
        "maxBsonObjectSize" : 16777216,
        "maxMessageSizeBytes" : 48000000,
        "maxWriteBatchSize" : 1000,
        "localTime" : ISODate("2021-05-12T10:31:41.281Z"),
        "maxWireVersion" : 4,
        "minWireVersion" : 0,
        "ok" : 1
}
my_repl:PRIMARY>
#3.重新添加为仲裁节点
my_repl:PRIMARY> rs.addArb("192.168.178.151:28020")
{ "ok" : 1 }

#4.查看状态1
my_repl:PRIMARY> rs.isMaster()
{
        "hosts" : [
                "192.168.178.151:28017",
                "192.168.178.151:28018"
        ],
        "arbiters" : [
                "192.168.178.151:28020"         #此处可以看出是仲裁节点
        ],
        "setName" : "my_repl",
        "setVersion" : 5,
        "ismaster" : true,
        "secondary" : false,
        "primary" : "192.168.178.151:28017",
        "me" : "192.168.178.151:28017",
        "electionId" : ObjectId("7fffffff0000000000000001"),
        "maxBsonObjectSize" : 16777216,
        "maxMessageSizeBytes" : 48000000,
        "maxWriteBatchSize" : 1000,
        "localTime" : ISODate("2021-05-12T10:31:55.151Z"),
        "maxWireVersion" : 4,
        "minWireVersion" : 0,
        "ok" : 1
}
my_repl:PRIMARY>

#4.查看状态2
my_repl:PRIMARY> rs.status()
{
        "set" : "my_repl",
        "date" : ISODate("2021-05-12T10:32:04.194Z"),
        "myState" : 1,
        "term" : NumberLong(1),
        "heartbeatIntervalMillis" : NumberLong(2000),
        "members" : [
                {
                        "_id" : 0,
                        "name" : "192.168.178.151:28017",
                        "health" : 1,
                        "state" : 1,
                        "stateStr" : "PRIMARY",
                        "uptime" : 1954,
                        "optime" : {
                                "ts" : Timestamp(1620815512, 1),
                                "t" : NumberLong(1)
                        },
                        "optimeDate" : ISODate("2021-05-12T10:31:52Z"),
                        "electionTime" : Timestamp(1620814084, 1),
                        "electionDate" : ISODate("2021-05-12T10:08:04Z"),
                        "configVersion" : 5,
                        "self" : true
                },
                {
                        "_id" : 1,
                        "name" : "192.168.178.151:28018",
                        "health" : 1,
                        "state" : 2,
                        "stateStr" : "SECONDARY",
                        "uptime" : 1450,
                        "optime" : {
                                "ts" : Timestamp(1620815512, 1),
                                "t" : NumberLong(1)
                        },
                        "optimeDate" : ISODate("2021-05-12T10:31:52Z"),
                        "lastHeartbeat" : ISODate("2021-05-12T10:32:02.924Z"),
                        "lastHeartbeatRecv" : ISODate("2021-05-12T10:32:02.982Z"),
                        "pingMs" : NumberLong(0),
                        "syncingTo" : "192.168.178.151:28017",
                        "configVersion" : 5
                },
                {
                        "_id" : 2,
                        "name" : "192.168.178.151:28020",
                        "health" : 0,
                        "state" : 8,
                        "stateStr" : "(not reachable/healthy)",
                        "uptime" : 0,
                        "lastHeartbeat" : ISODate("2021-05-12T10:32:03.097Z"),
                        "lastHeartbeatRecv" : ISODate("2021-05-12T10:31:52.945Z"),
                        "pingMs" : NumberLong(0),
                        "lastHeartbeatMessage" : "no response within election timeout period",
                        "configVersion" : -1
                }
        ],
        "ok" : 1
}
my_repl:PRIMARY>
#5.删除仲裁节点测试
my_repl:PRIMARY> rs.isMaster()
{
        "hosts" : [
                "192.168.178.151:28017",
                "192.168.178.151:28018"
        ],
        "arbiters" : [
                "192.168.178.151:28020"
        ],
        "setName" : "my_repl",
        "setVersion" : 5,
        "ismaster" : true,
        "secondary" : false,
        "primary" : "192.168.178.151:28017",
        "me" : "192.168.178.151:28017",
        "electionId" : ObjectId("7fffffff0000000000000001"),
        "maxBsonObjectSize" : 16777216,
        "maxMessageSizeBytes" : 48000000,
        "maxWriteBatchSize" : 1000,
        "localTime" : ISODate("2021-05-12T10:36:25.353Z"),
        "maxWireVersion" : 4,
        "minWireVersion" : 0,
        "ok" : 1
}
#删除
my_repl:PRIMARY> rs.remove("192.168.178.151:28020")
{ "ok" : 1 }
my_repl:PRIMARY>
#再次查看状态
my_repl:PRIMARY> rs.isMaster()
{
        "hosts" : [
                "192.168.178.151:28017",
                "192.168.178.151:28018"
        ],
        "setName" : "my_repl",
        "setVersion" : 6,
        "ismaster" : true,
        "secondary" : false,
        "primary" : "192.168.178.151:28017",
        "me" : "192.168.178.151:28017",
        "electionId" : ObjectId("7fffffff0000000000000001"),
        "maxBsonObjectSize" : 16777216,
        "maxMessageSizeBytes" : 48000000,
        "maxWriteBatchSize" : 1000,
        "localTime" : ISODate("2021-05-12T10:36:57.412Z"),
        "maxWireVersion" : 4,
        "minWireVersion" : 0,
        "ok" : 1
}
#再次添加
my_repl:PRIMARY> rs.addArb("192.168.178.151:28019")
{ "ok" : 1 }
#查看状态
my_repl:PRIMARY> rs.isMaster()
{
        "hosts" : [
                "192.168.178.151:28017",
                "192.168.178.151:28018"
        ],
        "arbiters" : [
                "192.168.178.151:28019"
        ],
        "setName" : "my_repl",
        "setVersion" : 7,
        "ismaster" : true,
        "secondary" : false,
        "primary" : "192.168.178.151:28017",
        "me" : "192.168.178.151:28017",
        "electionId" : ObjectId("7fffffff0000000000000001"),
        "maxBsonObjectSize" : 16777216,
        "maxMessageSizeBytes" : 48000000,
        "maxWriteBatchSize" : 1000,
        "localTime" : ISODate("2021-05-12T10:37:10.248Z"),
        "maxWireVersion" : 4,
        "minWireVersion" : 0,
        "ok" : 1
}
my_repl:PRIMARY> exit
bye
[mongod@151 ~]$

9. 配置1主1从1仲裁复制集(与第6步平行)(略)

#1.登录主库
mongo --port 28017 admin

#2.创建配置
config={
    _id: 'my_repl', members: [
            {_id: 0, host: '192.168.178.151:28017'},
            {_id: 0, host: '192.168.178.151:28018'},
            {_id: 0, host: '192.168.178.151:28019', "arbiterOnly": true}
        ]
}

#3.初始化
rs.initiate(config)

#4.查看状态
rs.isMaster()

10. 特殊节点介绍

#1.添加特殊节点的方法
    #1.可以在搭建过程中设置特殊节点
    #2.也可以通过修改配置,将普通从节点设置为特殊节点

#2.特殊节点分类
    #1.arbiter节点:主要负责选主过程中的投票,但是不存储任何数据,也不提供任何服务
    #2.hidden节点: 隐藏节点,不参与选主,也不对外提供服务
    #3.delay节点:  延时节点,数据落后于主库一段时间,因为数据是延时的,也不应该提供服务或参与选主,所以通常回配合hidden

11. 配置延时节点

#经测试,只能在主库上配置!!!
mongo --port 28017 admin

#1.查看所有节点的配置
rs.conf()

#2.将配置设为变量
cfg=rs.conf()

#3.在线修改配置
cfg.members[2].priority=0
cfg.members[2].hidden=true
cfg.members[2].slaveDelay=120   #单位是分还是秒???

#4.重新加载配置
rs.reconfig(cfg)

#5.再次查看配置
rs.conf()
#1.恢复1主2从
[mongod@151 ~]$ mongo --port 28017 admin
MongoDB shell version: 3.2.22
connecting to: 127.0.0.1:28017/admin
my_repl:PRIMARY> rs.isMaster()
{
        "hosts" : [
                "192.168.178.151:28017",
                "192.168.178.151:28018"
        ],
        "arbiters" : [
                "192.168.178.151:28019"
        ],
        "setName" : "my_repl",
        "setVersion" : 7,
        "ismaster" : true,
        "secondary" : false,
        "primary" : "192.168.178.151:28017",
        "me" : "192.168.178.151:28017",
        "electionId" : ObjectId("7fffffff0000000000000001"),
        "maxBsonObjectSize" : 16777216,
        "maxMessageSizeBytes" : 48000000,
        "maxWriteBatchSize" : 1000,
        "localTime" : ISODate("2021-05-12T10:47:08.662Z"),
        "maxWireVersion" : 4,
        "minWireVersion" : 0,
        "ok" : 1
}
my_repl:PRIMARY> rs.remove("192.168.178.151:28019")
{ "ok" : 1 }
my_repl:PRIMARY> rs.add("192.168.178.151:28019")
{ "ok" : 1 }
my_repl:PRIMARY> rs.isMaster()
{
        "hosts" : [
                "192.168.178.151:28017",
                "192.168.178.151:28018",
                "192.168.178.151:28019"
        ],
        "setName" : "my_repl",
        "setVersion" : 9,
        "ismaster" : true,
        "secondary" : false,
        "primary" : "192.168.178.151:28017",
        "me" : "192.168.178.151:28017",
        "electionId" : ObjectId("7fffffff0000000000000001"),
        "maxBsonObjectSize" : 16777216,
        "maxMessageSizeBytes" : 48000000,
        "maxWriteBatchSize" : 1000,
        "localTime" : ISODate("2021-05-12T10:47:27.252Z"),
        "maxWireVersion" : 4,
        "minWireVersion" : 0,
        "ok" : 1
}
my_repl:PRIMARY>

#2.从库测试------修改失败
[mongod@151 ~]$ mongo --port 28018 admin
MongoDB shell version: 3.2.22
connecting to: 127.0.0.1:28018/admin
my_repl:SECONDARY>
my_repl:SECONDARY> cfg=rs.conf()
{
        "_id" : "my_repl",
        "version" : 9,
        "protocolVersion" : NumberLong(1),
        "members" : [
                {
                        "_id" : 0,
                        "host" : "192.168.178.151:28017",
                        "arbiterOnly" : false,
                        "buildIndexes" : true,
                        "hidden" : false,
                        "priority" : 1,
                        "tags" : {

                        },
                        "slaveDelay" : NumberLong(0),
                        "votes" : 1
                },
                {
                        "_id" : 1,
                        "host" : "192.168.178.151:28018",
                        "arbiterOnly" : false,
                        "buildIndexes" : true,
                        "hidden" : false,
                        "priority" : 1,
                        "tags" : {

                        },
                        "slaveDelay" : NumberLong(0),
                        "votes" : 1
                },
                {
                        "_id" : 2,
                        "host" : "192.168.178.151:28019",
                        "arbiterOnly" : false,
                        "buildIndexes" : true,
                        "hidden" : false,
                        "priority" : 1,
                        "tags" : {

                        },
                        "slaveDelay" : NumberLong(0),
                        "votes" : 1
                }
        ],
        "settings" : {
                "chainingAllowed" : true,
                "heartbeatIntervalMillis" : 2000,
                "heartbeatTimeoutSecs" : 10,
                "electionTimeoutMillis" : 10000,
                "getLastErrorModes" : {

                },
                "getLastErrorDefaults" : {
                        "w" : 1,
                        "wtimeout" : 0
                },
                "replicaSetId" : ObjectId("609ba8f9c300c25db0989e17")
        }
}
my_repl:SECONDARY> cfg.members[2].priority=0
0
my_repl:SECONDARY> cfg.members[2].hidden=true
true
my_repl:SECONDARY> cfg.members[2].slaveDelay=120
120
my_repl:SECONDARY>
my_repl:SECONDARY> rs.reconfig(cfg)
{
        "ok" : 0,
        "errmsg" : "replSetReconfig should only be run on PRIMARY, but my state is SECONDARY; use the \"force\" argument to override",
        "code" : 10107
}
my_repl:SECONDARY>
my_repl:SECONDARY> rs.conf()
{
        "_id" : "my_repl",
        "version" : 9,
        "protocolVersion" : NumberLong(1),
        "members" : [
                {
                        "_id" : 0,
                        "host" : "192.168.178.151:28017",
                        "arbiterOnly" : false,
                        "buildIndexes" : true,
                        "hidden" : false,
                        "priority" : 1,
                        "tags" : {

                        },
                        "slaveDelay" : NumberLong(0),
                        "votes" : 1
                },
                {
                        "_id" : 1,
                        "host" : "192.168.178.151:28018",
                        "arbiterOnly" : false,
                        "buildIndexes" : true,
                        "hidden" : false,
                        "priority" : 1,
                        "tags" : {

                        },
                        "slaveDelay" : NumberLong(0),
                        "votes" : 1
                },
                {
                        "_id" : 2,
                        "host" : "192.168.178.151:28019",
                        "arbiterOnly" : false,
                        "buildIndexes" : true,
                        "hidden" : false,
                        "priority" : 1,
                        "tags" : {

                        },
                        "slaveDelay" : NumberLong(0),
                        "votes" : 1
                }
        ],
        "settings" : {
                "chainingAllowed" : true,
                "heartbeatIntervalMillis" : 2000,
                "heartbeatTimeoutSecs" : 10,
                "electionTimeoutMillis" : 10000,
                "getLastErrorModes" : {

                },
                "getLastErrorDefaults" : {
                        "w" : 1,
                        "wtimeout" : 0
                },
                "replicaSetId" : ObjectId("609ba8f9c300c25db0989e17")
        }
}
my_repl:SECONDARY> exit
bye
[mongod@151 ~]$

#3.主库修改测试------修改成功!!!
[mongod@151 ~]$ mongo --port 28017 admin
MongoDB shell version: 3.2.22
connecting to: 127.0.0.1:28017/admin
my_repl:PRIMARY> cfg=rs.conf()
{
        "_id" : "my_repl",
        "version" : 9,
        "protocolVersion" : NumberLong(1),
        "members" : [
                {
                        "_id" : 0,
                        "host" : "192.168.178.151:28017",
                        "arbiterOnly" : false,
                        "buildIndexes" : true,
                        "hidden" : false,
                        "priority" : 1,
                        "tags" : {

                        },
                        "slaveDelay" : NumberLong(0),
                        "votes" : 1
                },
                {
                        "_id" : 1,
                        "host" : "192.168.178.151:28018",
                        "arbiterOnly" : false,
                        "buildIndexes" : true,
                        "hidden" : false,
                        "priority" : 1,
                        "tags" : {

                        },
                        "slaveDelay" : NumberLong(0),
                        "votes" : 1
                },
                {
                        "_id" : 2,
                        "host" : "192.168.178.151:28019",
                        "arbiterOnly" : false,
                        "buildIndexes" : true,
                        "hidden" : false,
                        "priority" : 1,
                        "tags" : {

                        },
                        "slaveDelay" : NumberLong(0),
                        "votes" : 1
                }
        ],
        "settings" : {
                "chainingAllowed" : true,
                "heartbeatIntervalMillis" : 2000,
                "heartbeatTimeoutSecs" : 10,
                "electionTimeoutMillis" : 10000,
                "getLastErrorModes" : {

                },
                "getLastErrorDefaults" : {
                        "w" : 1,
                        "wtimeout" : 0
                },
                "replicaSetId" : ObjectId("609ba8f9c300c25db0989e17")
        }
}
my_repl:PRIMARY>
my_repl:PRIMARY> cfg.members[2].priority=0
0
my_repl:PRIMARY> cfg.members[2].hidden=true
true
my_repl:PRIMARY> cfg.members[2].slaveDelay=120
120
my_repl:PRIMARY>
my_repl:PRIMARY> rs.reconfig(cfg)
{ "ok" : 1 }
my_repl:PRIMARY>
my_repl:PRIMARY> rs.conf()
{
        "_id" : "my_repl",
        "version" : 10,
        "protocolVersion" : NumberLong(1),
        "members" : [
                {
                        "_id" : 0,
                        "host" : "192.168.178.151:28017",
                        "arbiterOnly" : false,
                        "buildIndexes" : true,
                        "hidden" : false,
                        "priority" : 1,
                        "tags" : {

                        },
                        "slaveDelay" : NumberLong(0),
                        "votes" : 1
                },
                {
                        "_id" : 1,
                        "host" : "192.168.178.151:28018",
                        "arbiterOnly" : false,
                        "buildIndexes" : true,
                        "hidden" : false,
                        "priority" : 1,
                        "tags" : {

                        },
                        "slaveDelay" : NumberLong(0),
                        "votes" : 1
                },
                {
                        "_id" : 2,
                        "host" : "192.168.178.151:28019",
                        "arbiterOnly" : false,
                        "buildIndexes" : true,
                        "hidden" : true,
                        "priority" : 0,
                        "tags" : {

                        },
                        "slaveDelay" : NumberLong(120),
                        "votes" : 1
                }
        ],
        "settings" : {
                "chainingAllowed" : true,
                "heartbeatIntervalMillis" : 2000,
                "heartbeatTimeoutSecs" : 10,
                "electionTimeoutMillis" : 10000,
                "getLastErrorModes" : {

                },
                "getLastErrorDefaults" : {
                        "w" : 1,
                        "wtimeout" : 0
                },
                "replicaSetId" : ObjectId("609ba8f9c300c25db0989e17")
        }
}
#看不到隐藏的延时节点,只能通过上面看到
my_repl:PRIMARY> rs.isMaster()
{
        "hosts" : [
                "192.168.178.151:28017",
                "192.168.178.151:28018"
        ],
        "setName" : "my_repl",
        "setVersion" : 10,
        "ismaster" : true,
        "secondary" : false,
        "primary" : "192.168.178.151:28017",
        "me" : "192.168.178.151:28017",
        "electionId" : ObjectId("7fffffff0000000000000001"),
        "maxBsonObjectSize" : 16777216,
        "maxMessageSizeBytes" : 48000000,
        "maxWriteBatchSize" : 1000,
        "localTime" : ISODate("2021-05-12T11:02:00.719Z"),
        "maxWireVersion" : 4,
        "minWireVersion" : 0,
        "ok" : 1
}
my_repl:PRIMARY>

my_repl:PRIMARY> exit
bye
[mongod@151 ~]$
#登录主库命令测试!!!
[mongod@151 ~]$ mongo -p 28017 admin
MongoDB shell version: 3.2.22
connecting to: admin
> exit
bye
[mongod@151 ~]$ mongo -p 28017 192.168.178.151/admin
MongoDB shell version: 3.2.22
connecting to: 192.168.178.151/admin
> exit
bye
#只能通过如下命令登入复制集!!!
[mongod@151 ~]$ mongo --port 28017 admin
MongoDB shell version: 3.2.22
connecting to: 127.0.0.1:28017/admin
my_repl:PRIMARY>
my_repl:PRIMARY> exit
bye

12. 恢复延时节点为普通节点

#1.主库登录
mongo --port 28017 admin

#2.查看所有节点的配置
rs.conf()

#3.将配置设为变量
cfg=rs.conf()

#4.在线修改配置
cfg.members[2].priority=1
cfg.members[2].hidden=false
cfg.members[2].slaveDelay=0 

#5.重新加载配置
rs.reconfig(cfg)

#6.再次查看配置
rs.conf()
[mongod@151 ~]$ mongo --port 28017 admin
MongoDB shell version: 3.2.22
connecting to: 127.0.0.1:28017/admin
my_repl:PRIMARY> cfg=rs.conf()
{
        "_id" : "my_repl",
        "version" : 10,
        "protocolVersion" : NumberLong(1),
        "members" : [
                {
                        "_id" : 0,
                        "host" : "192.168.178.151:28017",
                        "arbiterOnly" : false,
                        "buildIndexes" : true,
                        "hidden" : false,
                        "priority" : 1,
                        "tags" : {

                        },
                        "slaveDelay" : NumberLong(0),
                        "votes" : 1
                },
                {
                        "_id" : 1,
                        "host" : "192.168.178.151:28018",
                        "arbiterOnly" : false,
                        "buildIndexes" : true,
                        "hidden" : false,
                        "priority" : 1,
                        "tags" : {

                        },
                        "slaveDelay" : NumberLong(0),
                        "votes" : 1
                },
                {
                        "_id" : 2,
                        "host" : "192.168.178.151:28019",
                        "arbiterOnly" : false,
                        "buildIndexes" : true,
                        "hidden" : true,
                        "priority" : 0,
                        "tags" : {

                        },
                        "slaveDelay" : NumberLong(120),
                        "votes" : 1
                }
        ],
        "settings" : {
                "chainingAllowed" : true,
                "heartbeatIntervalMillis" : 2000,
                "heartbeatTimeoutSecs" : 10,
                "electionTimeoutMillis" : 10000,
                "getLastErrorModes" : {

                },
                "getLastErrorDefaults" : {
                        "w" : 1,
                        "wtimeout" : 0
                },
                "replicaSetId" : ObjectId("609ba8f9c300c25db0989e17")
        }
}
my_repl:PRIMARY>
my_repl:PRIMARY> cfg.members[2].priority=1
1
my_repl:PRIMARY> cfg.members[2].hidden=false
false
my_repl:PRIMARY> cfg.members[2].slaveDelay=0
0
my_repl:PRIMARY>
my_repl:PRIMARY> rs.reconfig(cfg)
{ "ok" : 1 }
my_repl:PRIMARY>
my_repl:PRIMARY> rs.conf()
{
        "_id" : "my_repl",
        "version" : 11,
        "protocolVersion" : NumberLong(1),
        "members" : [
                {
                        "_id" : 0,
                        "host" : "192.168.178.151:28017",
                        "arbiterOnly" : false,
                        "buildIndexes" : true,
                        "hidden" : false,
                        "priority" : 1,
                        "tags" : {

                        },
                        "slaveDelay" : NumberLong(0),
                        "votes" : 1
                },
                {
                        "_id" : 1,
                        "host" : "192.168.178.151:28018",
                        "arbiterOnly" : false,
                        "buildIndexes" : true,
                        "hidden" : false,
                        "priority" : 1,
                        "tags" : {

                        },
                        "slaveDelay" : NumberLong(0),
                        "votes" : 1
                },
                {
                        "_id" : 2,
                        "host" : "192.168.178.151:28019",
                        "arbiterOnly" : false,
                        "buildIndexes" : true,
                        "hidden" : false,
                        "priority" : 1,
                        "tags" : {

                        },
                        "slaveDelay" : NumberLong(0),
                        "votes" : 1
                }
        ],
        "settings" : {
                "chainingAllowed" : true,
                "heartbeatIntervalMillis" : 2000,
                "heartbeatTimeoutSecs" : 10,
                "electionTimeoutMillis" : 10000,
                "getLastErrorModes" : {

                },
                "getLastErrorDefaults" : {
                        "w" : 1,
                        "wtimeout" : 0
                },
                "replicaSetId" : ObjectId("609ba8f9c300c25db0989e17")
        }
}
my_repl:PRIMARY>
my_repl:PRIMARY> rs.isMaster()
{
        "hosts" : [
                "192.168.178.151:28017",
                "192.168.178.151:28018",
                "192.168.178.151:28019"
        ],
        "setName" : "my_repl",
        "setVersion" : 11,
        "ismaster" : true,
        "secondary" : false,
        "primary" : "192.168.178.151:28017",
        "me" : "192.168.178.151:28017",
        "electionId" : ObjectId("7fffffff0000000000000001"),
        "maxBsonObjectSize" : 16777216,
        "maxMessageSizeBytes" : 48000000,
        "maxWriteBatchSize" : 1000,
        "localTime" : ISODate("2021-05-12T11:04:28.808Z"),
        "maxWireVersion" : 4,
        "minWireVersion" : 0,
        "ok" : 1
}
my_repl:PRIMARY>
my_repl:PRIMARY> exit
bye

13. 复制集的意外情况(由于删不掉主节点。暂时跳过)

#还是删不掉主节点。但是实验完成了
#登录主库
mongo --port 28017 admin

#1.查看复制集状态
rs.conf()

#2.删除0号节点
rs.remove("ip:port")
rs.remove("192.168.178.151:28017")

#3.再次查看复制集配置
rs.conf()

#4.此时已经没有0号节点了,进行操作要按顺序来,不能按数字来

#5.再次加回0号节点
rs.add("ip:port")
rs.add("192.168.178.151:28017")

#6.再次查看复制集配置信息
rs.conf()

#7.此时,28017的id已变为3!!!
[mongod@151 ~]$ mongo --port 28017 admin
MongoDB shell version: 3.2.22
connecting to: 127.0.0.1:28017/admin
my_repl:PRIMARY>
my_repl:PRIMARY> rs.conf()
{
        "_id" : "my_repl",
        "version" : 11,
        "protocolVersion" : NumberLong(1),
        "members" : [
                {
                        "_id" : 0,
                        "host" : "192.168.178.151:28017",
                        "arbiterOnly" : false,
                        "buildIndexes" : true,
                        "hidden" : false,
                        "priority" : 1,
                        "tags" : {

                        },
                        "slaveDelay" : NumberLong(0),
                        "votes" : 1
                },
                {
                        "_id" : 1,
                        "host" : "192.168.178.151:28018",
                        "arbiterOnly" : false,
                        "buildIndexes" : true,
                        "hidden" : false,
                        "priority" : 1,
                        "tags" : {

                        },
                        "slaveDelay" : NumberLong(0),
                        "votes" : 1
                },
                {
                        "_id" : 2,
                        "host" : "192.168.178.151:28019",
                        "arbiterOnly" : false,
                        "buildIndexes" : true,
                        "hidden" : false,
                        "priority" : 1,
                        "tags" : {

                        },
                        "slaveDelay" : NumberLong(0),
                        "votes" : 1
                }
        ],
        "settings" : {
                "chainingAllowed" : true,
                "heartbeatIntervalMillis" : 2000,
                "heartbeatTimeoutSecs" : 10,
                "electionTimeoutMillis" : 10000,
                "getLastErrorModes" : {

                },
                "getLastErrorDefaults" : {
                        "w" : 1,
                        "wtimeout" : 0
                },
                "replicaSetId" : ObjectId("609ba8f9c300c25db0989e17")
        }
}
my_repl:PRIMARY>
#删除主节点失败。。。
my_repl:PRIMARY> rs.remove("192.168.178.151:28017")
{
        "ok" : 0,
        "errmsg" : "No host described in new configuration 12 for replica set my_repl maps to this node",
        "code" : 103
}
my_repl:PRIMARY>

#难道只能重新搭建才能解决吗?
#疑问:复制集如何解除?所有节点关闭再启动就解除了吗?
#删除1号从节点测试
[mongod@151 ~]$ mongo --port 28017 admin
MongoDB shell version: 3.2.22
connecting to: 127.0.0.1:28017/admin
my_repl:PRIMARY> rs.isMaster()
{
        "hosts" : [
                "192.168.178.151:28017",
                "192.168.178.151:28018",
                "192.168.178.151:28019"
        ],
        "setName" : "my_repl",
        "setVersion" : 11,
        "ismaster" : true,
        "secondary" : false,
        "primary" : "192.168.178.151:28017",
        "me" : "192.168.178.151:28017",
        "electionId" : ObjectId("7fffffff0000000000000001"),
        "maxBsonObjectSize" : 16777216,
        "maxMessageSizeBytes" : 48000000,
        "maxWriteBatchSize" : 1000,
        "localTime" : ISODate("2021-05-12T11:17:18.979Z"),
        "maxWireVersion" : 4,
        "minWireVersion" : 0,
        "ok" : 1
}
my_repl:PRIMARY> rs.remove("192.168.178.151:28018")
{
        "ok" : 0,
        "errmsg" : "Quorum check failed because not enough voting nodes responded; required 2 but only the following 1 voting nodes responded: 192.168.178.151:28017; the following nodes did not respond affirmatively: 192.168.178.151:28019 failed with Connection refused",
        "code" : 74
}
my_repl:PRIMARY>

#发现从节点也删除不了。。。

#发现问题:从节点2号登录不了啊。
[mongod@151 ~]$ mongo --port 28019 admin
MongoDB shell version: 3.2.22
connecting to: 127.0.0.1:28019/admin
2021-05-12T19:29:49.519+0800 W NETWORK  [thread1] Failed to connect to 127.0.0.1:28019, in(checking socket                                                                               for error after poll), reason: errno:111 Connection refused
2021-05-12T19:29:49.519+0800 E QUERY    [thread1] Error: couldn't connect to server 127.0.0.1:28019, connec                                                                              tion attempt failed :
connect@src/mongo/shell/mongo.js:231:14
@(connect):1:6

exception: connect failed
[mongod@151 ~]$

#1号从节点能登录
[mongod@151 ~]$ mongo --port 28018 admin
MongoDB shell version: 3.2.22
connecting to: 127.0.0.1:28018/admin
my_repl:SECONDARY>
my_repl:SECONDARY> exit
bye
[mongod@151 ~]$

#想到一个方法,再添加一个从节点测试
#报错。添加不了啊。
[mongod@151 ~]$ mongo --port 28017 admin
MongoDB shell version: 3.2.22
connecting to: 127.0.0.1:28017/admin
my_repl:PRIMARY>
my_repl:PRIMARY> rs.add("192.168.178.151:28020")
{
        "ok" : 0,
        "errmsg" : "Quorum check failed because not enough voting nodes responded; required 3 but only the following 2 voting nodes responded: 192.168.178.151:28017, 192.168.178.151:28018; the following nodes did not respond affirmatively: 192.168.178.151:28019 failed with Connection refused, 192.168.178.151:28020 failed with Connection refused",
        "code" : 74
}
my_repl:PRIMARY>

#查找原因
[mongod@151 ~]$ netstat -tunlp|grep 280
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
tcp        0      0 0.0.0.0:28017           0.0.0.0:*               LISTEN      45004/mongod
tcp        0      0 0.0.0.0:28018           0.0.0.0:*               LISTEN      46652/mongod
[mongod@151 ~]$

#发现28019和28920都未运行。。。难道说从复制集中删除节点后,就会自动退出吗???(待验证。。。)


#先启动
[mongod@151 ~]$ mongod -f /mongodb/28019/conf/mongo.conf
about to fork child process, waiting until server is ready for connections.
forked process: 79015
child process started successfully, parent exiting
[mongod@151 ~]$ mongod -f /mongodb/28020/conf/mongo.conf
about to fork child process, waiting until server is ready for connections.
forked process: 79079
child process started successfully, parent exiting
[mongod@151 ~]$
[mongod@151 ~]$ netstat -tunlp|grep 280
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
tcp        0      0 0.0.0.0:28017           0.0.0.0:*               LISTEN      45004/mongod
tcp        0      0 0.0.0.0:28018           0.0.0.0:*               LISTEN      46652/mongod
tcp        0      0 0.0.0.0:28019           0.0.0.0:*               LISTEN      79015/mongod
tcp        0      0 0.0.0.0:28020           0.0.0.0:*               LISTEN      79079/mongod

#再次添加28020
[mongod@151 ~]$ mongo --port 28017 admin
MongoDB shell version: 3.2.22
connecting to: 127.0.0.1:28017/admin
my_repl:PRIMARY>
my_repl:PRIMARY> rs.add("192.168.178.151:28020")
{ "ok" : 1 }
my_repl:PRIMARY> rs.isMaster()
{
        "hosts" : [
                "192.168.178.151:28017",
                "192.168.178.151:28018",
                "192.168.178.151:28019",
                "192.168.178.151:28020"
        ],
        "setName" : "my_repl",
        "setVersion" : 12,
        "ismaster" : true,
        "secondary" : false,
        "primary" : "192.168.178.151:28017",
        "me" : "192.168.178.151:28017",
        "electionId" : ObjectId("7fffffff0000000000000001"),
        "maxBsonObjectSize" : 16777216,
        "maxMessageSizeBytes" : 48000000,
        "maxWriteBatchSize" : 1000,
        "localTime" : ISODate("2021-05-12T11:35:08.993Z"),
        "maxWireVersion" : 4,
        "minWireVersion" : 0,
        "ok" : 1
}
my_repl:PRIMARY>
my_repl:PRIMARY> rs.conf()
{
        "_id" : "my_repl",
        "version" : 12,
        "protocolVersion" : NumberLong(1),
        "members" : [
                {
                        "_id" : 0,
                        "host" : "192.168.178.151:28017",
                        "arbiterOnly" : false,
                        "buildIndexes" : true,
                        "hidden" : false,
                        "priority" : 1,
                        "tags" : {

                        },
                        "slaveDelay" : NumberLong(0),
                        "votes" : 1
                },
                {
                        "_id" : 1,
                        "host" : "192.168.178.151:28018",
                        "arbiterOnly" : false,
                        "buildIndexes" : true,
                        "hidden" : false,
                        "priority" : 1,
                        "tags" : {

                        },
                        "slaveDelay" : NumberLong(0),
                        "votes" : 1
                },
                {
                        "_id" : 2,
                        "host" : "192.168.178.151:28019",
                        "arbiterOnly" : false,
                        "buildIndexes" : true,
                        "hidden" : false,
                        "priority" : 1,
                        "tags" : {

                        },
                        "slaveDelay" : NumberLong(0),
                        "votes" : 1
                },
                {
                        "_id" : 3,
                        "host" : "192.168.178.151:28020",
                        "arbiterOnly" : false,
                        "buildIndexes" : true,
                        "hidden" : false,
                        "priority" : 1,
                        "tags" : {

                        },
                        "slaveDelay" : NumberLong(0),
                        "votes" : 1
                }
        ],
        "settings" : {
                "chainingAllowed" : true,
                "heartbeatIntervalMillis" : 2000,
                "heartbeatTimeoutSecs" : 10,
                "electionTimeoutMillis" : 10000,
                "getLastErrorModes" : {

                },
                "getLastErrorDefaults" : {
                        "w" : 1,
                        "wtimeout" : 0
                },
                "replicaSetId" : ObjectId("609ba8f9c300c25db0989e17")
        }
}
my_repl:PRIMARY>

#再次删除28017,依旧报错。。。
my_repl:PRIMARY> rs.remove("192.168.178.151:28017")
{
        "ok" : 0,
        "errmsg" : "No host described in new configuration 13 for replica set my_repl maps to this node",
        "code" : 103
}

#再次删除从节点,成功
my_repl:PRIMARY> rs.remove("192.168.178.151:28018")
{ "ok" : 1 }
my_repl:PRIMARY> rs.isMaster()
{
        "hosts" : [
                "192.168.178.151:28017",
                "192.168.178.151:28019",
                "192.168.178.151:28020"
        ],
        "setName" : "my_repl",
        "setVersion" : 13,
        "ismaster" : true,
        "secondary" : false,
        "primary" : "192.168.178.151:28017",
        "me" : "192.168.178.151:28017",
        "electionId" : ObjectId("7fffffff0000000000000001"),
        "maxBsonObjectSize" : 16777216,
        "maxMessageSizeBytes" : 48000000,
        "maxWriteBatchSize" : 1000,
        "localTime" : ISODate("2021-05-12T11:36:04.791Z"),
        "maxWireVersion" : 4,
        "minWireVersion" : 0,
        "ok" : 1
}
my_repl:PRIMARY> exit
bye
[mongod@151 ~]$

#查看28018运行状态,发现依旧运行。奇怪了。。。
[mongod@151 ~]$ netstat -tunlp|grep 280
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
tcp        0      0 0.0.0.0:28017           0.0.0.0:*               LISTEN      45004/mongod
tcp        0      0 0.0.0.0:28018           0.0.0.0:*               LISTEN      46652/mongod
tcp        0      0 0.0.0.0:28019           0.0.0.0:*               LISTEN      79015/mongod
tcp        0      0 0.0.0.0:28020           0.0.0.0:*               LISTEN      79079/mongod
[mongod@151 ~]$


#再次添加28018,查看id
[mongod@151 ~]$ mongo --port 28017 admin
MongoDB shell version: 3.2.22
connecting to: 127.0.0.1:28017/admin
my_repl:PRIMARY>
my_repl:PRIMARY> rs.conf()
{
        "_id" : "my_repl",
        "version" : 13,
        "protocolVersion" : NumberLong(1),
        "members" : [
                {
                        "_id" : 0,
                        "host" : "192.168.178.151:28017",
                        "arbiterOnly" : false,
                        "buildIndexes" : true,
                        "hidden" : false,
                        "priority" : 1,
                        "tags" : {

                        },
                        "slaveDelay" : NumberLong(0),
                        "votes" : 1
                },
                {
                        "_id" : 2,
                        "host" : "192.168.178.151:28019",
                        "arbiterOnly" : false,
                        "buildIndexes" : true,
                        "hidden" : false,
                        "priority" : 1,
                        "tags" : {

                        },
                        "slaveDelay" : NumberLong(0),
                        "votes" : 1
                },
                {
                        "_id" : 3,
                        "host" : "192.168.178.151:28020",
                        "arbiterOnly" : false,
                        "buildIndexes" : true,
                        "hidden" : false,
                        "priority" : 1,
                        "tags" : {

                        },
                        "slaveDelay" : NumberLong(0),
                        "votes" : 1
                }
        ],
        "settings" : {
                "chainingAllowed" : true,
                "heartbeatIntervalMillis" : 2000,
                "heartbeatTimeoutSecs" : 10,
                "electionTimeoutMillis" : 10000,
                "getLastErrorModes" : {

                },
                "getLastErrorDefaults" : {
                        "w" : 1,
                        "wtimeout" : 0
                },
                "replicaSetId" : ObjectId("609ba8f9c300c25db0989e17")
        }
}
my_repl:PRIMARY>
my_repl:PRIMARY> rs.add("192.168.178.151:28018")
{ "ok" : 1 }
my_repl:PRIMARY>
my_repl:PRIMARY> rs.conf()
{
        "_id" : "my_repl",
        "version" : 14,
        "protocolVersion" : NumberLong(1),
        "members" : [
                {
                        "_id" : 0,
                        "host" : "192.168.178.151:28017",
                        "arbiterOnly" : false,
                        "buildIndexes" : true,
                        "hidden" : false,
                        "priority" : 1,
                        "tags" : {

                        },
                        "slaveDelay" : NumberLong(0),
                        "votes" : 1
                },
                {
                        "_id" : 2,
                        "host" : "192.168.178.151:28019",
                        "arbiterOnly" : false,
                        "buildIndexes" : true,
                        "hidden" : false,
                        "priority" : 1,
                        "tags" : {

                        },
                        "slaveDelay" : NumberLong(0),
                        "votes" : 1
                },
                {
                        "_id" : 3,
                        "host" : "192.168.178.151:28020",
                        "arbiterOnly" : false,
                        "buildIndexes" : true,
                        "hidden" : false,
                        "priority" : 1,
                        "tags" : {

                        },
                        "slaveDelay" : NumberLong(0),
                        "votes" : 1
                },
                {
                        "_id" : 4,
                        "host" : "192.168.178.151:28018",
                        "arbiterOnly" : false,
                        "buildIndexes" : true,
                        "hidden" : false,
                        "priority" : 1,
                        "tags" : {

                        },
                        "slaveDelay" : NumberLong(0),
                        "votes" : 1
                }
        ],
        "settings" : {
                "chainingAllowed" : true,
                "heartbeatIntervalMillis" : 2000,
                "heartbeatTimeoutSecs" : 10,
                "electionTimeoutMillis" : 10000,
                "getLastErrorModes" : {

                },
                "getLastErrorDefaults" : {
                        "w" : 1,
                        "wtimeout" : 0
                },
                "replicaSetId" : ObjectId("609ba8f9c300c25db0989e17")
        }
}
my_repl:PRIMARY>
my_repl:PRIMARY> exit
bye
[mongod@151 ~]$

#发现id已经变为4,而1空着。
#此情况就是意外情况,
#此时要修改id=4的节点的话,members数字应为3,而不是4.不能看id的数字,而要看摆放位置,从0开始从头数。。。
cfg.members[3].priority=0
cfg.members[3].hidden=true
cfg.members[3].slaveDelay=120

14. 复制集的其他操作命令

#最好都在主库运行以下命令,有的命令在从库运行不了!!!

#1.查看副本集的配置信息
rs.config()
#or
rs.conf()

#2.查看副本集各成员的状态
rs.status()

#3.副本集角色切换(生产环境尽量不用)
rs.stepDown()

#4.锁定从库,使其不会转变为主库
rs.freeze(300)

#5.设置副本节点可读(在副本节点执行)
rs.slaveOk()

#6.查看副本节点(监控主从延时)
rs.printSlaveReplicationInfo()
#1.从库测试命令(发现有的命令可以,有的不可以)
[mongod@151 ~]$ mongo --port 28018 admin
MongoDB shell version: 3.2.22
connecting to: 127.0.0.1:28018/admin
my_repl:SECONDARY>
my_repl:SECONDARY> rs.config()
{
        "_id" : "my_repl",
        "version" : 14,
        "protocolVersion" : NumberLong(1),
        "members" : [
                {
                        "_id" : 0,
                        "host" : "192.168.178.151:28017",
                        "arbiterOnly" : false,
                        "buildIndexes" : true,
                        "hidden" : false,
                        "priority" : 1,
                        "tags" : {

                        },
                        "slaveDelay" : NumberLong(0),
                        "votes" : 1
                },
                {
                        "_id" : 2,
                        "host" : "192.168.178.151:28019",
                        "arbiterOnly" : false,
                        "buildIndexes" : true,
                        "hidden" : false,
                        "priority" : 1,
                        "tags" : {

                        },
                        "slaveDelay" : NumberLong(0),
                        "votes" : 1
                },
                {
                        "_id" : 3,
                        "host" : "192.168.178.151:28020",
                        "arbiterOnly" : false,
                        "buildIndexes" : true,
                        "hidden" : false,
                        "priority" : 1,
                        "tags" : {

                        },
                        "slaveDelay" : NumberLong(0),
                        "votes" : 1
                },
                {
                        "_id" : 4,
                        "host" : "192.168.178.151:28018",
                        "arbiterOnly" : false,
                        "buildIndexes" : true,
                        "hidden" : false,
                        "priority" : 1,
                        "tags" : {

                        },
                        "slaveDelay" : NumberLong(0),
                        "votes" : 1
                }
        ],
        "settings" : {
                "chainingAllowed" : true,
                "heartbeatIntervalMillis" : 2000,
                "heartbeatTimeoutSecs" : 10,
                "electionTimeoutMillis" : 10000,
                "getLastErrorModes" : {

                },
                "getLastErrorDefaults" : {
                        "w" : 1,
                        "wtimeout" : 0
                },
                "replicaSetId" : ObjectId("609ba8f9c300c25db0989e17")
        }
}
my_repl:SECONDARY> rs.status()
{
        "set" : "my_repl",
        "date" : ISODate("2021-05-12T11:41:56.914Z"),
        "myState" : 2,
        "term" : NumberLong(1),
        "heartbeatIntervalMillis" : NumberLong(2000),
        "members" : [
                {
                        "_id" : 0,
                        "name" : "192.168.178.151:28017",
                        "health" : 1,
                        "state" : 1,
                        "stateStr" : "PRIMARY",
                        "uptime" : 5641,
                        "optime" : {
                                "ts" : Timestamp(1620819512, 1),
                                "t" : NumberLong(1)
                        },
                        "optimeDate" : ISODate("2021-05-12T11:38:32Z"),
                        "lastHeartbeat" : ISODate("2021-05-12T11:41:54.921Z"),
                        "lastHeartbeatRecv" : ISODate("2021-05-12T11:41:55.079Z"),
                        "pingMs" : NumberLong(0),
                        "electionTime" : Timestamp(1620814084, 1),
                        "electionDate" : ISODate("2021-05-12T10:08:04Z"),
                        "configVersion" : 14
                },
                {
                        "_id" : 2,
                        "name" : "192.168.178.151:28019",
                        "health" : 1,
                        "state" : 2,
                        "stateStr" : "SECONDARY",
                        "uptime" : 461,
                        "optime" : {
                                "ts" : Timestamp(1620819512, 1),
                                "t" : NumberLong(1)
                        },
                        "optimeDate" : ISODate("2021-05-12T11:38:32Z"),
                        "lastHeartbeat" : ISODate("2021-05-12T11:41:54.924Z"),
                        "lastHeartbeatRecv" : ISODate("2021-05-12T11:41:55.081Z"),
                        "pingMs" : NumberLong(0),
                        "syncingTo" : "192.168.178.151:28017",
                        "configVersion" : 14
                },
                {
                        "_id" : 3,
                        "name" : "192.168.178.151:28020",
                        "health" : 1,
                        "state" : 5,
                        "stateStr" : "STARTUP2",
                        "uptime" : 411,
                        "optime" : {
                                "ts" : Timestamp(0, 0),
                                "t" : NumberLong(-1)
                        },
                        "optimeDate" : ISODate("1970-01-01T00:00:00Z"),
                        "lastHeartbeat" : ISODate("2021-05-12T11:41:54.924Z"),
                        "lastHeartbeatRecv" : ISODate("2021-05-12T11:41:52.905Z"),
                        "pingMs" : NumberLong(0),
                        "configVersion" : 14
                },
                {
                        "_id" : 4,
                        "name" : "192.168.178.151:28018",
                        "health" : 1,
                        "state" : 2,
                        "stateStr" : "SECONDARY",
                        "uptime" : 5875,
                        "optime" : {
                                "ts" : Timestamp(1620819512, 1),
                                "t" : NumberLong(1)
                        },
                        "optimeDate" : ISODate("2021-05-12T11:38:32Z"),
                        "infoMessage" : "could not find member to sync from",
                        "configVersion" : 14,
                        "self" : true
                }
        ],
        "ok" : 1
}
my_repl:SECONDARY>
my_repl:SECONDARY>
my_repl:SECONDARY> rs.stepDown()
{ "ok" : 0, "errmsg" : "not primary so can't step down", "code" : 10107 }
my_repl:SECONDARY>
my_repl:SECONDARY> rs.printSlaveReplicationInfo()
source: 192.168.178.151:28019
        syncedTo: Wed May 12 2021 19:38:32 GMT+0800 (CST)
        0 secs (0 hrs) behind the primary
source: 192.168.178.151:28020
        syncedTo: Thu Jan 01 1970 08:00:00 GMT+0800 (CST)
        1620819512 secs (450227.64 hrs) behind the primary
source: 192.168.178.151:28018
        syncedTo: Wed May 12 2021 19:38:32 GMT+0800 (CST)
        0 secs (0 hrs) behind the primary
my_repl:SECONDARY>
my_repl:SECONDARY>
my_repl:SECONDARY> exit
bye

#2.主库测试命令
[mongod@151 ~]$ mongo --port 28017 admin
MongoDB shell version: 3.2.22
connecting to: 127.0.0.1:28017/admin
my_repl:PRIMARY> rs.config()
{
        "_id" : "my_repl",
        "version" : 14,
        "protocolVersion" : NumberLong(1),
        "members" : [
                {
                        "_id" : 0,
                        "host" : "192.168.178.151:28017",
                        "arbiterOnly" : false,
                        "buildIndexes" : true,
                        "hidden" : false,
                        "priority" : 1,
                        "tags" : {

                        },
                        "slaveDelay" : NumberLong(0),
                        "votes" : 1
                },
                {
                        "_id" : 2,
                        "host" : "192.168.178.151:28019",
                        "arbiterOnly" : false,
                        "buildIndexes" : true,
                        "hidden" : false,
                        "priority" : 1,
                        "tags" : {

                        },
                        "slaveDelay" : NumberLong(0),
                        "votes" : 1
                },
                {
                        "_id" : 3,
                        "host" : "192.168.178.151:28020",
                        "arbiterOnly" : false,
                        "buildIndexes" : true,
                        "hidden" : false,
                        "priority" : 1,
                        "tags" : {

                        },
                        "slaveDelay" : NumberLong(0),
                        "votes" : 1
                },
                {
                        "_id" : 4,
                        "host" : "192.168.178.151:28018",
                        "arbiterOnly" : false,
                        "buildIndexes" : true,
                        "hidden" : false,
                        "priority" : 1,
                        "tags" : {

                        },
                        "slaveDelay" : NumberLong(0),
                        "votes" : 1
                }
        ],
        "settings" : {
                "chainingAllowed" : true,
                "heartbeatIntervalMillis" : 2000,
                "heartbeatTimeoutSecs" : 10,
                "electionTimeoutMillis" : 10000,
                "getLastErrorModes" : {

                },
                "getLastErrorDefaults" : {
                        "w" : 1,
                        "wtimeout" : 0
                },
                "replicaSetId" : ObjectId("609ba8f9c300c25db0989e17")
        }
}
my_repl:PRIMARY>
my_repl:PRIMARY> rs.status()
{
        "set" : "my_repl",
        "date" : ISODate("2021-05-12T12:11:05.467Z"),
        "myState" : 1,
        "term" : NumberLong(1),
        "heartbeatIntervalMillis" : NumberLong(2000),
        "members" : [
                {
                        "_id" : 0,
                        "name" : "192.168.178.151:28017",
                        "health" : 1,
                        "state" : 1,
                        "stateStr" : "PRIMARY",
                        "uptime" : 7895,
                        "optime" : {
                                "ts" : Timestamp(1620819512, 1),
                                "t" : NumberLong(1)
                        },
                        "optimeDate" : ISODate("2021-05-12T11:38:32Z"),
                        "electionTime" : Timestamp(1620814084, 1),
                        "electionDate" : ISODate("2021-05-12T10:08:04Z"),
                        "configVersion" : 14,
                        "self" : true
                },
                {
                        "_id" : 2,
                        "name" : "192.168.178.151:28019",
                        "health" : 1,
                        "state" : 2,
                        "stateStr" : "SECONDARY",
                        "uptime" : 2207,
                        "optime" : {
                                "ts" : Timestamp(1620819512, 1),
                                "t" : NumberLong(1)
                        },
                        "optimeDate" : ISODate("2021-05-12T11:38:32Z"),
                        "lastHeartbeat" : ISODate("2021-05-12T12:11:05.050Z"),
                        "lastHeartbeatRecv" : ISODate("2021-05-12T12:11:05.049Z"),
                        "pingMs" : NumberLong(1),
                        "syncingTo" : "192.168.178.151:28017",
                        "configVersion" : 14
                },
                {
                        "_id" : 3,
                        "name" : "192.168.178.151:28020",
                        "health" : 1,
                        "state" : 5,
                        "stateStr" : "STARTUP2",
                        "uptime" : 2158,
                        "optime" : {
                                "ts" : Timestamp(0, 0),
                                "t" : NumberLong(-1)
                        },
                        "optimeDate" : ISODate("1970-01-01T00:00:00Z"),
                        "lastHeartbeat" : ISODate("2021-05-12T12:11:04.444Z"),
                        "lastHeartbeatRecv" : ISODate("2021-05-12T12:11:04.499Z"),
                        "pingMs" : NumberLong(0),
                        "configVersion" : 14
                },
                {
                        "_id" : 4,
                        "name" : "192.168.178.151:28018",
                        "health" : 1,
                        "state" : 2,
                        "stateStr" : "SECONDARY",
                        "uptime" : 1950,
                        "optime" : {
                                "ts" : Timestamp(1620819512, 1),
                                "t" : NumberLong(1)
                        },
                        "optimeDate" : ISODate("2021-05-12T11:38:32Z"),
                        "lastHeartbeat" : ISODate("2021-05-12T12:11:04.764Z"),
                        "lastHeartbeatRecv" : ISODate("2021-05-12T12:11:01.116Z"),
                        "pingMs" : NumberLong(0),
                        "configVersion" : 14
                }
        ],
        "ok" : 1
}
my_repl:PRIMARY>
my_repl:PRIMARY> rs.stepDown()
2021-05-12T20:11:12.178+0800 E QUERY    [thread1] Error: error doing query: failed: network error while attempting to run command 'replSetStepDown' on host '127.0.0.1:28017'  :
DB.prototype.runCommand@src/mongo/shell/db.js:135:1
DB.prototype.adminCommand@src/mongo/shell/db.js:152:1
rs.stepDown@src/mongo/shell/utils.js:1202:12
@(shell):1:1

2021-05-12T20:11:12.185+0800 I NETWORK  [thread1] trying reconnect to 127.0.0.1:28017 (127.0.0.1) failed
2021-05-12T20:11:12.187+0800 I NETWORK  [thread1] reconnect 127.0.0.1:28017 (127.0.0.1) ok
my_repl:SECONDARY>
my_repl:SECONDARY> rs.printSlaveReplicationInfo()
source: 192.168.178.151:28017
        syncedTo: Wed May 12 2021 20:11:22 GMT+0800 (CST)
        0 secs (0 hrs) behind the primary
source: 192.168.178.151:28019
        syncedTo: Wed May 12 2021 20:11:22 GMT+0800 (CST)
        0 secs (0 hrs) behind the primary
source: 192.168.178.151:28020
        syncedTo: Thu Jan 01 1970 08:00:00 GMT+0800 (CST)
        1620821482 secs (450228.19 hrs) behind the primary
my_repl:SECONDARY>
my_repl:SECONDARY> rs.isMaster()
{
        "hosts" : [
                "192.168.178.151:28017",
                "192.168.178.151:28019",
                "192.168.178.151:28020",
                "192.168.178.151:28018"
        ],
        "setName" : "my_repl",
        "setVersion" : 14,
        "ismaster" : false,
        "secondary" : true,
        "primary" : "192.168.178.151:28018",
        "me" : "192.168.178.151:28017",
        "maxBsonObjectSize" : 16777216,
        "maxMessageSizeBytes" : 48000000,
        "maxWriteBatchSize" : 1000,
        "localTime" : ISODate("2021-05-12T12:11:50.800Z"),
        "maxWireVersion" : 4,
        "minWireVersion" : 0,
        "ok" : 1
}
my_repl:SECONDARY>
my_repl:SECONDARY> rs.conf()
{
        "_id" : "my_repl",
        "version" : 14,
        "protocolVersion" : NumberLong(1),
        "members" : [
                {
                        "_id" : 0,
                        "host" : "192.168.178.151:28017",
                        "arbiterOnly" : false,
                        "buildIndexes" : true,
                        "hidden" : false,
                        "priority" : 1,
                        "tags" : {

                        },
                        "slaveDelay" : NumberLong(0),
                        "votes" : 1
                },
                {
                        "_id" : 2,
                        "host" : "192.168.178.151:28019",
                        "arbiterOnly" : false,
                        "buildIndexes" : true,
                        "hidden" : false,
                        "priority" : 1,
                        "tags" : {

                        },
                        "slaveDelay" : NumberLong(0),
                        "votes" : 1
                },
                {
                        "_id" : 3,
                        "host" : "192.168.178.151:28020",
                        "arbiterOnly" : false,
                        "buildIndexes" : true,
                        "hidden" : false,
                        "priority" : 1,
                        "tags" : {

                        },
                        "slaveDelay" : NumberLong(0),
                        "votes" : 1
                },
                {
                        "_id" : 4,
                        "host" : "192.168.178.151:28018",
                        "arbiterOnly" : false,
                        "buildIndexes" : true,
                        "hidden" : false,
                        "priority" : 1,
                        "tags" : {

                        },
                        "slaveDelay" : NumberLong(0),
                        "votes" : 1
                }
        ],
        "settings" : {
                "chainingAllowed" : true,
                "heartbeatIntervalMillis" : 2000,
                "heartbeatTimeoutSecs" : 10,
                "electionTimeoutMillis" : 10000,
                "getLastErrorModes" : {

                },
                "getLastErrorDefaults" : {
                        "w" : 1,
                        "wtimeout" : 0
                },
                "replicaSetId" : ObjectId("609ba8f9c300c25db0989e17")
        }
}
my_repl:SECONDARY>
my_repl:SECONDARY>
my_repl:SECONDARY> rs.isMaster()
{
        "hosts" : [
                "192.168.178.151:28017",
                "192.168.178.151:28019",
                "192.168.178.151:28020",
                "192.168.178.151:28018"
        ],
        "setName" : "my_repl",
        "setVersion" : 14,
        "ismaster" : false,
        "secondary" : true,
        "primary" : "192.168.178.151:28018",
        "me" : "192.168.178.151:28017",
        "maxBsonObjectSize" : 16777216,
        "maxMessageSizeBytes" : 48000000,
        "maxWriteBatchSize" : 1000,
        "localTime" : ISODate("2021-05-12T12:12:32.949Z"),
        "maxWireVersion" : 4,
        "minWireVersion" : 0,
        "ok" : 1
}
my_repl:SECONDARY>
my_repl:SECONDARY> exit
bye
[mongod@151 ~]$

#当28017不是主节点后,可以删除了
[mongod@151 ~]$ mongo --port 28018 admin
MongoDB shell version: 3.2.22
connecting to: 127.0.0.1:28018/admin
my_repl:PRIMARY>
my_repl:PRIMARY> rs.printSlaveReplicationInfo()
source: 192.168.178.151:28017
        syncedTo: Wed May 12 2021 20:11:22 GMT+0800 (CST)
        0 secs (0 hrs) behind the primary
source: 192.168.178.151:28019
        syncedTo: Wed May 12 2021 20:11:22 GMT+0800 (CST)
        0 secs (0 hrs) behind the primary
source: 192.168.178.151:28020
        syncedTo: Thu Jan 01 1970 08:00:00 GMT+0800 (CST)
        1620821482 secs (450228.19 hrs) behind the primary
my_repl:PRIMARY>
my_repl:PRIMARY>
my_repl:PRIMARY> rs.isMaster()
{
        "hosts" : [
                "192.168.178.151:28017",
                "192.168.178.151:28019",
                "192.168.178.151:28020",
                "192.168.178.151:28018"
        ],
        "setName" : "my_repl",
        "setVersion" : 14,
        "ismaster" : true,
        "secondary" : false,
        "primary" : "192.168.178.151:28018",
        "me" : "192.168.178.151:28018",
        "electionId" : ObjectId("7fffffff0000000000000002"),
        "maxBsonObjectSize" : 16777216,
        "maxMessageSizeBytes" : 48000000,
        "maxWriteBatchSize" : 1000,
        "localTime" : ISODate("2021-05-12T12:14:10.776Z"),
        "maxWireVersion" : 4,
        "minWireVersion" : 0,
        "ok" : 1
}
my_repl:PRIMARY>
my_repl:PRIMARY>
my_repl:PRIMARY>
my_repl:PRIMARY> rs.remove("192.168.178.151:28017")
{ "ok" : 1 }
my_repl:PRIMARY>

#重新加上28017,然后尝试删除28018测试
#依旧删不掉主机点。。。
my_repl:PRIMARY> rs.remove("192.168.178.151:28018")
{
        "ok" : 0,
        "errmsg" : "No host described in new configuration 16 for replica set my_repl maps to this node",
        "code" : 103
}
my_repl:PRIMARY>
my_repl:PRIMARY> rs.add("192.168.178.151:28017")
{ "ok" : 1 }
my_repl:PRIMARY> rs.conf()
{
        "_id" : "my_repl",
        "version" : 16,
        "protocolVersion" : NumberLong(1),
        "members" : [
                {
                        "_id" : 2,
                        "host" : "192.168.178.151:28019",
                        "arbiterOnly" : false,
                        "buildIndexes" : true,
                        "hidden" : false,
                        "priority" : 1,
                        "tags" : {

                        },
                        "slaveDelay" : NumberLong(0),
                        "votes" : 1
                },
                {
                        "_id" : 3,
                        "host" : "192.168.178.151:28020",
                        "arbiterOnly" : false,
                        "buildIndexes" : true,
                        "hidden" : false,
                        "priority" : 1,
                        "tags" : {

                        },
                        "slaveDelay" : NumberLong(0),
                        "votes" : 1
                },
                {
                        "_id" : 4,
                        "host" : "192.168.178.151:28018",
                        "arbiterOnly" : false,
                        "buildIndexes" : true,
                        "hidden" : false,
                        "priority" : 1,
                        "tags" : {

                        },
                        "slaveDelay" : NumberLong(0),
                        "votes" : 1
                },
                {
                        "_id" : 5,
                        "host" : "192.168.178.151:28017",
                        "arbiterOnly" : false,
                        "buildIndexes" : true,
                        "hidden" : false,
                        "priority" : 1,
                        "tags" : {

                        },
                        "slaveDelay" : NumberLong(0),
                        "votes" : 1
                }
        ],
        "settings" : {
                "chainingAllowed" : true,
                "heartbeatIntervalMillis" : 2000,
                "heartbeatTimeoutSecs" : 10,
                "electionTimeoutMillis" : 10000,
                "getLastErrorModes" : {

                },
                "getLastErrorDefaults" : {
                        "w" : 1,
                        "wtimeout" : 0
                },
                "replicaSetId" : ObjectId("609ba8f9c300c25db0989e17")
        }
}
my_repl:PRIMARY>
my_repl:PRIMARY>
my_repl:PRIMARY> rs.remove("192.168.178.151:28018")
{
        "ok" : 0,
        "errmsg" : "No host described in new configuration 17 for replica set my_repl maps to this node",
        "code" : 103
}
my_repl:PRIMARY>

#自己得出的结论:貌似只要是主节点就删不掉啊。
#回头再次看视频,发现老师删除28017时,28017也是从节点。。。看样子不能删除主库啊

最后更新: 2022-02-20 11:21:58