在某些情况下(例如您有一个主节点和一个次节点,但是成本限制禁止添加另一个次节点),您可以选择向副本集中添加仲裁节点。
仲裁节点没有数据集的副本,因此不能成为主节点。
仲裁节点会参与主节点的选举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
网友评论