指引网

当前位置: 主页 > 数据库 > MongoDB >

Mongo Replica Set集群搭建详解

来源:网络 作者:佚名 点击: 时间:2017-06-07 23:12
[摘要]  本文章来为各位介绍一篇Mongo Replica Set集群搭建的例子,如果各位对于Mongo Replica Set集群搭建不了解可以和小编一起来看看吧。


Mongo Replica Set集群介绍:

 

1358056331_2790.png

 

Replica Set使用的是n个mongod节点,构建具备自动的容错功能(auto-failover),自动恢复的(auto-recovery)的高可用方案。 如上图,Mongodb(M)表示主节点,Mongodb(S)表示备节点,Mongodb(A)表示仲裁节点。主备节点存储数据,仲裁节点不存储数据。客户端同时连接主节点与备节点,不连接仲裁节点。
 默认设置下,主节点提供所有增删查改服务,备节点不提供任何服务。但是可指定读策略(本文PHP连接Mongo实例),减少主节点读压力。

Mongo Replica Set集群搭建:

(1)建立数据库文件夹、日志文件夹

mkdir /data/mongo_cluster/{master,slave,arbiter} -p

mkdir /data/mongo_cluster/master/logs

mkdir /data/mongo_cluster/slave/logs

mkdir /data/mongo_cluster/arbiter/logs

(2)建立配置文件

#master配置 /data/mongo_cluster/master/master.conf

dbpath=/data/mongo_cluster/master

logpath=/data/mongo_cluster/master/logs/master.log

pidfilepath=/data/mongo_cluster/master/master.pid

logappend=true          

replSet=rep1

bind_ip=192.168.15.130

port=10000

fork=true

journal=true

 

#slave配置 data/mongo_cluster/slave/slave.conf

dbpath=/data/mongo_cluster/slave

logpath=/data/mongo_cluster/slave/logs/slave.log

pidfilepath=/data/mongo_cluster/slave/slave.pid

logappend=true

replSet=rep1

bind_ip=192.168.15.130

port=10001

fork=true

journal=true

 

#arbiter配置  /data/mongo_cluster/arbiter/arbiter.conf

dbpath=/data/mongo_cluster/arbiter

logpath=/data/mongo_cluster/arbiter/logs/arbiter.log

pidfilepath=/data/mongo_cluster/arbiter/arbiter.pid

logappend=true

replSet=rep1

bind_ip=192.168.15.130

port=10002

fork=true

journal=true

配置参数说明:

dbpath:数据存放目录
logpath:日志存放路径
logappend:以追加的方式记录日志
pidfilepath:进程文件,方便停止
mongodb replSet:replica set的名字
bind_ip: 绑定服务ip
port:mongodb进程所使用的端口号,默认为27017
fork:以后台方式运行进程
journal:写日志
smallfiles:使用较小的默认文件

(3)启动mongodb集群

/usr/local/mongodb3.0.5/bin/mongod -f /data/mongo_cluster/master/master.conf
/usr/local/mongodb3.0.5/bin/mongod -f /data/mongo_cluster/slave/slave.conf
/usr/local/mongodb3.0.5/bin/mongod -f /data/mongo_cluster/arbiter/arbiter.conf

(4)配置主、备、仲裁节点

/usr/local/mongodb3.0.5/bin/mongo 192.168.15.130:10000 #登陆master执行下面命令

use admin

cfg={ _id:"rep1", members:[ {_id:0,host:'192.168.15.130:10000',priority:2}, {_id:1,host:'192.168.15.130:10001',priority:1},{_id:2,host:'192.168.15.130:10002',arbiterOnly:true}] };

rs.initiate(cfg)

(5)查看集群配置及状态

rs.status()查看集群状态
rs.rs.conf()查看集群配置信息

PHP客户端连接测试:

$options = array(

    //指定读策略 
http://php.net/manual/zh/mongo.readpreferences.php

    'readPreference' => MongoClient::RP_SECONDARY_PREFERRED,

    'replicaSet' => 'rep1'

);

 

$mongo = new MongoClient("mongodb://192.168.15.130:10000, 192.168.15.130:10001", $options);

$rs = $mongo->selectDB("test")->getCollectionNames();

var_dump($rs);

 

------分隔线----------------------------