MongoDB Replica Set集群部署
来源:互联网 发布:被优化掉是什么 编辑:程序博客网 时间:2024/06/11 07:14
在一个复制集集群中,各个服务器有以下几种状态:
Primary 主节点:一个复制集有且仅有一台服务器处于Primary状态,只有主节点才对外提供读写服务。如果主节点挂掉,复制集将会投票选出一个备用节点成为新的主节点。
Secondary 备用节点:复制集允许有多台Secondary,每个备用节点的数据与主节点的数据是完全同步的。
Recovering 恢复中:当复制集中某台服务器挂掉或者掉线后数据无法同步,重新恢复服务后从其他成员复制数据,这时就处于恢复过程,数据同步后,该节点又回到备用状态。
Arbiter 仲裁节点:该类节点可以不用单独存在,如果配置为仲裁节点,就主要负责在复本集中监控其他节点状态,投票选出主节点。该节点将不会用于存放数据。如果没有仲裁节点,那么投票工作将由所有节点共同进行。
Down 无效节点:当服务器挂掉或掉线时就会处于该状态。
复制集的从节点读请求,也是在各个Driver层设置slaveOk的值来实现的。
Mongodb(M)表示主节点,Mongodb(S)表示备节点,Mongodb(A)表示仲裁节点。主备节点存储数据,仲裁节点不存储数据。客户端同时连接主节点与备节点,不连接仲裁节点。
默认设置下,主节点提供所有增删查改服务,备节点不提供任何服务。但是可以通过设置使备节点提供查询服务,这样就可以减少主节点的压力,当客户端进行数据查询时,请求自动转到备节点上。这个设置叫做Read Preference Modes,同时Java客户端提供了简单的配置方式,可以不必直接对数据库进行操作。
仲裁节点是一种特殊的节点,它本身并不存储数据,主要的作用是决定哪一个备节点在主节点挂掉之后提升为主节点,所以客户端不需要连接此节点。这里虽然只有一个备节点,但是仍然需要一个仲裁节点来提升备节点级别。我开始也不相信必须要有仲裁节点,但是自己也试过没仲裁节点的话,主节点挂了备节点还是备节点,所以咱们还是需要它的。
一、服务器环境
主节点:192.168.110.71:10111
备节点:192.168.100.90:10111
备节点:192.168.100.110:10111
仲裁节点:192.168.100.90:20111
二、安装mongodb(略)
三、配置mongodb
创建节点数据目录
cd /home/slim/mongodb-2.6.8
主节点:192.168.110.71
mkdir -p ./data/master
备节点:192.168.100.90
mkdir -p ./data/slaver
备节点:192.168.100.110
mkdir -p ./data/slaver
仲裁节点:192.168.100.90
mkdir -p ./data/arbiter
#三个目录分别对应主,备,仲裁节点
1.主节点192.168.110.71配置文件
conf/mongodb-master.conf
dbpath=/home/slim/mongodb-2.6.8/data/masterlogpath=/home/slim/mongodb-2.6.8/logs/master.logpidfilepath=/home/slim/mongodb-2.6.8/data/master.piddirectoryperdb=truelogappend=truereplSet=test_set1bind_ip=192.168.110.71port=10111oplogSize=1000fork=truenoprealloc=true2.备节点192.168.100.90配置文件
conf/mongodb-slaver.conf
dbpath=/home/slim/mongodb-2.6.8/data/slaverlogpath=/home/slim/mongodb-2.6.8/logs/slaver.logpidfilepath=/home/slim/mongodb-2.6.8/data/slaver.piddirectoryperdb=truelogappend=truereplSet=test_set1bind_ip=192.168.100.90port=10111oplogSize=1000fork=truenoprealloc=truesmallfiles=true3.备节点192.168.100.110配置文件
conf/mongodb-slaver.conf
dbpath=/home/slim/mongodb-2.6.8/data/slaverlogpath=/home/slim/mongodb-2.6.8/logs/slaver.logpidfilepath=/home/slim/mongodb-2.6.8/data/slaver.piddirectoryperdb=truelogappend=truereplSet=test_set1bind_ip=192.168.100.110port=10111oplogSize=1000fork=truenoprealloc=truesmallfiles=true4.仲裁节点192.168.100.90 配置文件conf/mongodb-arbiter.conf
dbpath=/home/slim/mongodb-2.6.8/data/arbiterlogpath=/home/slim/mongodb-2.6.8/logs/arbiter.logpidfilepath=/home/slim/mongodb-2.6.8/data/arbiter.piddirectoryperdb=truelogappend=truereplSet=test_set1bind_ip=192.168.100.90port=20111oplogSize=1000fork=truenoprealloc=true参数解释:
dbpath:数据存放目录
logpath:日志存放路径
pidfilepath:进程文件,方便停止mongodb
directoryperdb:为每一个数据库按照数据库名建立文件夹存放
logappend:以追加的方式记录日志
replSet:replica set的名字
bind_ip:mongodb所绑定的ip地址
port:mongodb进程所使用的端口号,默认为27017
oplogSize:mongodb操作日志文件的最大大小。单位为Mb,默认为硬盘剩余空间的5%
fork:以后台方式运行进程
noprealloc:不预先分配存储
四、启动服务
进入每个mongodb节点根据配置,启动服务
./bin/monood -f conf/mongodb-master.conf
./bin/mongod -f conf/mongodb-slaver.conf
./bin/mongod -f conf/mongodb-arbiter.conf
5、配置主、备、仲裁节点
可以通过客户端连接mongodb,也可以直接在三个节点中选择一个连接mongodb。
./mongo 192.168.100.90:10111>use admin>cfg={_id:"test_set1", members:[{_id:0,host:'192.168.110.71:10111',priority:3}, {_id:1,host:'192.168.100.90:10111',priority:2}, {_id:2,host:'192.168.100.110:10111',priority:1}, {_id:3,host:'192.168.100.90:20111',arbiterOnly:true}]};>rs.initiate(cfg); #使配置生效{ "info" : "Config now saved locally. Should come online in about a minute.", "ok" : 1}cfg是可以任意的名字,当然最好不要是mongodb的关键字,conf,config都可以。最外层的_id表示replica set的名字,members里包含的是所有节点的地址以及优先级。优先级最高的即成为主节点,即这里的192.168.110.71:10111。特别注意的是,对于仲裁节点,需要有个特别的配置——arbiterOnly:true。这个千万不能少了,不然主备模式就不能生效。配置的生效时间根据不同的机器配置会有长有短,配置不错的话基本上十几秒内就能生效,有的配置需要一两分钟。如果生效了,执行rs.status()命令会看到如下信息:
SECONDARY> rs.status();{ "set" : "test_set1", "date" : ISODate("2015-03-16T08:28:20Z"), "myState" : 2, "syncingTo" : "192.168.110.71:10111", "members" : [ { "_id" : 0, "name" : "192.168.110.71:10111", "health" : 1, "state" : 1, "stateStr" : "PRIMARY", "uptime" : 122, "optime" : { "t" : 1426494376000, "i" : 1 }, "optimeDate" : ISODate("2015-03-16T08:26:16Z"), "lastHeartbeat" : ISODate("2015-03-16T08:28:19Z"), "lastHeartbeatRecv" : ISODate("2015-03-16T08:28:19Z"), "pingMs" : 0, "electionTime" : { "t" : 1426494425000, "i" : 1 }, "electionDate" : ISODate("2015-03-16T08:27:05Z") }, { "_id" : 1, "name" : "192.168.100.90:10111", "health" : 1, "state" : 2, "stateStr" : "SECONDARY", "uptime" : 366, "optime" : { "t" : 1426494376000, "i" : 1 }, "optimeDate" : ISODate("2015-03-16T08:26:16Z"), "infoMessage" : "syncing to: 192.168.110.71:10111", "self" : true }, { "_id" : 2, "name" : "192.168.100.110:10111", "health" : 1, "state" : 2, "stateStr" : "SECONDARY", "uptime" : 122, "optime" : { "t" : 1426494376000, "i" : 1 }, "optimeDate" : ISODate("2015-03-16T08:26:16Z"), "lastHeartbeat" : ISODate("2015-03-16T08:28:20Z"), "lastHeartbeatRecv" : ISODate("2015-03-16T08:28:20Z"), "pingMs" : 66, "syncingTo" : "192.168.110.71:10111" }, { "_id" : 3, "name" : "192.168.100.90:20111", "health" : 1, "state" : 7, "stateStr" : "ARBITER", "uptime" : 122, "lastHeartbeat" : ISODate("2015-03-16T08:28:19Z"), "lastHeartbeatRecv" : ISODate("2015-03-16T08:28:20Z"), "pingMs" : 0 } ], "ok" : 1}如果配置正在生效,其中会包含如下信息:
"stateStr" : "RECOVERING"
同时可以查看对应节点的日志,发现正在等待别的节点生效或者正在分配数据文件。
六、测试
1.往主节点插入数据,能从备节点查到之前插入的数据
PRIMARY> use test;switched to db testPRIMARY> db.user.insert({name:'jack',age:80});PRIMARY> db.user.find();{ "_id" : ObjectId("55069502bcdd8c8031522ddb"), "name" : "jack", "age" : 80 }2.停掉主节点,备节点能变成主节点提供服务
SECONDARY> rs.status();{ "set" : "test_set1", "date" : ISODate("2015-03-16T08:37:17Z"), "myState" : 2, "syncingTo" : "192.168.100.90:10111", "members" : [ { "_id" : 0, "name" : "192.168.110.71:10111", "health" : 0, "state" : 8, "stateStr" : "(not reachable/healthy)", "uptime" : 0, "optime" : { "t" : 1426494722000, "i" : 1 }, "optimeDate" : ISODate("2015-03-16T08:32:02Z"), "lastHeartbeat" : ISODate("2015-03-16T08:37:15Z"), "lastHeartbeatRecv" : ISODate("2015-03-16T08:35:46Z"), "pingMs" : 0 }, { "_id" : 1, "name" : "192.168.100.90:10111", "health" : 1, "state" : 1, "stateStr" : "PRIMARY", "uptime" : 656, "optime" : { "t" : 1426494722000, "i" : 1 }, "optimeDate" : ISODate("2015-03-16T08:32:02Z"), "lastHeartbeat" : ISODate("2015-03-16T08:37:15Z"), "lastHeartbeatRecv" : ISODate("2015-03-16T08:37:16Z"), "pingMs" : 4, "electionTime" : { "t" : 1426494955000, "i" : 1 }, "electionDate" : ISODate("2015-03-16T08:35:55Z") }, { "_id" : 2, "name" : "192.168.100.110:10111", "health" : 1, "state" : 2, "stateStr" : "SECONDARY", "uptime" : 1142, "optime" : { "t" : 1426494722000, "i" : 1 }, "optimeDate" : ISODate("2015-03-16T08:32:02Z"), "infoMessage" : "syncing to: 192.168.100.90:10111", "self" : true }, { "_id" : 3, "name" : "192.168.100.90:20111", "health" : 1, "state" : 7, "stateStr" : "ARBITER", "uptime" : 656, "lastHeartbeat" : ISODate("2015-03-16T08:37:16Z"), "lastHeartbeatRecv" : ISODate("2015-03-16T08:37:16Z"), "pingMs" : 0 } ], "ok" : 1}可以发现192.168.110.71:10111不可以用。
3.恢复主节点,备节点也能恢复其备的角色,而不是继续充当主的角色
主节点192.168.110.71:10111又获取PRIMARY
注意:
当我们在 replica set 进行检索操作时,默认的路由会选择 master 机器,当我们需 要针对任意的从机进行查询的时候,我们需要开启 slaveOk 选项。当我们在没有 开启 salveOk 选项的时候,如果进行此操作会报如下错:
*** not master and slaveok=false 所以我们要进行如下操作:
rs.slaveOk(); // enable querying a secondary
db.user.find(...)
- MongoDB Replica Set集群部署
- Mongodb集群部署---Replica Set+Sharding
- Mongodb Replica Set + Sharding集群
- MongoDB Replica set 集群搭建
- Mongodb集群配置(sharding with replica set)
- Mongodb集群配置(sharding with replica set)
- Mongodb集群配置(sharding with replica set)
- mongodb集群搭建-replica set模式
- mongodb集群环境搭建Replica Set
- Mongodb集群搭建之 --Replica Set
- mongodb Replica Set集群修改ip
- MongoDB-部署之-Replica Set Windows
- MongoDB 常见集群部署Replica Sets + Sharding
- mongodb集群方案:Replica Set集群的安装配置
- 转:mongodb分片集群(sharding with replica set)配置
- mongodb分片集群(sharding with replica set)配置
- MongoDB 学习 高可用架构—Replica Set 集群实战
- Mongodb高可用架构—Replica Set 集群实战
- hdu1896Stones
- 【Tools.Redis】安装
- OC内存管理release、autorelease和set方法内存管理
- 深入理解JavaScript中变量作用域
- 机器学习中的数学(3)-模型组合(Model Combining)之Boosting与Gradient Boosting
- MongoDB Replica Set集群部署
- hdu5024(dp)
- 设计模式学习002——装饰者模式
- 机器学习中的数学(4)-线性判别分析(LDA), 主成分分析(PCA)
- 机器学习中的数学(5)-强大的矩阵奇异值分解(SVD)及其应用
- OpenCV Using Python——基于SURF特征提取和金字塔LK光流法的单目视觉三维重建
- Linux线程-pthread_kill
- cocos2dx android winSize 由来
- 机器学习中的算法(1)-决策树模型组合之随机森林与GBDT