您好,登錄后才能下訂單哦!
這篇文章主要介紹了MongoDB訪問(wèn)控制的副本集如何部署的相關(guān)知識(shí),內(nèi)容詳細(xì)易懂,操作簡(jiǎn)單快捷,具有一定借鑒價(jià)值,相信大家閱讀完這篇MongoDB訪問(wèn)控制的副本集如何部署文章都會(huì)有所收獲,下面我們一起來(lái)看看吧。
版本及環(huán)境 MongoDB4.4 Centos6.5
MongoDB Server 提供數(shù)據(jù)庫(kù)服務(wù)。 Mongo Shell 可以理解為命令行的客戶端程序。
下載地址:https://www.mongodb.com/try/download/community
此處選擇對(duì)應(yīng)的,版本, 平臺(tái),Package類型(server /shell)
RMP 安裝
rpm -ivh mongodb-org-server-4.4.12-1.el6.x86_64.rpm
rpm -ivh mongodb-org-shell-4.4.12-1.el6.x86_64.rpm
副本集(replica set)是一組維護(hù)相同數(shù)據(jù)的mongod進(jìn)程, 提供了高可用性。部分節(jié)點(diǎn)故障了,還可以自動(dòng)選取主節(jié)點(diǎn),繼續(xù)提供服務(wù)。
由于副本集的鏈接方式和單點(diǎn)有些區(qū)別,所以測(cè)試環(huán)境也按照副本集方式部署。
1. 首先創(chuàng)建下數(shù)據(jù)庫(kù)數(shù)據(jù)存儲(chǔ)目錄,用于存儲(chǔ)數(shù)據(jù)。 環(huán)境是單機(jī),三個(gè)節(jié)點(diǎn)的目錄,都是在一臺(tái)機(jī)器創(chuàng)建的,偽分布式。
mkdir -p /srv/mongodb/rs0-0 /srv/mongodb/rs0-1 /srv/mongodb/rs0-2
2. 依次啟動(dòng)三個(gè)mongod實(shí)例
mongod --replSet rs0 --fork --logpath /srv/mongodb/0 --logappend --port 27017 --bind_ip 0.0.0.0,:: --dbpath /srv/mongodb/rs0-0 --oplogSize 128 mongod --replSet rs0 --fork --logpath /srv/mongodb/1 --logappend --port 27018 --bind_ip 0.0.0.0,:: --dbpath /srv/mongodb/rs0-1 --oplogSize 128 mongod --replSet rs0 --fork --logpath /srv/mongodb/2 --logappend --port 27019 --bind_ip 0.0.0.0,:: --dbpath /srv/mongodb/rs0-2 --oplogSize 128
啟動(dòng)后, ps -axu |grep mongo 看一下 3個(gè)進(jìn)程 mongod 是不是都o(jì)k。
3.使用mongo shell 連接其中一個(gè)節(jié)點(diǎn)。進(jìn)行副本集初始化。
mongo --port 27017
進(jìn)入shell后, 執(zhí)行如下命令。注意替換“10.13.50.40” 為實(shí)際IP
rsconf = { _id: "rs0", members: [ { _id: 0, host: "10.13.50.40:27017" }, { _id: 1, host: "10.13.50.40:27018" }, { _id: 2, host: "10.13.50.40:27019" } ] }
rs.initiate( rsconf )
初始化完成后,可以通過(guò)
rs.conf()
查看副本集配置。
到這里3個(gè)節(jié)點(diǎn)的副本集已經(jīng)配置好了??梢赃B接進(jìn)行讀寫(xiě)操作了。
但目前連接是沒(méi)有訪問(wèn)控制的, 下面來(lái)增加訪問(wèn)控制。
在副本集中啟用訪問(wèn)控制,需要進(jìn)行兩項(xiàng)配置。
1. 副本集節(jié)點(diǎn)成員間的安全認(rèn)證,支持keyfiles 或者 x.509 證書(shū) 認(rèn)證。
2.副本集服務(wù)與數(shù)據(jù)庫(kù)連接客戶端間的安全認(rèn)證, 用戶名,密碼。權(quán)限基于用戶所屬角色。
副本集節(jié)點(diǎn)間的內(nèi)部認(rèn)證, 這里使用keyfiles。 通俗說(shuō)就是所有節(jié)點(diǎn)共享相同的keyfile 作為密碼。keyfile正確, 才能夠加入副本集,實(shí)現(xiàn)了副本集節(jié)點(diǎn)間的身份驗(yàn)證?!?/p>
創(chuàng)建一個(gè)keyfile, 復(fù)制三份,供3個(gè)節(jié)點(diǎn)使用。下面按官方手冊(cè), 使用openssl 生成隨機(jī)密碼,修改權(quán)限為400. 復(fù)制到3個(gè)目錄備用。
openssl rand -base64 756 > key chmod 400 key mkdir -p /srv/mongodb/k0 /srv/mongodb/k1 /srv/mongodb/k2 cp key /srv/mongodb/k0/ cp key /srv/mongodb/k1/ cp key /srv/mongodb/k2/
下面創(chuàng)建用戶,指定角色。 如前述,使用 mongo shell 連接數(shù)據(jù)庫(kù)。創(chuàng)建用戶需要在主節(jié)點(diǎn)進(jìn)行。如果連接的節(jié)點(diǎn)不是當(dāng)前主節(jié)點(diǎn)??梢杂?rs.status(); 查看主節(jié)點(diǎn)ip端口后連接。進(jìn)入mongo shell后, 輸入如下命令。
admin = db.getSiblingDB("admin") admin.createUser( { user: "admin", pwd: "admin!@#$", roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] } )
創(chuàng)建一個(gè)用戶名未 admin 角色為 userAdminAnyDatabase 的用戶, 密碼為 admin!@#$。 關(guān)于內(nèi)建角色的更多信息可以在這里了解。
https://docs.mongodb.com/v4.4/reference/built-in-roles/
準(zhǔn)備就緒后。 需要重啟mongo server服務(wù), 啟用訪問(wèn)控制機(jī)制。 下面關(guān)閉所有節(jié)點(diǎn)。
mongo --port 27017 --eval 'db.adminCommand("shutdown")' mongo --port 27018 --eval 'db.adminCommand("shutdown")' mongo --port 27019 --eval 'db.adminCommand("shutdown")'
重新啟動(dòng)mongod,啟用訪問(wèn)控制 --auth --keyFile
mongod --replSet rs0 --fork --auth --keyFile /srv/mongodb/k0/key --logpath /srv/mongodb/0 --logappend --port 27017 --bind_ip 0.0.0.0,:: --dbpath /srv/mongodb/rs0-0 --oplogSize 128 mongod --replSet rs0 --fork --auth --keyFile /srv/mongodb/k1/key --logpath /srv/mongodb/1 --logappend --port 27018 --bind_ip 0.0.0.0,:: --dbpath /srv/mongodb/rs0-1 --oplogSize 128 mongod --replSet rs0 --fork --auth --keyFile /srv/mongodb/k2/key --logpath /srv/mongodb/2 --logappend --port 27019 --bind_ip 0.0.0.0,:: --dbpath /srv/mongodb/rs0-2 --oplogSize 128
此時(shí),已經(jīng)啟用了訪問(wèn)控制, 無(wú)權(quán)限用戶無(wú)法對(duì)數(shù)據(jù)庫(kù)進(jìn)行讀寫(xiě),無(wú)法新增用戶。下面使用 帶認(rèn)證的方式登錄。 --username 及 --password
mongo admin --username admin --password 'admin!@#$' --host rs0/10.13.50.40:27017,10.13.50.40:27018,10.13.50.40:27019
admin的角色userAdminAnyDatabase 具有用戶管理權(quán)限,但無(wú)數(shù)據(jù)庫(kù)讀寫(xiě)權(quán)限。 登陸后在 mongo shell中創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)庫(kù)讀寫(xiě)用戶,讀寫(xiě)特定數(shù)據(jù)庫(kù)。test 用戶具有對(duì)數(shù)據(jù)庫(kù) mytest 的讀寫(xiě)權(quán)限, 屬于內(nèi)置的 readWrite 角色。
db.createUser( {user: "test",pwd: "test!@#$",roles: [ { role: "readWrite", db: "mytest" } ]})
然后mongo shell 使用 test 登錄 驗(yàn)證。
mongo test --username test --password 'test!@#$' --host rs0/10.13.50.40:27017,10.13.50.40:27018,10.13.50.40:27019
test登錄后,在mongo shell 中測(cè)試讀寫(xiě)
use mytest db.col.insert({name:'測(cè)試',age:1}) db.col.find()
查詢結(jié)果
{ "_id" : ObjectId("61f3da65e72c3f10edef9a78"), "name" : "測(cè)試", "age" : 1 }
關(guān)于“MongoDB訪問(wèn)控制的副本集如何部署”這篇文章的內(nèi)容就介紹到這里,感謝各位的閱讀!相信大家對(duì)“MongoDB訪問(wèn)控制的副本集如何部署”知識(shí)都有一定的了解,大家如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。