MongoDB故障测试

副本节点故障测试

关闭27018副本节点
发现,主节点和仲裁节点对27018的心态失败。因为主节点还在,因此,没有触发投票选举。
如果此时,在主节点写入数据:

# 主节点
myrs:PRIMARY> db.comment.insert({"_id":"1","articleid":"100001","content":"我们不应该把时间浪费在手机上","userid":"1002","nickname":"相忘于江湖","likenum":NumberInt(1000)})
WriteResult({ "nInserted" : 1 })

# 从节点
> db.comment.find()
Error: socket exception [CONNECT_ERROR] server [couldn't connect to server localhost:27018, connection attempt failed: SocketException: Error connecting to localhost:27018 (127.0.0.1:27018) :: caused by :: Connection refused]
>
# 启动从节点后,再次查询
> db.comment.find()
{ "_id" : ObjectId("608154d20a85cb7a99a65f93"), "articleid" : "100000", "content" : "今天天气真好,阳光明媚", "userid" : "1001", "nickname" : "rose", "createdatetime" : ISODate("2021-04-22T10:49:54.233Z") }
{ "_id" : "1", "articleid" : "100001", "content" : "我们不应该把时间浪费在手机上", "userid" : "1002", "nickname" : "相忘于江湖", "likenum" : 1000 }
>

再启动从节点,会发现,主节点写入的数据,会自动同步给从节点。

主节点故障测试

关闭27017节点。
发现,从节点和仲裁节点对27017的心态失败,当失败超过10秒,此时因为没有主节点,会自动发起投票。而副本节点只有27018,因此,候选人只有一个就是27018,开始投票。27019向27018投了一票,27018本身自带一票,因此共两票,超过了“大多数”。
27019是仲裁节点,没有选举权,27018不向器投票,其票数为0.最终结果,27018称为主节点。具备读写功能。

 exit
bye
[root@localhost gxm]# /usr/local/mongoDB/bin/mongo --host localhost --port 27018
MongoDB shell version v4.4.4
connecting to: mongodb://localhost:27018/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("834095b8-c4be-4936-beef-76923b139919") }
MongoDB server version: 4.4.4
---
The server generated these startup warnings when booting:
        2021-04-22T19:45:23.239+08:00: Access control is not enabled for the database. Read and write access to data and configuration is unrestricted
        2021-04-22T19:45:23.239+08:00: You are running this process as the root user, which is not recommended
        2021-04-22T19:45:23.239+08:00: /sys/kernel/mm/transparent_hugepage/enabled is 'always'. We suggest setting it to 'never'
        2021-04-22T19:45:23.239+08:00: Soft rlimits too low
        2021-04-22T19:45:23.239+08:00:         currentValue: 1024
        2021-04-22T19:45:23.239+08:00:         recommendedMinimum: 64000
        2021-04-22T19:45:23.260+08:00:
        2021-04-22T19:45:23.260+08:00: ** WARNING: This replica set has a Primary-Secondary-Arbiter architecture, but readConcern:majority is enabled
        2021-04-22T19:45:23.260+08:00: **          for this node. This is not a recommended configuration. Please see
        2021-04-22T19:45:23.260+08:00: **          https://dochub.mongodb.org/core/psa-disable-rc-majority
        2021-04-22T19:45:23.260+08:00:
---
---
        Enable MongoDB's free cloud-based monitoring service, which will then receive and display
        metrics about your deployment (disk utilization, CPU, operation statistics, etc).

        The monitoring data will be available on a MongoDB website with a unique URL accessible to you
        and anyone you share the URL with. MongoDB may use this information to make product
        improvements and to suggest MongoDB products and deployment options to you.

        To enable free monitoring, run the following command: db.enableFreeMonitoring()
        To permanently disable this reminder, run the following command: db.disableFreeMonitoring()
---
myrs:PRIMARY>
myrs:PRIMARY>
myrs:PRIMARY>
myrs:PRIMARY> show dbs;
admin      0.000GB
articledb  0.000GB
config     0.000GB
local      0.001GB
myrs:PRIMARY>

在27018写入数据查看。

myrs:PRIMARY> db.comment.insert({"_id":"2","articleid":"100003","content":"主节点故障转移测试"})
WriteResult({ "nInserted" : 1 })

再启动27017节点,发现27017变成了从节点,27018仍保持主节点。
登录27017节点,发现是从节点了,数据自动从27018同步,从而实现了高可用。

[root@localhost mongodb]# /usr/local/mongoDB/bin/mongod -f ./replica_sets/myrs_27017/mongod.conf
about to fork child process, waiting until server is ready for connections.
forked process: 4616
child process started successfully, parent exiting
[root@localhost mongodb]# /usr/local/mongoDB/bin/mongo --host=localhost --port=27017
MongoDB shell version v4.4.4
connecting to: mongodb://localhost:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("14ca410e-ae49-4916-b1ec-22af11cbd057") }
MongoDB server version: 4.4.4
myrs:SECONDARY>
myrs:SECONDARY> show dbs;
uncaught exception: Error: listDatabases failed:{
        "topologyVersion" : {
                "processId" : ObjectId("60816459575dcb1284790a3d"),
                "counter" : NumberLong(4)
        },
        "operationTime" : Timestamp(1619092577, 1),
        "ok" : 0,
        "errmsg" : "not master and slaveOk=false",
        "code" : 13435,
        "codeName" : "NotPrimaryNoSecondaryOk",
        "$clusterTime" : {
                "clusterTime" : Timestamp(1619092577, 1),
                "signature" : {
                        "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
                        "keyId" : NumberLong(0)
                }
        }
} :
_getErrorWithCode@src/mongo/shell/utils.js:25:13
Mongo.prototype.getDBs/<@src/mongo/shell/mongo.js:147:19
Mongo.prototype.getDBs@src/mongo/shell/mongo.js:99:12
shellHelper.show@src/mongo/shell/utils.js:937:13
shellHelper@src/mongo/shell/utils.js:819:15
@(shellhelp2):1:1
myrs:SECONDARY> use articledb
switched to db articledb
myrs:SECONDARY> rs.secondaryOk()
myrs:SECONDARY> db.comment.find()
{ "_id" : ObjectId("608154d20a85cb7a99a65f93"), "articleid" : "100000", "content" : "今天天气真好,阳光明媚", "userid" : "1001", "nickname" : "rose", "createdatetime" : ISODate("2021-04-22T10:49:54.233Z") }
{ "_id" : "1", "articleid" : "100001", "content" : "我们不应该把时间浪费在手机上", "userid" : "1002", "nickname" : "相忘于江湖", "likenum" : 1000 }
{ "_id" : "2", "articleid" : "100003", "content" : "主节点故障转移测试" }
myrs:SECONDARY>

仲裁节点和主节点故障

先关掉仲裁节点27019。
关掉现有的主节点27018。
登录27017后,发现,27017仍然是从节点,副本集中没有主节点了,导致此时,副本集是只读状态,无法写入。
为啥选举不了了?因为27017的票数,没有获得大多数,集没有答应等于2,它只有默认的一票(有先级为1)。
如果要触发选举,随便加入一个成员即可。

  • 如果只加入27019仲裁节点成员,则主节点一定是27017,因为没的选了,仲裁节点不参与选举,但参与投票。
  • 如果只加入27018节点,会发起选举。因为27017和27018都是两票,则按照谁数据新,谁当选主节点。

仲裁节点和从节点故障

先关掉仲裁节点27019。
关掉现在的副本节点27018。
10秒后,27017主节点自动降级为副本节点。(服务降级)
副本集不可写数据了,已经故障了。(因为没有冗余的副本节点存在了)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

融极

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值