您的位置:首页 > 数据库 > Mongodb

MongoDB搭建副本集(二)

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

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

环境:Ubuntu14.04,MongoDB3.2

建立三个节点目录。

sudo mkdir /data
sudo mkdir /data/node1
sudo mkdir /data/node2
sudo 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的端口实例ismaster为true,secondary为false,为主节点。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:10003

replica:ARBITER>


关掉10001端口的mongod实例,shell显示10001处于down状态,进入之前的从节点10002,发现它变成了主节点,提示符为
“replica:PRIMARY>”,再将10001上线,它有恢复成主节点。这就是MongoDB副本集的故障转移。

到这里,MongoDB单机搭建副本集就结束了,关于在多台机器上部署的例子会在以后的文章中给大家带来。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: