阿里云优惠卷,升级续费,购买新产品点此领取

mongodb 副本集 搭建

一、副本集概念

     提到副本集,其实可以理解为更高级的主从复制,其区别在 如果主数据库宕机了,集群中就会推选出一个从属数据库作为主数据库顶上,这就具备了自动故障恢复功能。

二、配置过程

      配置过程没有新建虚拟机,在本机开多个实例,运行环境 win7。

  首先建立文件夹 D:\mongoClusters\mongodb1、D:\mongoClusters\mongodb2、D:\mongoClusters\mongodb3 用来存放数据库。

cmd 窗口输入命令 :  mongod --dbpath=D:\mongoClusters\mongodb1 --port 1111 -replSet  replName   

replName 为集群名称,运行结果如下:

从输出结果我们可以看到还没有配置初始化信息,先不管,最后一起配置。

启动其他实例:mongod --dbpath=D:\mongoClusters\mongodb2 --port 2222 -replSet  replName 、mongod --dbpath=D:\mongoClusters\mongodb3 --port 3333 -replSet  replName

 

连接一个实例,哪个都可以,但要使用admin数据库

新打开cmd窗口: mongo 127.0.0.1:1111/admin

输入配置信息: 其中 _id:"replName" 要同上面命令  -replSet  replName 保持一致

config= {
                _id:"replName",members:[
                    {_id:0,host:"127.0.0.1:1111"},
                    {_id:1,host:"127.0.0.1:2222"},
                    {_id:2,host:"127.0.0.1:3333"}
                ]
            }

运行命令: rs.initiate(config); 返回 ok

查看集群节点状态 rs.status();

配置成功!这里可以看到 127.0.0.1:1111为主数据库,其他为从数据库。

 

连接 127.0.0.1:2222 ,查看数据库列表  show dbs

mongodb默认是从主节点读写数据的,副本节点上不允许读,需要设置副本节点可以读。
repset:SECONDARY> db.getMongo().setSlaveOk();

在主数据库创建一个新的数据库,并插入数据 : use userinfo;  db.userinfo.insert({"name":"test",age:13});
显示操作成功。
在从数据库 127.0.0.1:2222 再次查看数据库列表 show dbs; 发现多了一个数据库 userinfo 。

查看数据有没有同步  use userinfo; db.userinfo.find(); 我们插入的数据已经同步进来了。

下面我们把 127.0.0.1:1111 停掉,再查看集群的状态 ,这时可以惊奇的发现 127.0.0.1:2222 已经被推选为主数据库了。

另官方文档是副本集数量最好为奇数。

前面副本集 成员我们的通过 rs.initiate(config); 命令来配置的,其实通过 rs.addArb() 命令可以动态追加成员的。

比如命令  rs.addArb("127.0.0.1:4444"); 将 127.0.0.1:4444 添加到副本集成员里

 

posted @ 2016-05-03 16:12  超期服役  阅读(160)  评论(0)    收藏  举报