转自(林夕木大大 http://www.cnblogs.com/MDK-L/p/4475959.html)
一,节点类型:
a) 主节点:支持读写
b) 从节点:支持读(需设置)
二, 节点环境
主节点:192.168.129.47
mongodb安装目录:/home/en/tool/mongodb-linux-x86_64-2.6.9/
mongodb数据目录:/home/en/njqgd_db
mongodb日志目录:/home/en/njqgd_log
mongodb密匙目录:/home/en/njqgd_key
node.js 程序目录:/home/en/njqgd_node
java 程序目录:/home/en/njqgd_tomcat/apache-tomcat-7.0.61
从节点:192.168.129.48
mongodb安装目录:/home/en/tool/mongodb-linux-x86_64-2.6.9/
mongodb数据目录:/njqgd_db/db
mongodb日志目录:/njqgd_db/log
mongodb密匙目录:/njqgd_db/key
清空从节点数据目录:rm -rf /njqgd_db/db/* (请确保从节点目录为空,若不为空执行此命令)
1.主节点操作:
1) cd /home/en/tool/mongodb-linux-x86_64-2.6.9/bin 2) sudo echo "njqgd db 1" > /home/en/njqgd_key/key 3) sudo chmod 600 /home/en/njqgd_key/key 4) sudo ./mongod --dbpath=/home/en/njqgd_db/ --logpath=/home/en/njqgd_log/mongodb.log --port 27017 --replSet njqgd --keyFile /home/en/njqgd_key/key --maxConns=2000 --fork –logappend (此操作需等待约半分钟) 出现如下内容,说明第4步操作成功: about to fork child process, waiting until server is ready for connections. forked process: XXXX child process started successfully, parent exiting 5) 现在开始进行从节点操作,从节点操作完毕,再进行下一步. 6) cd /home/en/tool/mongodb-linux-x86_64-2.6.9/bin 7) sudo ./mongo 8) use admin 9) db.runCommand({"replSetInitiate" : {"_id" : "njqgd","members" : [{"_id" : 0,"host" : "192.168.129.47:27017"},{"_id" : 1,"host" : "192.168.129.48 :27017"}]}}); 出现如下内容,说明第9步操作成功: { "info" : "Config now saved locally. Should come online in about a minute.", "ok" : 1 } 10) 所有操作完毕.
2.从节点操作:
1) cd /home/en/tool/mongodb-linux-x86_64-2.6.9/bin 2) sudo echo "njqgd db 1" > /njqgd_db/key/key (此处 echo 命令后面 双引号内的内容请和主节点保持一致) 3) sudo chmod 600 /njqgd_db/key/key 4) sudo ./mongod --dbpath=/njqgd_db/db/ --logpath=/njqgd_db/log/mongodb.log --port 27017 --replSet njqgd/192.168.129.47:27017 --keyFile /njqgd_db/key/key --maxConns=2000 --fork –logappend 出现如下内容,说明第4步操作成功: about to fork child process, waiting until server is ready for connections. forked process: XXXX child process started successfully, parent exiting 5) 从节点操作完成,请继续主节点操作第6步.
3. 添加数据库操作用户
1) cd /home/en/tool/mongodb-linux-x86_64-2.6.9/bin 2) sudo ./mongo 3) use admin 4) db.addUser('njqgd','njqgd'); 5) use wqdwxt_njqgd 6) db.addUser('njqgd','njqgd'); 7) db.test.insert({'name':'test'})
4. 节点主从状态切换
cfg = rs.conf() cfg.members[0].priority = 2 cfg.members[1].priority = 1 cfg.members[2].priority = 0.5 rs.reconfig(cfg)
节点的 priority 值越大,切换时的优先级越高.设置好从节点的 priority 值后,调用一次 rs.reconfig 操作会导致当前主库中断,因为
需要重新执行主节点竞选,大概几十秒后,新的主节点产生#查看复制集状态.
rs.status()
rs.isMaster()
rs.conf()
#查看从库状态
db.printSlaveReplicationInfo()
#设置从库可查询
db.getMongo().setSlaveOk()
rs.setSlaveOk()
三. 开启各项服务.
1.开启mongodb
1) sudo -s (输入密码) 2) cd /home/en/tool/mongodb-linux-x86_64-2.6.9/bin 3) ./mongod --dbpath=/home/en/njqgd_db/ --logpath=/home/en/njqgd_log/mongodb.log --port 27017 --replSet njqgd --keyFile /home/en/njqgd_key/key --maxConns=2000 --fork –logappend
出现如下类似内容说明成功 about to fork child process, waiting until server is ready for connections. forked process: XXXX child process started successfully, parent exiting
1.1 mongodb手动切换主从
1) sudo -s (输入密码) 2) cd /home/en/tool/mongodb-linux-x86_64-2.6.9/bin 3) ./mongo 4) rs.isMaster(); 如果出现如下内容 { "setName" : "njqgd", "setVersion" : 2, "ismaster" : true, "secondary" : false, "hosts" : [ "192.168.129.47:27017", "192.168.129.48 :27017" ], "primary" : "192.168.129.47:27017", "me" : "192.168.129.48:27017", "maxBsonObjectSize" : 16777216, "maxMessageSizeBytes" : 48000000, "maxWriteBatchSize" : 1000, "localTime" : ISODate("2015-05-09T02:20:08.633Z"), "maxWireVersion" : 2, "minWireVersion" : 0, "ok" : 1 } ismaster为true 当前节点即为主节点(就不用进行下面的操作) 5) use admin 6) db.auth('njqgd','njqgd'); 7) rs.status(); { "set" : "njqgd", "date" : ISODate("2015-05-09T02:28:35Z"), "myState" : 1, "members" : [ { "_id" : 0, "name" : "192.168.129.47:27017", "health" : 1, "state" : 1, "stateStr" : "PRIMARY", "uptime" : 54073, "optime" : Timestamp(1431138513, 2), "optimeDate" : ISODate("2015-05-09T02:28:33Z"), "electionTime" : Timestamp(1431084460, 1), "electionDate" : ISODate("2015-05-08T11:27:40Z"), "self" : true }, { "_id" : 1, "name" : "192.168.129.48:27017", "health" : 1, "state" : 2, "stateStr" : "SECONDARY", "uptime" : 54059, "optime" : Timestamp(1431138512, 3), "optimeDate" : ISODate("2015-05-09T02:28:32Z"), "lastHeartbeat" : ISODate("2015-05-09T02:28:33Z"), "lastHeartbeatRecv" : ISODate("2015-05-09T02:28:33Z"), "pingMs" : 1, "syncingTo" : "222.186.43.150:27017" } ], "ok" : 1 } 要记住 节点顺序 以便下一步操作 6) cfg = rs.conf() <回车> cfg.members[0].priority = 2 <回车> (此处中括号中是节点顺序.从0开始) cfg.members[1].priority = 1 <回车> rs.reconfig(cfg) <回车> 节点的 priority 值越大,切换时的优先级越高.设置好从节点的 priority 值后,调用一次 rs.reconfig 操作会导致当前主库中断,因为 需要重新执行主节点竞选,大概几十秒后,新的主节点产生#查看复制集状态.