mongo 使用docker部署副本集群

一、副本集群搭建

虚拟机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连接 ,连接配置如下:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值