Phần 6 Điều chỉnh Priority for Replica Set Member
Phần 6 Điều chỉnh Priority for Replica Set Member
1./ Lý thuyết
Priority càng cao thì sẽ càng dễ được bình chọn làm Primary
Giá trị của priority từ 0 đến 1000 có thể là số thập phần
Để ẩn 1 node có thể gắn priority bằng 0 cho node đó
Việc thay đổi priority có thể thay thế được Primary, và ép buộc primary cũ ko được làm primary. Quá trình bình bầu diễn ra chọn được node primary mới, chuyển toàn bộ connect sang node primary mới.
Priority and Votes
members[n].priority and members[n].votes have the following relationship:
Non-voting (i.e. votes is 0) members must have priority of 0.
MongoDB replica sets can have no more than 7 voting members. If the replica set already has 7 voting members, you cannot modify the priority of any remaining members in the replica set to be greater than 0.
Starting in MongoDB 4.4, replica reconfiguration can add or remove no more than one voting member at a time. To change multiple non-voting members to have a priority greater than 0, issue a series of replSetReconfig or rs.reconfig() operations to modify one member at a time. See Reconfiguration Can Add or Remove No More than One Voting Member at a Time for more information.
2./ Thực hiện
Cẩn trọng
The rs.reconfig() shell method can force the current primary to step down, which causes an election. When the primary steps down, the mongod closes all client connections. While this typically takes 10-20 seconds, try to make these changes during scheduled maintenance periods.
Avoid reconfiguring replica sets that contain members of different MongoDB versions as validation rules may differ across MongoDB versions.
Copy the replica set configuration to a variable.
2.1/ In mongosh, use rs.conf() to retrieve the replica set configuration and assign it to a variable. For example:
cfg = rs.conf()
#
{
"_id" : "rs0",
"version" : 3,
"term" : 1,
"protocolVersion" : NumberLong(1),
"writeConcernMajorityJournalDefault" : true,
"members" : [
{
"_id" : 0,
"host" : "mongo0.replset.member:27017",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 1,
"tags" : {
},
"slaveDelay" : NumberLong(0),
"votes" : 1
},
{
"_id" : 1,
"host" : "mongo1.replset.member:27017",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 1,
"tags" : {
},
"slaveDelay" : NumberLong(0),
"votes" : 1
},
{
"_id" : 2,
"host" : "mongo2.replset.member:27017",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 1,
"tags" : {
},
"slaveDelay" : NumberLong(0),
"votes" : 1
},
{
"_id" : 3,
"host" : "mongo3.replset.member:27017",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 1,
"tags" : {
},
"slaveDelay" : NumberLong(0),
"votes" : 1
}
],
"settings" : {
"chainingAllowed" : true,
"heartbeatIntervalMillis" : 2000,
"heartbeatTimeoutSecs" : 10,
"electionTimeoutMillis" : 10000,
"catchUpTimeoutMillis" : -1,
"catchUpTakeoverDelayMillis" : 30000,
"getLastErrorModes" : {
},
"getLastErrorDefaults" : {
"w" : 1,
"wtimeout" : 0
},
"replicaSetId" : ObjectId("62160a357307c6ab3cdabe0a")
}
}
2.2/ Change each member's priority value.
Change each member's members[n].priority value, as configured in the members array.
cfg.members[0].priority = 3
cfg.members[1].priority = 2
cfg.members[2].priority = 0.5
cfg.members[3].priority = 1
#
rs0:PRIMARY> cfg.members[0].priority = 3
3
rs0:PRIMARY> cfg.members[1].priority = 2
2
rs0:PRIMARY> cfg.members[2].priority = 0.5
0.5
rs0:PRIMARY> cfg.members[3].priority = 1
1
2.3/ Assign the replica set the new configuration
Use rs.reconfig() to apply the new configuration.
rs.reconfig(cfg)
#
rs0:PRIMARY> rs.reconfig(cfg)
{
"ok" : 1,
"$clusterTime" : {
"clusterTime" : Timestamp(1646034031, 1),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
},
"operationTime" : Timestamp(1646034031, 1)
}
Kiểm tra lại
rs.conf()
rs0:PRIMARY> rs.conf()
{
"_id" : "rs0",
"version" : 4,
"term" : 1,
"protocolVersion" : NumberLong(1),
"writeConcernMajorityJournalDefault" : true,
"members" : [
{
"_id" : 0,
"host" : "mongo0.replset.member:27017",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 3,
"tags" : {
},
"slaveDelay" : NumberLong(0),
"votes" : 1
},
{
"_id" : 1,
"host" : "mongo1.replset.member:27017",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 2,
"tags" : {
},
"slaveDelay" : NumberLong(0),
"votes" : 1
},
{
"_id" : 2,
"host" : "mongo2.replset.member:27017",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 0.5,
"tags" : {
},
"slaveDelay" : NumberLong(0),
"votes" : 1
},
{
"_id" : 3,
"host" : "mongo3.replset.member:27017",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 1,
"tags" : {
},
"slaveDelay" : NumberLong(0),
"votes" : 1
}
],
"settings" : {
"chainingAllowed" : true,
"heartbeatIntervalMillis" : 2000,
"heartbeatTimeoutSecs" : 10,
"electionTimeoutMillis" : 10000,
"catchUpTimeoutMillis" : -1,
"catchUpTakeoverDelayMillis" : 30000,
"getLastErrorModes" : {
},
"getLastErrorDefaults" : {
"w" : 1,
"wtimeout" : 0
},
"replicaSetId" : ObjectId("62160a357307c6ab3cdabe0a")
}
}
Như vậy Priority đã được thay đổi
https://docs.mongodb.com/manual/tutorial/adjust-replica-set-member-priority/