http://www.cnblogs.com/longshiyVip/p/5097336.html 概述了复制集,整体上对复制集有了个概念,但是复制集最重要的功能之——自动故障转移是怎么实现的呢?数据同步又是如何实现的?带着这两个问题,下面展开分析。

一. 数据同步

先利用mongo客户端登录到复制集的primary节点上。

>mongo --port 

查看实例上所有数据库

rs0:PRIMARY> show dbs
local .09375GB

可以看到只有一个local数据库,因为此时还没有在复制集上创建任何其它数据库,local数据库为复制集所有成员节点上默认创建的一个数据库。在primary节点上查看local数据上的集合:

rs0:PRIMARY> show collections

oplog.rs

slaves

startup_log

system.indexes

system.replset

如果是在secondary节点则local数据库上的集合与上面有点不同,secondary节点上没有slaves集合,因为这个集合保存的是需要从primary节点同步数据的secondary节点;secondary节点上会有一个me集合,保存了实例本身所在的服务器名称;secondary节点上还有一个minvalid集合,用于保存对数据库的最新操作的时间截。其它集合primary节点和secondary节点都有,其中startup_log集合表示的是mongod实例每一次的启动信息;system.indexes集合保存的是当前数据库(local)上的所有索引信息;system.replset集合保存的是复制集的成员配置信息,复制集上的命令rs.conf()实际上是从这个集合取的数据返回的。最后要介绍的集合是oplog.rs,这个可是重中之中。

mongoDB就是通过oplog.rs来实现复制集间数据同步的,为了分析数据的变化,先在复制集上的primary节点上创建一个数据库students,然后插入一条记录。

rs0:PRIMARY> use students

switched to db students

rs0:PRIMARY> db.scores.insert({"stuid":,"subject":"math","score":});

接着查看一下primary节点上oplog.rs集合的内容:

rs0:PRIMARY> use local

switched to db local

rs0:PRIMARY> db.oplog.rs.find();

返回记录中会多出一条下面这样的记录(里面还有几条记录是复制集初始化时创建的):

{ "ts" : { "t" : , "i" :  }, "h" : NumberLong(""),

 "v" : , "op" : "i", "ns" : "students.scores", "o" : { "_id" : ObjectId("5210e2

98d7b419b44afa58cc"), "stuid" : 1, "subject" : "math", "score" : 99 } }

里面有几个重要字段,其中"ts"表示是这条记录的时间截,"t"是秒数,"i"每秒操作的次数;字段"op"表示的是操作码,值为"i"表示的是insert操作;"ns"表示插入操作发生的命名空间,这里值为: "students.scores",由数据库和集合名构成;"o"表示的是此插入操作包含的文档对象;

当primary节点完成插入操作后,secondary节点为了保证数据的同步也会完成一些动作:

所有secondary节点检查自己的local数据上oplog.rs集合,找出最近的一条记录的时间截;接着它会查询primary节点上的oplog.rs集合,找出所有大于此时间截的记录;最后它将这些找到的记录插入到自己的oplog.rs集合中并执行这些记录所代表的操作;通过这三步策略,就能保证secondary节点上的数据与primary节点上的数据同步了。整个流程如下图所示:

aaarticlea/png;base64,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" alt="" />

          复制集数据同步流程

查看一下secondary节点上的数据,证明上面的分析是正确的。

rs0:SECONDARY> show dbs

local   .09375GB

students        .0625GB

在secondary节点上新插入了一个数据库students。但是有一点要注意:现在还不能在secondary节点上直接查询students集合上的内容,默认情况下mongoDB的所有读写操作都是在primary节点上完成的,后面也会介绍通过设置从secondary节点上来读,这将引入一个新的主题,后面再分析。

关于oplog.rs集合还有一个很重要的方面,那就是它的大小是固定的,mongoDB这样设置也是有道理的,假如大小没限制,那么随着时间的推移,在数据库上的操作会逐渐累积,oplog.rs集合中保存的记录也会逐渐增多,这样会消耗大量的存储空间,同时对于某个时间点以前的操作记录,早已同步到secondary节点上,也没有必要一直保存这些记录,因此mongoDB将oplog.rs集合设置成一个capped类型的集合,实际上就是一个循环使用的缓冲区。

固定大小的oplog.rs会带来新的问题,考虑下面这种场景:假如一个secondary节点因为宕机,长时间不能恢复,而此时大量的写操作发生在primary节点上,当secondary节点恢复时,利用自己oplog.rs集合上最新的时间截去查找primary节点上的oplog.rs集合,会出现找不到任何记录。因为长时间不在线,primary节点上的oplog.rs集合中的记录早已全部刷新了一遍,这样就不得不手动重新同步数据了。因此oplog.rs的大小是很重要,在32位的系统上默认大小是50MB,在64位的机器上默认是5%的空闲磁盘空间大小,也可以在mongod启动命令中通过项—oplogSize设置其大小。

二. 故障转移

上面的介绍的数据同步相当于传统数据库中的备份策略,mongoDB在此基础还有自动故障转移的功能。在复制集概述那一节提到过心跳"lastHeartbeat"字段,mongoDB就是靠它来实现自动故障转移的。 mongod实例每隔2秒就向其它成员发送一个心跳包以及通过rs.staus()中返回的成员的”health”值来判断成员的状态。如果出现复制集中primary节点不可用了,那么复制集中所有secondary的节点就会触发一次选举操作,选出一个新的primary节点。如上所配置的复制集中如果primary节点宕机了,那么就会选举secondary节点成为primary节点,arbiter节点只是参与选举其它成员成为primary节点,自己永远不会成为primary节点。如果secondary节点有多个则会选择拥有最新时间截的oplog记录或较高权限的节点成为primary节点。oplog记录在前面复制集概述中已经描述过,关于复制集中节点权限配置的问题可在复制集启动的时候进行设置,也可以在启动后重新配置,这里先略过这一点,集中精力讨论故障转移。

如果是某个secondary节点失败了,只要复制集中还有其它secondary节点或arbiter节点存在,就不会发生重新选举primary节点的过程。

下面模拟两种失败场景:一是secondary节点的失败,然后过一段时间后重启(时间不能无限期,否则会导致oplog.rs集合严重滞后的问题,需要手动才能同步);二是primary节点失败,故障转移发生。

先分析第一种情况的测试,当前复制集的配置情况如下:

(1)

rs0:PRIMARY> rs.conf()

{

"_id" : "rs0",

"version" : ,

"members" : [

{

"_id" : ,

"host" : "Guo:40000" //primary节点

},

{

"_id" : ,

"host" : "Guo:40001" //secondary节点

},

{

"_id" : ,

"host" : "Guo:40002", //arbiter节点

"arbiterOnly" : true

}

]

}

(2)通过Kill掉secondary节点所在的mongod实例,模拟第一种故障情况,如下图所示:

aaarticlea/png;base64,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" alt="" />

    模拟secondary节点故障

通过rs.status()命令查看复制集状态,secondary节点状态信息如下:

"_id" : ,

"name" : "Guo:40001",

"health" : ,

"state" : , //表示成员已经down机

"stateStr" : "(not reachable/healthy)",

"uptime" : ,

"optime" : {

"t" : ,

"i" : 

},

"optimeDate" : ISODate("2013-08-18T15:04:56Z")

()接着通过primary节点插入一条记录:

rs0:PRIMARY> db.scores.insert({stuid:,subject:"english",score:})

()再次查看复制集状态信息rs.status(),可以看到primary成员节点上oplpog信息如下:

"optime" : {

"t" : ,

"i" : 

},

"optimeDate" : ISODate("2013-08-19T14:32:10Z"),

与上面down机的成员节点比较,optime已经不一样,primary节点上要新于down机的节点。

(5)重新启动Kill掉的节点

>mongod --config E:\mongodb-win32-i386-2.4.\configs_rs0\rs0_1.conf

查询复制集状态信息rs.status(),观看节点"Guo:40001"的状态信息如下:

"_id" : ,

"name" : "GUO:40001",

"health" : ,

"state" : ,

"stateStr" : "SECONDARY",

"uptime" : ,

"optime" : {

"t" : , //与上面primary节点一致了

"i" : 

},

"optimeDate" : ISODate("2013-08-19T14:32:10Z"),

说明secondary节点已经恢复,并且从primary节点同步到了最新的操作数据。进一步通过查询secondary节点上local数据库上的oplog.rs集合来进行验证,发现多了一条下面这样的记录:

{ "ts" : { "t" : , "i" :  }, "h" : NumberLong("-451684574732211704"),

"v" : , "op" : "i", "ns" : "students.scores", "o" : { "_id" : ObjectId("52122c

6a99c5a3ae472a6900"), "stuid" : 2, "subject" : "english", "score" : 100 } }

这正是在primary节点上插入的记录,再次证明数据确实同步过来了。

接下来测试第二种情况,假如primary节点故障,流程变化如下图所示:

aaarticlea/png;base64,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" alt="" />

      模拟primary节点失败并恢复后

(1)将primary节点Kill掉。

查询复制集的状态信息rs.status()

"name" : "Guo:40000",

"health" : ,

"state" : ,

"stateStr" : "(not reachable/healthy)"

字段"health"的值为0,说明原来的primary节点已经down机了。

"name" : "Guo:40001",

"health" : ,

"state" : ,

"stateStr" : "PRIMARY"

字段"stateStr"值为"PRIMARY",说明原来secondary节点变成了primary节点。

(2)在新的primary节点上插入一条记录

rs0:PRIMARY> db.scores.insert({stuid:,subject:"computer",score:})

(3)重新恢复"Guo:40000"节点(原来的primary节点)

>mongod --config E:\mongodb-win32-i386-2.4.\configs_rs0\rs0_0.conf

再次查看复制集状态rs.status()

"name" : "Guo:40000",

"health" : ,

"state" : ,

"stateStr" : "SECONDARY",

"uptime" : ,

"optime" : {

"t" : ,

"i" : 

},

当"Guo:40000"实例被重新激活后,变成了secondary节点,oplog也被同步成最新的了。说明当primary节点故障时,复制集能自动转移故障,将其中一个secondary节点变为primary节点,读写操作继续在新的primary节点上进行。原来primary节点恢复后,在复制集中变成了secondary节点。

上面两中情况都得到了验证,但是有一点要注意,mongDB默认情况下只能在primary节点上进行读写操作,如下图所示:

aaarticlea/png;base64,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" alt="" />

    默认的读写流程图

  对于客户端应用程序来说,对复制集的读写操作是透明的,默认情况它总是在primary节点上进行。 mongoDB提供了很多种常见编程语言的驱动程序,驱动程序位于应用程序与mongod实例之间,应用程发起与复制集的连接,驱动程序自动选择primary节点。当primary节点失效,复制集发生故障转移时,复制集将先关闭与所有客户端的socket连接,驱动程序将返回一个异常,应用程序收到这个异常,这个时候需要应用程序开发人员去处理这些异常,同时驱动程序会尝试重新与primary节点建立连接(这个动作对应用程序来说是透明的)。假如这个时候正在发生一个读操作,在异常处理中你可以重新发起读数据命令,因为读操作不会改变数据库的数据;假如这个时候发生的是写操作,情况就变得微妙起来,如果是非安全模式下的写,就会产生不确定因素,写是否成功不确定,如果是安全模式,驱动程序会通过getlasterror命令知道哪些写操作成功了,哪些失败,驱动程序会返回失败的信息给应用程序,针对这个异常信息,应用程序可以决定怎样处置这个写操作,可以重新执行写操作,也可以直接给用户暴出这个错误。

三. 写关注

对于某些应用程序来说,写关注是重要的。它能判断哪些写操作成功写入了,哪些失败了,对于失败的操作,驱动程序能返回错误,由应用程序决定怎么处理。如果没有写关注,应用程序发送一个写操作到socket后,就不会管后面发送了什么情况,不知道是否成功写入数据库,这种情形对于日志类型的应用程序还是可以接受的,因为偶尔的写失败不会影响整个日志的监控情况;带有写关注的操作会等到数据库确认成功写入后才能返回,因此写关注会带来一点性能的损失。下面先分析复制集上写关注配置。

默认情况下复制集的写关注只针对primary节点,如下图所示:

aaarticlea/png;base64,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" alt="" />

    默认写关注w:1

当应用程序发送一个写操作请求时,驱动程序会调用getLastError命令返回写操作的执行情况(这一动作对应用程序来说是透明的),getLastError命令会根据你配置的写关注选项来执行。写关注选项的配置是针对当前客户端与数据库的socket连接来说的,因此配置项需要通过应用程序传递给驱动程序。当然如果你没有传递任何选项参数给驱动程序,getLastError命令会根据你配置在复制集中默认配置local.system.replset.settings.getLastErrorDefaults执行。getLastError命令的常用选项如下:

(1) 选项w

当取值为-1时,驱动程序不会使用写关注,忽略掉所有的网络或socket错误。

当取值为0时,驱动程序不会使用写关注,只返回网络和socket的错误。

当取值为1时,驱动程序使用写关注,但是只针对primary节点,这个配置项是复制集或单mongod实例的默认写关注配置。

当取值为整数且大于1时,写关注将针对复制集中n个节点,当客户端收到这些节点的反馈信息后,命令才返回给客户端继续执行。如下图所示:

aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAb4AAAG1CAIAAAAJKAZ9AAAgAElEQVR4nO3dd1yT98L+cWuHzzn98dhzbKmjp/N0nFrtoy1tnVW0gijUbcUFimgUEEWQpYI4UAGRJUsRFRWVFXGDSElAhiigyB5CQAgxIYSQkMD390cwddESTpPcuXtdr/c/iDU3X8KnYAgOkHYIAABAJQO0fgUAADoH6QQAUBnSCQCgMqQTAEBlSCcAgMqQTgAAlfUpnbnZGUciDgP1nYo5JnjcqPV7FQDt9Smd7m7Oenp6X2HU3gcffDBs2NCaqhKt36sAaK+v6Zw1a5YEo/bi4uKQTgDN6Gs6TU1NCUbtMZlMpBNAM5BO+gzpBNAYpJM+QzoBNAbppM+QTgCNQTrpM6QTQGOQTvoM6QTQGKSTPkM6ATQG6aTPkE4AjUE66TOkE0BjkE76DOkE0Bikkz5DOgE0Bumkz5BOAI1BOukzpBNAY5BO+gzpBNAYpJM+QzoBNAbppM+QTgCNQTrpM6QTQGOQTvoM6QTQGKSTPkM6ATQG6aTPkE4AjUE66TOkE0BjaJZOoViQn+gWfIVdWd3+7GvaqyvZV4LdEvMFYqF2rk3tQzoBNIZm6Wzic2Kdhht5hbGyeM++RlRRlsb0sY/N5re3aufa1D6kE0Bj/jLp/AsM6QTQGKSTPkM6ATRG99MpbSN5QVtWzx03bty4ubMnuW62/N8pXmGsrOp7BalRDGuP3dZT586w9/ALjU2Msjc5kFIY42UTEBLJekAIIXJCGjKCbEJDIs8/eNzGvRJkajR33Lhx4yxWbzmfR4iUEMLNYJ4Mtbe297CcOnWSR2RGeZ2W3+Beh3QCaIyup1Mo5rESV05carll7fZAX9/tTptmfas3cXMYK6s8i3Vs8+RPvlu1dd8eP+a1y6fjw7yMhm6MfXBhp8UiV7fg87WEdHWQlisHN27c5RuVmHX90r4FG2199uwN3Odgb79m4/IwdlmbRNqQFOm6wugHkw1eoQcDrmVXtwi0/Tb3NqQTQGN0PJ0dNS13/OaPnOISlnHrEZE0F94/bTV+yI/2inSGbZjy9ij7xMZiHiG8LFaYl9Fwh1hOeYLPQieXbS6XW7olgjb29k0u4YdOXWQlH9r83cSdN5vKWomoIjned8N347YnVApaHiZF2s6fPWHZrhzSKtX22/u7QzoBNEa309nVeKf6xOphMw6Esap4hDzzd53lWaww52nvLvTNaakRK9PpFMvh37vu4bTdfd5BtkjIKfQz3RSccDLlKits+7R3LH1T2TcLCwsLk88Huprrm+1nc6vKkyJtGYumu0XXE5Fc22/w7w7pBNAY3U6nqIqV6T1df9reXtLpZTTcMbae30SeSecjTmLE/oPrnU7f4+aGzTE5eDYjsyyLFbbG4JVX//76G6+/8cYbb7z++mtv/0PfbGdPOl1Xzg5M7SYdWn5z/2BIJ4DG6HY6uxryq45b9v5ZZ08rn0tnk/Tx7bPhke7WoVeOLDL2iLlRwmnKYoVtM3x76W7mtYuZiuVk55bUCWWSuqRIW7eVpkGphEi0/Ob+wZhM5htvvD52zP99/70BAPTP5k129E8nEVdz8w78PGqGeyQ7t5lIW4oenGNMHvLj5t9PJyGCnNiEHaYT55iMZ8RfLeJ2dFQWMf03fjt1d0ZTuZCQ9upK1pUgxVOPGnQpnYMH/6+nxzb/gwdow9Nj2+DB/7vGylLrVwIjR345YMCAkSO/1PqVqFVifOxfIJ2ktf3xr2etZtis2+HqffRo+P4Az8XfDJ5k/0fpJI9+vRG4btSQ8atO3y9slhAiai67zPQy2+gQ7Hvo6NHAvfudt6+1Opv5uL1Vp9JJvy/Ya6pKhg0bGh93RutXArNMjAcMGPD16FEnTxzl8xq1fj3apevpJEQuJvVxflZzZ4wePXHuXMvQI9vHrwk/l19QW5B/LnzdNL+rzUIeIUTw7IuktvRmgvc0v5SeFwkhPGFzst+0SUajR48ePWOulV9cPRHLCWlOi/cOdLc9na34Nk8KD+kENREJWwruZE+aNGHAgAEDBgyg392sH3Q/nYSQ7i65rLNTKpV2dnbK5TKpTN7V3d3d3d0ll3XKu7pJNyGEvPhil/y3Fwkh3aS7S94p7ZRKpdLOTpm8q7vnD++Sy2UyeZd23jYVhnSC+t4LH7z/r4EDByKdSrRIJ0YIQTpBze+FAU+meDQyLfWK1i9Mi5BO+gzpBHXIz8tcsWLpm2/+fcCz+4u/U5BO+gzpBHWIjzsz4GWz2bAu51aG1i9PW5BO+gzphD9dXW3ZQb/9L03ngAED3N2ctX6F2oJ00mdIJ/zpdmx3ffXVV5HOFyGd9BnSCX86dzfn3ro5YMCA90aM6ONzb+gH6aTPkE7407EyUp9+po2x0U/PPZuoj8+9oR+kkz5DOkHd3N2cZ5kYa/0yqADppM+QTlA3pFMJ6aTPkE5QN6RTCemkz5BOUDekUwnppM+QTlA3pFMJ6aTPkE5QN6RTCemkz5BOUDekUwnppM+QTlA3pFMJ6aTPkE5QN6RTCemkz5BOUDekUwnppM+QTlA3pFMJ6aTPkE5QN6RTCemkz5BOUDekUwnppM+QTlA3pFMJ6aTPkE5QN6RTCemkz5BOUDekU6mv6fzxxx/vYtReQEAA0glqhXQq9TWdr7zyymsYtffqq68inaBWSKdSn9JZVVGckX4dqO9WZnqbkKv1e9WfCOmkFKRTqU/pBNAWpJNSkE4lpBMoDemkFKRTCekESkM6KQXpVEI6gdKQTkpBOpWQTqA0pJNSkE4lpBMoDemkFKRTCekESkM6KQXpVEI6gdKQTkpBOpWQTqA0pJNSkE4lpBMoDemkFKRTCekESkM6KQXpVEI6gdKQTkpBOpWQTqA0pJNSkE4lpBMoDemkFKRTCekESkM6KQXpVEI6gdKQTkpBOpWQTqA0pJNSkE4lpBMoDemkFKRTCekESkM6KQXpVEI6gdKQTkpBOpWQTqA0pJNSkE4lpBMoDemkFKRTCekESkM6KQXpVEI6gdKQTkpBOpWQTqA0pJNSkE4lpBMoDemkFKRTCekESkM6KQXpVEI6oR9aOyVtmtFQXz19+vTUlCsau8VOSVunRKjtE1ZBp0SosZMJDjpka7Nek+8LrR9vb5BOUJlMKiIanFwu7+7u1uQtdnV1av2Q+66rq1ODJ9PV1dWlsZvr7u7qlLRq/YRfCukElcmk7Rr74NHKkE6KrLu7i7JfASCdoDKkk1KQTq1AOkFlwsYH5RknTmSU1/LEPfdxuZRwsq8mnT59JTO79rewttbevp2RdCqb0y6VP/UBISPCkuyLt3Ju13JV+1ASS9vLs0+dOB1xOU3l/1Z5u+dPR0REREREnTiVVt7OE3Nrb6ddjjh94lR2ebtU8fboWDrbKkozr5yLeG7PvEU6OqQTaKUx/9xZm/eGrDwal9+oKGK3mCdMtFo05bOPzLbYnq99cs/vfBDvvn31uH9vYzUIJL99QMjFhBPvb+0bEJpe3CWViZoqC+uaBWLJCx85z61L+rDxXsDq/3w94Qtr19D0YtU+DGXyjnrOVc/NZj+N/3LMmFFffDv6i5+92SllOZeDXK2/mPD1f1YH3Gt8KO0iOpfOurhI23nfDH7v32PGfD2mZ6O+mDD6i1Xe7LIy0dP/19KxIZ1AK4KSq6y9hvrTvMNYVTxCCCESAeeG04hta4y+sfYzDcp7cs9vuHXEzmmBoWlEFVcke+6Doqurq6u7u1tUxWX7zhlmE3ChsPyPPpBEVSy2r/G7jDNJdxq7VH7kqEnAObn1vbetdyQllcjlDXfqjluOeHuKdTgrq6Wr8U7SGca7xr5sVpWI6GQ6XVfODrgul7fLe9ZwJ+m45VtvT/EKf/I+0sUhnUAvzfl1V9wNP7QPuHSvihBCHrc2Xts9atnh4z5urn5blh3LJURKCCEFl/c4OcxYf+CuRNjZS+hEVVy2j5n++kPMgrI/+kASVbHYPkb662OZBU0qfxQ+Lm685DRq0ma/i/dqOwjp5LVWJHpM/cA+4NLlKtJUwIxdr2/ko7vpdFtpGpRKiPIz907evYrETVM/2PjkfaSTQzqBVmTtZY9LwtcM/c45KC2jiRDpQ979yBXf7YxJvRhzyGffip2xLaS9i5Dac0FurosswjIEEkkzK/70+dADewM93RycTmdXXo8+eD4hOSXz9qmQueM++9tXE2ba7YplFwgIITJCSm6G7NvLYDAYbg7O8dkCsZAQ8kw6y6rYsZeiQ+JLiFhGiKCAHRsYuO/Ji7U3kxOSDsYXPBILiuOdoy9lsKtERNwiqvg1+sLd+42tEkIIedz6KGn3129v2MNkltEwnS/8P0koFmTHOzu4MRgMxt59ITdLCOn5QqCpsDA5kNEzz8Ce90IXIS0F8advnAw9efLJawOTkwubCCGkS0JaWPEHd7oyGAyGwyanwxcr27hSQkRVFRmX/Dcdv3LRd+dOBwaD4bDz4GFWS5ukq/cbUqy2MPloIIPBYGxkMKKSC+ubkE6gH5m0sa0pNWDyO6s9z5wtksi496qSHU2tTyfnP8iNCwh32bSNJRRIutt/9XZ2cZ3hmcKVibqqIxyXLp5jNHfNOqeN9sey7gSsM3Rw9ohMzDsZZPr9p3/7ctyM9Z6nMu4KZLKO+pJr7nvXrl2z0Grl4pW//LTK5lRWziOh5Nl0Fsd5+NgumBfN4YrkpOJU5OZZhoa/WCcKH4u723/13uXpucg3s1HMv3/O4Whyekbl89+IKhOWVd/cPufLKa7hGdlNhFd89ZLLSGPfLNqkU9xw+86xZd8beB69UdZEJMJHOdmn7TbNW2O11Gq52bLly93cr5XUd8hkhFt7OTJs7ZJJi61WrrKymjN/xeaDe67VComsm1QnOS7dMvOn+UvXmFhZWlqZjJ+52nZfYnYtT9p2LzvAeqO5xeKFVlZLl60yXbxkx+WrZbxWXhYrbOuPg6czPB3WblpvtXDGnNlzvmdcuvO4Q9zrDXV3E2FtdsiRbYw1c6xWrVy1eNKitb5xiaVN7Ugn0IxM2i5tbczxGrlsZ/jhjCZh+U32/qlzQ+5m1ogFudHn/W2m+RTWCzurz9tu2eFiHlVMZCJSHeFo+M2ClbvDC8iTFx2cPZh5z31y1CUQ1l/zmfaZ8+Er12qJuD73dtiiLya4BaeUNsjlgtKUazsmf+Z08UoxT3AnJvoA4xO7yzX8jrZ0v6PuC2as2mIWVMJtE1Wc2uB9wNvtUq+PwMtFLXWZ509snj1mVcSZO/UCQsQ1mXdD5k7dz75ZLtTNdG5aONk5LD//Vn7PbiYdCbQfP9EzOb2MR+QNpSnBOyaPdLrYWMwjgsIzJ3dafDbN51q9UNCVx/TYbD/FNqiEtMkIKT4TGhBk7X+TQ2RyUp3kaDhvtOHMNWdyiFRKck5aTFs0z972bDa/Ospu2Cd2+65cqyWEV9yY6DDybQuPuPwHzVmssHUT3/popl9e9kMxqbp8aZfNe8OdYjj8JtLLDXV3yqWFpzbMcnXZF1VM5GIeJ371vHmb7QPTKjqRTqAXmbSdSPjdqY6m2496XChvKmDG2w23i+cUNBFSxmQecnj350g2V5QeZOrntyMwT9nKBWtsI5Mafjedoiou2+fnd9f793yZ2cSvj3UcbrQrjHWLx6tihfkYDV8fyyloIoSXlXHW38QsMpcr+jXI8YTfGqcjEWZO17j8EqaToZuzx28PVr0w3q0j4dbGb49wPF7Pf9TzRWsBJ95uuF284m9RdTCdxv955ZVXBv62IaOm/RxR2dQm6yaE8G6xwnYZDXeM5fCbCCGkrIDpv/7dn33Y3CpRHtNjqfX3pk43CF9CCOlWjBAZIdVJjoZuW3cE5ioekevmJDnaujmb7juneJf99j7ixDoON/IKY90qz2KFOU3TN9vL4laKCOFlscK8Zgx3iu1J58tuSCYi1ZFOhpuddzDzCCGkg3SnBpqudLM7wmxAOoFeZNJ2ImsjJYG2doHe0fG/Xj3uNnJ1dBmvvpOQjsLcc8HLPt16oSHFZ+kWv51nboqUrbTZ4h6f2fmH6dxlpv/xV5+OHGVgYGDwf2O//mLo6z9sCGOdSww557PcNebuvcbO9k5CZA/ykw5Zfbw07HZRuMPuE2F7QuKPrB21/XrjpX0LN+/ffuZmL08W5aYHeK8yM5xps+NSXV2HvOe7yTvbOx/dvxvnuepgXPivD3UwnfYLJjmG5OSwcnJyLvm6Lx438VsT20sSfkc3IYqEbfjh9aFffD32/wwMDAxGjfz0q4/1zXaxuVUiEZ9z83qYo+XnBuO/MTAwMFi+LfzsA/JbOp/6n1Bnpp+7i+v0dQduJ2z6eNLuwzfLmwghRNjWnBY47UOngEuX87JYYZ4zhtker+I3dvWk06gnnb3cUM+dYfz/Df/0SwMDA4NvDAw+/+Ctb+fbRiYhnUAzMmk76ZIQYUbYJle/vdsPHQ1ZMs4nrUkoIIQQTklqzM5vF0b+enjNL/t8DqWVk2dbSf4wnXvN9H9aznDzDFEsLCTk/M37jaUlNzNOu3ptdY7OFtQLCSGCalZMgPHnriei1iz3DY5MvM5KDpk5LyrR03T1od1Hc5pfiGaXpK2FdXj3KqvVDM/9SZnFQtKpfDa2sF6QHe281cv1dMbNGoEOpvOpv+tsr34Qv3fPqgXjlh5OKGvjShUJ2/rj4J+s9/ru6znVo5HHLuU2drTKCCGClprclJCQiJCQEOfFFkvtl3veLCEy2QvpFKTsdHR1MXYOL7+2/fsvnYOuFj8khJDHrY8u7v76m20hqWlFT7fyuXT2ckMykaw6wtFw4fxZDOcQ5U4nZzyobkc6gV5k0nZCugjhpniu3Ltu5koXz9k2lx487pAQQoioIT85dtXUXYdcfrY9FhBXLPjjdO4301+650xekYQQScPje8dtvpq5O4ad20qITNjxqPDaSfa9Wl4rETXknz2+auTMQ/nsGjEhRFh2I9Pr61Wb1hpahgfEFVcVs1KcJm3dOG/MlhMHrj98PpwyYXst69Rak0WLvHafvVvz7CvFNezcg8bvzg8+kf1QpJNfsD/7MFHT3VtR7jO/NVjk/2tGrVAiKs4/67Nq5LxD+dwaMSGSpkcP7lw+lV3VLhW315ZmZqRczC4RElk3IXlBHkutvzcNSiUyCalOcjRca7F+y9laIZF3E07m/uUb7NwYJzJ4BcHLhxp7HGXnthIiruHmHpz37vydJ7LvPOw9nb3dUFeHhHvJd5GFy7aoS9znn2mGdAKtKJ/DXhxl7jLv8+/n2Cw/w+G1y59kKLPIf7rlkrlGXpejcwXk99MpfsjLC1z+0fh1O46eK2jktovF/Px4++9cdkWEJ+Xnsy+nn/D45QevqLSy2he/r5NbxE1YZzbJYIrz+ehcgbgm866v4dRxEwy3JcTcERBCuuWdQk5RTSO3RSSX8e5XJtlOe/s7C/ej0TfzlatoFAgkpKmAGbN2yHu2Zy8VcQkN0kkIryyV6Tby0+9tdp7PKxE01d85E7XmWxu/1ISU/Pybp097ey6e4n+lScjj3kzYucXazGZ7cj47Nz8/ZofjSnuz9WdyiEyqeJho8vRpNkeS82/l5oftmGtibx90ppgnbLrgP2UUY0toSFJ+fsr5FG/L0QY7DqWV1fJ6T2evNySXEs5N/2V7XFx2x+Tn52bmJ3tvnr9zb1B6MdIJNPPbj//IC9yxdM5IQ8eIKvLb04WaCjgnlo4Y8qbRDiZT8W3uv5NOIhJxWRFm7341ZOC3yzyC8wghHd3dKUGmP3w7cODAgUPeGmrmmdGs+Oai59MpquKyPc3eHbxEcUNNBZwTlsOHTLYKY2XxCFE8x2nre5a7wo/c4jUVXDi57JUhf3/2wZSBA2d6XLhQ3vN9nTMOsGjzzUmENPHrjzsOH/KhsYfHhXJCHvHrjzuOePvDgQMHDnx/1DTHiMruNhkhpLu7jMncYfzkVP5jbBuZyOnuVv5d55xvjIyNBw4cOHDgK/+xCo3MaukmhMjauivDHQ2/el/xPnr3yfvod9LZ6w0RQkh3dy5zx1LjgQMHDvyfgQMN1oRmKG4H6QRa+S2doiZOZXlRycNmCelSPl2os72zpfJufl4ph8/vUHxkdBFJ88OSh3Ucvuj5F7u6ZG3NZXeK8nPuV3KaRISQLkJam8qK7+fk5OTk375TxmmTKb6l+vl0dklkbZyyO7crFTfU2d7ZUnU3/0F1c5ui413yzta6u1WcZq5I1tnOb6nMyc/LeW6Ki9Ttb4nvaObW1leVNbUS8tSP0uyUd7bU3c0vKOVw+B2/vZiTk5Nz95l3WQefzyl9ch5FpbVcfif57WEie/tdiT2vLapu7nlCbc97sOjuc+8jmaitmVN6t47XKe8kL7z48hvquSfxOZWlOTk5Obk5OfeV70GkE2hFWz907r96IubvTrfTqZYfOveSR9g1P6QTaEVb6ZRwC+8nbJgwy85lx9n+/NC5l49bezvt7A4Xu1kTNiTcL+RKCNJJCNL5h5BOUJn2ftQxT9h80X/GFJMx61X/oXO9rTg91HX9GJMpM/wvNgsVP2QI6SRETgjnpr91UEDomT/poPsxpBNoRas/Jb77yY+r+9P+taLu7id/5pNfQTp/OxkN/7NQz18A0gm00topbdOMBk7NzJnGaTeuaewWO6U6+C9iaupkQg8H2dvbafAdgX8RE6Bf8O+wUwr+HXYlpBMoDemkFKRTCekESkM6KQXpVEI6gdKQTkpBOpWQTqA0pJNSkE4lpBMoDemkFKRTCekESkM6KQXpVEI6gdKQTkpBOpWQTqA0pJNSkE4lpBMoDemkFKRTCekESkM6KQXpVEI6gdKQTkpBOpWQTqA0pJNSkE4lpBMoDemkFKRTCekESkM6KQXpVEI6gdKQTkpBOpWQTqA0pJNSkE4lpBMoDemkFKRTCekESkM6KQXpVEI6gdKQTkpBOpWQTqA0pJNSkE4lpBMoDemkFKRTCekESkM6KQXpVEI6gdKQTkpBOpWQTqA0pJNSkE6lPqUzIe6M1WpLoD6HzRubH9Vq/V71J0I6KQXpVOpTOt3dnD/44ANrjNozMjIaNmxoTVWJ1u9VfyKkk1KQTqW+ptPU1JRg1B6TyUQ6Qa2QTiWkkz5DOkHdkE4lpJM+QzpB3ZBOJaSTPkM6Qd2QTiWkkz5DOkHdkE4lpJM+QzpB3ZBOJaSTPkM6Qd2QTiWkkz5DOkHdkE4lpJM+QzpB3ZBOJaSTPkM6Qd2QTiWkkz5DOkHdkE4lpJM+QzpB3ZBOJaSTPkM6Qd2QTiWkkz5DOkHdkE4lpJM+QzpB3ZBOJaSTPkM6Qd2QTiWkkz5DOkHdkE4lpJM+QzpB3ZBOJaSTPkM6Qd2QTiWkkz6jRzr5vIaoo2HBQQcV9uz2HDx48Lq1VspfCQ46WF5apPXr/GtCOpWQTvqMHulUfJo5oJe9/vrro0Z9lZpySevX+deEdCohnfQZbdI5fPiw3tJJgzdQpyGdSkgnfUaPdIqE3Nt5mRMnjkc6KQjpVKJdOrskpCXjvO+5eGZBjbavRcOjRzoVZpkYv9jNUaNGHosK5/MatH55f1lIpxI90xnndy7+AtKpww75+4wd+3/PpRMftFqHdCrRLp1/4dEpnYp73XNfqtvZrtf6Vf3FIZ1KupbO7m5Cun/bb7/8zK89/apnXqd8xYt/xEt+a69/xDP/Uc9v+PPfVlVHs3Ruc3d+5ZVXlOl0d3PW+iUB0qmkQ+nkFiZGn3LcEB7uPnny+LFjx45d6mYfW0zkYsJJ8N/rt9li6YZ5JlOn77149/j2tX4BoenFRCzm303YNN3vkNdmG5t5Y8eOHT91rPvF9MyExP1PvVjGI4QQXlnzRXejqePHKmaywsg/p1koJdz0xOjgDRYb3JeNH/+9+4YNJkt3udnHFisvq7UwMS5ye89v1upols7a6lKfA3uRTkpBOpV0KJ0NWZEuTuO/njxtA8M/2DfczcZy6YKFzkFpNW0lYY7zjOaYWTodOHU8OrX8XrCtoYOzBzOPiERcdoSZvtG8NavcgiPCfQ8dXG/07ewllq4e+4Mjgvb4uS35eizDL6GwUtRUdysqdPa3xusP7vAND99lY7Nk1pCJrrHFAm51UqTLMqMfZm3YezQ4NO3yaWeHDXa/MM4+IERGCCGC4jgPH7sFc6M5XJFcuwdEs3RKOwTxcWcU3WQwrG9lpmv9egDpVNKtdNpu+nHMhGVxv/LEQlKbc8TJ4Wezcd6ZTYUhjoYTl6w+cKyYEJmIVEc4PptO4+W79l+qEpDHrY1Ju79+e+r8XfsvVQmkjfx7x2xHjXEMSU3jNNUXXDjpsPVktqBeSEhTRlrQxm/1zfawuVXlSZG2C2ZPWL47l7RKCRFkxXs62S3YeqyeiOSEtBdc2ufg+Mv6wBLSJtPyATGZzMGD/3f3Lo+gQD96WLvWSpHOtWuttH4xEBToZzLT6KuvRmr9MtSKmXSehun0WmnqlEr4EkIIac2NPrpn9bD156rzAx0MzRmboi9zX55Oh0NMZhkhv/9il0TWxim/m38nNzc3N/6039Zf9M3296STsWi6+3EOaZcTQrh3YrZ6r52zOkHIE3d1lseEOW63sozJJUTLX64TwmQyFU+2+WbsGOi7YcOGDh48WOuXAX9o1KivXn/99U8++Vitt9LHRyN1OJ2kjMk85KA/y5+d67++p5X/RTpFlc0sT7N3B//zFcX+OVjfzLMnnW4rTYNSCVHcLO/WkbBdFsMdUzn8joYkxwP+BxyZDVo7ladGvy/YNQNfhOoKSv0sGB1O57Ofdf536cwrvHNuv9UPv7ifuHmJdfv27cQzB52f+qzzmXTKRPmZsQErvvK82vjgrKftQZ+wUxWd2juW34Z09g/SqSuQzv6tISvSdtPMHya6ZhQLJBJSkxPp6LpwwdwjZdx7oY7/ZTpTr1/dZ/PZUOvQksccGWkqOBG1efo3+ma7X5ZOQlpr2GeDZ323N+HYOgoPmMgAABzzSURBVEtP3+DLBe3aO5WnhnT2D9KpK5DO/k3xMNFnYxd4uvgHHzrs4sRYbcM4EHdPJC6L+G/Tyc5hRbhN+XTG2v1++w8f9tu7yc588tQvxzlfayopfjGdRFiexto5erb5XKM1RyMuVQm0dibPDOnsH6RTVyCd/VtDVqSt1+wvLO23jZ8wycDAYLadT0A6l8jFhJMYwPAPCv/1ASHPvigW8wsSHWb4n/n114eE/N6LrZy78RErDKaMMzAwMJhtt21rQPhJ25n7rjeXl6Un+YR4bD77zANB3HsNZ60/HfL+4v1Xrz/U1oE8P6Szf5DOvquufHC/6La2bh3p7N9eeJhIixNVclkHzN7dcOhCQbm2r0U5pLN/kM4+koj57m7Os2fN7Gh/rJULQDr7NwqlU/wwO+/wgo/Mj5zPrdf2tfw2pLN/kM4+srVhuLs5R4QF/zTdkFNXofkLQDr7N2qkU3A347S/y2KLJUarbS7eK+KJtXcpzw/p7B+ks49mmRiPGfP1T9MNtXU3Qzr7N0EVO/bSseC4EiLW4vN2BAXs2ACPda4OW+OyBWKh9i7kxSGd/YN0/iE+r+HokVCHzRu/GTvm/ff/tZ5hfdBvv+b/hSikE1PLkM7+QTr/kLJZirPSVsKQTkwtQzr7B+n8fRIxv6qieMSI4QlPpXPEiOFx509LxHxNXgnSiallSGf/IJ2/L+X6pR9/nHTtygVu00PFWYmE3PzbWSuWmwcFHtTklSCdmFqGdPYP0vn74uPOKO9XT5/VLBNjDf8QVaQTU8uQzv5BOn9HJjttz27PLQ72zY8eSjsECfGxAf4+ilcF+Pu4uzn38Ue0/SmQTkwtQzr7B+ns9+Fo+OiQTkwtQzr7B+nsTc/Th2bP7O03bHN30eSTi5BOTC1DOvsH6eyNzYZ17m7OJcV3e/sNtdWlEeEh0zX15CKkE1PLkM7+QTp78+IDQXHnTx/02//0rzz9IJK6IZ2YWoZ09g/S2ZuAQ76J8bG/f1a3c9mOWzYpHkRSN6QTU8uQzv5BOnXlrJBOTC1DOvsH6dSVs0I6MbUM6ewfpFNXzgrpxNQypLN/kE5dOSukE1PLkM7+QTr7LjE+NuCQr7ZuHenE1DKks3+QTl2BdGJqGdLZP0inrkA6MbUM6ewfpFNXIJ2YWoZ09g/S2XcvPptIk5BOTC1DOvsH6dSVs9LJdE6aNCkbo/Z8fX2Rzn5AOnXlrHQvndu3ubyK6cLee28E0qkqpFNXzkr30vmwpjQnOwOo787tWyIhV+v3Kt2CdOrKWeleOgFoDOnUlbNCOgEoBOnsOzybSAnphL86pFNXIJ0AFIJ06gqkE4BCkE5dgXQCUAjS2Xdx5075+e7T1q0jnQAUgnTqylkhnQAUgnTqylkhnQAUgnTqylkhnQAUgnTqylkhnQAUgnTqylkhnQAUgnT2XWLC2cAAP23dOtIJQCFIp65AOgEoBOnUFUgnAIUgnboC6QSgEKSz7/BsIiWkE/7qkE5dOSukE4BCkE5dOSukE4BCkE5dOSukE4BCkE5dOSukE4BCkE5dOSukE4BCkM6+w7OJlJBO+KtDOnUF0glAIUinrkA6ASgE6dQVSCcAhSCdfXf+3Ck/H29t3TrSCUAhSKeunBXSCUAhSKeunBXSCUAhSKeunBXSCUAhSKeunBXSCUAhSKeunBXSCUAhSGffJSWcDcKziToEUqQTAOnUFUgnAIUgnboC6QSgEKRTVyCdABSCdPYdnk2khHTCXx3SqStnhXQCUAjSqStnhXQCUAjSqStnhXQCUAjSqStnhXQCUAjSqStnhXQCUAjS2Xd4NpFSn9JZVVGckX4dqO9WZnqbkKv1e5VuQTp1he6l093N+ZVXXnkdo/ZeffXVYcOG1lSVaP1epVuQTl2hk+n88ccfCzBqLyAgAOnsB6RTV+hkOk1NTQlG7TGZTKSzH5DOvjt/NsYXzybqEEiRTjoN6ewfpFNXzgrpxNQypLN/kE5dOSukE1PLkM7+QTp15ayQTkwtQzr7B+nUlbNCOjG1DOnsH6RTV84K6cTUMqSzf5DOvktKPBcUeFBbt450YmoZ0tk/SKeuQDoxtQzp7B+kU1cgnZhahnT2D9KpK5BOTC1DOvsH6ew7PJtICemkz5DO/kE6deWskE5MLUM6+wfp1JWzQjoxtQzp7B+kU1fOCunE1DKks3+QTl05K6QTU8uQzj46dzZm+XJzpa9Hj3rvvRFP/4rPgb1av0hqQjqVkE76DOnsI3c35wG9z+Dbb7T4hBmKw7OJlJBO+gzp7KPQw4Gff/Zpb+l0d3PW+hXCSyGdmFqGdPZdfNyZl3bztdde27HdTeuXBy+FdGJqGdLZd72l86Df/rracq1fHrwU0ompZUhn31WW3/c5sPettwY/l06KfFhS1rmzMVp8DA3p1ImJJaJy1pHEnHsNjR3avpa+DelUieLjUBnNN9/8+8oVy/LzsrR+YVSGR9iVkM7e1sTnxDoNN/IKY2XxtH0tfRvSqRJOfeXsWTP/8Y+3FOnE0fUF0qmEdPY2pPMvYZaJ8YABAwYOHPjB+//C0f0hpFMJ6extSOdfgiKdkydNKLyb097WovXroTikU4lK6axOSQj1sLCwsLBYbWHhEZVWViFSvKKTkOIU/50eFhYWFg4b7GMz+e2titdImoXlif52jA0WFhYWFg47/WOLSXsnIYQQUUVZWpSHhcVqCwsLCxffk+n5fEK6JISbHrvvdJRvQFSUi4WFhYWFhUtUWrriljrbSXGs/04Hxe1YHHRf85ZhTzpbH/Izw+w3WCv+EwuHnfaxxfz2TsLPT7903meXT5iHtfXqMB8fB4+oUP+UauXbJKpIT2NG9PxmNe+5dOZkZzz9DBl4qffeGzFgwIDnnk0EvXnxmVeatGD+3L/97W9Tp/6o1lvp4+NgFEmnnJC6gpDt21dbzF5la8tg2M6dY+55Jjq3UUQ6O8UP7yc77Vm/gbHcdt2KNSuMLdYey8hqaO0gfG7JRabLwl/mrV+92tZ2zcI1llarnFmFAomYNFXdCIvcaD5nri2DYWu7eJGF9e5tMQV1MpG8OsLRcMF84+U2u11sGda2c8f+MNfLM/ZeExFLBHdYzrMWL1oxe7ntOvs15jZzJ/+/SU5hrCwen1sYn2A9ZfyctUtW29ounz3b+Kd3TP2uVwpba5Mit68xGmeydqODjW10yIHlFgzGQqfkOkLkhBAiqrzo7b9l8dSg0uY2mToPkJAX0pmfl7WeYQ1AGytXLHvzzb+bmBip9VaCg/x1KJ0SQlKDTBc5MULO1RAibSN5wY5eUX4X7rV08YUPr+yf+h+X0KspdaSDk5d/xPyrcS5B10o4bQU559wXfPi9W/Kj0seEtN4rSIyyNwtO5bY9lmbGu62ymrh8Tx5plRJSEn1g9frpJr6XRKKOqghHw2+nz3H2Sm0hEgFhb180jrHKg5nXWc8rOWz579GbD6bcVNxQ6Pyv/jHJJoyVxasrZ0XuMzbbd4Vb/piQupSrB9Z8om+2i82tKk+KtP3ZZNyi7WwikBDSknrK2Xnt3F1xAiLuIkRadiNgk9vSJ5eh5uELdqA3fMH+4iSEpB2eN2Hdsh0BmRLFOuVdXd2EiKq47ANm+ut843LvSyQSSV1TdczmYTO8wlhZt5hM/836ZhFsrkj03J/HSYq0c1thFnyDEAkhhNy+4OHsMG1LeJlIVB7haLjQ2u4Is5EQmYhURzgaOjh7MPOaCurPMIbP8AljVfEIeeHvOru7u+SdUolUIpFI7ufG+a7TNzvQk07rBYZOkTVEJCOENGYf3bjLwtThehe/g3TXJ0bauVn8HJLWcxnqHdIJ9IZ0vrhuQtpaapgxLpYL/z1KsXUhN2/WKtLpZab/wRcffPrZqFGjRv3nyy8+eef179eHsa5ePXbUbcnL01kQttvJzcjufCkhMkIIqWUd3uhhvsD9pkhQEuFoaOvonpAleyadGTWZOb4m707zfnk6xXX8O4dtfxw3YdSoUaM++/SDLz7QN/PqSefW5bMOXpaSjm5CiKzhZlDwtmVf7sxubJU2X/fw2++96diDNkK61Xl8iiGdQG9IZ29reXgn/VpUVFRESJTTzFnzvNyP36kWVXHZ3mb6xpYbvfZFKXY8KuoCu7Sp7vbZ2L1rX57OilMBm9wWLIvKIURKCCHF1/ZvcTG19r0jEpY9+TSTPJPOW5y80iNLh/20/yXpfFhRdv3Izl8sN3uFHgqLiora57XR0ljfzLsnnW4rTYNSn3xeKWnOSIne8/NEv4ymqss+dn6+IRGFYvUfHSFIJ9Ad0vnCujpJ631W/KXU9PtVIkIkfJLqZPq99VIPZp60kX//5MbRM3adZGXzCelsFTfkJ0fevFvF5Tez0qKcfzCwirzN44gJ6WhsuMdOiEzOaxC3tqSecrRdNc0pqo6I5IQ0JR+xt18yY+fZJlF75cvTmScsb87wmvrtL16nc+/xSWdraeV1V9N3pjqFsbKK0lL8No4eujKwiPdQSvhVyfG7l07TN9v7snQS0lyednrfROPAtHjnta5+AQm3WtV4ck8P6QR6QzpfmFxMGphBlqs2MHbvY7LZadfZAWvnmbptCWWVkA6x4C7TaaKrZ0hILJudmnD1yHbzyXuPp5fXkbry9OBdE8ZY7rp4KpnNvhx+1MvWbKJT1F0Bp6OEFbrFzXTe2gD29TQ2+6i7w8rN8zeez5OJpNW9pJM8bmu+FDxjDGNT0KFYdvrF6FOesz8fPNEmjJVVcDPl4OavPly688LVZDY7MXyr47wvR35k6J7WXF7yYjrJ4+Kr17Z+uNTe2mhFaNC5ey1qPLhnhnQCvSGdvez2Ya+V4wYNGjRokN6gQeMZkezsnu9FVzyINHHcoEGDBg1951/zd2e2VCu+RBdVt2Tunv+vd4YOGjRo0KBPJ85zSSMCRcN42exIxvhBg/QGDRo0aLTppqhkxeNCNUddjJzcvS7eJr29OOaTQYOGjhkzffcB63eM90ays3m8anbk7vGD3tEbNGjQoE9MVy5x9To4+0O78w2FBclRm3ZYzTuc9vQDQU0FnJPLRwzRm+l5Iblc7cemHNIJ9IZ09jIxr6muoqioqKjoXlFRRT2vvV2ueEU3ISJeTWVFUVFRUXHxg9qmdrm0ixBCSJdU3t5U+6C4uKioqKiopLKmUUTkikdk5O3tvPqKoqJ7RUVFRWU1DY+FMkK6u4j0cWNV46MmoZj09mJ5SVFRcXl5VVNzfXF1M6+9XS6XtvOaKoqK7xUVFRWV1NQ9bGziVpdwBLKODuHjhkf1NTzR0w8ECcub07x+0jffdTbvnvq/J0k5pBPoDemk+SQNt4uiLUbOCjiVWaOpv+ckBOkEukM66TtR1f30pCM7trksXTovKiuHI9TkjSOdQG9IJ33XknHBb9OS8fOMzYKvcNsea/bGkU6gN6QTU8uQTqA3pBNTy5BOoDekE1PLkE6gN6QTU8uQTqA3pBNTy5BOoDekE1PLkE6gN6QTU8uQTqA3pBNTy5BOoDekE1PLkE6gN6QTU8uQTqA3pBNTy5BOoDekE1PLkE6gN6QTU8uQTqA3pBNTy5BOoDekE1PLkE6gN6QTU8uQTqA3pBNTy5BOoDekE1PLkE6gN6QTU8uQTqA3pBNTy5BOoDedTKeJiUkHRu3FxcUhnUBjOplOPT29kRi19/777yOdQGO6l87cHNbRyFCgvtOnogWPG7V+rwJQB91LJwCA1iGdAAAqQzoBAFSGdAIAqAzpBABQGdIJAKAypBMAQGVIJwCAypBOAACVIZ0AACpDOgEAVIZ0AgCoDOkEAFAZ0gkAoDKkEwBAZUgnAIDKkE4AAJUhnQAAKkM6AQBUhnQCAKgM6QQAUBnSCQCgMqQTAEBlSCcAgMqQTgAAlSGdAAAqQzoBAFSGdAIAqAzpBABQGdIJAKAypBMAQGVIJwCAypBOAACVIZ0AACpDOgEAVIZ0AgCoDOkEAFAZ0gkAoDKkEwBAZUgnAIDKkE4AAJUhnQAAKkM6AQBUhnQCAKgM6QQAUBnSCQCgMqQTAEBlSCcAgMqQTgAAlSGdAAAqQzoBAFSme+ksLy1KvX4JqC8jPaWttVnr9yoAddC9dLq7Ob/66qtvYtTe//zP/wwbNrSmqkTr9yoAddDJdE6dOvUBRu2FhIQgnUBjOplOU1NTglF7TCYT6QQaQzoxtQzpBHpDOjG1DOkEekM6MbUM6QR6QzoxtQzpBHpDOjG1DOkEekM6MbUM6QR6QzoxtQzpBHpDOjG1DOkEekM6MbUM6QR6QzoxtQzpBHpDOjG1DOkEekM6MbUM6QR6QzoxtQzpBHpDOjG1DOkEekM6MbUM6QR6QzoxtQzpBHpDOjG1DOkEekM6MbUM6QSakYj5fF4Dj8tRuH8vf+jQd0/FHFP+Co/LaRfxtHJtSCd9hnQCzdQ/LJ8wYdxnn32q8PHHH7322msjhg9X/spnn3167coFrVwb0kmfIZ1AM4qv0Af0srfeeuuQv0915QOtXBvS2dvaJW2l6aHnswrqGzq0fS19G9IJNMNtqtu+zeXjjz58aTq1e29HOntbE58T6zTcyCuMlcXT9rX0bUgn0NIsE+MXu/nPf/5zzhzThvoqbV0V0tnbkE4ASpg/b84bb7zxXDpnmRhr96qQzt6GdAJQQlVl8XqGNdLZ+6qunQ92Mzc3Nzdfbm7uFpFaWt6meEUnIfeuHdjmZm5ubm5nvf4U63F7q+I1kiZhabzPutVrzM3Nzc3tth04dY+0dxJCCGkrL02NcDM3X25ubm6+xTs67TafkC4Jab5xatfJCG+/iIgt5ubm5ubmWyJS0xS31NlO7p06sM1OcTtLfdzWvDW1J52ttY9ZweutLRT/ibndtvWn7j1u7yT822kXYr13eAe7WVgsD/b2tnOLDD5wrUr5NrWVp6UmHO75zWoe0gl05e7m/HQ3584xS7l2UbuXRJF0ygl5eCfQfdvqVXPWOjhs3OiwcJ75jtNR2Q0i0tkpri1M2Lx7g53NKgc7K8bqWSutItPZ9YIOwm9+cCHBcf6SRRvXMhwc1pszVq+x2JJ+ly9pJ48qUw6H25rPW+iwcaODw7Illmt2uUbfeSgTyasjHA3nzzNebrN3u8NGG4eFBuPm7NxxuugRaZfwb6dvmfnLYss5qxzstjBW2M6Z+P8mOoWxsnj85rvnz6+aPHGB7QqGg8OqOXNMZrwz68CVCqGgNilym5XROJO1m503bY4JP2i5isFYuOXCQ0LkhBAiqkjee9Bh8bSQ8uY2mToPkBCkE+gr+UK8mdksZTrd3Zy1fkkUSaeEkNQg04VOjOCz1YRI20h+qMve4wEX77fI+cLaS95TRrqGXUupJx0Nt+9ELRs9bmvQ1Qf1rXezz7rP+2j89otNZXxCWu8XXTjuOD80raWNL2XHua22mrjSO5+0SgkpPe5jtX6Gic/FNlFHVYSjocFPc1123Wgh0laSuWPxeMYqD2ZeZx2vOHjlp2Mc/FPTFTcUvmj0PybZhLGyePUV7Cgfs/k+11oq+ITUp1zzWfuZvtkuNreqPCnS9meT8Yt3ZJJWKSEtN067OK+bu/Mcn4i7CJGWph7a5Lr0yWWoeUgn0Fh83BlFN78a+WVkeIjWr4c66UwPWzR5/fLt/r8KFRNLZbIuQkRVXPYBM33r/bGZd4RCobCyrjTaftiMnWGsrFtJSQc36ZtFsLki0XN/Hicxws5txc8haYRICCHkdrLnVodpDmGlIlF5hKPhQmu7oxcaCZGJSHWEo6GDswcz99HdujPrhs84EMaq4hHy/N91dnd1y6XitrY2oVAovJMZu99a3+xATzqtFxhuPVJDRHJCSGN2lP0uS7NN1+T8DtJdFx+50d1iXmh6z2Wod0wmc+jQd+8V3W5prgegmZiTUYp0xpyM+nP/ZMHjRt1NZzch7fz6i6ddLed/8LliqwNv3KhRpNPLTP9fn4748KPPP//883//+5MP/vna94ww1pUrx464Lnl5Ou+G7nJym7ExrowQGSGEPGSFbvRcOt8tTSQoiXA0tHPclnBL9kw6M6ozc3xmvjvN++XpFNc9zg9mjP/mu88///zzjz4c8em/9M28etLpvGLWwSudpKObECJrTA8O2b7sC4+sxlZp89Xtvge8Nx8vbSekW53HpxiTyXzttdc+/vijp59rAUAPI4YPV6TzuWcT/ffWrFmlu+lUjFdfyL4RExMTHRHjNnvWHE/XqNtVoiou29tM38Rqi7dfjGKnY2KuZJc3c26fi9277uXprDwdsMlt4dKj2YRICSHk/rX9W1xmr/W7IxKW9bQyjzyTzlucvLIjy4b9tP8l6awtL70asX2BhcPeoyFHY2Ji/Ly3WJnom3n3pNNtpWlQ6pPPK6Vcdupx77njfdKbKi/tt/PzCYksEqv/6AghhMlkKp5fEX0sEgD6qH+POFEjnV2dRFCYfpZ57UZRhYgQCZ+kOpl+b73Ug5knfcQvjtn09U9eJzKy+YR0CsSc3ISQlNuVzXwu6+Yx5/HfWIbn8urbCeloqC/49WxIQjZHLGhJPeVku2raliMPiUhOyKMLkRvtfzHyOtcsaq98eTrz2iqaWbumfbNwZ0xOEZ90Ckoqrmyd9c5UpzBWVtGNFN+No4ZaBBXx6qSEX8k8v/OXqfpme1+WTkK4FTdPH5j806HU807Wbn6Bidmtajy5p4e/6wTQGGqkU95BGpNDraxsGDt3n09Lu3YxzW/N/J+3OUVklpKODkFBsusUN4/AwJNpaZfPJYe5LzXcfzKjop7UV2Qc3vvjtxYeCdEJaWnMkHBPm5+nuEYXCBo6SjMjnLb9PH+NX9rFa2lpYS6bLbYsdEjIl4mk1b2kk/DbuFdCZxmstz/kezLtetLRE56m/xk80SaMlVWYnurvMPrDX7bHJSekpZ0Lddoyf9Toj6e632guK3kxnYT/4FqKy8dLbK2MVoYFnb/fosaDe2ZIJ4DGUCOdit0J27N6kp6enp7eED29ybZHs3IeK16heBBp6iQ9PT2990d8vNj7Vkt1OyGEkPbqllveiz8e8b6enp6e3pdTF21LJwJFwx7nZB21naynN0RPT0/vm7mO0RcbCZGLSM0x91muO/ZcukN6e/G7L/T03v/uO2Nv3/UjZu8/mpXz+HF11lHvyXojhujp6el9MXf18m17AuZ8tjm+oajwYrTjzrWLwp55IKi5kBOz4l9DBs/amXyxQu3HphzSCaAxVEpnB7+lsba0tLS0tKy0tPaRQNwhV7yim5B2Pqe2trS0tLSivILTIpZ3dhFCCOnqlItbOBXlFaWlpaWlVbUcbjvpUjwiI+8QCx7VlpaWlZaWllbXNwnaZIR0d5FOAbeumdsi6iC9vVhTWVpaUVPzsIX3qLyOJxB3yOWdYkFLbWl5WWlpaWllfWMDt+VxfWWTUCaRtAmauI0c/jMPBLVVNN/cPUN/2Z5zeffV/o3wvw3pBNAYKqWTLpM03C48tvJL08BTmbVCDd4u0gmgMUjnnzpRRdGNuDBXV8clyxZFZ+c2tGnyxpFOAI1BOv/UtbAvBjitmLLYbH7otZY2vmZvHOkE0Bikkz5DOgE0Bumkz5BOAI1BOukzpBNAY5BO+gzpBNAYpJM+QzoBNAbppM+QTgCNQTrpM6QTQGOQTvoM6QTQGKSTPkM6ATQG6aTPkE4AjUE66TOkE0BjkE76DOkE0Bikkz5DOgE0Bumkz5BOAI1BOukzpBNAY5BO+gzpBNAYpJM+QzoBNAbppM+QTgCNQTrpM6QTQGOQTvoM6QTQmL6mc+bMma0YtRcbG4t0AmhGX9P55ptvfopRe8OHD0c6ATSjT+nMv5114vgRoL7z504JHj/S+r0KgPb6lE4AAHga0gkAoDKkEwBAZUgnAIDKkE4AAJX9f5puJRy2pV62AAAAAElFTkSuQmCC" alt="" />

    写关注w:2的执行流程图

(2)选项wtimeout

指定写关注应在多长时间内返回,如果你没有指定这个值,复制集可能因为不确定因素导致应用程序的写操作一直阻塞。

下面通过一段代码对上面的描述做个回顾,在C#驱动程序下连接复制集并插入一条记录。

//实例化一个客户端的连接属性实例

MongoClientSettings clientSetting = new MongoClientSettings();

//设置属性准备Servers为要连接的复制集中的所有成员实例

List<MongoServerAddress> Servers = new List<MongoServerAddress>();

Servers.Add(new MongoServerAddress("Guo",));

Servers.Add(new MongoServerAddress("Guo",));

Servers.Add(new MongoServerAddress("Guo",));

clientSetting.Servers = Servers;

clientSetting.ReplicaSetName = "rs0"; //设置属性复制集的名称

MongoClient client = new MongoClient(clientSetting);//根据设置的属性,实例化客户端

//得到一个与复制集连接的实例

MongoServer server = client.GetServer();

//获得一个与具体数据库连接对象,数据库名为students

MongoDatabase mydb = server.GetDatabase("students");

//获得数据库中的表对象,即scores表

MongoCollection mydbTable = mydb.GetCollection("scores");

//准备一条数据,即声明一个文档对象

BsonDocument doc = new BsonDocument

{

{"stuid",},

{"subject","sports"},

{"score",}

};

//将文档插入到数据库中

mydbTable.Insert(doc);

上面代码向复制集中插入一条数据,但是客户端的配置属性都是默认的,写关注w选项值为1,可以在C#的驱动程序中通过MongoClientSettings这个类来设置客户端的连接属性,包括写关注等;上面的代码也没有具体指定连接到哪个节点,但驱动程序会默认的选择primary节点;当primary节点宕机时,复制集重新选择出新的primary节点,驱动程序尝试重新连接新的primary节点并完成插入,这个动作对应用程序透明的。

四. 读参考

  读参考是指MongoDB将客户端的读请求路由到复制集中指定的成员上,默认情况下读操作的请求被路由到复制集中的primary节点上,如下图所示:

从Primary节点上进行读取能够保证读到的数据是最新的,但是将读操作路由到其他secondary节点上去后,由于从primary节点同步数据到secondary节点会产生时间差,可能导致从secondary节点上读到的数据不是最新的。当然这对于实时性要求不是很高的绝大部分应用程序来说,并不是大问题。

  关于读参考还有一点需要注意,因为每一个secondary节点都会从priary节点同步数据,所有secondary节点一般有相同的写操作流量,同时primary节点上的读操作流量也并没有减少,所以读参考并不能提高系统读写的容量。它最大的好处是能够使客户端的读请求路由到最佳的secondary节点上(如最近的节点),提高客户端的读效率,MongoDB驱动支持的读参考模式如下。

1. primary模式

这是默认的读操作模式,所有的读请求都路由到复制集中的primary节点上,如果primary节点故障了,读操作将会产生一个错误或者抛出一个异常。

2. primaryPrefered模式

在大多数模式下,读操作从primary节点上进行,如果primary节点故障无法读取,读操作将会路由到secondary节点上。

3. secondary模式

读操作只能从secondary节点上进行,如果没有可用的secondary节点,读操作将会产生错误或抛出异常。

4. secondaryPrefered模式

在大多数模式下,读操作从secondary节点上进行,但当复制集中只有一个primary时,读操作将用这个复制集的primary节点。

5. neares模式

读操作从最近的节点上进行,有可能是primary节点,也有可能是secondary节点,并不会考虑节点的类型。

五. 总结

当MongoDB向复制集中的primary节点写数据时,也会将写操作日志oplog写到primary节点所在的local数据库中,因此对复制集的写操作会产生两个锁,一个是集合数据所在的数据库上的锁,还有一个是local数据库上的写锁。

复制集中的secondary节点并不是实时地同步oplog日志,将数据的变化反应到secondary节点上,而是采取周期延迟批量写入的方式,secondary节点当应用写操作变化时,会锁在数据库,不允许读操作发生。

MongoDB实战指南(七):MongoDB复制集之复制集工作机制的更多相关文章

  1. 大数据存储:MongoDB实战指南——常见问题解答

    锁粒度与并发性能怎么样? 数据库的读写并发性能与锁的粒度息息相关,不管是读操作还是写操作开始运行时,都会请求相应的锁资源,如果请求不到,操作就会被阻塞.读操作请求的是读锁,能够与其它读操作共享,但是当 ...

  2. MongoDB实战指南(六):MongoDB复制集之复制集概述

    1. 复制集概述 数据库总是会遇到各种失败的场景,如网络连接断开.断电等,尽管journaling日志功能也提供了数据恢复的功能,但journaling通常是针对单个节点来说的,只能保证单节点数据的一 ...

  3. MongoDB实战指南(四):MongoDB的Journaling日志功能

    mongoDB的Journaling日志功能与常见的log日志是不一样的,mongoDB也有log日志,它只是简单记录了数据库在服务器上的启动信息.慢查询记录.数据库异常信息.客户端与数据库服务器连接 ...

  4. MongoDB实战指南(五):MongoDB中的聚集分析

    聚集操作是对数据进行分析的有效手段.MongoDB主要提供了三种对数据进行分析计算的方式:管道模式聚集分析,MapReduce聚集分析,简单函数和命令的聚集分析. 1. 管道模式进行聚集 这里所说的管 ...

  5. MongoDB实战指南(三):MongoDB的锁机制

    与关系数据库一样,MongoDB也是通过锁机制来保证数据的完整性和一致性,MongoDB利用读写锁来支持并发操作,读锁可以共享写锁具有排他性.当一个读锁存在时,其他读操作也可以用这个读锁:但当一个写锁 ...

  6. MongoDB实战指南(二):索引与查询优化

    数据库保存记录的机制是建立在文件系统上的,索引也是以文件的形式存储在磁盘上,在数据库中用到最多的索引结构就是B树.尽管索引在数据库领域是不可缺少的,但是对一个表建立过多的索引会带来一些问题,索引的建立 ...

  7. MongoDB实战指南(一):大数据与云计算

    1.1 什么大数据 具体来说,大数据技术涉及到数据的创造,存储,获取和分析,大数据的主要特点有下面几个: 数据量大.一个典型的PC机载2000年前后其存储空间可能有10GB,今天facebook一天增 ...

  8. 【MongoDB】windows平台搭建Mongo数据库复制集(类似集群)(转)

    原文链接:[MongoDB]windows平台搭建Mongo数据库复制集(类似集群)(一) Replica  Sets(复制集)是在mongodDB1.6版本开始新增的功能,它可以实现故障自动切换和自 ...

  9. 部署MongoDB复制集(副本集)

    环境 操作系统:Ubuntu 18.04 MongoDB: 4.0.3 服务器 首先部署3台服务器,1台主节点 + 2台从节点 3台服务器的内容ip分别是: 10.140.0.5 (主节点) 10.1 ...

随机推荐

  1. 2014年下半年计划—写博客,旅游,带女朋友拍写真

           前言:写这篇博客之前,一直在网上,看各位大牛写的博文,发布的视频等.当然由于自己的初来乍到,人生地不"熟"儿的,也吃了不少亏,走了不少弯路.本着一颗学习的心,携着向各 ...

  2. 如何让Div层悬浮在Flash Object对象之上(转载)

    今天有个用户,门户右上角的倒三角登陆小按钮在他的电脑上无法显示,他用的笔记本屏幕较小,宽度正好显示出页面内容,经查看,门户页眉使用的为flash对象. 大家都知道,如果想让某个图片或者Div层悬浮在别 ...

  3. C#学习笔记5:数据类型与进制转换

    1.C#: 8种整形类型.2种用于科学计算的二进制浮点类型.1种用于金融计算的十进制浮点类型. 2.Decimal是一种特殊的浮点类型,能够存储大数字而无表示错误. 常用于货币计算.在表示的所有十进制 ...

  4. C#集合之ArrayList

    C#中之所以有集合这个东东,是因为数组的长度是固定的,而实际需求是,不确定未来这个“数组”的个数,故出现集合这个概念,因为集合的容量会随元素的增加曾倍数增长.C#中有2类常用集合:ArrayList, ...

  5. ###《Effective STL》--Chapter6

    点击查看Evernote原文. #@author: gr #@date: 2014-09-27 #@email: forgerui@gmail.com Chapter6 函数子.函数子类.函数及其他 ...

  6. iOS开发——https+证书

    由于公司项目的需要,经过调研后,已成功. 同事已把此问题写成博客<[加密解密]HTTPS>,我就直接转用了 附带链接如下: http://www.jianshu.com/p/8351917 ...

  7. iOS 的一点理解(一) 代理delegate

    做了一年的iOS,想记录自己对知识点的一点理解. 第一篇,想记录一下iOS中delegate(委托,也有人称作代理)的理解吧. 故名思议,delegate就是代理的含义, 一件事情自己不方便做,然后交 ...

  8. OC4_NSString操作

    // // main.m // OC4_NSString操作 // // Created by zhangxueming on 15/6/10. // Copyright (c) 2015年 zhan ...

  9. 02线性表链式存储_LinkList--(线性表)

    #include "stdio.h" #include "string.h" #include "ctype.h" #include &qu ...

  10. Mysql 的函数

    函数 MySQL函数分为系统函数与自定义函数 系统函数: pow(m,n)        求m的n次方 rand()            随机获取0至1之间的小数 floor();          ...