EndSound's Life

【技術】docker-compose 建立 mongo replica set

Replica Set

一個replica set是由一群mongod的實體組成,維護相同的資料集。其中只有一個實體會被選為primary node,其餘的都是secondary node。兩種節點都可以讀取,但其中只有primary node可以接受寫入指令。

primary會在oplog記錄所有如何更改他的資料集合,secondary複製紀錄並執行上面的操作,使資料達到同步。

當primary故障時,會從Secondary票選出其中一台當作primary繼續執行下去。

配置

實際只要一台就可以配置,所以以下範例就用一台來配置單一個primary node,配置設定檔。

$ vim mongod.yml

replication:
  replSetName: "RS"
net:
  bindIpAll: true

配置docker-compose

$ vim docker-compose.yml
version: '3.3'
  mongo:
    image: mongo:4.4
    container_name: mongo
    restart: always
    environment:
      MONGO_INITDB_ROOT_USERNAME: [username]
      MONGO_INITDB_ROOT_PASSWORD: [password]
      TZ: Asia/Taipei
      LC_ALL: en_US.UTF-8
    volumes:
      - [data_dir]:/data/db:z
      - [config_path]:/resource/mongod.yml
    command: mongod --dbpath /data/db --config /resource/mongod.yml
    logging:
      driver: "json-file"
      options:
        max-size: "50m"
        max-file: "10"

寫好啟動後用docker-compose exec進入docker container執行指令mongo登入。

$ docker-compose exec mongo /bin/bash
$ mongo -u [username] -p

進到mongo shell後輸入以下指令,如有多個實體需要建立則就繼續在member裡加入相關主機資訊。

$ rs.initiate( {
   _id : "RS",
   members: [
      { _id: 0, host: "127.0.0.1:27017" }
   ]
})

使用rs.conf()查看replica set configuration。

$ rs.conf()

使用rs.status()查看replica set狀態。

$ rs.status()

參考:
【筆記】實作分散式計分系統(二): Replica Set Container
Replication – Mongodb Manual
Deploy a Replica Set – Mongodb Manual

發表迴響