mongodb容器化部署
1. 单节点
- 创建工作目录
mkdir -p /data/mongodb/{
conf,data,logs}
- 容器编排
构建docker-compose.yaml
version: '3'
services:
mongodb-container:
image: mongo:4.4.18
container_name: mongodb-container
command: [--auth]
environment:
# 时区上海
TZ: Asia/Shanghai
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: Gn8_J777sxxn
volumes:
- /data/mongodb/data:/data/db
- /data/mongodb/conf:/data/configdb
- /data/mongodb/logs:/var/log/mongodb
ports:
- 27017:27017
restart: always
logging:
driver: json-file
options:
max-size: "100m"
max-file: "50"
- 启动服务
cd /data/mongodb
docker-compose -f docker-compose.yaml up -d
- 验证
# 进入容器
docker exec -it mongodb-container bash
mongo 127.0.0.1:27017/admin -u root -p
2. 主从复制
副本集群是一组维护相同数据集的mongod实例。一个副本集包含几个承载数据的节点和一个可选的仲裁节点。在承载数据的节点中,只有一个节点被认为是主节点,其他节点被认为是次节点。
主节点接收所有的写操作,次节点接收主节点的操作应用在自己的数据集上,副本节点只是做一个备份的作用,当主节点出现故障时,会自动选出新的主节点。
本教程描述的是包含三个节点的副本集群搭建,所有节点都没有开启访问控制。
因为集群需要通过选举来确定master节点,为了选举不会出现问题,所以集群成员数量应该总是奇数个。
- 创建工作目录
# 在所有节点创建工作目录
mkdir -p /data/mongodb/{
conf,data,logs}
- 创建keyfile
cd /data/mongodb/conf
openssl rand -base64 756 > mongodb.key
chmod 400 mongodb.key
# 将mongodb.key分发至所有mongodb宿主机的相同目录
- 容器编排
docker-compose.yaml
version: '3'
services:
mongodb:
image: mongo:4.4.18
container_name: mongodb
command: mongod --auth --keyFile /data/configdb/mongodb.key --replSet MongoRs
environment:
# 时区上海
TZ: Asia/Shanghai
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: Gn8_J777sxxn
volumes:
- /data/mongodb/data:/data/db
- /data/mongodb/conf:/data/configdb
- /data/mongodb/logs:/var/log/mongodb
ports:
- 27017:27017
entrypoint:
- bash
- -c
- |
chmod 400 /data/configdb/mongodb.key
chown 999:999 /data/configdb/mongodb.key
exec docker-entrypoint.sh $$@
restart: always
- 启动服务
在每个节点启动服务
cd /data/mongodb
docker-compose -f docker-compose.yaml up -d
- 配置副本集
# 本次假设需要设定192.168.1.11为主,其余为从
# 登录192.168.10.101上的库(使用客户端命令连接任意一个节点,但这里尽量要连接主节点)
docker exec -it mongodb bash
mongo 192.168.1.11:27017/admin -u root -p
# 添加配置信息
# 这里的_id要与docker-compose中的参数一致,priority指定选举优先级,越高越容易被选举为主,默认为1
> config={
_id:"MongoRs",members:[
{
_id:0,host:"192.168.1.11:27017",priority:10},
{
_id:1,host:"192.168.1.12:27017",priority:1},
{
_id:2,host:"192.168.1.12:27017",priority:1}]
}
# 初始化副本集
> rs.initiate(config)
# 查看副本集配置信息
> rs.conf()
# 查看副本集运行状态:
> rs.status()
- 在application.yml中配置副本集
spring:
data:
mongodb:
uri: mongodb://root:[email protected]:27017,192.168.1.12:27017,192.168.1.13:27017/admin?replicaSet=MongoRs&readPreference=secondaryPreferred&connectTimeoutMS=300000&slaveOk=true