天天看点

mongodb的复制集配置

什么是mongodb副本集:

    mongodb副本集是一组mongodb服务器组成的一个副本集群。集群中包含一个Primary主服务器以及若干个Secondary备份服务器或者Artiber选举服务器。Secondary会向Primary服务器同步数据,实现集群内服务器的数据备份。当Primary宕机或无法提供服务时,集群会再次选举一个新的Primary服务器,以保证服务的正常,以及数据的安全。

配置副本集:

配置环境:

         Server1 : 192.168.189.129:5555

         Server2 : 192.168.189.131:5555

         Server3 : 192.168.189.132:5555

一:下载,安装mongodb。

1

2

3

4

<code> </code><code>#cd /usr/local/src</code>

<code> </code><code>#wget http:</code><code>//downloads.mongodb.org/linux/mongodb-linux-x86_64-2.2.2.tgz</code>

<code> </code><code>#tar -zxvf mongodb-linux-x86_64-2.2.2.tgz</code>

<code> </code><code>#mv mongodb-linux-x86_64-2.2.2  /usr/local/mongodb</code>

  创建数据库目录与日志目录

5

6

<code>server1:</code>

<code>     </code><code>#mkdir -p /data/mongodb/db1/</code>

<code>     </code><code>#mkdir -p /usr/local/mongodb/logs/</code>

<code>Server2:</code>

<code>     </code><code>#mkdir -p /data/mongodb/db2/</code>

二:创建,配置mongodb.conf。

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

<code>#cd /usr/local/mongodb/</code>

<code>Server1:</code>

<code>#vi mongodb.conf</code>

<code>port = 5555</code>

<code>dbpath = </code><code>/data/mongodb/db1/</code>

<code>logpath = </code><code>/usr/local/mongodb/logs/m1</code><code>.log</code>

<code>rest = </code><code>true</code>

<code>fork = </code><code>true</code>

<code>replSet = cmhdbset</code><code>/192</code><code>.168.189.129:5555,192.168.189.131:5555    </code><code>//</code><code>配置副本集集群</code>

<code>logappend = </code><code>true</code>

<code>quiet = </code><code>true</code>

<code>journal = </code><code>true</code>

<code> </code> 

<code>dbpath =  </code><code>/data/mongodb/db2/</code>

<code>logpath = </code><code>/usr/local/mongodb/logs/m2</code><code>.log</code>

<code>replSet = cmhdbset</code><code>/192</code><code>.168.189.129:5555,192.168.189.131:5555</code>

三:启动mongodb,观察mongodb副本集状态。

  依次启动server1,server2的mongodb:

<code>#/usr/local/mongodb/bin/mongod –f /usr/local/mongodb/mongodb.conf</code>

  查看日志,发现无法连接副本集:

<code>#tail –f /usr/local/mongodb/logs/m1.log</code>

<code>Mon Jul 29 16:48:53 [rsStart] replSet can't get </code><code>local</code><code>.system.replset config from self or any seed (EMPTYCONFIG)</code>

 原因是还未初始化副本集,所以无法连接,因此需要初始化副本集。

       在server1上使用客户端脚本连接mongodb,并初始化副本集,初始化命令如下:

<code>#db.runCommand({"replSetInitiate" : { "_id" : "cmhdbset" ,"members" : [ { "_id" : 1, "host" : "192.168.189.129:5555"},{ "_id" : 2, "host" : "192.168.189.131:5555"}]}})</code>

  操作如下图:

<a href="http://s3.51cto.com/wyfs02/M00/70/19/wKiom1Wxk5GDwGR-AAH5trle_Q4442.jpg" target="_blank"></a>

  查看副本集节点状态

<a href="http://s3.51cto.com/wyfs02/M01/70/16/wKioL1WxlbSjp8ChAALH54K9o2w723.jpg" target="_blank"></a>

  可以看到Server1已经被选举为“Primary”活跃节点,Server2成为“Secondary”备份节点。

四:增加mongodb副本集节点。

  这时可以把Server3增加到cmhdbset副本集中。

  首先安装mongodb,参考第一步。

  创建并配置mongodb.conf:

<code>#vi /usr/local/mongodb/mongodb.conf</code>

<code>dbpath = </code><code>/home/data/mongodb/db3/</code>

<code>logpath = </code><code>/home/usr/local/mongodb/logs/m3</code><code>.log</code>

<code>replSet = cmhdbset</code><code>/192</code><code>.168.189.129:5555,192.168.189.131:5555 </code><code>//</code><code>添加已有的集群成员即可</code>

 开启server3的mongodb:

 查看日志发现server3无法连接副本集:

<a href="http://s3.51cto.com/wyfs02/M00/70/16/wKioL1WxlrvyICeJAAEVYxEQ8_A050.jpg" target="_blank"></a>

  这是因为副本集中还没有server3的信息,需要在Primary节点上添加Server3节点信息:

<a href="http://s3.51cto.com/wyfs02/M01/70/19/wKiom1WxlQ7TKpY0AABgvwQw1oY579.jpg" target="_blank"></a>

  查看server3日志,现在server3已经加入副本集,状态为Secondary:

<a href="http://s3.51cto.com/wyfs02/M00/70/19/wKiom1WxlTyyojZnAAu7Oc5_6dg473.jpg" target="_blank"></a>

  查看副本集状态,看到已经有了server3的信息,并且状态为Secondary:

<a href="http://s3.51cto.com/wyfs02/M02/70/16/wKioL1Wxl-TQ0Kj8AAQXDzGkemc936.jpg" target="_blank"></a>

五:删除已有节点

  登陆Primary节点,删除Server3节点:

<a href="http://s3.51cto.com/wyfs02/M02/70/19/wKiom1WxljrxDJDNAAOpvLE4Py0829.jpg" target="_blank"></a>

  查看副本集信息,Server3节点已经移除掉了:

<a href="http://s3.51cto.com/wyfs02/M00/70/16/wKioL1WxmDeAlWGjAAQmeHMbX-8092.jpg" target="_blank"></a>

  登陆Server3的mongodb,发现提示符变为”removed”:

==============================================================================

注:默认情况下,Secendary结点不能读写,需要设置了rs.slaveOk()后,才能进行读操作。

注:删除和添加副本集节点操作只能在Primary活跃节点进行。并且当前的活跃节点无法被删除。

注:添加一个仲裁节点:primary&gt;rs.addArb("host:port")

  仲裁节点只参与投票,不参与选举。

副本集节点优先级配置:

在副本集中配置节点的优先级,可以使之按照我们的想法,来决定由哪台服务器担任Primay节点。

  设置Server1的优先级参数priority=20(默认为1,范围1-100):

<a href="http://s3.51cto.com/wyfs02/M02/70/16/wKioL1WxmbbADtDDAAWthTNaJAw910.jpg" target="_blank"></a>

  查看结点配置,Server1的priority参数已经被设置为20:

<a href="http://s3.51cto.com/wyfs02/M00/70/16/wKioL1Wxme3SOycSAAG-ci2qdsw149.jpg" target="_blank"></a>

  配置完以后,Server1会被选举为primary节点。

      若想配置Secondary-Only模式,只要把服务器的priority设置为0即可。

本文转自 icenycmh 51CTO博客,原文链接:http://blog.51cto.com/icenycmh/1677825,如需转载请自行联系原作者