• mongodb dockercompose 搭建主从 3 个节点集群


    mongodb docker-compose 搭建主从 3 个节点

    1 生成keyFile

    1 command执行命令时需要指定 --keyFile跟 --replSet两个属性。
      keyFile是为了添加复制集时的验证处理,拥有同样的keyFile文件的节点才可以被添加到复制集中。
    
    2 生成keyFile:
    
    openssl rand -base64 756 > keyfile
    chmod 400 keyfile
    
    权限设置为400就可以,设置太大了会出现permission too open错误。
    
    还有另外值的注意的是该keyfile文件的所属用户不正确会出现:bad file错误。解决:
    
    sudo chown 999 keyfile
    
    其他:
    keyfile文件中至少需要有6个字符,里面的内容可以是任意的。如果keyfile文件中只有一个key,则直接写一个字符串就可以,如:
    123456
    如果有多个需要用单引号括起来或者使用破折号:
    ‘123456’
    ‘asdfgh’
    
    -123456
    -asdfgh
    

    2 启动 3 个 mongodb容器

    docker-compose 配置文件:

    mongo1

    version: '3.5'
    services:
      mongo1:
        container_name: mongo1
        image: mongo:5.0.3-focal
        restart: always
        ports:
          - '8001:27017'
        environment:
          TZ: Asia/Shanghai
          MONGO_INITDB_ROOT_USERNAME: aaa
          MONGO_INITDB_ROOT_PASSWORD: 123456aaa78
        volumes:
          - ./mongo1:/data/db
          # filekey文件映射
          - /home/ubuntu/wl_project/apt_app_service/deploy/go_run/mongo_key_file:/data/mongo_key_file
        command:  mongod --keyFile /data/mongo_key_file/keyfile --replSet rs
    

    mongo2

    version: '3.5'
    services:
      mongo2:
        container_name: mongo2
        image: mongo:5.0.3-focal
        restart: always
        ports:
          - '8002:27017'
        environment:
          TZ: Asia/Shanghai
          MONGO_INITDB_ROOT_USERNAME: root
          MONGO_INITDB_ROOT_PASSWORD: 12345678
        volumes:
          - ./mongo2:/data/db
          - /home/ubuntu/wl_project/apt_app_service/deploy/go_run/mongo_key_file:/data/mongo_key_file
        command:  mongod --keyFile /data/mongo_key_file/keyfile --replSet rs
    

    mongo3

    version: '3.5'
    services:
      mongo3:
        container_name: mongo3
        image: mongo:5.0.3-focal
        restart: always
        ports:
          - '8003:27017'
        environment:
          TZ: Asia/Shanghai
          MONGO_INITDB_ROOT_USERNAME: root
          MONGO_INITDB_ROOT_PASSWORD: 12345678
        volumes:
          - ./mongo3:/data/db
          - /home/ubuntu/wl_project/apt_app_service/deploy/go_run/mongo_key_file:/data/mongo_key_file
        command:  mongod --keyFile /data/mongo_key_file/keyfile --replSet rs
    

    3 初始化集群

    # 进入其中一个容器:
    docker exec -it 容器名称 bash
    
    # 登陆mongodb
    mongo -u root
    
    # 创建集群 rs
    rs.initiate({_id:'rs',members:[{_id:0,host:'172.31.3.1:8001'},{_id:1,host:'172.31.3.1:8002'},{_id:2,host:'172.31.3.1:8003'}]})
    

    出现的问题

    1 初始化集群:no replset config has been received
    解决:replSet 与初始化命令中的集群id不一致,注意:重启 docker-compose 好像并不能更新修改后的docker-compose 文件,应该先down,再start

    2 指定 mongodb 账号,密码,必须有 keyfile文件。

    3 从节点执行命令,发现报错:

    uncaught exception: Error: listDatabases failed:{

    解决:
    限制执行命令:
    临时生效:rs.secondaryOk()
    永久生效:echo 'rs.secondaryOk()' > /root/.mongorc.js

    参考链接:https://www.modb.pro/db/230190
    参考链接:https://blog.csdn.net/a765717/article/details/120000965
    参考链接:https://blog.csdn.net/qq_36949713/article/details/107066236

  • 相关阅读:
    [Abp vNext 源码分析]
    C# 结合 PInvoke 对接 IP 摄像头的笔记
    Abp vNext 自定义 Ef Core 仓储引发异常
    [Abp vNext 源码分析]
    [Abp vNext 源码分析]
    [Abp vNext 源码分析]
    网站SEO中服务器优化的三个问题
    用香港服务器还是国内服务器好
    租用香港服务器最重要的三个问题
    如何选择服务器操作系统
  • 原文地址:https://www.cnblogs.com/pythonwl/p/16243193.html
Copyright © 2020-2023  润新知