1. docker安裝mongodb說明
1.1. 配置docker-compose.yml
mongod.conf內(nèi)容如下,一般只需要修改wiredTiger.engineConfig.cacheSizeGB,具體大小請查考官方文檔
# 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
journal:
enabled: true
directoryPerDB: true
engine: wiredTiger
wiredTiger:
engineConfig:
cacheSizeGB: 8
directoryForIndexes: true
# where to write logging data.
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongod.log
# network interfaces
net:
port: 27017
bindIp: 0.0.0.0
# how the process runs
processManagement:
timeZoneInfo: /usr/share/zoneinfo
#replication:
replication:
oplogSizeMB: 51200
replSetName: rs0
創(chuàng)建文件夾用來持久化數(shù)據(jù)
# db存放數(shù)據(jù)庫文件,log存放mongodb日志,config存放mongodb配置文件
mkdir db log config
# 由于log文件夾需要被容器讀寫,所以要授權
chmod 777 -R log
目前是副本集模式,需要拷貝該文件,修改其中container_name, ports和volumes
version: '3.8'
services:
mongo:
image: mongo
container_name: mongo1
restart: always
command: --config /etc/mongo/mongod.conf
ports:
- 27001:27017
volumes:
# 掛載數(shù)據(jù)目錄
- /home/docker-compose/mongo1/db:/data/db
# 掛載日志目錄
- /home/docker-compose/mongo1/log:/var/log/mongodb
# 掛載配置目錄
- /home/docker-compose/mongo1/config:/etc/mongo
1.2. 啟動程序
mongodb部署在172.17.0.3:/home/docker-compose
# 程序后臺啟動
docker-compose up -d
1.3. 配置副本集
使用mongo連接服務器
./mongo --port 27001
進入mongodb后,使用命令設置副本集成員
_id也就是副本集名稱在mongod.conf指定了
rs.initiate( {
_id : "rs0",
members: [
{ _id: 0, host: "172.17.0.3:27001" },
{ _id: 1, host: "172.17.0.3:27002" },
{ _id: 2, host: "172.17.0.3:27003", arbiterOnly: true }
]
})
// 查看目前節(jié)點的屬性,一般為PRIMARY,SECONDARY和ARBITER三種
rs.status()
1.4. 開啟用戶權限配置
1.4.1. 創(chuàng)建用戶
./mongo --port 27001
# 切換到admin數(shù)據(jù)庫,做授權
use admin
# 查看內(nèi)建的角色
show roles
db.createUser({user:"root", pwd: "admin#123", roles: [{role: "root", db: "admin"}]})
1.4.2. 停止節(jié)點
使用docker-compose stop命令依次停止從節(jié)點mongo2,仲裁節(jié)點mongo3,主節(jié)點mongo1
1.4.3. 創(chuàng)建節(jié)點間認證文件
根據(jù)官方文檔所述,副本集和分片集群間的節(jié)點之間需要認證。
Replica sets and sharded clusters require internal authentication between members when access control is enabled.
For more details, please see Internal/Membership Authentication.
# 使用openssl在當前目錄生成keyfile
openssl rand -base64 756 > keyfile
# 因為該文件是root用戶創(chuàng)建,所以要變更用戶為mongodb用戶systemd-coredump和讀權限
# 如果權限過大,mongodb啟動后會報錯permissions on XXXX are too open
chmod 400 keyfile
chown systemd-coredump keyfile
# 將該文件拷貝到其他mongodb節(jié)點上
cp keyfile /home/docker-compose/mongo1/config/
cp keyfile /home/docker-compose/mongo2/config/
cp keyfile /home/docker-compose/mongo3/config/
1.4.4. 修改mongod.conf配置
添加以下內(nèi)容
security:
keyFile: /etc/mongo/keyfile
authorization: enabled
1.4.5. 重新啟動副本集
使用docker-compose start命令依次啟動主節(jié)點mongo1,仲裁節(jié)點mongo3和從節(jié)點mongo2
1.5. 停止程序
# 停止容器并刪除容器
docker-compose down
1.6. 升級程序
# 停止程序并刪除鏡像
docker-compose down --rmi all
# 拉取新的鏡像
docker-compose pull
# 啟動程序
docker-compose up -d
1.7. 卸載程序
要想完全卸載,需要刪除docker鏡像和數(shù)據(jù)
# 停止容器并刪除容器、鏡像
docker-compose down --rmi all
# 刪除鏡像
docker rmi mongo
# 刪除本地文件
rm -r /home/docker-compose/mongo1