是指由多臺mongodb服務器組成的服務器集羣,稱之爲mongodb集羣。mongodb
簡單來講就是集羣當中包含了多份數據,保證主節點掛掉了,備節點能繼續提供數據服務,提供的前提就是數據須要和主節點一致。
默認設置下,主節點提供全部增刪查改服務,備節點不提供任何服務。可是能夠經過設置使備節點提供查詢服務,這樣就能夠減小主節點的壓力,當客戶端進行數據查詢時,請求自動轉到備節點上。這個設置叫作Read Preference Modes。
仲裁節點是一種特殊的節點,它自己並不存儲數據,主要的做用是決定哪個備節點在主節點掛掉以後提高爲主節點,因此客戶端不須要鏈接此節點。這裏雖然只有一個備節點,可是仍然須要一個仲裁節點來提高備節點級別。我開始也不相信必需要有仲裁節點,可是本身也試過沒仲裁節點的話,主節點掛了備節點仍是備節點,因此我們仍是須要它的。
官方給出的應用架構圖以下:
集羣間的複製關係
使用仲裁arbiter節點
故障自動切換選主
Read Preference架構服務器
基礎配置可參考:http://www.javashuo.com/article/p-gjisbewx-ve.html架構
三個以上的mongodb節點(或多實例)ide
多個端口:2801七、2801八、2801九、28020
多套目錄:code
su - mongod mkdir -p /mongodb/28017/conf /mongodb/28017/data /mongodb/28017/log mkdir -p /mongodb/28018/conf /mongodb/28018/data /mongodb/28018/log mkdir -p /mongodb/28019/conf /mongodb/28019/data /mongodb/28019/log mkdir -p /mongodb/28020/conf /mongodb/28020/data /mongodb/28020/log
多套配置文件blog
/mongodb/28017/conf/mongod.conf /mongodb/28018/conf/mongod.conf /mongodb/28019/conf/mongod.conf /mongodb/28020/conf/mongod.conf
配置文件內容:ip
cat > /mongodb/28017/conf/mongod.conf <<EOF systemLog: destination: file path: /mongodb/28017/log/mongodb.log logAppend: true storage: journal: enabled: true dbPath: /mongodb/28017/data directoryPerDB: true #engine: wiredTiger wiredTiger: engineConfig: cacheSizeGB: 1 directoryForIndexes: true collectionConfig: blockCompressor: zlib indexConfig: prefixCompression: true processManagement: fork: true net: bindIp: 11.111.24.4,127.0.0.1 port: 28017 replication: oplogSizeMB: 2048 replSetName: my_repl EOF cp /mongodb/28017/conf/mongod.conf /mongodb/28018/conf/ cp /mongodb/28017/conf/mongod.conf /mongodb/28019/conf/ cp /mongodb/28017/conf/mongod.conf /mongodb/28020/conf/ sed 's#28017#28018#g' /mongodb/28018/conf/mongod.conf -i sed 's#28017#28019#g' /mongodb/28019/conf/mongod.conf -i sed 's#28017#28020#g' /mongodb/28020/conf/mongod.conf -i
啓動多個實例備用:rem
mongod -f /mongodb/28017/conf/mongod.conf mongod -f /mongodb/28018/conf/mongod.conf mongod -f /mongodb/28019/conf/mongod.conf mongod -f /mongodb/28020/conf/mongod.conf netstat -lnp|grep 280
配置1主2從,從庫普通從庫文檔
#登陸客戶端 mongo --port 28017 admin #建立配置 config = {_id: 'my_repl', members: [ {_id: 0, host: '11.111.24.4:28017'}, {_id: 1, host: '11.111.24.4:28018'}, {_id: 2, host: '11.111.24.4:28019'}] } #初始化 rs.initiate(config) #查詢複製集狀態 rs.status();
從查詢結果能夠看出哪一個節點主節點(PRIMARY)和備節點(SECONDARY)
配置1主1從1個arbiterget
mongo -port 28017 admin config = {_id: 'my_repl', members: [ {_id: 0, host: '11.111.24.4:28017'}, {_id: 1, host: '11.111.24.4:28018'}, {_id: 2, host: '11.111.24.4:28019',"arbiterOnly":true}] } rs.initiate(config)
查看複製集狀態
rs.status(); //查看總體複製集狀態 rs.isMaster(); // 查看當前是不是主節點 rs.conf(); //查看複製集配置信息
添加刪除節點
rs.remove("ip:port"); // 刪除一個節點 rs.add("ip:port"); // 新增從節點 rs.addArb("ip:port"); // 新增仲裁節點
例子:
//添加 arbiter節點 一、鏈接到主節點 [mongod@db03 ~]$ mongo --port 28018 admin 二、添加仲裁節點 my_repl:PRIMARY> rs.addArb("11.111.24.4:28020") 三、查看節點狀態 my_repl:PRIMARY> rs.isMaster() { "hosts" : [ "11.111.24.4:28017", "11.111.24.4:28018", "11.111.24.4:28019" ], "arbiters" : [ "11.111.24.4:28020" ], //刪除一個節點 my_repl:PRIMARY> rs.remove("11.111.24.4:28019"); { "ok" : 1 } my_repl:PRIMARY> rs.isMaster() // 新增從節點 rs.add("ip:port"); 例子: my_repl:PRIMARY> rs.add("11.111.24.4:28019") { "ok" : 1 } my_repl:PRIMARY> rs.isMaster()
通常狀況下會將delay+hidden一塊兒配置使用
//配置延時節點(通常延時節點也配置成hidden) cfg=rs.conf() cfg.members[2].priority=0 cfg.members[2].hidden=true cfg.members[2].slaveDelay=120 rs.reconfig(cfg) //取消以上配置 cfg=rs.conf() cfg.members[2].priority=1 cfg.members[2].hidden=false cfg.members[2].slaveDelay=0 rs.reconfig(cfg) //配置成功後,經過如下命令查詢配置後的屬性 rs.conf();
##查看副本集的配置信息 admin> rs.conf() ##查看副本集各成員的狀態 admin> rs.status() ++++++++++++++++++++++++++++++++++++++++++++++++ ##副本集角色切換(不要人爲隨便操做) admin> rs.stepDown() 注: admin> rs.freeze(300) ##鎖定從,使其不會轉變成主庫 freeze()和stepDown單位都是秒。 +++++++++++++++++++++++++++++++++++++++++++++ ##設置副本節點可讀:在副本節點執行 admin> rs.slaveOk() ##查看副本節點(監控主從延時) admin> rs.printSlaveReplicationInfo() source: 192.168.1.22:27017 syncedTo: Thu May 26 2016 10:28:56 GMT+0800 (CST) 0 secs (0 hrs) behind the primary