MongoDB搭建ReplSet複製叢集

來源:互聯網
上載者:User

標籤:linux   interface   目錄   過程   oplog   官方   blank   mon   href   

MongoDB的複製集是一個主從複製模式 又具有容錯移轉的叢集,任何成員都有可能是master
當master掛掉用會很快的重新選舉一個節點來充當master。

複製集中的組成主要成員

  • Primary
    資料讀寫 master節點
  • Secondary
    備份Primary的資料 預設設定下 不可讀 不可寫
  • arbiter
    投票節點 此節點不會存資料 只參與投票 ,當primary節點出現異常掛掉之後 arbiter節點負責從secondary 節點中選舉一個節點升級為Primary節點

其中可以設定Secondary節點可讀,讓Primary節點負責寫,這些就實現了一個高效簡單的讀寫分離    。    

環境搭建

以3個執行個體來示範一下複製叢集的搭建過程 分別為:127.0.0.1:12345,127.0.0.1:12346,127.0.0.1:12347。
需要預先建立好各目錄的檔案夾 不然啟動的時候會報錯,這裡還有一個坑是 pidfilepath配置項必須是絕對路徑,
否則也會報錯,replSet在同一個複製集中也需要具有一致的名稱。

注意在舊版本中是使用的是master slave模式 目前使用的是3.4官方不支援使用這種方式,
官方希望使用replset代替master slave。所以當你配置master或者slave的時候就會報錯。

127.0.0.1:12345配置

port=12345fork=truedbpath=data/12345logpath=log/12345/mongod.loghttpinterface=truerest=truelogappend=truepidfilepath=/home/collect/mongodb-linux-x86_64-rhel70-3.4.1/log/12345/12345.pidreplSet=mydbCenteroplogSize=512 127.0.0.1:12346配置
port=12346fork=truedbpath=data/12346logpath=log/12346/mongod.loghttpinterface=truerest=truelogappend=truepidfilepath=/home/collect/mongodb-linux-x86_64-rhel70-3.4.1/log/12346/12346.pidreplSet=mydbCenteroplogSize=512
127.0.0.1:12347配置 
port=12347fork=truedbpath=data/12347logpath=log/12347/mongod.loghttpinterface=truerest=truelogappend=truepidfilepath=/home/collect/mongodb-linux-x86_64-rhel70-3.4.1/log/12347/12347.pidreplSet=mydbCenteroplogSize=512

分別啟動好3個執行個體之後,隨便進入一個執行個體

初始化複製叢集首先建立1個設定物件 在js中就是一個簡單的對象 、json串 
  1.  var rs_conf={
  2.  "_id" : "mydbCenter",
  3.  "members" : [
  4.  {
  5.  "_id" : 0,
  6.  "host" : "127.0.0.1:12345"
  7.  },
  8.  {
  9.  "_id" : 1,
  10.  "host" : "127.0.0.1:12346"
  11.  },
  12.  {
  13.  "_id" : 2,
  14.  "host" : "127.0.0.1:12347"
  15.  }
  16.  ]
  17.  }
把配置應用到叢集 
rs.initiate(rs_conf)

這裡有一個限制就是需要叢集的節點中不能有資料 需要先清空一下 不然initiate的時候會出錯。
配置成功後使用rs.status()命令查看各節點狀態,一些正常 就能看到各節點的狀態資訊

rs.status()

搭建好複製叢集之後命令列的標識符會變為相應的成員類型如

  1.  mydbCenter:PRIMARY>
  2.  mydbCenter:SECONDARY>

這也是檢驗叢集是否搭建的成功的一個小標識。

接著可以嘗試一下在Primary中寫入一條資料。這條資料會立即同步到各個Secondary節點中。
當然前面也說過預設情況的Secondary不可讀 會報下面的錯誤。

  1.  {
  2.   "ok" : 0,
  3.   "errmsg" : "not master and slaveOk=false",
  4.   "code" : 13435,
  5.   "codeName" : "NotMasterNoSlaveOk"
  6.  }

所以需要在Secondary中執行

db.getMongo().setSlaveOk()

在網路上看到有很多文章說只要在Primary節點中執行 db.getMongo().setSlaveOk()
就能在Secondary節點中讀取資料,但是在3.4版本試了一下是不行的。需要在Secondary中執行一下
db.getMongo().setSlaveOk()讓Secondary可讀。

添加節點

如果現在已經有搭建好一個複製叢集了 老闆想多加一台備份機器進去 怎麼辦?
只需要啟動好新機器的執行個體後 在Primary中調用rs.add() 方法即可

rs.add({"host" : "127.0.0.1:12348"})

添加投票節點調用rs.addArb()方法。

 

轉載至:笑松小站 http://blog.seoui.com/2017/01/11/mongodb-rs/

MongoDB搭建ReplSet複製叢集

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.