mongo 副本集 有权限
参照:https://monkeywie.cn/2020/03/10/mongodb-replica-set/
1.安装
1.1 构建镜像
-
准备秘钥用于节点之间的认证
1.服务器运行生成密钥命令: openssl rand -base64 756 > auth.key
-
编写 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
-
构建镜像 :
docker build -t mongo-replset .
1.2 docker-compose 运行
-
主节点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:
-
从节点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
-
先启动从节点,然后启动主节点服务
原因:主节点中有初始化从节点命令,如果先不启动从节点,可能导致初始化检测失败,手动操作
docker-compose up -d
-
配置从节点可读
#进入容器 设置可读 docker exec -it slave mongo db.getMongo().setSecondaryOk()
2 检测
-
进去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)]
配置副本集和权限
-
进去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()
-
检测数据库是否可以连接:
配置图:
结果如下:
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() 查看状态。