码迷,mamicode.com
首页 > 数据库 > 详细

Mongodb设置Replica Set集群 并使用PHP来连接

时间:2015-08-25 11:59:33      阅读:361      评论:0      收藏:0      [点我收藏+]

标签:

Mongodb之前一直是做主从模式,后来官方推荐用Replica Set(简称RS)来代替主从,主要是当primary节点出现故障后,RS集群内会有自动投票选举primary节点的机制,自动选出新的primary节点,这样应用程序就不需要关心主从切换的问题。想要配置一个简单的RS,至少要两台机器。我本地用了VMware以NAT方式跑了两台VPS,IP分别是:192.168.33.112和192.168.33.119,注意两台VPS的访问互通问题(iptables network等)


1.ssh登陆到112那台机器上,先下载mongodb最新版 现在是3.0.5 (3.x版本彪悍了很多,无论从读写的性能,还是数据压缩能力)

cd /usr/local/bin
wget http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.0.5.tgz
tar -zxvf  mongodb-linux-x86_64-3.0.5.tar
mv mongodb-linux-x86_64-3.0.5/ mongodb

2.建立mongodb需要的一些必要的文件夹

mkdir -p /mnt/mongodb/rs/data
mkdir -p /mnt/mongodb/rs/logs
mkdir -p /mnt/mongodb/rs/config

3.创建配置文件

vi /mnt/mongodb/rs/config/mongod.conf

insert以下内容:

dbpath=/mnt/mongodb/rs/data   #数据存放目录
logpath=/mnt/mongodb/rs/logs/mongod.log  #日志文件目录
pidfilepath=/mnt/mongodb/rs/mongod.pid  #pid端口文件

port=27017   #mongodb端口

logappend=true   #追加方式写日志文件
fork=true        #后台运行
journal=true     #启用日志选项,MongoDB的数据操作将会写入到journal文件夹的文件里
oplogSize=2048   #同步操作记录文件大小(MB)
smallfiles=true  #使用较小的默认文件

replSet=27017_0    #副本集名称,同一个副本集,名称必须一致

4.跑mongod进程

cd /usr/local/bin/mongodb/bin/
./mongod -f /mnt/mongodb/rs/config/mongod.conf

启动成功的时候终端会提示

about to fork child process, waiting until server is ready for connections.
forked process: 1286
child process started successfully, parent exiting

然后以同样的方式在119那台机也让mongod跑起来...


5.随便一台机器进入命令行管理mongodb,启动RS:

./mongo 127.0.0.1:27017/admin

输入RS配置命令

config={_id : '27017_0',members : [{_id : 1, host : '192.168.33.119:27017'},{_id : 2, host : '192.168.33.112:27017'}]}

系统会自动格式化显示出:

{
	"_id" : "27017_0",
	"members" : [
		{
			"_id" : 1,
			"host" : "192.168.33.119:27017"
		},
		{
			"_id" : 2,
			"host" : "192.168.33.112:27017"
		}
	]
}

这里我们让112和119来做RS集群,然后接下来初始化集群:

rs.initiate(config);

系统会提示:{ "ok" : 1 } 证明启动成功!

再输入命令检查RS状态:

rs.status()

系统会显示:

{
	"set" : "27017_0",
	"date" : ISODate("2015-08-24T19:41:37.778Z"),
	"myState" : 2,
	"members" : [
		{
			"_id" : 1,
			"name" : "192.168.33.119:27017",
			"health" : 1,
			"state" : 1,
			"stateStr" : "PRIMARY",
			"uptime" : 14,
			"optime" : Timestamp(1440445283, 1),
			"optimeDate" : ISODate("2015-08-24T19:41:23Z"),
			"lastHeartbeat" : ISODate("2015-08-24T19:41:37.226Z"),
			"lastHeartbeatRecv" : ISODate("2015-08-24T19:41:37.238Z"),
			"pingMs" : 1,
			"electionTime" : Timestamp(1440445283, 2),
			"electionDate" : ISODate("2015-08-24T19:41:23Z"),
			"configVersion" : 1
		},
		{
			"_id" : 2,
			"name" : "192.168.33.112:27017",
			"health" : 1,
			"state" : 2,
			"stateStr" : "SECONDARY",
			"uptime" : 129,
			"optime" : Timestamp(1440445283, 1),
			"optimeDate" : ISODate("2015-08-24T19:41:23Z"),
			"configVersion" : 1,
			"self" : true
		}
	],
	"ok" : 1
}

这里我们可以看到RS集群的详细信息,可以看到119那台机器被选为primary节点,112被选为secondary节点,以后如果要添加机器做横向扩展的时候 只需要将要添加到集群中的机器add进来就行了,或者某台机器出了故障需要排除的话,也可以很方便的remove掉。


6.使用PHP来连接:

对于应用端(PHP),在框架连接mongodb的类里面,你可以这样写:

$con = new MongoClient("mongodb://192.168.33.112:27017,192.168.33.119:27017", array("replicaSet" => "27017_0"));

注意replicaset(副本集名)要写上,这样集群才可以自动发现节点...


That‘s it~

版权声明:本文为博主原创文章,未经博主允许不得转载。

Mongodb设置Replica Set集群 并使用PHP来连接

标签:

原文地址:http://blog.csdn.net/ddjohn/article/details/47959159

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!