Replica sets複製集的搭建

小亮520cl發表於2015-09-15
MongoDB 高可用可用分兩種:
Master-Slave 主從複製::
只需要在某一個服務啟動時加上–master 引數,而另一個服務加上–slave 與–source 引數,
即可實現同步。 MongoDB 的最新版本已不再推薦此方案。
Replica Sets 複製集::
MongoDB 在 1.6 版本對開發了新功能 replica set,這比之前的 replication 功能要強大一
些,增加了故障自動切換和自動修復成員節點,各個 DB 之間資料完全一致,大大降低了維
護成功。 auto shard 已經明確說明不支援 replication paris,建議使用 replica set, replica set
故障切換完全自動。


1、 建立資料檔案儲存路徑

  1. [root@localhost ~]# mkdir -p /data/data/r0
  2. [root@localhost ~]# mkdir -p /data/data/r1
  3. [root@localhost ~]# mkdir -p /data/data/r2


2、 建立日誌檔案路徑

  1. [root@localhost ~]# mkdir -p /data/log


3、建立主從 key 檔案,用於標識叢集的私鑰的完整路徑,如果各個例項的 key file 內容不一
致,程式將不能正常用。

  1. [root@localhost ~]# mkdir -p /data/key
  2. [root@localhost ~]# echo "this is rs1 super secret key" > /data/key/r0
  3. [root@localhost ~]# echo "this is rs1 super secret key" > /data/key/r1
  4. [root@localhost ~]# echo "this is rs1 super secret key" > /data/key/r2
  5. [root@localhost ~]# chmod 600 /data/key/r*


4、啟動 3 個例項

  1. [root@localhost ~]# /Apps/mongo/bin/mongod --replSet rs1 --keyFile /data/key/r0 --fork --port
  2. 28010 --dbpath /data/data/r0 --logpath=/data/log/r0.log --logappend
  3. all output going to: /data/log/r0.log
  4. forked process: 6573
  5. [root@localhost ~]# /Apps/mongo/bin/mongod --replSet rs1 --keyFile /data/key/r1 --fork --port
  6. 28011 --dbpath /data/data/r1 --logpath=/data/log/r1.log --logappend
  7. all output going to: /data/log/r1.log
  8. forked process: 6580
  9. [root@localhost ~]# /Apps/mongo/bin/mongod --replSet rs1 --keyFile /data/key/r2 --fork --port
  10. 28012 --dbpath /data/data/r2 --logpath=/data/log/r2.log --logappend
  11. all output going to: /data/log/r2.log
  12. forked process: 6585


5、配置及初始化 Replica Sets

  1. [root@localhost bin]# /Apps/mongo/bin/mongo -port 28010
  2. MongoDB shell version: 1.8.1
  3. connecting to: 127.0.0.1:28010/test
  4. > config_rs1 = {_id: 'rs1', members: [
  5. ... {_id: 0, host: 'localhost:28010', priority:1}, --成員 IP 及埠,最好是寫ip那樣就可以跨機器 , priority=1 指 PRIMARY
  6. ... {_id: 1, host: 'localhost:28011'},
  7. ... {_id: 2, host: 'localhost:28012'}]
  8. ... }
  9. {
  10. "_id" : "rs1",
  11. "members" : [
  12. {

  13. "_id" : 0,
  14. "host" : "localhost:28010"
  15. },
  16. {
  17. "_id" : 1,
  18. "host" : "localhost:28011"
  19. },
  20. {
  21. "_id" : 2,
  22. "host" : "localhost:28012"
  23. }
  24. ]
  25. }
  26. > rs.initiate(config_rs1); --初始化配置
  27. {
  28. "info" : "Config now saved locally. Should come online in about a minute.",
  29. "ok" : 1
  30. }



6檢視複製集狀態
> rs.status()

  1. {
  2. "set" : "rs1",
  3. "date" : ISODate("2012-05-31T09:49:57Z"),
  4. "myState" : 1,
  5. "members" : [
  6. {
  7. "_id" : 0,
  8. "name" : "localhost:28010",
  9. "health" : 1, --1 表明正常; 0 表明異常
  10. "state" : 1, -- 1 表明是 Primary; 2 表明是 Secondary;
  11. "stateStr" : "PRIMARY", --表明此機器是主庫
  12. "optime" : {
  13. "t" : 1338457763000,
  14. "i" : 1
  15. },
  16. "optimeDate" : ISODate("2012-05-31T09:49:23Z"),
  17. "self" : true
  18. },
  19. {
  20. "_id" : 1,
  21. "name" : "localhost:28011",
  22. "health" : 1,
  23. 65 / 91
  24. "state" : 2,
  25. "stateStr" : "SECONDARY",
  26. "uptime" : 23,
  27. "optime" : {
  28. "t" : 1338457763000,
  29. "i" : 1
  30. },
  31. "optimeDate" : ISODate("2012-05-31T09:49:23Z"),
  32. "lastHeartbeat" : ISODate("2012-05-31T09:49:56Z")
  33. },
  34. {
  35. "_id" : 2,
  36. "name" : "localhost:28012",
  37. "health" : 1,
  38. "state" : 2,
  39. "stateStr" : "SECONDARY",
  40. "uptime" : 23,
  41. "optime" : {
  42. "t" : 1338457763000,
  43. "i" : 1
  44. },
  45. "optimeDate" : ISODate("2012-05-31T09:49:23Z"),
  46. "lastHeartbeat" : ISODate("2012-05-31T09:49:56Z")
  47. }
  48. ],
  49. "ok" : 1
  50. }


還可以用 isMaster 檢視 Replica Sets 狀態。

  1. rs1:PRIMARY> rs.isMaster()
  2. {
  3. "setName" : "rs1",
  4. "ismaster" : true,
  5. "secondary" : false,
  6. "hosts" : [
  7. "localhost:28010",
  8. "localhost:28012",
  9. "localhost:28011"
  10. ],
  11. "maxBsonObjectSize" : 16777216,
  12. "ok" : 1
  13. }



rs1:PRIMARY>rs.conf()
shard1:SECONDARY> use local
switched to db local
shard1:SECONDARY> db.system.replset.find()


 





來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29096438/viewspace-1800171/,如需轉載,請註明出處,否則將追究法律責任。

相關文章