使用虚拟机或者物理机直接搭建的话,可以直接按照官网文档来。但是官方并没有提供共对应的Docker的安装文档(社区版没有,企业版是有的,但是哎),只有DockerHub里面有对应的内容也只是单节点,这个是不能用于生产环境的。
官网文档地址:
无密码安装:
https://docs.mongodb.com/manual/administration/replica-set-deployment/
安全保障:https://docs.mongodb.com/manual/tutorial/deploy-replica-set-with-keyfile-access-control/#deploy-repl-set-with-auth
为了使用本安装文档,首先需要准备环境:
Docker
Docker-Compose
同时您需要要一定的Docker使用的经验
使用这种容器编排的好处就是一个yaml文件走天下:(将会直接在文件后紧跟注释解释简单的东西)
# 该Yaml文件改编自DockerHub中的配置文件,地址: https://hub.docker.com/_/mongo
version: '3.1'
services:
mongo:
image: mongo:4.4.0 #根据需要选择自己的镜像
restart: always
ports:
- 27017:27017 #对外暴露停供服务的端口,正式生产的时候理论不用暴露。
volumes:
- "./data/mongodbpri/db:/data/db" # 映射数据文件
- "./data/mongodbpri/configdb:/data/configdb" # 映射数据库配置
- "./data/mongo_key/mongo_key.sec:/mongo_key.sec" #映射密钥文件
command: ['--replSet','rs0','--bind_ip_all','--keyFile','/mongo_key.sec'] # 看下面的解释
mongo-s1:
image: mongo:4.4.0
restart: always
volumes:
- "./data/mongodbs1/db:/data/db"
- "./data/mongodbs1/configdb:/data/configdb"
- "./data/mongo_key/mongo_key.sec:/mongo_key.sec"
command: ['--replSet','rs0','--bind_ip_all','--keyFile','/mongo_key.sec']
mongo-s2:
image: mongo:4.4.0
restart: always
volumes:
- "./data/mongodbs2/db:/data/db"
- "./data/mongodbs2/configdb:/data/configdb"
- "./data/mongo_key/mongo_key.sec:/mongo_key.sec"
command: ['--replSet','rs0','--bind_ip_all','--keyFile','/mongo_key.sec']
express: #官方提供的一个用来管理数据库的WEB工具
image: mongo-express:0.54
restart: always
ports:
- 15000:8081
environment:
ME_CONFIG_MONGODB_SERVER: mongo #Primary的节点(我暂时没有找到对应的自动切换的方法)
ME_CONFIG_BASICAUTH_USERNAME: admin #进入页面的用户名
ME_CONFIG_BASICAUTH_PASSWORD: admin #进入页面的密码
ME_CONFIG_MONGODB_ADMINUSERNAME: root # 具有Root权限的Mongo的账户
ME_CONFIG_MONGODB_ADMINPASSWORD: root # 上面Root用户的密码
- 解释
['--replSet','rs0','--bind_ip_all','--keyFile','/mongo_key.sec']
-
--replSet
指定副本集的标示rs0
,注意属于一个副本集的replSet必须一样 -
--bind_ip_all
允许所有的IP链接,实际当中可以限制你的Docker-Net的内网地址 -
--keyFile
指定副本集之间的密钥为/mongo_key.sec
来增加安全性
-
keyFile的生成办法其实很多,但是我们直接采用官网Demo中的
openssl rand -base64 756 > <path-to-keyfile>
&&chmod 400 <path-to-keyfile>
权限十分重要。此处我们放到./data/mongo_key/mongo_key.sec
此时创建文件 docker-compose.yml
,并将上面的代码复制进去,按照自己的要求改造一下,同时创建好对应的几个目录用来挂载。目录详见配置中volumes
。
此时,我们执行docker-compose up -d
启动这四个Docker容器;
随后使用
docker-compose exec mongo bash
进入我们的打算的Primary(ZZZQ),使用
mongo
进入mongo shell,执行初始化的命令:
rs.initiate( { _id : "rs0", members: [ { _id: 0, host: "mongo:27017" }, { _id: 1, host: "mongo-s1:27017" }, { _id: 2, host: "mongo-s2:27017" } ] })
顺序执行:
rs.conf()
rs.status()
rs.status 在哪台机器执行,哪台机器就是Primary
一个副本集就搭建好了,此时创建一个ROOT用户:
db.createUser({user: 'root', pwd: 'root', roles: ['root']})
MongoExpress 就可以用了。
© MahtCEC 2020年8月25日-~
网友评论