
MongoDB副本集部署
大约 2 分钟MongoDB
MongoDB副本集部署
docker部署
创建目录
mkdir -p /data/mongo/data1 mkdir -p /data/mongo/data2 mkdir -p /data/mongo/data3
启动容器
docker run --name mongo1 -v /data/mongo/data1:/data/db -d -p 27117:27017 mongo:4.0.6 --replSet ms docker run --name mongo2 -v /data/mongo/data2:/data/db -d -p 27217:27017 mongo:4.0.6 --replSet ms docker run --name mongo3 -v /data/mongo/data3:/data/db -d -p 27317:27017 mongo:4.0.6 --replSet ms
配置
随便进入一个容器
docker exec -it mongo1 bash
输入mongo命令,执行一下语句
## 添加配置 config={_id:"ms",members:[{_id:0,host:"124.223.63.123:27117", priority:1},{_id:1,host:"124.223.63.123:27217", priority:0.5},{_id:2,host:"124.223.63.123:27317", priority:0.8}]} ## 初始化 rs.initiate(config); ## 查看状态 rs.status();
设置权限
去主节点添加用户
docker exec -it mongo1 bash mongo use admin db.createUser({user: "admin",pwd: "password",roles: [ { role: "root", db: "admin" } ]})
创建keyfile并授权
## 创建文件 mkdir -p /data/mongo/config ## 创建keyfile openssl rand -base64 741 > /data/mongo/config/mongodb.key chmod 600 /data/mongo/config/mongodb.key ## 授权 chown 999 /data/mongo/config/mongodb.key
重启docker服务
docker rm -f mongo1 docker rm -f mongo2 docker rm -f mongo3 docker run --name mongo1 -v /data/mongo/data1:/data/db -v /data/mongo/config/mongodb.key:/mongodb.key -d -p 27117:27017 mongo:4.0.6 --replSet ms --keyFile=mongodb.key --auth docker run --name mongo2 -v /data/mongo/data2:/data/db -v /data/mongo/config/mongodb.key:/mongodb.key -d -p 27217:27017 mongo:4.0.6 --replSet ms --keyFile=mongodb.key --auth docker run --name mongo3 -v /data/mongo/data3:/data/db -v /data/mongo/config/mongodb.key:/mongodb.key -d -p 27317:27017 mongo:4.0.6 --replSet ms --keyFile=mongodb.key --auth
keyFile几个注意点:
- 权限不能太大,不然会报“permissions on xxx are too open”
- 权限不能太小,不然会报“permission denied”
从节点添加可读权限:
mongo rs.slaveOk()
Spring Boot连接配置
spring: data" mongodb: uri:mongodb://180.76.159.126:27017,180.76.159.126:27018,180.76.159.126:27019/article db?connect=replicaSet&slaveOk=true&replicaSet=myrs
格式:mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]] [/[database][?options]]
- mongodb:// 固定的格式,必须指定
- username:password@可选项
- host1 必须指定一个host
- port1 连接端口,默认27017
- /database 连接的数据库
连接选项:
replicaSet=name,验证replica set的名称。 Impliesconnect=replicaSet.
slaveOk=true|false,true:在connect=direct模式下,驱动会连接第一台机器,即使这台服务器不是主。在connect=replicaSet模式下,驱动会发送所有的写请求到主并且把读取操作分布在其他从服务器。false: 在connect=direct模式下,驱动会自动找寻主服务器. 在connect=replicaSet 模式下,驱动仅仅连接主服务器,并且所有的读写命令都连接到主服务器。
safe=true|false,true: 在执行更新操作之后,驱动都会发送getLastError命令来确保更新成功。(还要参考 wtimeoutMS).false: 在每次更新之后,驱动不
会发送getLastError来确保更新成功。