<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
當你需要用到一個MongoDB 副本集叢集,用於開發測試時, 可以通過下面的步驟簡單完成。
版本及環境 MongoDB4.4 Centos6.5
MongoDB Server 提供資料庫服務。 Mongo Shell 可以理解為命令列的使用者端程式。
下載地址:https://www.mongodb.com/try/download/community
此處選擇對應的,版本, 平臺,Package型別(server /shell)
4.4.12 MongoDB Server:https://repo.mongodb.org/yum/redhat/6/mongodb-org/4.4/x86_64/RPMS/mongodb-org-server-4.4.12-1.el6.x86_64.rpm
MongoDB Shell:https://repo.mongodb.org/yum/redhat/6/mongodb-org/4.4/x86_64/RPMS/mongodb-org-shell-4.4.12-1.el6.x86_64.rpm
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)是一組維護相同資料的mongod程序, 提供了高可用性。部分節點故障了,還可以自動選取主節點,繼續提供服務。
由於副本集的連結方式和單點有些區別,所以測試環境也按照副本集方式部署。
MongoDB 手冊中關於副本集的部分在:https://docs.mongodb.com/v4.4/replication/
1. 首先建立下資料庫資料儲存目錄,用於儲存資料。 環境是單機,三個節點的目錄,都是在一臺機器建立的,偽分散式。
mkdir -p /srv/mongodb/rs0-0 /srv/mongodb/rs0-1 /srv/mongodb/rs0-2
2. 依次啟動三個mongod範例
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
啟動後, ps -axu |grep mongo 看一下 3個程序 mongod 是不是都ok。
3.使用mongo shell 連線其中一個節點。進行副本集初始化。
mongo --port 27017
進入shell後, 執行如下命令。注意替換“10.13.50.40” 為實際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 )
初始化完成後,可以通過
rs.conf()
檢視副本集設定。
到這裡3個節點的副本集已經設定好了。可以連線進行讀寫操作了。
但目前連線是沒有存取控制的, 下面來增加存取控制。
在副本集中啟用存取控制,需要進行兩項設定。
1. 副本集節點成員間的安全認證,支援keyfiles 或者 x.509 證書 認證。
2.副本集服務與資料庫連線使用者端間的安全認證, 使用者名稱,密碼。許可權基於使用者所屬角色。
副本集節點間的內部認證, 這裡使用keyfiles。 通俗說就是所有節點共用相同的keyfile 作為密碼。keyfile正確, 才能夠加入副本集,實現了副本集節點間的身份驗證。
建立一個keyfile, 複製三份,供3個節點使用。下面按官方手冊, 使用openssl 生成隨機密碼,修改許可權為400. 複製到3個目錄備用。
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/
下面建立使用者,指定角色。 如前述,使用 mongo shell 連線資料庫。建立使用者需要在主節點進行。如果連線的節點不是當前主節點。可以用 rs.status(); 檢視主節點ip埠後連線。進入mongo shell後, 輸入如下命令。
admin = db.getSiblingDB("admin") admin.createUser( { user: "admin", pwd: "admin!@#$", roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] } )
建立一個使用者名稱未 admin 角色為 userAdminAnyDatabase 的使用者, 密碼為 admin!@#$。 關於內建角色的更多資訊可以在這裡瞭解。
https://docs.mongodb.com/v4.4/reference/built-in-roles/
準備就緒後。 需要重啟mongo server服務, 啟用存取控制機制。 下面關閉所有節點。
mongo --port 27017 --eval 'db.adminCommand("shutdown")' mongo --port 27018 --eval 'db.adminCommand("shutdown")' mongo --port 27019 --eval 'db.adminCommand("shutdown")'
重新啟動mongod,啟用存取控制 --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
此時,已經啟用了存取控制, 無許可權使用者無法對資料庫進行讀寫,無法新增使用者。下面使用 帶認證的方式登入。 --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 具有使用者管理許可權,但無資料庫讀寫許可權。 登陸後在 mongo shell中建立一個資料庫庫讀寫使用者,讀寫特定資料庫。test 使用者具有對資料庫 mytest 的讀寫許可權, 屬於內建的 readWrite 角色。
db.createUser( {user: "test",pwd: "test!@#$",roles: [ { role: "readWrite", db: "mytest" } ]})
然後mongo shell 使用 test 登入 驗證。
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 中測試讀寫
use mytest db.col.insert({name:'測試',age:1}) db.col.find()
查詢結果
{ "_id" : ObjectId("61f3da65e72c3f10edef9a78"), "name" : "測試", "age" : 1 }
至此。一個三個節點的, 帶有存取控制的副本集,就搞定收工。
到此這篇關於MongoDB 帶存取控制的副本集部署的文章就介紹到這了,更多相關MongoDB副本集部署內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45