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