標籤: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 叢集搭建(主從複製、副本及)(五)