当前位置:Gxlcms > 数据库问题 > MongoDB副本集合

MongoDB副本集合

时间:2021-07-01 10:21:17 帮助过:36人阅读

  1. #简述:副本集合(Replica Sets),是一个基于主/从复制机制的复制功能,但增加了自动故障转移和恢复特性,一个集群最多
  2. 可以支持7个服务器,并且任意节点都可以是主节点。所有的写操作都被分发到主节点,而读操作可以在任何节点上进行;
  1. #系统环境
  2. OS
  3. CentOS6.5
  4. server1
  5. 192.168.3.100:27017
  6. server1
  7. 192.168.3.100:27018
  8. node1
  9. 192.168.3.101:27017
  10. node2
  11. 192.168.3.102:27017
  1. #配置副本集方法之一(自动选定某一台数据库为主数据库)
  2. #server1启动节点
  3. mkdir /application/mongodb/database /application/mongodb/logs
  4. /application/mongodb/bin/mongod --rest --replSet fuben/192.168.3.100:27017 --port 27017 --dbpath=/application/mongodb/database --logpath=/application/mongodb/logs/mongodb.log --fork
  5. #node1启动节点
  6. mkdir /application/mongodb/database /application/mongodb/logs
  7. /application/mongodb/bin/mongod --rest --replSet fuben/192.168.3.101:27017 --port 27017 --dbpath=/application/mongodb/database --logpath=/application/mongodb/logs/mongodb.log --fork
  8. #node2启动节点
  9. mkdir /application/mongodb/database /application/mongodb/logs
  10. /application/mongodb/bin/mongod --rest --replSet fuben/192.168.3.102:27017 --port 27017 --dbpath=/application/mongodb/database --logpath=/application/mongodb/logs/mongodb.log --fork
  11. #server1启动仲裁节点
  12. mkdir /application/mongodb/arb
  13. /application/mongodb/bin/mongod --rest --replSet fuben --dbpath=/application/mongodb/arb --port 27018 --logpath=/application/mongodb/logs/arb.log --fork
  1. #Server1登陆mongo
  2. /application/mongodb/bin/mongo --port 27017
  3. #初始化节点(server1上操作)
  4. > rs.initiate({_id:"fuben",members:[{_id:1,host:"192.168.3.100:27017"},{_id:2,host:"192.168.3.101:27017"},{_id:3,host:"192.168.3.102:27017"},{_id:4,host:"192.168.3.100:27018","arbiterOnly":true}]});
  5. {
  6. "info" : "Config now saved locally.  Should come online in about a minute.",
  7. "ok" : 1
  8. }
  1. #查看副本集状态
  2. fuben:PRIMARY> rs.status()
  3. {
  4. "set" : "fuben",
  5. "date" : ISODate("2015-05-18T13:27:21Z"),
  6. "myState" : 1,
  7. "members" : [
  8. {
  9. "_id" : 1,
  10. "name" : "192.168.3.100:27017",
  11. "health" : 1,
  12. "state" : 1,
  13. "stateStr" : "PRIMARY",
  14. #主
  15. "uptime" : 352,
  16. "optime" : Timestamp(1431955576, 1),
  17. "optimeDate" : ISODate("2015-05-18T13:26:16Z"),
  18. "electionTime" : Timestamp(1431955587, 1),
  19. "electionDate" : ISODate("2015-05-18T13:26:27Z"),
  20. "self" : true
  21. },
  22. {
  23. "_id" : 2,
  24. "name" : "192.168.3.101:27017",
  25. "health" : 1,
  26. "state" : 2,
  27. "stateStr" : "SECONDARY",
  28. #从
  29. "uptime" : 64,
  30. "optime" : Timestamp(1431955576, 1),
  31. "optimeDate" : ISODate("2015-05-18T13:26:16Z"),
  32. "lastHeartbeat" : ISODate("2015-05-18T13:27:21Z"),
  33. "lastHeartbeatRecv" : ISODate("2015-05-18T13:27:20Z"),
  34. "pingMs" : 0,
  35. "syncingTo" : "192.168.3.100:27017"
  36. },
  37. {
  38. "_id" : 3,
  39. "name" : "192.168.3.102:27017",
  40. "health" : 1,
  41. "state" : 2,
  42. "stateStr" : "SECONDARY",
  43. #从
  44. "uptime" : 62,
  45. "optime" : Timestamp(1431955576, 1),
  46. "optimeDate" : ISODate("2015-05-18T13:26:16Z"),
  47. "lastHeartbeat" : ISODate("2015-05-18T13:27:21Z"),
  48. "lastHeartbeatRecv" : ISODate("2015-05-18T13:27:21Z"),
  49. "pingMs" : 0,
  50. "syncingTo" : "192.168.3.100:27017"
  51. },
  52. {
  53. "_id" : 4,
  54. "name" : "192.168.3.100:27018",
  55. "health" : 1,
  56. "state" : 7,
  57. "stateStr" : "ARBITER",
  58. #仲裁
  59. "uptime" : 62,
  60. "lastHeartbeat" : ISODate("2015-05-18T13:27:21Z"),
  61. "lastHeartbeatRecv" : ISODate("2015-05-18T13:27:21Z"),
  62. "pingMs" : 0
  63. }
  64. ],
  65. "ok" : 1
  66. }
  1. #在PRIMARY上面操作,建库建表,从数据库只有读的权限
  2. fuben:PRIMARY> show dbs;
  3. local
  4. 1.078125GB
  5. fuben:PRIMARY> use testdb;
  6. switched to db testsb
  7. fuben:PRIMARY> db.document01.insert({"name":"wsq","sex":"M","age":"20"});
  8. fuben:PRIMARY> show tables;
  9. document01
  10. system.indexes
  11. fuben:PRIMARY> db.document01.find();
  12. { "_id" : ObjectId("5511551aa51f85ff07b6df0c"), "name" : "wsq", "sex" : "M", "age" : "20" }
  13. #node1登陆mongo
  14. /application/mongodb/bin/mongo --port 27017
  15. #设置从库可读(从库上执行)
  16. fuben:SECONDARY> show dbs;
  17. local
  18. 1.078125GB
  19. testdb
  20. 0.203125GB
  21. fuben:SECONDARY> use testdb;
  22. switched to db testdb
  23. fuben:SECONDARY> show tables;
  24. Tue Mar 24 19:53:32.513 error: { "$err" : "not master and slaveOk=false", "code" : 13435 } at src/mongo/shell/query.js:128
  25. #因为没有读的权限
  26. fuben:SECONDARY> rs.slaveOk();
  27. #如果不执行该步骤从库上不可读数据
  28. fuben:SECONDARY> show tables;
  29. document01
  30. system.indexes
  31. fuben:SECONDARY> db.document01.find();
  32. { "_id" : ObjectId("5511551aa51f85ff07b6df0c"), "name" : "wsq", "sex" : "M", "age" : "20" }
  1. #配置副本集方法之二(手动选定某一台数据库为主数据库)
  2. #server1启动节点
  3. mkdir -p /mongodb/data/db /mongodb/data/logs
  4. mongod --rest --replSet fuben/192.168.3.171:27017 --master --port 27017 --dbpath=/mongodb/data/db --logpath=/mongodb/data/logs/mongodb.log --fork
  5. #node1启动节点
  6. mkdir -p /mongodb/data/db /mongodb/data/logs
  7. mongod --rest --replSet fuben/192.168.3.204:27017 --port 27017 --dbpath=/mongodb/data/db --logpath=/mongodb/data/logs/mongodb.log --fork
  8. #node2启动节点
  9. mkdir -p /mongodb/data/db /mongodb/data/logs
  10. mongod --rest --replSet fuben/192.168.3.108:27017 --port 27017 --dbpath=/mongodb/data/db --logpath=/mongodb/data/logs/mongodb.log --fork
  1. #初始化节点:(登陆其中任何一个节点操作皆可)
  2. [root@server1 /]# mongo --port 27017
  3. MongoDB shell version: 2.4.12
  4. connecting to: 127.0.0.1:27017/test
  5. > rs.initiate({_id:"fuben",members:[{_id:1,host:"192.168.3.171:27017",priority:2},{_id:2,host:"192.168.3.204:27017",priority:3},{_id:3,host:"192.168.3.108:27017",priority:4}]});
  6. {
  7. "info" : "Config now saved locally.  Should come online in about a minute.",
  8. "ok" : 1
  9. }
  10. #priority 是设置优先级的,默认优先级为1,可以是1-1000的数字
  1. #验证
  2. fuben:PRIMARY> rs.status();
  3. {
  4. "set" : "fuben",
  5. "date" : ISODate("2015-03-24T12:12:14Z"),
  6. "myState" : 1,
  7. "members" : [
  8. {
  9. "_id" : 1,
  10. "name" : "192.168.10.171:27017",
  11. "health" : 1,
  12. "state" : 2,
  13. "stateStr" : "SECONDARY",
  14. #从
  15. "uptime" : 195,
  16. "optime" : Timestamp(1427198934, 1),
  17. "optimeDate" : ISODate("2015-03-24T12:08:54Z"),
  18. "lastHeartbeat" : ISODate("2015-03-24T12:12:13Z"),
  19. "lastHeartbeatRecv" : ISODate("2015-03-24T12:12:13Z"),
  20. "pingMs" : 0,
  21. "syncingTo" : "192.168.10.108:27017"
  22. },
  23. {
  24. "_id" : 2,
  25. "name" : "192.168.10.204:27017",
  26. "health" : 1,
  27. "state" : 2,
  28. "stateStr" : "SECONDARY",
  29. #从
  30. "uptime" : 195,
  31. "optime" : Timestamp(1427198934, 1),
  32. "optimeDate" : ISODate("2015-03-24T12:08:54Z"),
  33. "lastHeartbeat" : ISODate("2015-03-24T12:12:13Z"),
  34. "lastHeartbeatRecv" : ISODate("2015-03-24T12:12:13Z"),
  35. "pingMs" : 0,
  36. "syncingTo" : "192.168.10.171:27017"
  37. },
  38. {
  39. "_id" : 3,
  40. "name" : "192.168.10.108:27017",
  41. "health" : 1,
  42. "state" : 1,
  43. "stateStr" : "PRIMARY",
  44. #主
  45. "uptime" : 498,
  46. "optime" : Timestamp(1427198934, 1),
  47. "optimeDate" : ISODate("2015-03-24T12:08:54Z"),
  48. "self" : true
  49. }
  50. ],
  51. "ok" : 1
  52. }
  1. #查看当前主库
  2. fuben:SECONDARY> rs.isMaster();
  3. {
  4. "setName" : "fuben",
  5. "setVersion" : 1,
  6. "ismaster" : false,
  7. "secondary" : true,
  8. "hosts" : [
  9. "192.168.3.102:27017",
  10. "192.168.3.101:27017",
  11. "192.168.3.100:27017"
  12. ],
  13. "arbiters" : [
  14. "192.168.3.100:27018"
  15. ],
  16. "primary" : "192.168.3.100:27017",
  17. "me" : "192.168.3.102:27017",
  18. "maxBsonObjectSize" : 16777216,
  19. "maxMessageSizeBytes" : 48000000,
  20. "maxWriteBatchSize" : 1000,
  21. "localTime" : ISODate("2015-05-18T13:36:41.854Z"),
  22. "maxWireVersion" : 2,
  23. "minWireVersion" : 0,
  24. "ok" : 1
  25. }


本文出自 “吴善强” 博客,请务必保留此出处http://shanqiangwu.blog.51cto.com/8067564/1653968

MongoDB副本集合

标签:database   replica   server1   服务器   数据库   mongodb副本集合   

人气教程排行