docker-compose 搭建mongo 复制集 带权限验证

引言,网上的文章或多或少都有一些问题,总结了一条正确的操作

1.环境 centos 7.5

2.部署目标 简单自动切换复制集 三节点

3.开始搭建

 

3.1 第一步先拷贝docker-compose.yml到三台服务器

 

主服务器

docker-compose.yml(

明明一个节点为何会有一个叫mongo1还有一个叫amongo1,其实普通的复制集搭建的非常方便,而amongo1是带了权限验证的mongo1节点,如果不带权限验证,任何人都可以访问你的mongo,所以我们需要先起动三台服务器下的mongo1/2/3,登录并设置好复制集,并且创建一个用户,然后再down掉mongo1/2/3 再启动amongo1/2/3

 

version: '2'
services:
  mongo1:
    container_name: mongo1
    image: mongo:latest
    restart: always
    ports:
      - '37017:27017'
    environment:
      - TZ=Asia/Shanghai
    volumes:
      - ./mongo1:/data/db
    command: mongod  --replSet rs  
  amongo1:
    container_name: amongo1
    image: mongo:latest
    restart: always
    ports:
      - '37017:27017'
    environment:
      - TZ=Asia/Shanghai
    volumes:
      - ./mongo1:/data/db
      - ./conf:/opt
    command:
      - /bin/bash 
      - -c 
      - |
        chmod 600 /opt/mongodb-keyfile
        mongod --keyFile "/opt/mongodb-keyfile" --bind_ip_all --auth --replSet rs

从服务器

version: '2'
services:
  mongo2:
    container_name: mongo2
    image: mongo:latest
    restart: always
    ports:
      - '37018:27017'
    environment:
      - TZ=Asia/Shanghai
    volumes:
      - ./mongo2:/data/db
    command:  mongod  --replSet rs 
  amongo2:
    container_name: amongo2
    image: mongo:latest
    restart: always
    ports:
      - '37018:27017'
    environment:
      - TZ=Asia/Shanghai
    volumes:
      - ./mongo2:/data/db
      - ./conf:/opt
    command:
      - /bin/bash 
      - -c 
      - |
        chmod 600 /opt/mongodb-keyfile
        mongod --keyFile "/opt/mongodb-keyfile" --bind_ip_all --auth --replSet rs

仲裁节点

version: '2'
services:
  mongo3:
    container_name: mongo3
    image: mongo:latest
    restart: always
    ports:
      - '37019:27017'
    environment:
      - TZ=Asia/Shanghai
    volumes:
      - ./mongo3:/data/db
    command:  mongod  --replSet rs
  amongo3:
    container_name: amongo3
    image: mongo:latest
    restart: always
    ports:
      - '37019:27017'
    environment:
      - TZ=Asia/Shanghai
    volumes:
      - ./mongo3:/data/db
      - ./conf:/opt
    command:
      - /bin/bash 
      - -c 
      - |
        chmod 600 /opt/mongodb-keyfile
        mongod --keyFile "/opt/mongodb-keyfile" --bind_ip_all --auth --replSet rs
        

3.2 细心的你会发现我们有一个conf文件夹(三台服务器的conf文件夹内容一模一样),你需要再docker-compose同级目录创建一个名叫conf的文件夹,里面有两个文件

一个叫 mongo.conf

内容如下

security:
  authorization: enabled
  keyFile: /opt/mongodb-keyfile

第二个是mongo复制集之间同步数据需要的密钥

名字叫 mongodb-keyfile

可以使用这个命令生成

openssl rand -base64 741 > mongodb-keyfile

两个文件生成好以后,把conf文件夹 拷贝到三台服务器的docker-compose同级文件夹下

3.3 下面该启动并初始化mongo复制集了

依次在三台服务器下输入命令

docker-compose up -d mongo1

docker-compose up -d mongo2

docker-compose up -d mongo3

启动好之后

在主服务器使用以下命令进入容器

      docker exec -it mongo1 bash

 

输入以下命令进入容器

        mongo

执行以下命令初始化复制集

rs.initiate({_id: "rs",version: 1,members: [{ _id: 0, host : "192.168.30.45:37017" },{ _id: 1, host : "192.168.30.45:37018" },{ _id: 2, host : "192.168.30.45:37019" }]})

初始化好之后复制集搭建好了,但是不急着退出 咱们再创建一个账号密码

创建用户和密码
db.createUser({user: "root",pwd: "123456",roles: [{role: "userAdminAnyDatabase",db:"admin"}]})

现在你就可以退出了

到目前为止,不带验证同步的复制集搭建完毕

你可以先试试是否数据都是同步的

然后很简单,因为之前密钥你都弄好了

直接依次docker-compose down 掉三台服务器

依次输入命令

docker-compose up -d amongo1

docker-compose up -d amongo2

docker-compose up -d amongo3

这样你的复制集就登录不进去啦,开不开心0.0

这时候需要你到主服务器上输入进入容器的命令

docker exec -it amongo1 bash

进入后

输入mongo 进入mongo数据库

使用之前你创建好的admin用户进行创建新的用户对于某库的权限

比如

db.createUser({user: "root2",pwd: "123456",roles: [{ role: "readWrite", db: "test" }]})

这代表你新建了一个名字叫root的用户 他可以访问test数据库

你试试用root2 123456 test 连接一下

是不是可以了

惊不惊喜,意不意外,结束

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值