文档章节

MongoDB复制集自定义复制保证规则

晨曦断罪
 晨曦断罪
发布于 2016/12/28 12:47
字数 783
阅读 26
收藏 0

当想副本集插入数据是,写入副本集的“大多数”成员被认为是安全写入。
当希望确保写操作被复制到每个数据中心中的至少一台服务器上,或者被复制在到可见节点的“大多数”服务器上时,应该创建新的规则。
副本集允许创建自己的新规则,并却可以传递给getLastError,以保证写操作被复制到所欲的服务器上。

1.保证复制到每个数据中心的一台服务器上

对于不用数据中心之间更容易发生网络故障;相对于数据中心同等数量的服务器管挂掉,整个数据中心挂掉的可能性更高。
因此,你很可能希望保证将写操作复制到每个数据中心,这样,玩意某个数据中心掉线了,其他每个数据中心都有一份最新的本地数据副本。

要实现此机制
第一步:按照数据中心对成员进行分类。可以在副本集配置中添加一个tags字段。

var config = rs.config()
config.members[0].tages = {“dc”:”us_east”}
config.members[0].tages = {“dc”:”us_east”}
config.members[0].tages = {“dc”:”us_east”}
config.members[0].tages = {“dc”:”us_west”}
config.members[0].tages = {“dc”:”us_west”}
config.members[0].tages = {“dc”:”us_west”}
config.settings = {}
config.settings.getErrorModes = [{“eachDC”:{“dc”:2}}]
rs.reconfig(config)

设置完成。
第二步:对写操作应用

db.foo.insert({“x”:1})
db.runCommand({“getLastError”:1,”w”:”eachDC”,”wtimeout”:1000})

2.保证复制到可见节点中的“大多数”

注意:隐藏节点不用设置标签。
要实现此机制
第一步:按照数据中心对成员进行分类。可以在副本集配置中添加一个tags字段。

var config = rs.config() //标签中属性的值为分组的关键
config.members[0].tages = {“dc”:”A”}
config.members[0].tages = {“dc”:”B”}
config.members[0].tages = {“dc”:”C”}
config.members[0].tages = {“dc”:”D”}
config.members[0].tages = {“dc”:”E”}
config.members[0].tages = {“dc”:”F”}
config.settings = {}
config.settings.getErrorModes = [{“visibleMajority”:{“dc”:4}}]
rs.reconfig(config)

设置完成。
第二步:对写操作应用

db.foo.insert({“x”:1})
db.runCommand({“getLastError”:1,”w”:”visibleMajority”,”wtimeout”:1000})

规则是非常强大的副本集配置方式,虽然他理解和设计起来都很复杂,除非有非常特殊的复制要求,否则使用“w”:“majority”就已经可以了。

3.将读请求发送到备份节点

可以通过是设置驱动程序的读取首选项(read preferences)配置其它选项,可以再读取首选项中设置需要将查询路由到的服务器的类型。
使用Secondary或者Secondary preferred读选项。

如果对数据一致性要求高,则最好不要这么做。

处于负载的考虑,会使整个副本集的可用性降低到不可忍受的范围,当一个备份节点出现问题时,当他恢复时,会向其他复制节点复制数据,导致其他节点过载,导致性能变慢,副本集性能进一步降低,然后强制其他成员承担更多负载,导致副本集所有成员过载,形成恶性死循环。

使用分片做分布式负载 通常是一个更好的选择。

© 著作权归作者所有

晨曦断罪
粉丝 0
博文 16
码字总数 12398
作品 0
石家庄
程序员
私信 提问
MongoDB最佳实践畅谈-计费系统

版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 https://blog.csdn.net/chszs/article/details/20536623 MongoDB最佳实践畅谈-计费系统 作者:chszs,转载需注明。博客主页:...

chszs
2014/03/05
0
0
MongoDB复制选举原理及复制集管理

MongoDB复制集的选举原理 MongoDB复制的原理 MongoDB的复制是基于操作日志oplog,相当于MySQL中的二进制日志,只记录发生改变的记录。复制是将主节点的oplog日志同步并应用到其他从节点的过程...

cchenyz
2018/07/16
0
0
MongoDB 4.0 事务实现解析

云数据库 MongoDB 版 了解更多 上个月底 MongoDB Wolrd 宣布发布 MongoDB 4.0, 支持复制集多文档事务,阿里云数据库团队 研发工程师第一时间对事务功能的时间进行了源码分析,解析事务实现机...

张友东
2018/07/13
0
0
MongoDB安装及复制集搭建

安装 wget http://fastdl.mongodb.org/linux/mongodb-linux-x8664-2.2.6.tgz tar zxvf mongodb-linux-x8664-2.2.6.tgz mv mongodb-linux-x8664-2.2.6 mongodb cd mongodb mkdir log # 添加日......

zmf
2015/06/18
130
0
如何在Ubuntu上开启MongoDB的IP Security

MongoDB3.6的默认配置会拒绝未授权的链接对公共网络的访问,从而保护数据收到外部威胁。MongoDB只会监听本地链接,除非添加规则允许监听其他地址。本教程会简明的展示如何允许外部IP地址连接...

linux-tao
2018/06/05
36
0

没有更多内容

加载失败,请刷新页面

加载更多

只需一步,在Spring Boot中统一Restful API返回值格式与统一处理异常

统一返回值 在前后端分离大行其道的今天,有一个统一的返回值格式不仅能使我们的接口看起来更漂亮,而且还可以使前端可以统一处理很多东西,避免很多问题的产生。 比较通用的返回值格式如下:...

晓月寒丶
昨天
59
0
区块链应用到供应链上的好处和实际案例

区块链可以解决供应链中的很多问题,例如记录以及追踪产品。那么使用区块链应用到各产品供应链上到底有什么好处?猎头悬赏平台解优人才网小编给大家做个简单的分享: 使用区块链的最突出的优...

猎头悬赏平台
昨天
28
0
全世界到底有多少软件开发人员?

埃文斯数据公司(Evans Data Corporation) 2019 最新的统计数据(原文)显示,2018 年全球共有 2300 万软件开发人员,预计到 2019 年底这个数字将达到 2640万,到 2023 年达到 2770万。 而来自...

红薯
昨天
65
0
Go 语言基础—— 通道(channel)

通过通信来共享内存(Java是通过共享内存来通信的) 定义 func service() string {time.Sleep(time.Millisecond * 50)return "Done"}func AsyncService() chan string {retCh := mak......

刘一草
昨天
58
0
Apache Flink 零基础入门(一):基础概念解析

Apache Flink 的定义、架构及原理 Apache Flink 是一个分布式大数据处理引擎,可对有限数据流和无限数据流进行有状态或无状态的计算,能够部署在各种集群环境,对各种规模大小的数据进行快速...

Vincent-Duan
昨天
60
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部