大資料 MongoDB 複製集管理

來源:互聯網
上載者:User

標籤:初始化   mongodb複製   alt   show   base   comm   行資料   query   process   

MongoDB 複製集
  • MongoDB複製是將資料同步在多個伺服器的過程。

  • 複製提供了資料的冗餘備份,並在多個伺服器上儲存資料副本,提高了資料的可用性, 並可以保證資料的安全性。

  • 複製還允許您從硬體故障和服務中斷中恢複資料。
複製集的優勢
  • 保障資料的安全性
  • 資料高可用性 (24*7)
  • 災難恢複
  • 無需停機維護(如備份,重建索引,壓縮)
  • 分布式讀取資料MongoDB複製原理

    mongodb的複製至少需要兩個節點。其中一個是主節點,負責處理用戶端請求,其餘的都是從節點,負責複製主節點上的資料。

mongodb各個節點常見的搭配方式為:一主一從、一主多從。

主節點記錄在其上的所有操作oplog,從節點定期輪詢主節點擷取這些操作,然後對自己的資料副本執行這些操作,從而保證從節點的資料與主節點一致。

MongoDB複製結構圖如下所示:

以上結構圖中,用戶端從主節點讀取資料,在用戶端寫入資料到主節點時, 主節點與從節點進行資料互動保障資料的一致性。

複製集集特徵:
  • N 個節點的叢集
  • 任何節點可作為主節點
  • 所有寫入操作都在主節點上
  • 自動容錯移轉
  • 自動回復
安裝 MongoDB (tar安裝) :
  • 1.安裝建立多執行個體 :
tar -zxvf mongodb-linux-x86_64-3.2.1.tgz -C /usr/local/cd /usr/local/mv mongodb-linux-x86_64-3.2.1/ mongodb      #重新命名mkdir -p /data/mongodb/mongodb{1,2,3,4}     #建立資料目錄mkdir -p /data/logstouch /data/logs/mongodb{1,2,3,4}.log       #建立記錄檔cd /data/logs/chmod 777 *.log      #賦予許可權cd /usr/local/mongodb/binvim mongodb1.confport=27017dbpath=/data/mongodb/mongodb1logpath=/data/logs/mongodb1.loglogappend=truefork=truemaxConns=5000storageEngine=mmapv1replSet=test     #複製集名稱------------------------------------------------------------------------------------#下面是yum安裝時修改、添加的replication:           #去注釋  replSetName: test   #添加複製集名稱
ln -s /usr/local/mongodb/bin/mongod /usr/bin/  #把mongodb常用的命令添加到系統命令中ln -s /usr/local/mongodb/bin/mongo /usr/bin/
  • 2.開啟多執行個體、初始化配置複製集 :
[[email protected] bin]# mongo> cfg={"_id":"test","members":[{"_id":0,"host":"192.168.217.129:27017"},{"_id":1,"host":"192.168.217.129:27018"},{"_id":2,"host":"192.168.217.129:27019"}]}#配置複製集 ,注意複製集的名稱要一致{    "_id" : "test",    "members" : [        {            "_id" : 0,            "host" : "192.168.217.129:27017"        },        {            "_id" : 1,            "host" : "192.168.217.129:27018"        },        {            "_id" : 2,            "host" : "192.168.217.129:27019"        }    ]}> rs.initiate(cfg)   #初始化配置時保證從節點沒有資料{ "ok" : 1 }test:PRIMARY> rs.status()    #查看複製集的完整狀態{     "set" : "test",        .......        {            "_id" : 0,            "name" : "192.168.217.129:27017",            "health" : 1,            "state" : 1,            "stateStr" : "PRIMARY",       #27017 連接埠作為主節點            "uptime" : 1234,            "optime" : {                "ts" : Timestamp(1531961046, 1),                "t" : NumberLong(1)            },            ......        },        {            "_id" : 1,            "name" : "192.168.217.129:27018",            "health" : 1,            "state" : 2,            "stateStr" : "SECONDARY",    #從節點            "uptime" : 49,            "optime" : {                "ts" : Timestamp(1531961046, 1),                "t" : NumberLong(1)            },            ......        },        {            "_id" : 2,            "name" : "192.168.217.129:27019",            "health" : 1,            "state" : 2,            "stateStr" : "SECONDARY",   #從節點            "uptime" : 49,            "optime" : {                "ts" : Timestamp(1531961046, 1),                "t" : NumberLong(1)            },            .......        }    ],    "ok" : 1}
  • 3.添加和刪除節點 :
test:PRIMARY> rs.add("192.168.217.129:27020")     #添加節點{ "ok" : 1 }test:PRIMARY> rs.status()    ........            "_id" : 3,            "name" : "192.168.217.129:27020",            "health" : 1,            "state" : 2,            "stateStr" : "SECONDARY",    ........test:PRIMARY> rs.remove("192.168.217.129:27020")  #刪除節點{ "ok" : 1 }test:PRIMARY> rs.status().........
  • 4. 類比故障,查看主節點是否自動切換 :
[[email protected] bin]# mongod -f mongodb1.conf --shutdown   #關閉主節點連接埠killing process with pid: 3552[[email protected] bin]# mongo --port 27018  test:SECONDARY> rs.status(){    "set" : "test",    .......        {            "_id" : 0,            "name" : "192.168.217.129:27017",               "health" : 0,            "state" : 8,            "stateStr" : "(not reachable/healthy)",              "uptime" : 0,            "optime" : {            .......        {            "_id" : 1,            "name" : "192.168.217.129:27018",            "health" : 1,            "state" : 2,            "stateStr" : "SECONDARY",            "uptime" : 1811,            .......        {            "_id" : 2,            "name" : "192.168.217.129:27019",   #自動切換主節點            "health" : 1,            "state" : 1,            "stateStr" : "PRIMARY",            "uptime" : 712,            ......        }    ],    "ok" : 1}
  • 5. 手動切換主節點 :
[[email protected] bin]# mongo --port 27019  test:PRIMARY> rs.freeze(30)        #暫停30s不參與選舉{ "ok" : 1 }test:PRIMARY> rs.stepDown(60,30)  #交出主節點位置,維持從節點狀態不少於60秒,等待30秒使主節點和從節點日誌同步test:SECONDARY> rs.status()......
  • 6. 允許從節點讀取資料 :
test:SECONDARY> show dbs   #2018-07-19T09:04:34.898+0800 E QUERY    [thread1] Error: listDatabases failed:{ "ok" : 0, "errmsg" : "not master and slaveOk=false", "code" : 13435 } :[email protected]/mongo/shell/utils.js:23:13[email protected]/mongo/shell/mongo.js:53:1[email protected]/mongo/shell/utils.js:700:19[email protected]/mongo/shell/utils.js:594:15@(shellhelp2):1:1test:SECONDARY> rs.slaveOk()    #允許預設從節點讀取資料test:SECONDARY> show dbslocal  1.078GB
  • 7. 更改 oplog 大小 :
test:PRIMARY> use localswitched to db localtest:PRIMARY> rs.printReplicationInfo()  #查看記錄檔能夠使用的大小 預設oplog大小會佔用64位執行個體5%的可用磁碟空間configured oplog size:   95.37109375MBlog length start to end: 1103secs (0.31hrs)oplog first event time:  Thu Jul 19 2018 08:43:55 GMT+0800 (CST)oplog last event time:   Thu Jul 19 2018 09:02:18 GMT+0800 (CST)now:                     Thu Jul 19 2018 09:20:08 GMT+0800 (CST)test:PRIMARY> db.runCommand({"convertToCapped":"oplog.rs","size":10000000000}) #修改  單位:B{ "ok" : 1 }test:PRIMARY> rs.printReplicationInfo()configured oplog size:   9536.746032714844MBlog length start to end: 1103secs (0.31hrs)oplog first event time:  Thu Jul 19 2018 08:43:55 GMT+0800 (CST)oplog last event time:   Thu Jul 19 2018 09:02:18 GMT+0800 (CST)now:                     Thu Jul 19 2018 09:20:24 GMT+0800 (CST)test:PRIMARY> 

大資料 MongoDB 複製集管理

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.