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

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~

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

时间: 2024-12-13 09:57:30

Mongodb设置Replica Set集群 并使用PHP来连接的相关文章

学习MongoDB(二) Replica Set集群配置

1.官方网址:https://docs.mongodb.org/manual/tutorial/deploy-replica-set-for-testing/ 2.Replica Set介绍: https://docs.mongodb.org/manual/core/replica-set-members/ 3.简单叙述一下什么是Replica Set: 如果我们使用单一的Mongodb数据库,那么它会存在单点故障等问题,Mongodb允许我们将多个单一的Mongodb数据库组成一个(“集群Re

学习MongoDB(Troubleshoot Replica Sets) 集群排除故障

Test Connections Between all Members(集群中节点网络测试) 在进行Mongodb集群时,每个节点的网络都需要互动,假设有3个服务器节点. m1.example.net m2.example.net m3.example.net 从m1.example.net连接2和3: mongo --host m2.example.net --port 27017 mongo --host m3.example.net --port 27017 从m2.example.ne

MongoDB (replica set) 集群配置

MongoDB Replica Sets的结构类似于以集群,完全可以把他当成一个集群,因为他确实与集群实现的作用是一样的:如果其中一个节点出现故障,其他的节点会马上将业务接管过来.而无需停机操作 MongoDB Replica Sets的配置步骤: 1:启动三个节点 (mongodb\mongodb\bin\  为mongo 所在文件夹) 启动第1个节点:mongodb\mongodb\bin\mongod --replSet rs3/127.0.0.1:28011,127.0.0.1:2801

mongoDB主从和副本集群配置

mongoDB主从和副本集群配置 Mongodb是时下流行的NoSql数据库(MongoDB是一个基于分布式文件存储的数据库),它的存储方式是文档式存储,并不是Key-Value形式.   优势: 快速!(当然,这和具体的应用方式有关,通常来说,它比一般的关系型数据库快5位左右.) 很高的可扩展性–轻轻松松就可实现PB级的存储(但是可能我们并不需要PB级的存储,10TB可能就够了) 他有一个很好的 replication 模式 (replica sets) 有很完善的Java API 他的存储格

MongoDB分片存储的集群架构实现

MongoDB分片存储的集群架构实现 如果需要存储大量数据,或者系统的读写吞吐量很大的时候,单个server就很难满足需求了.这个时候我们可以使用MongoDB的分片机制来解决这些问题. 分片的基本概念 分片(sharding)是一种水平扩展(horizontal scaling)的方式,把一个大的数据集分散到多个片服务器上,所有的片服务器将组成一个逻辑上的数据库来存储这个大的数据集.分片对用户(应用层)是透明的,用户不会知道数据很被存放到哪个片服务器上. 这种方式有两个好处: 分片之后,每个片

Mongodb 部署一个分片集群

根据下面的任务顺序来部署一个分片集群: 警告 分片和"localhost"地址 如果你使用"localhost"或者是127.0.0.1 作为任一节点标识的主机名部分,例如addShard 方法的host 参数或者是运行时操作 --configdb的值,那么你必须为集群中的所有MongoDB的所有节点设置都使用"localhost"或者是127.0.0.1.如果你把本地地址和远程地址混合使用的话,MongoDB将会出现错误. 启动Config S

MongoDB Sharding Cluster分片集群

MongoDB Sharding Cluster 第1章 分片技术简述: sharding是MongoDB用来将大型集合分割高不同服务器上所采用的方法,尽管分片起源于关系型数据库分区,但MongoDB分片完全又是另一回事 和mysql分区方案相比,MongoDB的最大区别在于它几乎能自动完成所有事情,只要告诉MongoDB要分配数据,它就能自动维护数据在不同的服务器之间的均衡 1.1 分片的目的: ?  垂直扩展:增加更多的cpu和存储资源来扩展容量,也属于硬件扩展 ?  水平扩展:将数据集分布

架构(三)MongoDB安装配置以及集群搭建

一 安装 1.1 下载MongoDB 我个人不太喜欢用wget url, 之前出现过wget下载的包有问题的情况 https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.4.7.tgz 1.2 上传服务器并解压 tar -zxvf mongodb-linux-x86_64-3.4.7.tgz 1.3 移动到/data/program/software/mongodb mv mongodb-linux-x86_64-3.4.7/ /data/

Mongodb高可用架构—Replica Set 集群实战

Replica Set使用的是n个mongod节点,构建具备自动的容错功能(auto-failover),自动恢复的(auto-recovery)的高可用方案. 使用Replica Set来实现读写分离.通过在连接时指定或者在主库指定slaveOk,由Secondary来分担读的压力,Primary只承担写操作. 对于Replica Set中的secondary 节点默认是不可读的. 架构图: 分别在各服务器上运行两个mongod实例: shard11 + shard12 + shard13 -