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 添加到副本集成员里
优质内容筛选与推荐>>