MongoDB学习笔记9——复制

1)基本概念

复制可用于实现可拓展性、可持久性/可靠性和隔离性。

复制通常用于防止硬件故障或数据库损坏,同时为备份和其他具有重要影响的维护活动提供灵活性,只对系统造成一点儿影响或没有影响。

复制的方式包括:主/从复制、主/主复制、复制对。

2)服务器

服务器种类:

主服务器:在特定时间内复制集的数据来源。是复制集中唯一可以写入的节点,所有其他的节点都将从这里复制出它们的数据。

辅助服务器:是一个具有数据的非主服务器成员,理论上它可以成为主服务器。是一个可读取的节点,同时它将以尽可能接近于实时的方式从主服务器复制数据。

仲裁服务器:仲裁服务器是一个不含有数据的节点,如果复制集中的主动成员数是偶数,它就用于提供额外的主动成员。它不会投出决定性的一票或者直接决定哪个节点是主服务器,但会参与并作为主成员中的一员,决定哪个节点成为主服务器。仲裁服务器可以用于避免“脑裂”问题。

3)深入学习oplog

oplog(操作日志)就是一个固定大小的集合,保存了主服务器实例对数据库做出修改的记录,目的是在辅助服务器上重做这些操作,保证数据库处于一致状态。

oplog通常具有固定的大小。

如果当前实例的oplog尚未创建,那么使用--oplogSize启动选项可以设置oplog的大小。在Linux和Windows64位系统中,oplogSize默认设置为可用磁盘空间的5%,最小为1GB,最大为50GB。

计算oplog的合适大小时,考虑主服务器上所有数据库的更新频率时非常关键的。通过执行db.printReplicationInfo()命令可以得到一些oplog大小方面的参考。

4)实现复制集

复制集由一个主服务器、多个辅助服务器或仲裁服务器组成。

复制集还提供了主动成员和被动成员。当前的主服务器不可用时,被动服务器不会参与新的主服务器的选举;相反,它们可以投票否决某个成员的主服务器资格。

4-1)创建复制集

通常使用幅值集时采用的是主机名。通过hostname命令可以找到当前主机名。

4-2)启动复制集成员

$ mkdir -p /dp/active1/data (主动)

$ mongod --dbpath /db/active1/data --port 27021 -replSet testset

$ mkdir -p /dp/passive1/data (被动)

$ mongod --dbpath /db/active1/data --port 27022 -replSet testset

初始化复制集:

rs.initiate()

4-3)向复制集中添加服务器

rs.add("[hostname]:27021")

使用rs.status()可以监控进度。

如果需要复制配置文档并修改它可以用:

conf = rs.conf()

如果想将节点设置为隐藏,并且优先级为0,这样就不会被选举为主服务器,命令操作如下(以第三个元素为例):

conf.members[2].hidden = true

conf.members[2].priority = 0

conf.members[2].votes = 0

将新的配置文件用作参数,可以执行rs.reconfig()命令,rs.reconfig(conf)。

4-4)添加仲裁服务器

$ mkdir -p /dp/arbiter1/data (被动)

$ mongod --dbpath /db/arbiter1/data --port 27023 -replSet testset -rest

使用rs.addArb()命令添加新的仲裁服务器:

rs.addArb("[hostname]:27023")

4-5)复制集链

复制集链在MongoDB中是默认行为

conf.chainingAllowed = false

4-6)管理复制集

使用rs.status()检测实例的状态

使用rs.stepDown()强制进行新的选举。使用这个命令强制主服务器退出60秒;该命令将强制选出新的主服务器。rs.stepDown()命令也有两个可选参数,第一个是stepDownSeconds用于决定当前主服务器被禁止再次选举为主服务器的时长。第二个是catchUpPerid表示在选举新的主服务器之前应该等待多长秒才进行复制。

使用db.isMaster()来判断某个成员是否为主服务器。

猜你喜欢

转载自www.cnblogs.com/zhuozige/p/12503393.html