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 添加到副本集成员里

优质内容筛选与推荐>>
1、再学 GDI+[12] 准备工作 - 矩形命中
2、jvm锁的四种状态 无锁状态 偏向锁状态 轻量级锁状态 重量级锁状态
3、电子发票测试数据库启动
4、示例 - 如何在多线程中应用SpiderStudio生成的DLL?
5、线程同步


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号