MongoDB副本集配置


进行副本集的配置:

 

1. MongoDB数据文件存储路径。

2. MongoDB日志文件存储路径。

3. MongoDB key文件存储路径。

4. MongoDB实例监听端口。(28010/28011/28012)

 

----------

 

mongod --replSet myset --keyFile C:\data\key\key0\key0 --port 28010 --dbpath C: 

\data\data\data0 --logpath C:\data\log\log0\log0.log --logappend

 

mongod --replSet myset --keyFile C:\data\key\key1\key1 --port 28011 --dbpath C: 

\data\data\data1 --logpath C:\data\log\log1\log1.log --logappend

 

mongod --replSet myset --keyFile C:\data\key\key2\key2 --port 28012 --dbpath C: 

\data\data\data2 --logpath C:\data\log\log2\log2.log --logappend

 

----------

 

如何通过mongo客户端配置副本集

 

config_myset={_id: 'summer', members: [{_id: 0, host: 'localhost:28010'}, {_id: 1, host:  

'localhost:28011'}, {_id: 2, host: 'localhost:28012'}]};

 

rs.initate(config_myset);

 

db.getMongo().setSlaveOk();

 

oplog

 

 

不使用keyFile启动副本集

 

mongod --replSet myset --port 28010 --dbpath C:\data\data\data0 --logpath C:\data\log\log0\log0.log --logappend

 

mongod --replSet myset --port 28011 --dbpath C:\data\data\data1 --logpath C:\data\log\log1\log1.log --logappend

 

mongod --replSet myset --port 28012 --dbpath C:\data\data\data2 --logpath C:\data\log\log2\log2.log --logappend

 

joda-time

 

关于副本集的原理分析:

 

1.    副本集有且只有一台机器是primary,primary与secondary之间的数据复制是异步进行的,并且通过oplog进行。

2.    副本集中的机器数最好为奇数。

3.    Primary机器接收所有的写操作(无法改变的),我们可以配置read preference,使得读操作可以发生在secondary机器上。如果读操作发生在primary机器上,那么数据就是强一致性的

4.    副本集中最多有50台机器,之前的版本最多有12台机器。如果超过了50台,那么只能使用Master-Slave方式。不过如果使用Master-Salve方式,那么就失去了自动化的failover机制。

5.    Arbiter机器(仲裁机器),它本身并不存放数据库数据,仅提供选举功能。

6.    不要将arbiter机器放在primary或是secondary机器上。

7.    对于secondary机器,可以进行如下配置:

a)    禁止某台secondary机器成为primary机器, priority为0。

b)    禁止客户端读取某台secondary机器的数据,隐藏成员。

c)    仅记录历史快照的secondary,延迟成员。比如说延迟一小时。

 

8.    最常见的secondary机器依然是进行数据异步复制与保持系统高可用的形式。

9.    副本集中最多有50台机器,其中具有投票功能的机器数量最多是7台(Secondary和Arbiter)。

10.    Priority为0的机器,无法成为Primary的。

11.    关于MongoDB的读写分离:

1).如果进行读写分离,那么要注意读有延迟,因为要通过oplog进行异步复制。

2).Secondary机器要通过oplog异步复制primary的数据,因此从整体来看,primary与Secondary机器的读速度相当。

3).默认情况下,MogonDB的读和写都是在primary中进行的。

12.read preference

    1).primary,默认值,表示所有的读操作都是在primary机器上执行的

    2).primaryPreferred,大多数情况下在primary上进行,当primary不可用时,会从secondary中进行。如primary宕机,还未选举出primary时。

    3).secondary,所有的读操作都从secondary上执行

    4).secondaryPreferred,和2相反

    5).nearest,从延迟最小(ping最快)的机器上读取,无论primary和secondary

13.关于延迟成员(deleyed member)

    1).延迟成员的priority必须为0,表示它无法成为primary。

    2).延迟成员也是隐藏成员,应用无法通过延迟成员查询数据的。

    3).可以对primary的选举进行投票

14.确保副本集中的个数为奇数,如果是偶数的话,添加一个arbiter成员。

15.关于MongoDB的投票与故障恢复。

    1).MongoDB要求投票时系统中可用的机器数量要是全体副本集中成员个数的大多数。

    2).如果副本集中有3台机器,那么有几台机器宕掉后可以确保MongoDB副本集可以正常使用?2

3).如果副本集中有4台机器,那么有几台机器宕掉后可以确保MongoDB副本集可以正常使用?3

4).如果副本集中有5台机器,那么有几台机器宕掉后可以确保MongoDB副本集可以正常使用?3

5).如果副本集中有6台机器,那么有几台机器宕掉后可以确保MongoDB副本集可以正常使用?4

6).如果副本集中有7台机器,那么有几台机器宕掉后可以确保MongoDB副本集可以正常使用?4

16.向副本集中添加成员并不总是会确保系统的故障恢复能力,不过这样做可以实现一些额外的功能:备份、统计报表等。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(MongoDB)