一、副本集群搭建
虚拟机IP地址:192.168.10.15
系统:CentOS7
工具:docker 和 docker-compose
1.1 创建数据映射目录:
mkdir -p /data/mongo/db1
mkdir -p /data/mongo/db2
mkdir -p /data/mongo/db3
1.2 创建 keyfile 文件
mongodb 使用 keyFile 进行认证,副本集群中的每个节点的 mongodb 使用 keyFile 的内容作为认证其他成员的共享密码。mongodb 实例只有拥有正确的 keyFile 才可以加入副本集群,集群中所有成员的 keyFile 内容必须相同。
# 进入到 mongo 目录中,生成 keyfile 文件
cd /data/mongo
# 其中数字 9527 可以随便指定
openssl rand -base64 9527 > mongodb.key
1.3 创建部署文件
在/data
下新建docker-compose.yml
文件,内容如下:
version: '3'
services:
# 服务名称
mongodb1:
# 使用 mongodb 4 镜像
image: mongo:4
# 服务重启的机制,always=服务挂掉后,会重新启动
restart: always
# 容器的名称
container_name: mongo1
# 宿主机中的目录和文件,映射容器内部的目录和文件
volumes:
- /data/mongo/db1:/data/db
- /data/mongo/mongodb.key:/data/mongo/mongodb.key
ports:
# 宿主机的端口映射容器内的端口
- 27018:27017
environment:
# 初始化一个 root 角色的用户 mongosuser 密码是 123456
- MONGO_INITDB_ROOT_USERNAME=mongosuser
- MONGO_INITDB_ROOT_PASSWORD=123456
# 使用创建的桥接网络,把各个 mongodb 容器连接在一起
networks:
- mongoNetwork
# 启动容器时,在容器内部额外执行的命令
# 其中 --replSet 参数后面的 mongos 是集群名称,这个很重要
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 $$@
mongodb2:
image: mongo:4
restart: always
container_name: mongo2
volumes:
- /data/mongo/db2:/data/db
- /data/mongo/mongodb.key:/data/mongo/mongodb.key
ports:
- 27019:27017
environment:
- MONGO_INITDB_ROOT_USERNAME=mongosuser
- MONGO_INITDB_ROOT_PASSWORD=123456
networks:
- mongoNetwork
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 $$@
mongodb3:
image: mongo:4
restart: always
container_name: mongo3
volumes:
- /data/mongo/db3:/data/db
- /data/mongo/mongodb.key:/data/mongo/mongodb.key
ports:
- 27020:27017
environment:
- MONGO_INITDB_ROOT_USERNAME=mongosuser
- MONGO_INITDB_ROOT_PASSWORD=123456
networks:
- mongoNetwork
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 $$@
# 创建一个桥接网络,把各个 mongodb 实例连接在一起,该网络适用于单机
# 如果有两台或以上机器,使用 docker swarm 需要创建 overlay 网络
networks:
mongoNetwork:
driver: bridge
1.4 部署
docker-compose /data/docker-compose.yml up -d
# 查看容器是否已经启动成功
docker ps
# 进入 mongo1 容器中
docker exec -it mongo1 bash
# 使用 mongosuser 登录 mongodb 中
mongo -u mongos -p 123456
# 执行以下命令,初始化副本集,mongos是副本集群的名称
rs.initiate({
_id: "mongos",
members: [
{ _id : 0, host : "192.168.10.15:27018" },
{ _id : 1, host : "192.168.10.15:27019" },
{ _id : 2, host : "192.168.10.15:27020" }
]
});
至此部署完成
二、连接
使用Navicat
连接 ,连接配置如下: