MongoDB replica set 設定

Nick Zhang
5 min readApr 21, 2020

--

本篇文是在Google雲端GCE做設定

先至GCE開四個VM執行個體,一個primary,兩個secondary,一個arbiter

如果還沒安裝mongoDB,可以照以下的流程安裝 (ubuntu 16.04)

1.

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 9DA31620334BD75D9DCB49F368818C72E52529D4

2.

echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/4.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.0.list

3.

sudo apt-get update

4.

sudo apt-get install mongodb-org

5.

sudo systemctl start mongod
sudo systemctl enable mongod

如果還沒有設定 訪火牆,可以照以下做設定

至 GCP VPC網路 -> 防火牆規則 -> 建立防火牆規則

目標: 網路中的所有執行個體
來源IP範圍: 0.0.0.0/0
指定的通協定和通訊阜: tcp:27017

修改 mongod.conf

sudo vi /etc/mongod.conf

修改的內容如下

net:  
port: 27017
bindIp: 0.0.0.0
replication:
replSetName: replicaSet

重新啟動mongodb

sudo systemctl restart mongod

另外兩個secondary 跟 arbiter 節點也是照同樣的方式做設定

開啟parmary 端的 mongo shell

mongo --host mongo-primary --port 27017

然下初始化 replica set

rs.initiate()

看到以下訊息代表初始成功

然後添加secondary-1節點

rs.add('mongo-secondary-1:27017')

看到以下訊息代表添加成功

secondary-2 也是同樣的添加方式

添加arbiter節點,arbiter 是replica set 中當任仲裁的角色,負責當Primary死掉的時候,會負責從replica set中選一個secondary來當任primary

rs.addArb('mongo-arbiter')

看到以下訊息代表添加成功

可以使用 rs.status() 來看看目前的 replica set 狀況

rs.status()

到目前為止,就已經成功建立了一個primary,兩個secondary及一個arbiter的mongoDB replica set

再來做測試,先在primary 寫入一筆資料

然後退出mongo shell,並停止primary的mongod 服務

sudo systemctl stop mongod

接下來去其他的secondary節點,進mongo shell 並下rs.status()看一下狀態

會發現之前的primary 節點已經失效了

然後現在secondary-1變成了primary節點

那就進入secondary-1節點看一下DB資料,會發現跟原本的primary資料是一樣的

接下來,如果我再把原本的primary節點恢復mongod服務會怎麼樣呢?

sudo systemctl start mongod

結果它就只是變成另外一個secondary

--

--

No responses yet