mongodb docker-compose 搭建主从 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

posted @ 2022-05-07 16:52  pythoner_wl  阅读(966)  评论(0编辑  收藏  举报