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

    技术2023-10-05  93

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

    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 连接一下

    是不是可以了

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

     

    Processed: 0.012, SQL: 9