MongoDB docker集群配置小結(jié)
拉取鏡像
docker pull mongo:4.0.28
三臺(tái)主機(jī):主節(jié)點(diǎn)、備節(jié)點(diǎn)、仲裁節(jié)點(diǎn)
各個(gè)主機(jī)下,創(chuàng)建配置目錄:
mkdir -p /root/mongodb/config cd /root/mongodb/config
在每臺(tái)主機(jī)的config目錄下,添加 mongod.conf 配置文件:
# mongod.conf ? # for documentation of all options, see: # http://docs.mongodb.org/manual/reference/configuration-options/ ? # Where and how to store data. #storage: # dbPath: /data/db # engine: # wiredTiger: ? # where to write logging data. systemLog: destination: file logAppend: true path: /data/log/mongo.log ? # network interfaces #net: # port: 27017 # bindIp: 127.0.0.1 ? ? # how the process runs #processManagement: # timeZoneInfo: /usr/share/zoneinfo ? #security: # keyFile: /data/db/mongo.key # authorization: enabled ? #operationProfiling: ? # 配副本集名 replication: replSetName: "rs0" ? #sharding: ? ## Enterprise-Only Options: ? #auditLog: ? #snmp:
寫三個(gè)節(jié)點(diǎn)的啟動(dòng)腳本。三個(gè)節(jié)點(diǎn)的配置文件要保持一致,如果也是在一臺(tái)機(jī)器上部3個(gè)虛擬節(jié)點(diǎn),后面2個(gè)節(jié)點(diǎn)記得替換一下節(jié)點(diǎn)目錄、替換一下端口映射
創(chuàng)建 run_mongo_cluster_node1.sh 腳本:
docker run --name mongo1 \ -h mongo1 \ -v /root/mongodb/db:/data/db \ -v /root/mongodb/log:/data/log \ -v /root/mongodb/config:/etc/mongo \ -p 0.0.0.0:27017:27017 \ --restart=always \ -d mongo:4.0.28 \ --config /etc/mongo/mongod.conf
創(chuàng)建 vim run_mongo_cluster_node2.sh 腳本:
docker run --name mongo2 \ -h mongo2 \ -v /root/mongodb/db:/data/db \ -v /root/mongodb/log:/data/log \ -v /root/mongodb/config:/etc/mongo \ -p 0.0.0.0:27017:27017 \ --restart=always \ -d mongo:4.0.28 \ --config /etc/mongo/mongod.conf
創(chuàng)建 vim run_mongo_cluster_node3.sh 腳本:
docker run --name mongo3 \ -h mongo3 \ -v /root/mongodb/db:/data/db \ -v /root/mongodb/log:/data/log \ -v /root/mongodb/config:/etc/mongo \ -p 0.0.0.0:27017:27017 \ --restart=always \ -d mongo:4.0.28 \ --config /etc/mongo/mongod.conf
啟動(dòng)三個(gè)節(jié)點(diǎn)容器
sh run_mongo_cluster_node1.sh sh run_mongo_cluster_node2.sh sh run_mongo_cluster_node3.sh
啟動(dòng)后查看日志可發(fā)現(xiàn),日志提示副本集模式還沒(méi)有配置集群,狀態(tài)不可用
配置集群
隨便進(jìn)入一個(gè)節(jié)點(diǎn),這里進(jìn)入節(jié)點(diǎn)1
docker exec -it mongo_node1 mongo
把這個(gè)配置粘貼上,回車之后顯示OK就可以了。
rs.initiate({ _id: "rs0", members: [ {_id: 0, host: "172.29.69.8:27017"}, {_id: 1, host: "172.29.69.9:27017"}, {_id: 2, host: "172.29.69.10:27017", arbiterOnly: true} ] })
_id: "rs0"副本集名要和配置文件中的一致。arbiterOnly: true這個(gè)是仲裁節(jié)點(diǎn),建議把最后一個(gè)節(jié)點(diǎn)作為仲裁節(jié)點(diǎn),因?yàn)榈谝粋€(gè)節(jié)點(diǎn)作為仲裁會(huì)報(bào)個(gè)錯(cuò)。通常第一個(gè)節(jié)點(diǎn)是主節(jié)點(diǎn)。
這個(gè)時(shí)候已經(jīng)可以使用mongo集群了,但是沒(méi)有認(rèn)證,不安全。
開(kāi)啟認(rèn)證
切到admin庫(kù)
use admin
創(chuàng)建用戶,用戶名root,密碼12345678,權(quán)限r(nóng)oot,所屬庫(kù)admin
db.createUser({user:"root",pwd:"12345678",roles:[{role:'root',db:'admin'}]})
生成 mongo.key 簽名文件
cd /root/mongodb/config openssl rand -base64 756 > mongo.key
修改文件權(quán)限:
sudo chmod 777 mongo.key
復(fù)制 mongo.key文件到鏡像中。3臺(tái)機(jī)器都需要操作
sudo docker cp /root/mongodb/config/mongo.key mongo1:/tmp/mongo.key sudo docker cp /root/mongodb/config/mongo.key mongo2:/tmp/mongo.key sudo docker cp /root/mongodb/config/mongo.key mongo3:/tmp/mongo.key
進(jìn)入 mongo1 鏡像:
docker exec -it -u mongodb mongo1 /bin/bash
修改認(rèn)證所屬的用戶和權(quán)限:
mv /tmp/mongo.key /data/db/ chown mongodb:mongodb /data/db/mongo.key chmod 400 /data/db/mongo.key
退出窗口,關(guān)閉鏡像
docker stop mongo1 docker stop mongo2 docker stop mongo3
修改 mongod.conf 配置文件,打開(kāi) security 注釋:
# mongod.conf ? # for documentation of all options, see: # http://docs.mongodb.org/manual/reference/configuration-options/ ? # Where and how to store data. #storage: # dbPath: /data/db # engine: # wiredTiger: ? # where to write logging data. systemLog: destination: file logAppend: true path: /data/log/mongo.log ? # network interfaces #net: # port: 27017 # bindIp: 127.0.0.1 ? ? # how the process runs #processManagement: # timeZoneInfo: /usr/share/zoneinfo ? security: keyFile: /data/db/mongo.key authorization: enabled ? #operationProfiling: ? # 配副本集名 replication: replSetName: "rs0" ? #sharding: ? ## Enterprise-Only Options: ? #auditLog: ? #snmp:
所有機(jī)器的配置文件都需要打開(kāi)注釋
開(kāi)啟所有鏡像:
docker start mongo1 docker start mongo2 docker start mongo3
到此,認(rèn)證開(kāi)啟完畢,集群可以使用了
mongodb操作
修改 root 賬號(hào)密碼:
use admin db.updateUser( "root", { pwd : "1234567890", roles : [ { role: "root", db: "admin" } ] } )
認(rèn)證賬號(hào):
use admin db.auth("root","1234567890")
命令行登錄mongodb:
mongo -u root -p 1234567890
顯示所有數(shù)據(jù)庫(kù):
show databases
顯示數(shù)據(jù)庫(kù)中所有文檔:
show collections
插入數(shù)據(jù):
db.foods.insert({"name":"西紅柿"})
查看數(shù)據(jù):
use test db.foods.find()
刪除現(xiàn)有用戶:
db.dropUser("root")
刪除集合:
db.foods.drop()
到此這篇關(guān)于MongoDB docker集群配置小結(jié)的文章就介紹到這了,更多相關(guān)MongoDB docker集群內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Docker開(kāi)啟TLS和CA認(rèn)證的方法步驟
本文主要介紹了Docker開(kāi)啟TLS和CA認(rèn)證的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08Docker安裝OpenWrt的實(shí)現(xiàn)步驟
OpenWrt是一種可以運(yùn)行在路由器上的嵌入式操作系統(tǒng),提供了許多網(wǎng)絡(luò)服務(wù)和功能,本文主要介紹了Docker安裝OpenWrt的實(shí)現(xiàn)步驟,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-08-08docker-compose容器互相連接的實(shí)現(xiàn)
本文主要介紹了docker-compose容器互相連接的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03Docker出現(xiàn)tag顯示none鏡像的處理方案
本文介紹了Docker中出現(xiàn)REPOSITORY和TAG都顯示為<none>的鏡像,即懸掛鏡像的原因,并提供了解決方法,包括查找和刪除懸掛鏡像,以及為它們指定新的標(biāo)簽2025-02-02使用Nexus創(chuàng)建Docker倉(cāng)庫(kù)的方法步驟
這篇文章主要介紹了使用Nexus創(chuàng)建Docker倉(cāng)庫(kù)的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12portainer連接遠(yuǎn)程docker的實(shí)現(xiàn)示例
本文主要介紹了portainer連接遠(yuǎn)程docker的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-05-05