說明:
有三台伺服器,已經安裝好了MongoDB資料庫,具體資訊如下:
MongoDB版本:mongodb-linux-x86_64-2.6.11
MongoDB安裝目錄:/usr/local/mongodb
MongoDB資料庫目錄:/home/data/mongodb/mongodb_data
MongoDB日誌目錄:/home/data/mongodb/mongodb_log
MongoDB設定檔:/usr/local/mongodb/mongodb.conf
三台伺服器IP地址:
192.168.0.8
192.168.0.9
192.168.0.10
實現目的:
對三台伺服器進行部署,實現複本集功能。
具體操作:
一、確定複本集名稱、主從節點、設定檔、啟動指令碼資訊
1、定義複本集名稱為:osyunwei
2、主節點為:192.168.0.8
3、兩台從節點為:
192.168.0.9
192.168.0.10
4、確保三台複本集伺服器上的設定檔完全相同,如下:
第一種寫法:官方推薦、適合2.6以後的版本
vi /usr/local/mongodb/mongodb.conf #編輯
systemLog:
destination: "file"
path: "/home/data/mongodb/mongodb_log/mongodb.log"
logAppend: true
storage:
journal:
enabled: true
dbPath: "/home/data/mongodb/mongodb_data/"
directoryPerDB: true
processManagement:
fork: true
pidFilePath: "/usr/local/mongodb/mongo.pid"
net:
port: 27017
http:
enabled: true
RESTInterfaceEnabled: true
#security:
# keyFile: "/usr/local/mongodb/keyfile"
# clusterAuthMode: "keyFile"
# authorization: "enabled"
replication:
replSetName: "osyunwei"
:wq! #儲存退出
第二種寫法:適用所有版本
vi /usr/local/mongodb/mongodb.conf #編輯
port=27017
dbpath=/home/data/mongodb/mongodb_data/
logpath=/home/data/mongodb/mongodb_log/mongodb.log
pidfilepath=/usr/local/mongodb/mongo.pid
fork=true
logappend=true
shardsvr=true
directoryperdb=true
#auth=true
#keyFile =/usr/local/mongodb/keyfile
replSet =osyunwei
:wq! #儲存退出
注意:以上兩種設定檔的寫法都可以。
5、確保三台複本集伺服器上的啟動指令碼完全相同,如下:
vi /etc/init.d/mongod
ulimit -SHn 655350
#!/bin/sh
# chkconfig: - 64 36
# description:mongod
case $1 in
start)
/usr/local/mongodb/bin/mongod --maxConns 20000 --config /usr/local/mongodb/mongodb.conf
;;
stop)
/usr/local/mongodb/bin/mongo 127.0.0.1:27017/admin --eval "db.shutdownServer()"
#/usr/local/mongodb/bin/mongo 127.0.0.1:27017/admin --eval "db.auth('system', '123456');db.shutdownServer()"
;;
status)
/usr/local/mongodb/bin/mongo 127.0.0.1:27017/admin --eval "db.stats()"
#/usr/local/mongodb/bin/mongo 127.0.0.1:27017/admin --eval "db.auth('system', '123456');db.stats()"
;;
esac
:wq! #儲存退出
二、對主節點進行配置
1、/usr/local/mongodb/bin/mongo #進入主節點192.168.0.8
rs.initiate()
rs.conf()
#初始化複本集,設定本機為主節點PRIMARY
2、添加複本集從節點
rs.add("192.168.0.9:27017")
rs.add("192.168.0.10:27017")
3、設定節點優先順序
cfg = rs.conf() #查看節點順序
cfg.members[0].priority = 1
cfg.members[1].priority = 1
cfg.members[2].priority = 2 #設定_ID為2的節點為主節點
rs.reconfig(cfg) #使配置生效
exit #退出控制台
說明:
MongoDB複本集通過設定priority決定優先順序,預設優先順序為1,值為1到1000之間的數字,priority值是0到100之間的數字,數字越大優先順序越高,priority=0,則此節點永遠不能成為主節點primay。
cfg.members[0].priority =1參數,中括弧裡的數字是執行rs.conf()查看到的節點順序,第一個節點是0,第二個節點是1,第三個節點是2,以此類推。
三、分別對兩台從節點進行配置
/usr/local/mongodb/bin/mongo #進入從節點192.168.0.9/10
db.getMongo().setSlaveOk() #設定從節點為唯讀資料庫
exit #退出控制台
四、設定資料庫帳號,開啟登入驗證
1、設定資料庫帳號
在主節點伺服器192.168.0.8上面操作
/usr/local/mongodb/bin/mongo #進入主節點192.168.0.8
show dbs #列出所有資料庫
use admin #切換到admin資料庫,添加的帳號才是管理員帳號。
show collections
db.system.users.find()
#添加兩個管理員帳號,一個系統管理員:system 一個資料庫管理員:administrator
db.createUser({user:"system",pwd:"123456",roles:[{role:"root",db:"admin"}]}) #添加系統管理員帳號,用來系統管理使用者
db.auth('system','123456') #添加管理使用者認證,認證之後才能管理所有資料庫
db.createUser({user:"administrator",pwd:"123456",roles:[{role:"userAdminAnyDatabase",db:"admin"}]}) #添加資料庫管理員,用來管理所有資料庫
db.auth('administrator','123456') #添加管理使用者認證,認證之後才能管理所有資料庫
exit #退出
#用剛才建立的帳號進行登入
/usr/local/mongodb/bin/mongo -u system -p 123456 --authenticationDatabase admin
exit #退出
/usr/local/mongodb/bin/mongo -u administrator -p 123456 --authenticationDatabase admin
exit #退出
2、開啟登入驗證
在主節點伺服器192.168.0.8上面操作
cd /usr/local/mongodb #進入mongodb安裝目錄
openssl rand -base64 21 > keyfile #建立一個keyfile(使用openssl產生21位base64加密的字串)
chmod 600 /usr/local/mongodb/keyfile #修改檔案許可權為600
cat /usr/local/mongodb/keyfile #查看剛才產生的字串,做記錄,後面要用到。
注意:上面的數字21,最好是3的倍數,否則產生的字串可能含有非法字元,認證失敗。
3、設定設定檔
分別在所有節點上面操作
192.168.0.8/9/10
設定檔/usr/local/mongodb/mongodb.conf取消注釋
第一種寫法:
security:
keyFile: "/usr/local/mongodb/keyfile"
clusterAuthMode: "keyFile"
authorization: "enabled"
第二種寫法:
auth=true
keyFile =/usr/local/mongodb/keyfile
啟動指令碼使用下面的代碼(注釋原來的,啟用之前注釋掉的)
/usr/local/mongodb/bin/mongo 127.0.0.1:27017/admin --eval "db.auth('system', '123456');db.shutdownServer()"
/usr/local/mongodb/bin/mongo 127.0.0.1:27017/admin --eval "db.auth('system', '123456');db.stats()"
4、設定許可權驗證檔案
先進入主節點伺服器192.168.0.8,查看cat /usr/local/mongodb/keyfile #查看剛才產生的字串,做記錄
再分別進入兩台從節點伺服器192.168.0.9/10
vi /usr/local/mongodb/keyfile #輸入上一步查看到的字串
:wq! #儲存退出
chmod 600 /usr/local/mongodb/keyfile #修改檔案許可權為600
五、驗證複本集
分別重啟三台複本集伺服器
/usr/local/mongodb/bin/mongo -u system -p 123456 --authenticationDatabase admin #登入到控制台
rs.status() #複本集狀態查看
exit #退出
當主節點出現故障的時候,在兩個從節點上會選舉出一個新的主節點,故障恢複之後,之前的主節點會變為從節點。
至此,Linux下MongoDB複本集部署完成。
擴充閱讀:
官方文檔:
http://docs.mongodb.org/manual/reference/configuration-options/
rs.remove("ip:port"); #刪除副本
/usr/local/mongodb/bin/mongo --host 192.168.0.9 #遠端連線伺服器
預設情況下,mongodb不啟用驗證的。
單伺服器,啟動時添加--auth參數開啟驗證。
複本集伺服器,開啟--auth參數的同時,必須指定keyfile參數,節點之間的通訊基於該keyfile,key長度必須在6到1024個字元之間,最好為3的倍數,不能含有非法字元。
重新設定複本集
rs.stepDown()
cfg = rs.conf()
cfg.members[n].host= 'new_host_name:prot'
rs.reconfig(cfg)
複本集所有節點伺服器總數必須為奇數,伺服器數量為偶數的時候,需要添加一個仲裁節點,仲裁節點不參數複本集,只有選舉權。
rs.addArb("192.168.0.11:27017") #添加仲裁節點