文章目錄
使用 docker 建立 MongoDB Replica Set
前幾天筆記 使用 docker 建立 Redis Cluster - 更新版 提到為了要測試 Redis 完整 cluster 功能但又不想每次都重頭建立三組 Master-Slave 以及三個 Sentinel,所以透過 docker-compose 來建立整個 Redis cluster,而最近用到的 MongoDB Replica Set 也是類似情況,但比 Redis 輕鬆的是 MongoDB Replica Set 只要三個 node 即可,就來看看可以怎麼做吧
基本環境說明
- Mac
- macOS Mojave 10.14.2
- Docker Community 18.09.2
- docker-compose version 1.23.2, build 1110ad01
- docker-py version: 3.6.0
- CPython version: 3.6.6
- OpenSSL version: OpenSSL 1.1.0h 27 Mar 2018
- Wondows
- Windows 10 Version 1803 (OS Build 17134.590)
- Docker Community 18.09.2 (linux/amd64)
建立 dockerfile
這個 image 是用來設定 MongoDB 的 Replica Set 前讓三個 MongoDB 暖機用的,實際上沒什麼作用,只是我找不到可以在 docker-compse 中同時執行 sleep 與 mongo shell 的方法而做的
FROM mongo:4-xenial
MAINTAINER Yowko Tsai <[email protected]>
CMD ["sleep","10"]
建立 docker-compose.yml
version: "3"
services:
mongo1:
container_name: mongo1
image: mongo:4-xenial
expose:
- 27017
restart: always
entrypoint: [ "mongod", "--bind_ip_all", "--replSet", "rs0" ]
mongo2:
container_name: mongo2
image: mongo:4-xenial
expose:
- 27017
restart: always
entrypoint: [ "mongod", "--bind_ip_all", "--replSet", "rs0" ]
mongo3:
container_name: mongo3
image: mongo:4-xenial
expose:
- 27017
restart: always
entrypoint: [ "mongod", "--bind_ip_all", "--replSet", "rs0" ]
creator:
build: creator
entrypoint: ["mongo","--host","mongo1","--port","27017","--eval", 'rs.initiate( { _id : "rs0",members: [{ _id: 0, host: "mongo1:27017" },{ _id: 1, host: "mongo2:27017" },{ _id: 2, host: "mongo3:27017" } ]})']
depends_on:
- mongo1
- mongo2
- mongo3
資料夾結構
-- docker-mongodb-replica-set
-- creator
-- dockerfile
-- docker-compose.yml
啟動與實際運作
啟動建立 MongoDB Replica Set
docker-compose up -d --build
針對 mongo1 執行連線 mongo 連線至預設 localhost:27017 的 MongoDB
docker exec -it mongo1 mongo
確認 Replica Set 狀態
rs.status()
心得
自己動手做之前我有 google 過其他人做法,大部份都是透過 shell 來加入 Replica Set,會多一個 conatiner,加上 shell 又是另種語法,我個人不想額外 maintain shell 所以才想利用 docker 相關功能解決就好
以結果來看的確是完成的 MongoDB Replica Set 的建立,但多了個沒實際作用的 container ,作法上不是很漂亮,不過先求有,如果之後被嫌棄或是緣份到了再來找更好的做法囉
完整 dockerfile 及 docker-compose.yml 請參考 yowko/Docker-Compose-MongoDB-Replica-Set
參考資訊
文章作者 Yowko Tsai
上次更新 2021-11-03
授權合約
本部落格 (Yowko's Notes) 所有的文章內容(包含圖片),任何轉載行為,必須通知並獲本部落格作者 (Yowko Tsai) 的同意始得轉載,且轉載皆須註明出處與作者。
Yowko's Notes 由 Yowko Tsai 製作,以創用CC 姓名標示-非商業性-相同方式分享 3.0 台灣 授權條款 釋出。