docker -compose.yml
version: "3"
services:
mongo-master:
image: mongo:4.4.3
container_name: mongo_m
restart: always
volumes:
- ./data/mongo_m/data/db:/data
- ./mongo/mongodb.key:/data/mongodb.key
ports:
- 27018:27017
environment:
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: 123456
TZ: Asia/Shanghai
command: mongod --replSet mongos --keyFile /data/mongodb.key
entrypoint:
- bash
- -c
- |
chmod 400 /data/mongodb.key
chown 999:999 /data/mongodb.key
exec docker-entrypoint.sh $$@
mongo-salave:
image: mongo:4.4.3
container_name: mongo_s
restart: always
volumes:
- ./data/mongo_s/data/db:/data
- ./mongo/mongodb.key:/data/mongodb.key
ports:
- 27019:27017
environment:
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: 123456
TZ: Asia/Shanghai
command: mongod --replSet mongos --keyFile /data/mongodb.key
entrypoint:
- bash
- -c
- |
chmod 400 /data/mongodb.key
chown 999:999 /data/mongodb.key
exec docker-entrypoint.sh $$@
mongo-arbiter:
image: mongo:4.4.3
container_name: mongo_a
restart: always
volumes:
- ./data/mongo_a/data/db:/data
- ./mongo/mongodb.key:/data/mongodb.key
ports:
- 27020:27017
environment:
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: 123456
TZ: Asia/Shanghai
command: mongod --replSet mongos --keyFile /data/mongodb.key
entrypoint:
- bash
- -c
- |
chmod 400 /data/mongodb.key
chown 999:999 /data/mongodb.key
exec docker-entrypoint.sh $$@
认证
400权限是要保证安全性,否则mongod启动会报错
openssl rand -base64 756 > mongodb.key
chmod 400 mongodb.key
进入容器
docker-compose up -d
docker exec -it mongo /bin/bash
主节点
use admin
db.auth("root","123456")
rs.initiate(
{
_id: "mongos",
version: 1,
members: [
{ _id: 0, host : "192.168.0.19:27018" },
{ _id: 1, host : "192.168.0.19:27019" }
]
}
)
rs.add("192.168.0.19:27020",true)
springboot 集群使用
spring.data.mongodb.uri=mongodb://192.168.0.19:27018,192.168.0.19:27019,192.168.0.19:27020/data
创建用户
db.createUser({user:"data",pwd:"123456",roles:[{role:"dbOwner",db:"data"}]})