MongoDB 叢集搭建(主從複製、副本及)(五)

來源:互聯網
上載者:User

標籤:mongodb 叢集搭建主從複製副本及五

六:架構管理


mongodb的主從叢集分為兩種:
1:master-Slave 複製(主從)    --從伺服器不會主動變成主伺服器,需要設定才行
2:replica Sets 複製(複本集)  --如果主伺服器掛掉,會選舉出一台從伺服器當主伺服器

一:主從複製
mongodb支援在多個機器中通過非同步複製達到容錯移轉和實現冗餘。
  多機器中統一時刻只有一台是用於寫操作。正是由於這個情況,為mongodb提供了資料一致性的保障。
  擔當primary角色的機器能把讀操作分發給slave。
  
  一主一從     一主多從方式
  
只需要在某一個伺服器啟動時加上-master參數,而另外一個伺服器加上-slave與-source參數,即可實現同步。
 mongodb的最新版本已不推薦使用這種方法 。
 
 開始類比(直接開玩得,沒有使用者驗證):
1:開啟2個終端(安裝2台mongodb資料庫)
*--你可以再你同一台電腦上類比,但是把dbpath logpath,對應的目錄建上就行
mongodb/   下建立檔案就(只需要開啟2個終端連結就行,不用安裝多個mongodb資料庫)
bin(mongodb內建的檔案)  data1 data2 dblog1 dblog2    --1是主服務用的檔案   2是從伺服器用的檔案
2:主(設定一台主伺服器)
./mongod --master --dbpath=/usr/local/mongodb/data1/ --logpath=/usr/local/mongodb/dblog1 --fork --port 20001       (port開啟一個對應的連接埠)
   
3:從  --source表示“源” ,連結那台伺服器和連接埠                
./mongod --slave --source 127.0.0.100:20001 --dbpath=/usr/local/mongodb/data2/ --logpath=/usr/local/mongodb/dblog2 --fork --port 20002       

  從:./mongo --port 20002

4: 主:./mongo --port 20001
  db.c1.insert({name:"user1"});
  db.c1.insert({name:"user2"});
5:從:會發現主建立的c1集合已經過來了
db.c1.find();
db.c1.insert({name:"user3"});   --在從伺服器是插不進去的,會報錯“not master”

為了減少主伺服器的壓力備份什麼的可以再從伺服器完成(比如資料較大,一備份就是幾十分鐘明顯增大主伺服器的壓力):
./mongodump --port 20002 -d test    備份test資料庫

  **這樣增刪改的時候可以操作主伺服器,讀的時候連結從伺服器
 
  
 
二:Replica Sets複製(複本集)
mongodb在1.6版本中開發了replica set,主要是增加了故障自動切換和自動修複成員節點,各個DB之間
資料完全一致,最為顯著的區別在於,複本集沒有固定的主節點,它是整個叢集選舉出得到的一個主節點,當
其不工作是變更其他節點強烈推薦使用。(主掛掉後會自動在從中選取出一個作為主伺服器)

部署Replica Sets:
1):建立對應的檔案  mongodb/(建立key 、 data 、 log檔案夾)  --key是存同一個會議的小組成員,為選舉主伺服器用的
bin  key(建立鑰匙檔案:touch key1 、 touch key2)  data(下建立檔案夾data1 、data2)   log(下建立檔案夾dblog1 、 dblog2)

2): 在key目錄下匯入2個秘鑰(linux的命令這個,win下的話可以自己手動建立)
echo "123456" >key1
echo "123456" >key2

chmod 600 *     --記住:這2把鑰匙一定要設定成600 (key檔案下操作)

3):準備完畢,啟動開玩(開啟2個mongodb服務)
rs1 :表示定義一個小組,小組組號叫rs1,開會用的
./mongod --replSet rs1 --keyFile=/usr/local/mongodb/key/key1 --port 20001 --dbpath=/usr/local/mongodb/data/data1/ --logpath=/local/mongodb/log/dblog1 --fork

能後在啟動一個:
./mongod --replSet rs1 --keyFile=/usr/local/mongodb/key/key2 --port 20002 --dbpath=/usr/local/mongodb/data/data2/ --logpath=/local/mongodb/log/dblog2 --fork


*複本集就已經啟動了

4):2個成員會自動開會,現在建立下會議室的配置
./mongo --port 20001      ------>(20002也行,哪台機器都可以) 
 
配置建立複本集(小組清單):
config_rs1={  
_id:"rs1",
members:[‘
{_id:0,host:"localhost:20001",priority:1},     --表示優先順序,數字越大優先順序就越高,選舉主伺服器就更大
{_id:1,host:"localhost:20002",priority:2},
‘]
}   --斷行符號,   config_rs1可以直接斷行符號查看

初始化複本集配置(小組清單):
rs.initiate(config_rs1);   --斷行符號 在斷行符號,你會發現mongodb的  ">" 符號 變成 "SECONDARY>"(從)  或者  "PRIMARY>"(主)

為什麼會變符號呢?(mongodb的  ">" 符號 變成 "SECONDARY>"(從)  或者  "PRIMARY>"(主)):
以為當你初始化複本集的時候,他們就在開會能後把localhost:20002選舉為主伺服器(priority數字越大優先順序越高),
  所以localhost:20002被選舉為主伺服器"PRIMARY>"

5):資料測試
./mongo --port 20002   (主)
db.c1.insert({name:"user1"});
db.c1.insert({name:"user2"});
db.c1.find();
rs.status();   --查看複本集的狀態

在登入從伺服器(從伺服器同步是的增刪改的資料):
./mongo --port 20001
show tables;   --如果報錯,說明你沒許可權,能後你敲下下面的命令
rs.slaveOk();  --複本集主從裡面,從要想有主的讀許可權的時候敲下該命令,來確認你的身份是從伺服器
show tables;   --就好使
db.c1.find();  --主的資料就能讀到了
db.c1.insert({name:"user2"}); --複本集的主從也一樣,不能再從裡面插入資料,因為不是主伺服器


容錯移轉:
要2台以上的mongodb伺服器哦;
複本集比傳統的master-salve有改進的地方是它可以進行故障的自動轉移
如果我們停掉複製集中的一個成員,那麼剩下的成員就會自動選舉出一個新的成員,做為主要資料庫




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.