MongoDB实战系列之四:mongodb副本集部署

jopen 12年前

简述:副本集合(Replica Sets),是一个基于主/从复制机制的复制功能,但增加了自动故障转移和恢复特性。一个集群最多可以支持7个服务器,并且任意节点都可以是主节点。所有的写操作都被分发到主节点,而读操作可以在任何节点上进行。

环境:CentOS 5.5 x64

md01 10.0.0.11
md02 10.0.0.12
md03 10.0.0.14

把以上主机名对应IP 添加到hosts文件

方法一:设置优先级

启动各节点:
md01

/elain /apps /mongodb /bin /mongod  --rest  --replSet elain /md01: 27017  --master --fork  --port  27017  --dbpath  /elain /data /mongodb /db /  --logpath /elain /logs /mongodb /mongodb.log
</div>

md02

/elain /apps /mongodb /bin /mongod  --rest  --replSet elain /md02: 27017  --fork  --port  27017  --dbpath  /elain /data /mongodb /db /  --logpath /elain /logs /mongodb /mongodb.log
</div>

md03

/elain /apps /mongodb /bin /mongod  --rest  --replSet elain /md03: 27017  --fork  --port  27017  --dbpath  /elain /data /mongodb /db /  --logpath /elain /logs /mongodb /mongodb.log
</div>

初始化节点:
md01:(登录其中任何一个节点操作皆可)

mongo  --port  27017

>rs.initiate ( {
_id :  "elain",
members :  [
{_id :  1, host :  "md01:27017", priority: 2 },
{_id :  2, host :  "md02:27017", priority: 3 },
{_id :  3, host :  "md03:27017", priority: 4 },
]
} );
</div>


#priority 是设置优先级的,默认优先级为1,可以是1-1000的数字
注:通常在同一个交换机上,同一个网内,通常使用优先级来设置 副本集就已经足够使用了

方法二:添加仲裁节点(这里设置在md02):

启动各节点:
md01

/elain /apps /mongodb /bin /mongod  --rest  --replSet elain /md01: 27017  --fork  --port  27017  --dbpath  /elain /data /mongodb /db /  --logpath /elain /logs /mongodb /mongodb.log
</div>

md02

/elain /apps /mongodb /bin /mongod  --rest  --replSet elain /md02: 27017  --fork  --port  27017  --dbpath  /elain /data /mongodb /db /  --logpath /elain /logs /mongodb /mongodb.log
</div>

md03

/elain /apps /mongodb /bin /mongod  --rest  --replSet elain /md03: 27017  --fork  --port  27017  --dbpath  /elain /data /mongodb /db /  --logpath /elain /logs /mongodb /mongodb.log
</div>

#启动仲裁节点
在md02上

mkdir  /elain /data /mongodb /arb
/elain /apps /mongodb /bin /mongod  --fork  --rest  --replSet elain  --dbpath /elain /data /mongodb /arb  --port  27015  --logpath /elain /logs /mongodb /mongodb.log
</div>

初始化节点:
md01:(登录其中任何一个节点操作皆可)

> rs.initiate ( {
_id :  "elain",
members :  [
{_id :  1, host :  "md01:27017" },
{_id :  2, host :  "md02:27017" },
{_id :  3, host :  "md03:27017" },
{_id :  4, host :  "md02:27015""arbiterOnly"true },
]
} );
</div>

#验证

PRIMARY >rs.status ( )
</div>

也可浏览:http://10.0.0.11:28017/_replSet 查看状态

#设置从库可读(从库上执行)

>rs.slaveOk ( );
</div>

查看副本集状态

>rs.status ( )
>user  local;
>rs.isMaster ( )
>db.system.replset.find ( )
</div>

查看当前主库:

>;db. $cmd.findOne ( {ismaster: 1 } );
</div>