【mongoDB】mongoDB设置节点为延迟节点
延迟节点反应的是数据库在较早时刻的状态,比如一个配置了延迟时间为3600秒的延迟节点,那么这个延迟节点的数据就是primary一个小时之前的状态。
延迟节点存在的意义主要是解决应用层面数据错误的问题,假设管理员对数据库做了一个误操作,如果数据是时时传输的话,那么这个误操作立刻就会被备库同步,这样就导致了备库数据的损坏。而延迟节点就可以解决这样的问题,因为这个误操作需要等待一个延迟时间才能同步到备库。
image.png image.png延迟节点的要求:
1. 必须是优先级为0,因为延迟节点的延迟属性,很显然它不具备成为主库的条件
2. 必须配置掩藏属性,因为要始终防止应用程序查看和查询延迟成员
3. 配置投票属性为0,不参与选举,可以提高数据库主从切换性能
具体步骤如下:
-
确认当前节点的副本集名称和节点名称,使用rs.status()命令查看。
-
连接到主节点,使用rs.add()命令将节点添加为延迟成员,并设置hidden属性为true,示例命令:
rs.add({"host": "xx.xx.xx.xx:XX", "priority": 0, "slaveDelay": 86400, "hidden":true,"votes": 0})
rs.add(
{
"host": "xx.xx.xx.xx:XX",
"priority": 0,
"slaveDelay": 86400,
"hidden": true,
"votes": 0
}
)
其中,priority为节点优先级,设置为0表示延迟节点不参与选举; slaveDelay为延迟时间,单位为秒;hidden为掩藏属性,设置为true;votes为是否参与选举投票,设置为0表示不参与
-
使用rs.status()命令查看节点状态,确认延迟成员已经成功添加,并且hidden属性已经设置为true。
-
在应用程序中,使用rs.slaveOk()命令开启读操作,确保应用程序只能从主节点或其他可读成员中读取数据,而不能直接访问延迟成员。
注意:
- 设置掩藏属性后,延迟成员仍然可以从主节点同步数据,但是不能参与读写操作。如果需要将延迟成员恢复为可读成员,可以使用rs.reconfig()命令重新配置副本集。
2.在修改投票属性之后,需要等待一段时间,让副本集重新选举主节点,才能生效。同时,需要注意投票属性的设置,以确保副本集的可用性和稳定性。
在MongoDB中,可以使用rs.reconfig()命令来重新配置副本集,修改节点的投票属性。具体步骤如下:
确认当前节点的副本集名称和节点名称,使用rs.status()命令查看。
连接到主节点,使用rs.reconfig()命令重新配置副本集,示例命令:
rs.reconfig(
{
"_id": "副本集名称",
"members": [{
"_id": 0,
"host": "xx.xx.xx.xx:XX",
"priority": 1
}, {
"_id": 1,
"host": "xx.xx.xx.xx:XX",
"priority": 1
}, {
"_id": 2,
"host": "xx.xx.xx.xx:XX",
"priority": 1
},{
"_id": 3,
"host": "xx.xx.xx.xx:XX",
"priority": 0,
"votes": 0,
"slaveDelay": 86400,
"hidden": true
}]
}
)
参考
MongoDB添加延时节点
https://www.cnblogs.com/xinghebuluo/p/6025610.html
MongoDB中PSD(Primary-Secondary-Delay)延迟节点架构的坑
https://blog.51cto.com/u_15078930/5411876
MongoDB复制集设置复制延迟节点
https://www.cnblogs.com/abclife/p/16851637.html
MongoDB 读偏好设置中增加最大有效延迟时间的参数
https://www.cnblogs.com/xuliuzai/p/10951666.html
MongoDB中的Capped Collection
https://www.cnblogs.com/abclife/p/17264528.html
设置隐藏节点和不可投票节点
https://www.cnblogs.com/abclife/p/17345803.html
关于MongoDB Oplog窗口时间
https://www.jianshu.com/p/e988b5184780
一次线上MongoDB慢查询问题排查处理记录
https://www.jianshu.com/p/e988b5184780
记一次MongoDB故障排查的过程
https://mp.weixin.qq.com/s/_XEV_1FCJ0x3iwRVex3mIw