Ubuntu下Mongodb集群搭建:relica sets(副本集配置)
2015-03-27 19:45
771 查看
一、写在前面的话
MongoDB支持不同服务之间的异步数据复制,来实现failover(故障转移,故障切换,故障恢复) and redundancy(数据冗余)。同一时间,只有一个服务节点(primary或者master)支持写入。MongoDB支持两种复制的模式:Master/Slave,主从复制,角色包括master和slave。 Replica Set,复制集复制,角色包括primary和secondary。
mongoDB官方推荐使用Replica Set模式,副本集就是有自动故障恢复功能的主从集群。主从集群和副本集最为明显的区别就是副本集没有固定的主节点:整个集群会选举出一个主节点,当其不能工作时,则变更到其它节点。副本集总会有一个活跃节点和一个或多个备份节点。副本集最好的优点就是全自动化的。
二、副本集及集群介绍
1、节点类型standard:常规节点,它存储一份完整的数据副本,参与选举投票,有可能成为primary节点。
passive:存储了完整的数据副本,参与投票,不能成为primary节点。
arbiter:仲裁节点,只参与投票,不接收复制的数据,也不能成为primary节点。
一个repica sets节点数量最好为奇数(odd)。
2、参数
用于replica set的参数有两个:
–replSet ,复制集的名称。
–oplogSize ,操作日志的大小,单位为MB。
3、集群三节点分布
两个standard节点(这两个节点直接可以互切primary secondary)。
一个arbiter节点,它手中握着一张选票,决定上面两个standard节点中的哪一个可以成为primay。
三、配置步骤
1、参照上一篇博文(/article/9604077.html),将三个节点中mongodb.conf的内容修改如下:port=10001 dbpath=data/ logpath=log/mongodb.log logappend=true replSet=shard1
说明: port=10001,代表端口号,如果不指定则默认为 27017
replSet=shard1(复制集的名字),一个replica sets中的每个节点的这个参数要一致
logappend=true,日志文件自动累加,而不是覆盖
2、启动第一个standard节点 (ip:192.168.58.135)
hadoop@h1:~/mongodb$ bin/mongod -f mongodb.conf all output going to: /home/hadoop/mongodb/log/mongodb.log
启动第一个standard节点 (ip:192.168.58.136)
hadoop@h2:~/mongodb$ bin/mongod -f mongodb.conf all output going to: /home/hadoop/mongodb/log/mongodb.log
3、初始化副本集
在任意一个standard节点上登录mongdb,我们这里选择h1(ip:192.168.58.135)
hadoop@h1:~/mongodb$ bin/mongo localhost:10001
并执行如下命令:
cfg={_id:'shard1',members:[ {_id:0,host:'192.168.58.135:10001'}, {_id:1,host:'192.168.58.136:10001'}] } rs.initiate(cfg)
出现下面的提示信息就代表成功了
{ "info" : "Config now saved locally. Should come online in about a minute.", "ok" : 1 }
4、查看replica set的状态
hadoop@h1:~/mongodb$ bin/mongo localhost:10001 MongoDB shell version: 2.4.6 connecting to: localhost:10001/test shard1:SECONDARY> rs.status() { "set" : "shard1", "date" : ISODate("2015-03-27T11:24:23Z"), "myState" : 2, "syncingTo" : "192.168.58.136:10001", "members" : [ { "_id" : 0, "name" : "192.168.58.135:10001", "health" : 1, "state" : 2, "stateStr" : "SECONDARY", "uptime" : 468, "optime" : Timestamp(1427446232, 1), "optimeDate" : ISODate("2015-03-27T08:50:32Z"), "self" : true }, { "_id" : 1, "name" : "192.168.58.136:10001", "health" : 1, "state" : 1, "stateStr" : "PRIMARY", "uptime" : 258, "optime" : Timestamp(1427446232, 1), "optimeDate" : ISODate("2015-03-27T08:50:32Z"), "lastHeartbeat" : ISODate("2015-03-27T11:24:23Z"), "lastHeartbeatRecv" : ISODate("2015-03-27T11:24:22Z"), "pingMs" : 0 } ], "ok" : 1 }
在replica set的信息中,其中重要的是:
myState,如果是1代表当前登录的是primary;如果是2代表当前登录的是secondary。
成员信息中比较重要的是
state:1表示该host是当前可以进行读写,2:不能读写
health:1表示该host目前是正常的,0:异常
5、测试副本集数据复制功能
(1)登录primary的mongod,插入一条数据
hadoop@h2:~/mongodb$ bin/mongo localhost:10001 MongoDB shell version: 2.4.6 connecting to: localhost:10001/test shard1:PRIMARY> db.book.insert({'title':'computer'})
(2)登录secondary查看是否有数据
shard1:SECONDARY> use test switched to db test shard1:SECONDARY> db.book.find() error: { "$err" : "not master and slaveOk=false", "code" : 13435 }
发现报错了,没有关系,在secondary读取数据还需要我们做最后的一步,在需要读取数据的secondary上执行
shard1:SECONDARY> db.getMongo().setSlaveOk() shard1:SECONDARY> db.book.find() { "_id" : ObjectId("55153fd08ebbb2c6f1ad3a11"), "title" : "computer" }
ok,测试成功了!
6、增加一个仲裁节点,只负责仲裁,不做数据存储
shard1:PRIMARY> rs.addArb("192.168.58.137:10001"); { "ok" : 1 }
7、查看现有环境
shard1:PRIMARY> rs.conf() { "_id" : "shard1", "version" : 3, "members" : [ { "_id" : 0, "host" : "192.168.58.135:10001" }, { "_id" : 1, "host" : "192.168.58.136:10001" }, { "_id" : 2, "host" : "192.168.58.137:10001", "arbiterOnly" : true } ] }
相关文章推荐
- 搭建高可用的MongoDB集群:MongoDB的配置与副本集
- 搭建高可用的MongoDB集群(上):MongoDB的配置与副本集
- 搭建高可用的MongoDB集群(上):MongoDB的配置与副本集-1
- 搭建高可用的MongoDB集群(上):MongoDB的配置与副本集----- 个人记录
- 搭建高可用的MongoDB集群(上):MongoDB的配置与副本集-2
- ubuntu /centos + mongodb简单配置及副本集搭建
- 搭建高可用的MongoDB集群(上):MongoDB的配置与副本集
- 搭建高可用mongodb集群(三)—— 深入副本集内部机制
- Ubuntu搭建MongoDB集群
- 搭建高可用mongodb集群—— 副本集1
- 搭建高可用mongodb集群(一)——配置mongodb
- mongodb3.4集群搭建实战之高可用的分片+副本集
- 搭建高可用mongodb集群(二)—— 副本集
- 【转】搭建高可用mongodb集群(二)—— 副本集
- 搭建高可用mongodb集群(一)——配置mongodb
- 搭建高可用mongodb集群(一)——配置mongodb
- 搭建高可用mongodb集群(三)—— 深入副本集内部机制
- 搭建高可用mongodb集群(一)—— 配置mongodb
- 搭建高可用mongodb集群(三)—— 深入副本集内部机制
- 搭建高可用mongodb集群(二)—— 副本集2