MongoDB搭建副本集(二)

来源:互联网 发布:怀化学院网络教育平台 编辑:程序博客网 时间:2024/05/03 11:26


         在上一篇博客中介绍了MongoDB复制和副本集的概念,这次将我查阅资料在单机下搭建的副本集展现给大家。

下面是在单机上搭建一个三个节点的副本集。一个主节点(primary,两个从节点(secondary,其中一个是仲裁者(arbiter)

环境:Ubuntu14.04MongoDB3.2


建立三个节点目录。

sudo mkdir /datasudo mkdir /data/node1sudo mkdir /data/node2sudo mkdir /data/arbiter


运行三个节点,其中,replica是副本集的名称;端口号分别为10001,10002,10003,而10001为主节点的端口。

sudo /usr/local/mongodb/bin/mongod --replSet replica --dbpath /data/node1/ --port 10001 --oplogSize 1024 sudo /usr/local/mongodb/bin/mongod --replSet replica --dbpath /data/node2/ --port 10002 --oplogSize 1024 sudo /usr/local/mongodb/bin/mongod --replSet replica --dbpath /data/arbiter/ --port 10003 --oplogSize 1024 


另外打开一个shell,进入主节点。

sudo /usr/local/mongodb/bin/mongo localhost:10001

初始化副本集需要配置表并逐步添加节点的数据信息,_id和副本集启动的共享名称一致

config = {_id: "replica", members: []}config.members.push({_id: 0, host: "localhost:10001"})config.members.push({_id: 1, host: "localhost:10002"})config.members.push({_id: 2, host: "localhost:10003", arbiterOnly: true})



初始化副本集


rs.initiate(config)

执行命令确认配置,可以看到10001的端口实例ismastertruesecondaryfalse,为主节点。hosts有两个实例,arbiters有一个实例。

rs.isMaster()

输入命令查看副本集的状态信息。

rs.status()



查看当前副本集的配置表

rs.conf()

插入测试数据:

for(i=1;i<=10;i++) {db.users.insert({"username":"user"+i})}

进入从节点10002,查看集合信息,显示查询失败,这是为了避免从节点读取到过期的数据。

sudo /usr/local/mongodb/bin/mongo localhost:10002 show collections

设置标识并查询集合信息。

rs.slaveOk()show collections


查询测试数据

<span style="font-size:12px;">db.users.find()</span>

在从节点插入数据,写入错误,不是主节点。

db.users.insert({username: "user11"}) 


进入端口10003,可以看到为仲裁节点。

sudo/usr/local/mongodb/bin/mongo localhost:10003replica:ARBITER>

关掉10001端口的mongod实例,shell显示10001处于down状态,进入之前的从节点10002,发现它变成了主节点,提示符为

replica:PRIMARY>”,再将10001上线,它有恢复成主节点。这就是MongoDB副本集的故障转移。


         到这里,MongoDB单机搭建副本集就结束了,关于在多台机器上部署的例子会在以后的文章中给大家带来。



0 0
原创粉丝点击