请先阅读我之前的文章《 MongoDB 3.0的在CentOS6.5上的安装》

 一、创建副本集须知:

      1、存在一台有超级管理员的mongod服务器,可以有数据库,其他所有的服务器都必须是 全新安装,

           且每一台上都要创建超级管理员和数据库管理员,且账号、密码必须一致!

      2、副本集或分片中的所有mongod服务器都必须持有同样的mongodb-keyfile,才能通讯成功。

      3、一旦创建成功后,任意一台哪怕是主服务器奔溃了都没有问题,会自动选举出一个主服务器,继续为用户服务。

          如果服务器资源比较紧张,可以一台Master,一台salver,一台仲裁服务器(与Salver部署在一起),注意必须至少有3台服务器,

          如果只是一台Master,一台Slaver,假Master挂了,此时Salver不会主动成为Master,此时MongoDB对外只能提供read服务。

      4、可以启动一台延迟备份节点,指定主机同步N时间后,才同步,比如主机同步一个月后同步,如果主机版本出现重大问题,导致其他正常的备机

           也出现问题,此时至少可以恢复到一个月以前,当然也可以定期凌晨备份主节点。

      5、可以将备节点依次停机,以单机模式mongod&方式启动,进行维护,比如给某个集合创建索引,然后重新以mongod副本集方式启动。

           这意味着:

           1、通过维护,副本的数据实际上可以和主节点不一致.

           2、insert的时候因为索引导致速度变慢,这样实现读写分离,读有索引的备节点快,插没有索引的主节点也快。

       6、副本集成员除了主服务器外,其他的都不能读写,除非设置db.setSlaveOk()才可以读,但依然不可以写。

       7、[拓展阅读,写得很好!]:http://snoopyxdy.blog.163.com/blog/static/60117440201241694254441/   (写得很好)

          

二、副本集创建步骤:

      1、准备3台全新MongoDB服务器(MongoDB3.0最多支持50台slaver),1台为Master,2个为salver(或者1台salver,一台仲裁服务器):

      2、为每一台服务器创建超级管理员,并创建数据库hezx的管理员(账号、密码、对应的数据库必须保持一致)

          一、预先创建mongodb 超级管理员,该账号可以关闭mongod进程:

               1)、#mongod&,此时直接启动mongo后台服务

               2)、#mongo   

               3)、#use admin  连接到admin数据库

                #db.createUser({user: "superAdmin",pwd: "admin123",roles: [ "root" ]})

 

          二、预先创建指定的 数据库管理员:use 

               1)、#mongod&,此时直接启动mongo后台服务

               2) #mongo

                     #use hezx

               3)、如下语句为hezx数据库创建了一个管理员。

                    #db.createUser({user: "admin",pwd: "admin123",roles: [{ role: "readWrite", db: "hezx" },{ role: "readWrite", db: "admin" },{ role: "readWrite", db: "local" }]})

            用户可以use admin 使用 超级管理员删除该用户db.system.users.remove({"user":"账号名称"})

  

 

      3、正式启动副本集服务, 依次在3台MongoDB的服务器上执行如下命令:

           启动副本集命令,副本集名称fubenji必须一致。

            mongod --auth --replSet fubenji --config /etc/mongodb.conf

 

      

 

  4、在其中一台Mongo服务器的shell上执行,这台机器将成为Master,其他机器则成为了salver:

   >use admin

   > db.auth("superAdmin","admin123")   使用超级管理员登陆

   > config={"_id" : "fubenji","version" : 1,"members" : [{ "_id" : 1,"host":"192.168.62.152:17018"},{ "_id" : 2,"host":"192.168.62.153:17018"},{ "_id" : 

   > rs.initiate(config)

 

   如果提示:"errmsg" : "'192.168.62.153:17018' has data already, cannot initiate set."  说明,153机器不是全新的Mongo服务器,请重新安装后启动。

   如果提示:{ "ok" : 1 } 说明副本集配置成功。

 

   4、rs.status() 可以查看副本集中成员的状态:哪个salver已经挂了。

        health:1 活着  0 挂了     stateStr:"PRIMARY" 主  "SECONDARY" 从

   5、rs.add("192.168.62.155:17018") 可以添加新的salver,最好是全新的mongodb服务,否则新加入的服务上的数据库会被清除掉。

        rs.add({"_id":4,"host":"192.168.62.155:17018","priority":0,"hidden":true,“votes”:0}) //可以传递复杂的参数进行加入,如没有投票权,且不能成为主节点

        rs.remove("192.168.62.155:17018")可以删除salver。

        rs.reconfig()可以重新配置副本集。

        rs.isMaster()查看谁主从关系

        rs.stepDown()把主节点降级为备节点.

        rs.freeze(100000)对主节点维护100秒,且其他节点不能成为主节点

        rs.freeze(0)可以把退位的主节点重新变为主节点。

        db.setSlaveOk(),通过这个命令后,非主服务器可以进行查询的操作,但不能进行写操作。该命令退出shell后就失效

 

   6、此时通过mongo shell连接mongod服务,可执行任何mongod操作

        fubenji:PRIMARY>use admin

一、创建副本集须知:

      1、存在一台有超级管理员的mongod服务器,可以有数据库,其他所有的服务器都必须是 全新安装,

           且每一台上都要创建超级管理员和数据库管理员,且账号、密码必须一致!

      2、副本集或分片中的所有mongod服务器都必须持有同样的mongodb-keyfile,才能通讯成功。

      3、一旦创建成功后,任意一台哪怕是主服务器奔溃了都没有问题,会自动选举出一个主服务器,继续为用户服务。

          如果服务器资源比较紧张,可以一台Master,一台salver,一台仲裁服务器(与Salver部署在一起),注意必须至少有3台服务器,

          如果只是一台Master,一台Slaver,假Master挂了,此时Salver不会主动成为Master,此时MongoDB对外只能提供read服务。

      4、可以启动一台延迟备份节点,指定主机同步N时间后,才同步,比如主机同步一个月后同步,如果主机版本出现重大问题,导致其他正常的备机

           也出现问题,此时至少可以恢复到一个月以前,当然也可以定期凌晨备份主节点。

      5、可以将备节点依次停机,以单机模式mongod&方式启动,进行维护,比如给某个集合创建索引,然后重新以mongod副本集方式启动。

           这意味着:

           1、通过维护,副本的数据实际上可以和主节点不一致.

           2、insert的时候因为索引导致速度变慢,这样实现读写分离,读有索引的备节点快,插没有索引的主节点也快。

       6、副本集成员除了主服务器外,其他的都不能读写,除非设置db.setSlaveOk()才可以读,但依然不可以写。

       7、[拓展阅读,写得很好!]:http://snoopyxdy.blog.163.com/blog/static/60117440201241694254441/   (写得很好)

          

二、副本集创建步骤:

      1、准备3台全新MongoDB服务器(MongoDB3.0最多支持50台slaver),1台为Master,2个为salver(或者1台salver,一台仲裁服务器):

      2、为每一台服务器创建超级管理员,并创建数据库hezx的管理员(账号、密码、对应的数据库必须保持一致)

          一、预先创建mongodb 超级管理员,该账号可以关闭mongod进程:

               1)、#mongod&,此时直接启动mongo后台服务

               2)、#mongo   

               3)、#use admin  连接到admin数据库

                #db.createUser({user: "superAdmin",pwd: "admin123",roles: [ "root" ]})

 

          二、预先创建指定的 数据库管理员:use 

               1)、#mongod&,此时直接启动mongo后台服务

               2) #mongo

                     #use hezx

               3)、如下语句为hezx数据库创建了一个管理员。

                    #db.createUser({user: "admin",pwd: "admin123",roles: [{ role: "readWrite", db: "hezx" },{ role: "readWrite", db: "admin" },{ role: "readWrite", db: "local" }]})

            用户可以use admin 使用 超级管理员删除该用户db.system.users.remove({"user":"账号名称"})

  

      3、正式启动副本集服务, 依次在3台MongoDB的服务器上执行如下命令:

           启动副本集命令,副本集名称fubenji必须一致。

            mongod --auth --replSet fubenji --config /etc/mongodb.conf

 

  4、在其中一台Mongo服务器的shell上执行,这台机器将成为Master,其他机器则成为了salver:

>use admin 
  
 
  

       > db.auth("superAdmin","admin123")   使用超级管理员登陆 
  
 
  

       > config={"_id" : "fubenji","version" : 1,"members" : [{ "_id" : 1,"host":"192.168.62.152:17018"},{ "_id" : 2,"host":"192.168.62.153:17018"},{ "_id" :  
  
 
 

      > rs.initiate(config)

 

   如果提示:"errmsg" : "'192.168.62.153:17018' has data already, cannot initiate set."  说明,153机器不是全新的Mongo服务器,请重新安装后启动。

   如果提示:{ "ok" : 1 } 说明副本集配置成功。

 

   4、rs.status() 可以查看副本集中成员的状态:哪个salver已经挂了。

        health:1 活着  0 挂了     stateStr:"PRIMARY" 主  "SECONDARY" 从

   5、rs.add("192.168.62.155:17018") 可以添加新的salver,最好是全新的mongodb服务,否则新加入的服务上的数据库会被清除掉。

        rs.add({"_id":4,"host":"192.168.62.155:17018","priority":0,"hidden":true,“votes”:0}) //可以传递复杂的参数进行加入,如没有投票权,且不能成为主节点

        rs.remove("192.168.62.155:17018")可以删除salver。

        rs.reconfig()可以重新配置副本集。

        rs.isMaster()查看谁主从关系

        rs.stepDown()把主节点降级为备节点.

        rs.freeze(100000)对主节点维护100秒,且其他节点不能成为主节点

        rs.freeze(0)可以把退位的主节点重新变为主节点。

        db.setSlaveOk(),通过这个命令后,非主服务器可以进行查询的操作,但不能进行写操作。该命令退出shell后就失效

 

   6、此时通过mongo shell连接mongod服务,可执行任何mongod操作

        fubenji:PRIMARY>use admin