docker-compose 部署MongoDB4.1.6部署副本集)集群 本人

本文介绍了如何在单台服务器上使用docker-compose部署MongoDB 4.1.6的副本集,包括生成keyFile、配置文件的编写,以及副本集的初始化和故障转移操作。在副本集配置中,通过keyFile进行成员间的认证,并通过docker-compose管理各个节点。当主节点宕机时,副本集会自动选举新主节点。
摘要由CSDN通过智能技术生成


环境准备
安装docker,安装docker-compose
生产环境最好是将不同的节点部署在不同的服务器上,但限于实际情况可能只能在单台服务器上部署,以下是将副本集部署在同一台服务器上。
生成keyFile
MongoDB使用keyfile认证,副本集中的每个mongod实例使用keyfile内容作为认证其他成员的共享密码。mongod实例只有拥有正确的keyfile才可以加入副本集。
keyFile的内容必须是6到1024个字符的长度,且副本集所有成员的keyFile内容必须相同。
有一点要注意是的:在UNIX系统中,keyFile必须没有组权限或完全权限(也就是权限要设置成X00的形式)。Windows系统中,keyFile权限没有被检查。
可以使用任意方法生成keyFile。例如,如下操作使用openssl生成复杂的随机的1024个字符串。然后使用chmod修改文件权限,只给文件拥有者提供读权限。
这是MongoDB官方推荐keyFile的生成方式:
# 400权限是要保证安全性,否则mongod启动会报错

openssl rand -base64 756 > mongodb.key
chmod 400 mongodb.key

每一个副本集成员都要使用相同的keyFile文件
配置文件
docker-compose.yml 文件


version: "3.6"
 
services:
  mongodb1:
    image: mongo
    restart: always
    hostname: mongo1
    container_name: mongo1
    volumes:
      - ./data/db/mongo1:/data/db
      - ./mongodb.key:/data/mongodb.key
    ports:
      - 27011:27017
    environment:
      MONGO_INITDB_ROOT_USERNAME: root
      MONGO_INITDB_ROOT_PASSWORD: admin
    networks:
      - mongoNet
    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
    restart: always
    hostname: mongo2
    container_name: mongo2
    volumes:
      - ./data/db/mongo2:/data/db
      - ./mongodb.key:/data/mongodb.key
    ports:
      - 27018:27017
    environment:
      MONGO_INITDB_ROOT_USERNAME: root
      MONGO_INITDB_ROOT_PASSWORD: admin
    networks:
      - mongoNet
    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
    restart: always
    hostname: mongo3
    container_name: mongo3
    volumes:
      - ./data/db/mongo3:/data/db
      - ./mongodb.key:/data/mongodb.key
    ports:
      - 27019:27017
    environment:
      MONGO_INITDB_ROOT_USERNAME: root
      MONGO_INITDB_ROOT_PASSWORD: admin
    networks:
      - mongoNet
    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 $$@
 
  mongodb4:
    image: mongo
    restart: always
    hostname: mongo4
    container_name: mongo4
    volumes:
      - ./data/db/mongo4:/data/db
      - ./mongodb.key:/data/mongodb.key
    ports:
      - 27020:27017
    environment:
      MONGO_INITDB_ROOT_USERNAME: root
      MONGO_INITDB_ROOT_PASSWORD: admin
    networks:
      - mongoNet
    command: mongod --replSet mongos --keyFile /data/mongodb.key
    entryp
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值