MongoDB(Docker) 副本集群搭建
2017-03-03 00:00
417 查看
1基础环境准备:
选用 mongodb 3.0.14作为基础镜像准备副本命令sh文件,方便一键添加
#!/bin/bash mongo $MONGO_MASTER:27017/admin --eval "rs.initiate({\"_id\": \"$MONGO_REPLSET_NAME\", \"members\": [{\"_id\": 0, \"host\": \"$MONGO_MASTER:27017\"}]});" # secondary hosts=$(echo $MONGO_SECONDARY | tr "," "\n") for hst in $hosts do mongo $MONGO_MASTER:27017/admin --eval "rs.add(\"$hst:27017\")"; done # arbiter arbiters=$(echo $MONGO_ARBITER | tr "," "\n") for arbiter in $arbiters do mongo $MONGO_MASTER:27017/admin --eval "rs.addArb(\"$arbiter:27017\")"; done
自定义Dockerfile
FROM mongo:3.0.14 RUN mkdir -p /opt/mongo-replset-script COPY ./replset.sh /opt/mongo-replset-script WORKDIR /opt/mongo-replset-script RUN chmod +x replset.sh ENV MONGO_REPLSET_NAME=mongoreplset ENV MONGO_MASTER=mongo1 ENV MONGO_SECONDARY=mongo2,mongo3 CMD ["sh","-c", "mongod --logpath /data/log/mongodb.log --logappend --replSet $MONGO_REPLSET_NAME"]
编译自定义镜像(将dockerfile 与sh文件放在同一目录,执行docker命令)
docker build -t mongo-test:3.0.14 ./
2 集群搭建
在Rancher中启动三个docker实例,分别命名为mong1, mong2, mong3, 并将容器的/data目录挂载到宿主机上。进入任何一个容器的命令行,执行
sh replset.sh
执行完成后,输入mongo进入命令行,查看集群状态
rs.status()
3重要的坑
MongoDB 如果挂载了目录到宿主机,mongodb 无法启动,因为目录权限不够,mongdb的log文件和db文件创建和拥有者是999和docker, 并非root用户。最好将挂载目录全部改为777权限chmod -R 777 dirname
4 参考博客
http://www.kivixv.com/2016/08/15/%E5%9F%BA%E4%BA%8Edocker%E6%90%AD%E5%BB%BAmongodb%E5%89%AF%E6%9C%AC%E9%9B%86/相关文章推荐
- 利用Docker搭建MongoDB副本集群
- 搭建高可用mongodb集群(三)—— 深入副本集内部机制
- 搭建高可用mongodb集群(三)—— 深入副本集内部机制
- 搭建高可用mongodb集群(三)—— 深入副本集内部机制
- 搭建mongodb集群(副本集+分片)
- 搭建高可用mongodb集群(三)—— 深入副本集内部机制
- 搭建高可用的MongoDB集群副本集
- 搭建高可用mongodb集群(二)—— 副本集
- 搭建高可用mongodb集群(二)—— 副本集
- 搭建高可用mongodb集群(二)—— 副本集
- 搭建高可用mongodb集群(三)—— 深入副本集内部机制
- 搭建高可用mongodb集群(三)—— 深入副本集内部机制
- 搭建高可用mongodb集群(三)—— 深入副本集内部机制
- 搭建高可用mongodb集群(二)—— 副本集
- 搭建高可用的MongoDB集群(上):MongoDB的配置与副本集-1
- 搭建高可用的MongoDB集群(上):MongoDB的配置与副本集-2
- 搭建高可用mongodb集群(二)—— 副本集
- 搭建高可用mongodb集群(二)—— 副本集
- 搭建高可用mongodb集群(二)—— 副本集