docker mongo 副本集 有权限

4 篇文章 0 订阅
3 篇文章 0 订阅

mongo 副本集 有权限

参照:https://monkeywie.cn/2020/03/10/mongodb-replica-set/

1.安装

1.1 构建镜像

  1. 准备秘钥用于节点之间的认证

    1.服务器运行生成密钥命令:
    openssl rand -base64 756 > auth.key
    
  2. 编写 Dockerfile

    #DockerFile 文件内容
    FROM mongo:3.4.10
    #将秘钥文件复制到镜像中
    COPY auth.key /app/auth.key
    RUN chown -R mongodb:mongodb /app/auth.key
    #设置秘钥文件权限,这一步非常关键
    RUN chmod 600 /app/auth.key
    
  3. 构建镜像 :

    docker build -t mongo-replset .
    

1.2 docker-compose 运行

  1. 主节点10.202.228.39 master docker-compose.yml 文件:

    version: "3.4"
    services:
      master:
        image: mongo-replset   # 记得要使用编译的生成的镜像
        container_name: "master" 
        restart: always
        ports:
          - 27017:27017
        environment:
          MONGO_INITDB_ROOT_USERNAME: cmdb
          MONGO_INITDB_ROOT_PASSWORD: cmdb
        volumes:
          - mongodb_data:/data/db
        command:
          - --replSet
          - mongoreplSet
          - --keyFile
          - /app/auth.key    #
      mongo-init:
        image: mongo:latest
        depends_on:
          - master
        restart: on-failure:5
        command:
          - mongo
          - mongodb://cmdb:cmdb@10.202.228.39:27017/admin
          - --eval
          - 'rs.initiate({ _id: "mongoreplSet", members: [{_id:1,host:"10.202.228.39:27017"},{_id:2,host:"10.202.228.8:27018"}]})'
      
    volumes:
      mongodb_data:
    
  2. 从节点10.202.228.8 slave docker-compose.yml 文件:

    version: "3.4"
    services:
      slave:
        image: mongo-replset  # 记得要使用编译的生成的镜像
        container_name: "slave" 
        restart: always
        ports:
          - 27018:27017
        command:
          - --mongoreplSet
          - xufang
          - --keyFile
          - /app/auth.key
    
  3. 先启动从节点,然后启动主节点服务

    原因:主节点中有初始化从节点命令,如果先不启动从节点,可能导致初始化检测失败,手动操作

    docker-compose up -d
    
  4. 配置从节点可读

    #进入容器 设置可读
    docker exec -it  slave mongo
    db.getMongo().setSecondaryOk()
    

2 检测

  1. 进去master 容器,查看状态

    进入容器,需要授权,才能查看状态
    docker exec -it master mongo
    use admin 
    # 授予用户权限 db.auth(username,password),查看副本集状态
    db.auth("cmdb","cmdb")
    rs.status()
    

    运行结果如下:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8O0wdFON-1605763356733)(C:\Users\23138\AppData\Roaming\Typora\typora-user-images\image-20201119111418031.png)]

配置副本集和权限

  1. 进去master 容器 初始化副本集master节点信息和权限信息

    # 进入容器
    docker exec -it  m1 mongo
    #执行 主节点初始化命令
    config = {"_id" : "rs","members" : [{"_id" : 0,"host" : "10.202.228.8:27018"}]}
    rs.initiate(config)
    # 在数据库admin 创建用户为 超级权限:
    use admin
    db.createUser({user:"admin",pwd:"maxnerva",roles:[{role:"root",db:"admin"}]})
    
    # 授予用户权限 db.auth(username,password),查看副本集状态:
    db.auth("admin","maxnerva") 
    rs.status()
    

在这里插入图片描述

  1. 检测数据库是否可以连接:

    配置图:
    在这里插入图片描述

在这里插入图片描述

结果如下:
在这里插入图片描述

3 .额外:增加副本集节点

注意:增肌副本集节点:需要整个副本集必须有两个节点。

1.使用从节点上docker compose 文件,检测参数是否需要修改,然后在需要部署的服务器上docker compose 安装。

2.切换到主节点所在的服务器,进入主节点 docker exec -it master mongo

(1)使用 rs.add("ip:port")命令加入节点,如rs.add("10.202.228.8:27020")

(2)查看主节点状态rs.status()看是否从节点已经加入。

整个过程可能需要权限验证:

use admin
db.auth("cmdb","cmdb")
# doc 文档
## 一.Mongodb 副本集
### 1.docker compose 安装。
servers: 10.202.228.8,10.202.228.9,10.202.228.10 分别运行docker compose 命令;
容器名称分别为master-01;slave-01; slave-02;

version: "3"
services:
  master-01:
    image: mongo:latest
    container_name: "master-01" 
    ports:
      - "27017:27017"
command: mongod --replSet mongoreplset
volumes:
- mongodb_data:/data/db
volumes:
  mongodb_data:

### 2.修改配置:
1.1 主节点master-01 
(1) 容器:docker exec -it master-01 mongo
(2)执行config = {"_id" : "mongoreplset","members" : [{"_id" : 0,"host" : "10.202.228.8:27017"},{"_id" : 1,"host" : "10.202.228.9:27017"},{"_id" : 2,"host" : "10.202.228.10:27017"}]}
rs.initiate(config)
(1)执行rs.status() 查看状态。
1.2 从节点slave-01; slave-02;
(1)db.getMongo().setSecondaryOk()
(2)执行rs.status() 查看状态。


### 额外:增加从节点slave-03;
在服务器10.202.228.11上
version: "3"
services:
 slave-04:
    image: mongo:latest
    container_name: "slave-04" 
    ports:
      - "27017:27017"
command: mongod --replSet mongoreplset
volumes:
- mongodb_data:/data/db
volumes:
  mongodb_data:
(1)进入主节点,执行
rs.add("10.202.228.11:27017"); #移除rs.remove("10.202.228.11:27017"); 、
(2)进入从节点slave-03:执行
db.getMongo().setSecondaryOk()
(2)执行rs.status() 查看状态。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值