MongoDb在LInux環境下配置Replica Sets複製集

mongodb中文社區:http://www.mongoing.com/docs/tutorial/add-replica-set-arbiter.html

MongoDB支持多個機器中通過異步複製達到故障轉移和實現冗餘。多機器中同一時刻只 有一臺是用於寫操作。正是由於這個情況,爲 MongoDB 提供了數據一致性的保障。擔當 Primary 角色(負責寫入)的機器能把讀操作分發給 slave。

本次搭建用三臺機器來搭建這個複製集,其中一臺primary(192.168.1.142:27017),一臺secondary(192.168.1.140:27077),一臺ARBITER(192.168.1.129:27088)。有一點要注意,如果複製集節點是偶數,一定要設置投票節點,不然無法確認主節點。
一、創建文件存儲路徑
三臺機器都配置一樣的路徑,所以分別在三臺機器創建對應目錄:
mkdir -p /usr/local/mongodb/data
mkdir -p /usr/local/mongodb/logs

二、創建內部驗證keyFile
1、用ssl生成key
openssl rand -base64 756 > /usr/local/mongodb/data/key/mongokey
2、設置只讀權限,否則可能導致啓動失敗
chmod 400 /usr/local/mongodb/data/key/mongokey  
 3、只需生成一次keyFile文件,然後拷到對應的其他機器上,保證機器都用的同一份keyFile,權限都是隻讀
三、創建配置文件

配置1:primary(192.168.1.142:27017)
 vi /usr/local/mongodb/bin/mongodb.cnf


dbpath = /usr/local/mongodb/data/db #數據文件存放目錄
logpath = /usr/local/mongodb/logs/mongodb.log #日誌文件存放目錄
port = 27017 #端口
fork = true#以守護程序的方式啓用,即在後臺運行
#auth=true #需要認證。如果放開註釋,就必須創建MongoDB的賬號,使用賬號與密碼纔可遠程訪問>,第一次安裝建議註釋
replSet=rss
bind_ip=0.0.0.0 #允許遠程訪問,或者直接註釋,127.0.0.1是隻允許本地訪問.
keyFile=/usr/local/mongodb/data/key/mongokey


配置2:secondary(192.168.1.140:27077)
 vi /usr/local/mongodb/bin/mongodb.cnf


dbpath = /usr/local/mongodb/data/db #數據文件存放目錄
logpath = /usr/local/mongodb/logs/mongodb.log #日誌文件存放目錄
port = 27077 #端口
fork = true#以守護程序的方式啓用,即在後臺運行
#auth=true #需要認證。如果放開註釋,就必須創建MongoDB的賬號,使用賬號與密碼纔可遠程訪問>,第一次安裝建議註釋
replSet=rss
bind_ip=0.0.0.0 #允許遠程訪問,或者直接註釋,127.0.0.1是隻允許本地訪問.
keyFile=/usr/local/mongodb/data/key/mongokey

配置3:ARBITER(192.168.1.129:27088)
 vi /usr/local/mongodb/bin/mongodb.cnf


dbpath = /usr/local/mongodb/data/db #數據文件存放目錄
logpath = /usr/local/mongodb/logs/mongodb.log #日誌文件存放目錄
port = 27088 #端口
fork = true#以守護程序的方式啓用,即在後臺運行
#auth=true #需要認證。如果放開註釋,就必須創建MongoDB的賬號,使用賬號與密碼纔可遠程訪問>,第一次安裝建議註釋
replSet=rss
bind_ip=0.0.0.0 #允許遠程訪問,或者直接註釋,127.0.0.1是隻允許本地訪問.
keyFile=/usr/local/mongodb/data/key/mongokey


三、分別啓動三個mongod,進入需要設置爲主的機器上執行初始化
./mongod  -f  mongodb.cnf
./mongod  -f  mongodb.cnf
./mongod  -f  mongodb.cnf
 mongo -port 27017
 mongo -port 27077
 mongo -port 27088

在27017設置主機器並初始化
 mongo -port 27017
> cfg={ _id:"rss", members:[ {_id:0,host:'192.168.1.142:27017',priority:2}, {_id:1,host:'192.168.1.140:27077',priority:1}, {_id:2,host:'192.168.1.129:27088',arbiterOnly:true}] };
初始化:> rs.initiate(cfg)

四、查看狀態
 rs:PRIMARY> rs.status();
"stateStr" : "PRIMARY" 可以看出誰是主庫
注意:如果出現報錯    "codeName" : "Unauthorized",說明權限不夠,需要創建權限用戶,然後授權認證就可以了
use admin
db.createUser({user: "root",pwd: "2222",roles: [ { role: "root", db: "admin" } ]})
use admin
        db.auth('root','2222')

五、管理維護 Replica Sets
一開始在主庫27017插入數據,從庫27077是查不到數據的比如:
1、先向主庫插入數據
[root@localhost bin]# mongo -port 27017
rs:PRIMARY> db.c1.insert({age:30})
rs:PRIMARY> db.c1.find()
{ "_id" : ObjectId("5dba993160e80fccf5f22611"), "age" : 30 }

2、在從庫進行查詢等操作
[root@localhost bin]# mongo -port 27077
rs2:SECONDARY> show collections
或報錯 "not master and slaveok=false"
所以執行 db.getMongo().setSlaveOk(), 我們就可查詢從庫了。

六、故障轉移
複製集比傳統的 Master-Slave 有改進的地方就是他可以進行故障的自動轉移,如果我們停掉 複製集中的一個成員,那麼剩餘成員會再自動選舉出一個成員,做爲主庫

七、增減節點
增加節點:重複步驟一、二,第三步驟改爲在主庫執行  rs.add("localhost:27074")
減少節點: rs.remove("localhost:27074")


帶認證登錄客戶端 ./mongo  -authenticationDatabase admin -u root -p 123456

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章