【mongoDB】关于 mongoDB仲裁节点(arbitor)

2022-09-03  本文已影响0人  Bogon

在某些情况下(例如您有一个主节点和一个次节点,但是成本限制禁止添加另一个次节点),您可以选择向副本集中添加仲裁节点。
仲裁节点没有数据集的副本,因此不能成为主节点。
仲裁节点会参与主节点的选举t投票,仲裁节点只有1张选票。

当您将一个副本集升级到MongoDB 3.6时,如果现有配置有一个优先级为1的仲裁节点,MongoDB 3.6将仲裁节点的优先级重新配置为0。

不要在同时部署了复制集的主节点或从节点的系统上运行仲裁节点。

image.png

对于3个成员的主-副-仲裁架构:
如果您有一个具有主-次-仲裁(PSA)体系结构的三成员副本集,或者一个具有三成员PSA碎片的分片集群,那么如果任何数据承载节点发生故障,并且启用了对“多数”读问题的支持,那么缓存压力将会增加。

为了防止存储缓存压力固定使用三成员主-副-仲裁(PSA)架构的部署,您可以在MongoDB 4.0.3(和3.6.1+)中禁用read concern“majority” 、write concern“majority”。

当使用授权运行时,仲裁程序将与集的其他成员交换凭据以进行身份验证。
MongoDB对身份验证过程进行加密,MongoDB身份验证交换在密码上是安全的。

因为仲裁节点不存储数据,所以它们不拥有用于身份验证的用户和角色映射的内部表,因此登录授权激活的仲裁节点的惟一方法是使用localhost异常。

仲裁节点和其他集合成员之间的惟一通信是:选举期间的投票、心跳和配置数据。
这些交换没有加密,但是如果您的MongoDB部署使用TLS/SSL, MongoDB将加密副本集成员之间的所有通信。

与所有MongoDB组件一样,在可信的网络环境中运行仲裁节点。

登录仲裁shell无需认证,只能用于查看复制集状态:

 $  start_arb.sh

######################################### 
#!/bin/bash

bin_path=/path/to/bin
db_name=test
arb_port=27017
data_path=/path/to/datadir
replset_name="Test"

numactl --interleave=all  ${bin_path}/mongod \
  --directoryperdb  \
  --auth \
  --keyFile=/path/to/key_file  \
  --dbpath=${data_path} \
  --port $arb_port \
  --fork \
  --replSet ${replset_name} \
  --logpath /path/to/${db_name}_arb.log \
  --logappend
###########################################


# 添加仲裁节点:
use admin
rs.addArb('xx.xx.xx.xx:XX')

# 移除仲裁节点:

use admin
rs.remove('xx.xx.xx.xx:XX')

/path/to/bin/mongo  --host xx.xx.xx.xx --port 27017  

> rs.status()

{
        "set" : "Test",
        "date" : ISODate("2022-09-03T12:46:49.176Z"),
        "myState" : 7,
        "term" : NumberLong(2),
        "syncingTo" : "",
        "syncSourceHost" : "",
        "syncSourceId" : -1,
        "heartbeatIntervalMillis" : NumberLong(2000),
        "optimes" : {
                "lastCommittedOpTime" : {
                        "ts" : Timestamp(1662209208, 1),
                        "t" : NumberLong(2)
                },
                "appliedOpTime" : {
                        "ts" : Timestamp(1662209208, 1),
                        "t" : NumberLong(2)
                },
                "durableOpTime" : {
                        "ts" : Timestamp(0, 0),
                        "t" : NumberLong(-1)
                }
        },
        "members" : [
                {
                        "_id" : 0,
                        "name" : "192.168.1.101:27017",
                        "health" : 1,
                        "state" : 1,
                        "stateStr" : "PRIMARY",
                        "uptime" : 15906217,
                        "optime" : {
                                "ts" : Timestamp(1662209208, 1),
                                "t" : NumberLong(2)
                        },
                        "optimeDurable" : {
                                "ts" : Timestamp(1662209208, 1),
                                "t" : NumberLong(2)
                        },
                        "optimeDate" : ISODate("2022-09-03T12:46:48Z"),
                        "optimeDurableDate" : ISODate("2022-09-03T12:46:48Z"),
                        "lastHeartbeat" : ISODate("2022-09-03T12:46:48.050Z"),
                        "lastHeartbeatRecv" : ISODate("2022-09-03T12:46:48.457Z"),
                        "pingMs" : NumberLong(0),
                        "lastHeartbeatMessage" : "",
                        "syncingTo" : "",
                        "syncSourceHost" : "",
                        "syncSourceId" : -1,
                        "infoMessage" : "",
                        "electionTime" : Timestamp(1646302942, 1),
                        "electionDate" : ISODate("2022-03-03T10:22:22Z"),
                        "configVersion" : 3
                },
                {
                        "_id" : 1,
                        "name" : "192.168.1.102:27017",
                        "health" : 1,
                        "state" : 2,
                        "stateStr" : "SECONDARY",
                        "uptime" : 15906217,
                        "optime" : {
                                "ts" : Timestamp(1662209208, 1),
                                "t" : NumberLong(2)
                        },
                        "optimeDurable" : {
                                "ts" : Timestamp(1662209208, 1),
                                "t" : NumberLong(2)
                        },
                        "optimeDate" : ISODate("2022-09-03T12:46:48Z"),
                        "optimeDurableDate" : ISODate("2022-09-03T12:46:48Z"),
                        "lastHeartbeat" : ISODate("2022-09-03T12:46:47.899Z"),
                        "lastHeartbeatRecv" : ISODate("2022-09-03T12:46:48.251Z"),
                        "pingMs" : NumberLong(0),
                        "lastHeartbeatMessage" : "",
                        "syncingTo" : "10.12.32.51:27017",
                        "syncSourceHost" : "10.12.32.51:27017",
                        "syncSourceId" : 0,
                        "infoMessage" : "",
                        "configVersion" : 3
                },
                {
                        "_id" : 2,
                        "name" : "192.168.1.103:27017",
                        "health" : 1,
                        "state" : 7,
                        "stateStr" : "ARBITER",
                        "uptime" : 15906224,
                        "syncingTo" : "",
                        "syncSourceHost" : "",
                        "syncSourceId" : -1,
                        "infoMessage" : "",
                        "configVersion" : 3,
                        "self" : true,
                        "lastHeartbeatMessage" : ""
                }
        ],
        "ok" : 1
}


参考

Mongodb 仲裁节点相关必要吗?
https://www.zhihu.com/question/27648448

Add an Arbiter to Replica Set
https://www.mongodb.com/docs/manual/tutorial/add-replica-set-arbiter

将辅助节点转换为仲裁者
https://mongodb.net.cn/manual/tutorial/convert-secondary-into-arbiter

MongoDB 中文手册
https://mongodb.net.cn/manual

Replica Set Protocol Version
https://www.mongodb.com/docs/manual/reference/replica-set-protocol-versions

Read Concern "majority"
https://www.mongodb.com/docs/manual/reference/read-concern-majority/#disable-read-concern-majority

Configure mongod and mongos for TLS/SSL
https://www.mongodb.com/docs/manual/tutorial/configure-ssl

上一篇 下一篇

猜你喜欢

热点阅读