Mongodb的三种集群方式的搭建:Replica Set / Sharding / MasterSlaver。
本文档只说明副本集集群搭建方式,其他方案请自行搜索。
mongodb的安装请参考其他文档
官方文档 http://docs.mongodb.org/manual/core/replication-introduction/
如下图:
一般情况下不会把数据目录建立在mongodb的解压目录下,不过这里方便起见,就建在mongodb解压目录下吧。
mkdir -p /usr/local/webserver/mongodb/data/ mkdir -p /usr/local/webserver/mongodb/data/ mkdir -p /usr/local/webserver/mongodb/data/ #三个目录分别对应主,备,仲裁节点
由于配置比较多,所以我们将配置写到文件里。
#ip:192.168.51.10 #config:/usr/local/webserver/mongodb/mongo.conf dbpath=/usr/local/webserver/mongodb/data/ #数据存放目录 logpath=/usr/local/webserver/mongodb/data/mongodb_logs.log #日志文件路径,这个不是目录哦 pidfilepath=/var/run/mongo.pid #进程文件 directoryperdb=true #每个数据库单独存放在一个目录 logappend=true #以追加的方式记录日志 replSet=repmongo #Replicate set 的名字(随意) bind_ip=192.168.51.10,127.0.0.1 #监听地址 port=27017 #监听端口 oplogSize=1000 #oplog文件的大小,单位Mb,默认为磁盘剩余的5%,后期修改较为麻烦,建议根据业务读写比例,做合理修改 fork=true #以后台方式运行进程
#ip:192.168.51.11 #config:/usr/local/webserver/mongodb/mongo.conf dbpath=/usr/local/webserver/mongodb/data/ #数据存放目录 logpath=/usr/local/webserver/mongodb/data/mongodb_logs.log #日志文件路径,这个不是目录哦 pidfilepath=/var/run/mongo.pid #进程文件 directoryperdb=true #每个数据库单独存放在一个目录 logappend=true #以追加的方式记录日志 replSet=repmongo #Replicate set 的名字(随意) bind_ip=192.168.51.11,127.0.0.1 #监听地址 port=27017 #监听端口 oplogSize=1000 #oplog文件的大小,单位Mb,默认为磁盘剩余的5%,后期修改较为麻烦,建议根据业务读写比例,做合理修改 fork=true #以后台方式运行进程
#ip:192.168.51.12 #config:/usr/local/webserver/mongodb/mongo.conf dbpath=/usr/local/webserver/mongodb/data/ #数据存放目录 logpath=/usr/local/webserver/mongodb/data/mongodb_logs.log #日志文件路径,这个不是目录哦 pidfilepath=/var/run/mongo.pid #进程文件 directoryperdb=true #每个数据库单独存放在一个目录 logappend=true #以追加的方式记录日志 replSet=repmongo #Replicate set 的名字(随意) bind_ip=192.168.51.12,127.0.0.1 #监听地址 port=27017 #监听端口 oplogSize=1000 #oplog文件的大小,单位Mb,默认为磁盘剩余的5%,后期修改较为麻烦,建议根据业务读写比例,做合理修改 fork=true #以后台方式运行进程 noprealloc=true #不预先分配存储
ip:192.168.51.10
/usr/local/webserver/mongodb/bin/mongo -f /usr/local/webserver/mongodb/mongo.confip:192.168.51.11
/usr/local/webserver/mongodb/bin/mongo -f /usr/local/webserver/mongodb/mongo.confip:192.168.51.12
/usr/local/webserver/mongodb/bin/mongo -f /usr/local/webserver/mongodb/mongo.conf注意配置文件的路径一定要保证正确,可以是相对路径也可以是绝对路径。
/usr/local/webserver/mongodb/bin/mongo 192.168.51.10:27017 #ip和port是某个节点的地址 >use admin >config={ _id:"repmongo", members:[ {_id:0,host:'192.168.51.10:27017',priority:2}, {_id:1,host:'192.168.51.10:27017',priority:1}, {_id:2,host:'192.168.51.10:27017',arbiterOnly:true}] }; >rs.initiate(config) #使配置生效
{ "set" : "repmongo", "date" : ISODate("2013-01-05T02:44:43Z"), "myState" : 1, "members" : [ { "_id" : 0, "name" : "192.168.51.10:27017", "health" : 1, "state" : 1, "stateStr" : "PRIMARY", "uptime" : 200, "optime" : Timestamp(1357285565000, 1), "optimeDate" : ISODate("2013-01-04T07:46:05Z"), "self" : true }, { "_id" : 1, "name" : "192.168.51.11:27017", "health" : 1, "state" : 2, "stateStr" : "SECONDARY", "uptime" : 200, "optime" : Timestamp(1357285565000, 1), "optimeDate" : ISODate("2013-01-04T07:46:05Z"), "lastHeartbeat" : ISODate("2013-01-05T02:44:42Z"), "pingMs" : 0 }, { "_id" : 2, "name" : "192.168.51.12:27017", "health" : 1, "state" : 7, "stateStr" : "ARBITER", "uptime" : 200, "lastHeartbeat" : ISODate("2013-01-05T02:44:42Z"), "pingMs" : 0 } ], "ok" : 1 }
如果配置正在生效,其中会包含如下信息:
"stateStr" : "RECOVERING"
如果从库无法读,解决办法
rs.slaveOk(); //从库开启
修改ecstore2.0的config文件
#仲裁节点ip不需要连接,所以这里不用填 define('MONGODB_SERVER_CONFIG', 'mongodb://192.168.51.10:27017,192.168.51.11:27017');