利用Docker部署mongodb叢集--分區與複本集

來源:互聯網
上載者:User

標籤:

環境 Docker version 1.6.2  mongodb 3.0.4

第一步  編寫Dockerfile並產生鏡像

    主意包含兩個Dockerfile鏡像,一個mongod的,一個mongos(在叢集中負責路由)

    編寫Mongod的Dockerfile:

FROM ubuntu:14.04RUN apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10ENV MONGO_MAJOR 3.0RUN echo "deb http://repo.mongodb.org/apt/debian wheezy/mongodb-org/$MONGO_MAJOR main" > /etc/apt/sources.list.d/mongodb-org.list# Install MongoDBRUN apt-get updateRUN sudo apt-get install -y mongodb-org=3.0.4 mongodb-org-server=3.0.4 mongodb-org-shell=3.0.4 mongodb-org-mongos=3.0.4 mongodb-org-tools=3.0.4# Create the MongoDB data directoryRUN mkdir -p /data/dbEXPOSE 27017ENTRYPOINT ["usr/bin/mongod"]

    構建上面的Dockerfile 產生鏡像:

sudo docker build -t robin/mongod:master .

    -t 指定要放的 倉庫地址,冒號後面master代表tag,  後面那個點 代表目前的目錄(含有剛剛編寫好的Dockerfile的目錄)

編寫Mongos的Dockerfile:

FROM  robin/mongod:masterEXPOSE 27017ENTRYPOINT ["usr/bin/mongos"]

 構建鏡像:

sudo docker build -t robin/mongos:master .


第二步  啟動mongodb叢集所需的Docker容器:

  棄置站台集1 

docker run --name rs1_srv1 -p 21117:27017 -d robin/mongod:master --noprealloc --smallfiles --replSet rs1docker run --name rs1_srv2 -p 21217:27017 -d robin/mongod:master --noprealloc --smallfiles --replSet rs1docker run --name rs1_srv3 -p 21317:27017 -d robin/mongod:master --noprealloc --smallfiles --replSet rs1

      -p 映射宿主機器和容器內部的連接埠。-d 表示deamon模式運行。

      --smallfile 減小初始化資料檔案的大小,並限制資料檔案最大為512M (reduces the initial size for data files and limits the maximum size to 512 megabytes).

      --noprealloc主要是為了節省硬碟,禁掉預先分配硬碟。生產環境不要用該選項,會導致效能下降,產生磁碟片段。

  棄置站台集2

docker run --name rs2_srv1 -p 22117:27017 -d robin/mongod:master --noprealloc --smallfiles --replSet rs2docker run --name rs2_srv2 -p 22217:27017 -d robin/mongod:master --noprealloc --smallfiles --replSet rs2docker run --name rs2_srv3 -p 22317:27017 -d robin/mongod:master --noprealloc --smallfiles --replSet rs2


  建立配置容器

docker run --name cfg1 -p 20117:27017 -d robin/mongod:master --noprealloc --smallfiles --configsvr  --dbpath /data/db --port 27017docker run --name cfg2 -p 20217:27017 -d robin/mongod:master --noprealloc --smallfiles --configsvr  --dbpath /data/db --port 27017docker run --name cfg3 -p 20317:27017 -d robin/mongod:master --noprealloc --smallfiles --configsvr  --dbpath /data/db --port 27017

  

 建立mongo router

  找到配置容器對應的ip 和port

  使用mac boot2docker +VirtualBox 一定要注意宿主機的ip是VirtualBox 而不是原生

  運行下邊的命令得到容器宿主機器ip

boot2docker ip

docker run --name mongos_router -p 27017:27017 -d robin/mongos:master --configdb <宿主ip>:20117,<宿主ip>:20217,<宿主ip>:20317 --port 27017

這裡只建立一台路由服務,這樣會存在單點故障問題,可以建立三台來解決問題。


第三步配置複本集與分區

   配置複本集1

//串連到rs1_svr1mongo <宿主ip>:21117//配置複本集rs.initiate();rs.add("<宿主ip>:21217");rs.add("<宿主ip>:21317");rs.status();Fix hostname of primary.cfg = rs.conf();cfg.members[0].host = "<宿主ip>:21117";rs.reconfig(cfg);rs.status();//以上命令一個一個執行

   配置複本集2

//串連到rs2_svr1mongo <宿主ip>:22117//配置複本集rs.initiate();rs.add("<宿主ip>:22217");rs.add("<宿主ip>:22317");rs.status();Fix hostname of primary.cfg = rs.conf();cfg.members[0].host = "<宿主ip>:22117";rs.reconfig(cfg);rs.status();//以上命令一個一個執行

    配置分區

//串連到路由伺服器mongo <宿主ip>:27017sh.addShard("rs1/<宿主ip>:27017");sh.addShard("rs2/<宿主ip>:27017");sh.status();

然後測試OK

如果用mac VirtualBox搭建docker 可能會遇到mongo分配檔案空間不足的問題,調下磁碟大小就OK了

轉寄標註來源:http://my.oschina.net/robinyao/blog/469431

利用Docker部署mongodb叢集--分區與複本集

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.