MongoDB replica set 設定
本篇文是在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.0replication:
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