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

转载:mongodb docker-compose 搭建主从 3 个节点集群 - pythoner_wl - 博客园

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

参考链接:MongoDB每次都要rs.slaveOk(),好烦啊~ - 墨天轮
参考链接:docker-compose配置mongodb复制集_辣椒炒肉真好吃的博客-CSDN博客
参考链接:docker-compose mongo复制集_wcy10086的博客-CSDN博客

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值