您好,登錄后才能下訂單哦!
復制集架構圖:
三節點replicaset配置安裝(無仲裁節點):
Replica set 【10.10.20.161-10.10.20.163】
10.10.20.161-10.10.20.163這三臺按下面的安裝:
mkdir -p/u01/mongodb/data/replset/
mkdir -p/u01/mongodb/log/
/usr/local/mongodb/bin/mongod--replSet myrepl --fork --port 40001 --dbpath /u01/mongodb/data/replset/--logpath /u01/mongodb/log/replset.log --logappend --oplogSize=4096
然后在建立集群,想讓哪臺當主就登陸哪臺的服務器的mongo,然后添加如下配置
/usr/local/mongodb/bin/mongo-port 40001
config ={_id: 'myrepl', members: [{_id: 0, host: '10.10.20.161:40001'}, {_id: 1, host:'10.10.20.162:40001'},{_id: 3, host: '10.10.20.163:40001'}]}
rs.initiate(config)
配置完畢后退出再登陸會顯示primary字樣
/usr/local/mongodb/bin/mongo-port 40001
MongoDBshell version: 2.2.2
connectingto: 127.0.0.1:40001/test
myrepl:PRIMARY>
而另外兩個則顯示myrepl:SECONDARY
三節點replicaset配置安裝(有仲裁節點):
三節點無仲裁的好處就是一個master寫,兩個slave讀。缺點是,我現在只有兩臺機器,也想做replica set,這樣就出現了問題,如果只有兩臺的話,如果master宕機的話,那么只有slave一臺,投票算法無法進行,所以slave無法提升為master只能只讀,但是如果有一個仲裁節點的話,就可以完成切換,仲裁節點只負責投票不需要同步數據。
添加仲裁節點也很簡單
配置好1主1從節點后添加rs.add('10.10.20.163:40001',true)或者用rs.addArb('10.10.20.163:40001');
也可在第一次配置時添加
config ={_id: 'myrepl', members: [{_id: 0, host: '10.10.20.161:40001'}, {_id: 1, host:'10.10.20.162:40001'},{_id: 3, host: '10.10.20.163:40001', arbiterOnly: true}]}
rs.initiate(config)
讀寫分離:
默認做好Replica set的時候,slave是不開讀的只能做故障切換用,這樣比較浪費,為了分擔主上的壓力,應該讓slave可讀,方法是在slave服務器上執行rs.slaveOk()
手動切換master:
如果當前master出現問題,我們想把它降級成slave,那么非常簡單,我們只用登陸master上執行rs.stepDown(10),這個命令的意思是10秒不會參與選舉master,當執行完后復制集會從其他slave中選一個提升為master。其實手動切換master除了這個命令還有個方法就是比較復雜,就是修改config,設置優先級,然后重新加載。還有個命令某些時候會用到rs.freeze(10)是在slave上使用的,意思是10秒內不參與master的選舉,如果我們在手動切換master的時候,我們不想讓某些slave做master可以使用這個命令。
replica set相關命令:
rs.status():查看復制集狀態信息
rs.conf():查看復制集配置信息
replica set節點的刪除與添加:
假設我們現在需要對其中一個節點10.10.20.163進行維護,那我們需要,需要執行的命令如下
登陸master
執行rs.remove("10.10.20.163:40001")
等維護完之后再執行rs.add("10.10.20.163:40001")添加節點即可,但是如果下線時間太久,導致oplog已經被覆蓋,那么用rs.add添加節點后10.10.20.163的同步將會停止。而且會有報錯Thu Feb 28 09:58:00[rsBackgroundSync] replSet not trying to sync from 10.10.20.162:40001, it isvetoed for 133 more seconds。
replica set節點同步失敗處理方法:
接著上面的話題,如果同步出現問題,有兩個方法解決
將一臺同步完好的節點remove然后將數據目錄scp過來再啟動
將那個不同步的節點的數據目錄刪除,然后啟動,mongodb會自動為你做好同步
replicaset何時會切換失效:
這是一個很重要的知識點,就是replica set的成員節點,一旦宕機數量超過一半的時候,PRIMARY會自動降級成為SECONDARY,這時集群里只能只讀,這時為了防止由于網絡原因集群被分割成多塊選出多個主。所以為了保證剩余的機器仍可切換為主,可添加多個仲裁節點。
例如:1主+2從+1仲裁
一共4個節點,一半就是2,那么如果2個從庫宕機之后,那個主就會自動降級為從,這時這個replica set是不可寫入的,所以不可用。
那么要解決這個問題就可以采用:1主+2從+2仲裁,這樣的話宕2個從庫達不到節點總數的一半,所以也不會對集群有影響。
修改slave的同步源(mongo 2.2新特性):
集群搭好之后,一般來說slave都是從master那里同步,如果如果slave很多的話master壓力很大,我們可以讓某些slave從其他的slave來同步數據,使用rs.syncFrom("10.10.20.163:40001")語句來執行這臺slave從哪臺同步,要注意如果這臺slave重啟后這個設置會失效。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。