您的位置:首页 > 运维架构 > Docker

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/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: