建 cluster 不見得需要帳號管控,因為多數處在保護的網路環境,而 MongoDB 預設沒有帳密管控且帳密管控做的很簡單,分成 read-only 跟 read-write 模式。而使用認證的主因是為了遠端關掉機器,沒有認證機制的服務僅能透過 localhost 關掉服務,有一派說是透過 service mongodb stop 指令,又有一派說直接 kill process 即可,但有文章說如此容易造成問題?還是要用正式的關機流程比較妥( mongo> db.shutdownServer() )。
參考文件:
- http://docs.mongodb.org/manual/tutorial/manage-mongodb-processes/
- http://docs.mongodb.org/manual/administration/replica-sets/
- http://cookbook.mongodb.org/operations/convert-replica-set-to-replicated-shard-cluster/
- 啟動多台 mongod --replSet set_name
- 挑選一台 mongod 登入
- 使用 rs.init() 初始化後,再用 rs.add() 加入其他 mongod 或是使用 db.runCommand({'replSetInitiate':{'members':[]}}) 一次新增
- 用 default 模式啟動一台 mongod
- 建立帳號
- 建立 keyFile (檔案內容隨意,但需要多過6個字元)
- 關掉後以 --replSet set_name 與 --keyFile key_file_path 模式啟動多支 mongod
- 登入一台 mongod 以及完成帳號認證
- 使用 rs.init() 初始化後,再用 rs.add() 加入其他 mongod 或是使用 db.runCommand({'replSetInitiate':{'members':[]}}) 一次新增
未使用認證模式:
$ python replset_init.py --reset
Init DB(0), Port: 30000, Path: /home/id/data/mongodb-study/cluster/db/db-0
$ mongod --dbpath /home/id/data/mongodb-study/cluster/db/db-0 --port 30000 --oplogSize 700 --logpath /home/id/data/mongodb-study/cluster/log/db-0.log --rest --replSet firstset
Init DB(1), Port: 30001, Path: /home/id/data/mongodb-study/cluster/db/db-1
$ mongod --dbpath /home/id/data/mongodb-study/cluster/db/db-1 --port 30001 --oplogSize 700 --logpath /home/id/data/mongodb-study/cluster/log/db-1.log --rest --replSet firstset
Init DB(2), Port: 30002, Path: /home/id/data/mongodb-study/cluster/db/db-2
$ mongod --dbpath /home/id/data/mongodb-study/cluster/db/db-2 --port 30002 --oplogSize 700 --logpath /home/id/data/mongodb-study/cluster/log/db-2.log --rest --replSet firstset
nohup: ignoring input and appending output to `nohup.out'
nohup: ignoring input and appending output to `nohup.out'
nohup: ignoring input and appending output to `nohup.out'
Waiting...
localhost:30000: .....OK
localhost:30001: OK
localhost:30002: OK
Connect to localhost:30000
Initialize the First Replica Set:
$ monogo localhost:30000/admin
mongo> db.runCommand( {'replSetInitiate': {'_id': 'firstset', 'members': [{'host': 'localhost:30000', '_id': 1}, {'host': 'localhost:30001', '_id': 2}, {'host': 'localhost:30002', '_id': 3}]}} )
Result:
{u'info': u'Config now saved locally. Should come online in about a minute.', u'ok': 1.0}
All is done.
server info:
$ mongo localhost:30000/admin --eval 'printjson(rs.status())'
shutdown servers:
$ mongo localhost:30000/admin --eval 'db.shutdownServer()'
$ mongo localhost:30001/admin --eval 'db.shutdownServer()'
$ mongo localhost:30002/admin --eval 'db.shutdownServer()'
使用認證模式:
$ python replset_init.py --reset --auth-key-file keyfile --auth-user account --auth-pass password
Init DB(0), Port: 30000, Path: /home/id/data/mongodb-study/cluster/db/db-0
$ mongod --dbpath /home/id/data/mongodb-study/cluster/db/db-0 --port 30000 --oplogSize 700 --logpath /home/id/data/mongodb-study/cluster/log/db-0.log --rest
nohup: ignoring input and appending output to `nohup.out'
Waiting...
localhost:30000: ..OK
Connect to localhost:30000
Initialize the First Replica Set:
$ monogo localhost:30000/admin
mongo> db.addUser( {user: "account", pwd:"password", roles:["userAdminAnyDatabase"] })
Add account done.
Restart the mongod:
Init DB(0), Port: 30000, Path: /home/id/data/mongodb-study/cluster/db/db-0
$ mongod --dbpath /home/id/data/mongodb-study/cluster/db/db-0 --port 30000 --oplogSize 700 --logpath /home/id/data/mongodb-study/cluster/log/db-0.log --rest --replSet firstset --keyFile keyfile
Init DB(1), Port: 30001, Path: /home/id/data/mongodb-study/cluster/db/db-1
$ mongod --dbpath /home/id/data/mongodb-study/cluster/db/db-1 --port 30001 --oplogSize 700 --logpath /home/id/data/mongodb-
study/cluster/log/db-1.log --rest --replSet firstset --keyFile keyfile
nohup: ignoring input and appending output to `nohup.out'
Init DB(2), Port: 30002, Path: /home/id/data/mongodb-study/cluster/db/db-2
$ mongod --dbpath /home/id/data/mongodb-study/cluster/db/db-2 --port 30002 --oplogSize 700 --logpath /home/id/data/mongodb-
study/cluster/log/db-2.log --rest --replSet firstset --keyFile keyfile
nohup: ignoring input and appending output to `nohup.out'
nohup: ignoring input and appending output to `nohup.out'
nohup: ignoring input and appending output to `nohup.out'
Waiting...
localhost:30000: .......OK
localhost:30001: ...................................OK
localhost:30002: .OK
Connect to localhost:30000
Initialize the First Replica Set:
$ monogo localhost:30000/admin
mongo> db.runCommand( {'replSetInitiate': {'_id': 'firstset', 'members': [{'host': 'localhost:30000', '_id': 1}, {'host': 'localhost:30001', '_id': 2}, {'host': 'localhost:30002', '_id': 3}]}} )
Result:
{u'info': u'Config now saved locally. Should come online in about a minute.', u'ok': 1.0}
All is done.
server info:
$ mongo localhost:30000/admin -u account -p password --eval 'printjson(rs.status())'
shutdown servers:
$ mongo localhost:30000/admin -u account -p password --eval 'db.shutdownServer()'
$ mongo localhost:30001/admin -u account -p password --eval 'db.shutdownServer()'
$ mongo localhost:30002/admin -u account -p password --eval 'db.shutdownServer()'
沒有留言:
張貼留言