MongoDB是當下比較流行的NoSQL 資料庫.提供了副本集複製應對數據的可擴展性,可靠性及提供了隔離性. 下麵講講一般情況下的副本集複製的配置。 1.環境 Centos 7MongoDB 3.6 2.機器配置 IP hostname port path is arbiter 192.168.11 ...
MongoDB是當下比較流行的NoSQL 資料庫.提供了副本集複製應對數據的可擴展性,可靠性及提供了隔離性. 下麵講講一般情況下的副本集複製的配置。
1.環境
Centos 7
MongoDB 3.6
2.機器配置
----------------------------------------------------------------------------
IP hostname port path is arbiter
----------------------------------------------------------------------------
192.168.11.100 mongodbr0 27017 /data/replset1/r0 false
192.168.11.101 mongodbr1 27017 /data/replset1/r1 false
192.168.11.102 mongodbr2 27017 /data/replset1/r2 true
3.配置步驟
3.1 開放埠或關閉防火牆
firewall-cmd --permanent --add-port=27017/tcp
firewall-cmd --reload
3.2 在每台機器上建立對應的目錄
mkdir -p /data/replset1/r0|r1|r2 ##不同的機器對應不同的目錄,參考第二部分的path
mkdir -p /data/replset1/key
mkdir -p /data/replset1/log
修改每台機器的hosts
vi /etc/hosts 並添加如下內容
192.168.11.100 mongodbr0
192.168.11.101 mongodbr1
192.168.11.102 mongodbr2
3.3 複製MongoDB安裝包到每台機器上,並解壓
例如本例子解壓到 /usr/local/mongodb
3.4 初始化複製集
進入到每個機器的 /usr/local/mongodb/bin/
分別執行如下的命令
./mongod --port 27017 --dbpath /data/replset1/r0 --logpath /data/replset1/log/r0.log --logappnd --fork --bind_id localhost,192.168.11.100 --replSet replset1
./mongod --port 27017 --dbpath /data/replset1/r1 --logpath /data/replset1/log/r1.log --logappnd --fork --bind_id localhost,192.168.11.101 --replSet replset1
./mongod --port 27017 --dbpath /data/replset1/r2 --logpath /data/replset1/log/r2.log --logappnd --fork --bind_id localhost,192.168.11.102 --replSet replset1
註意: --bind_id 一定要指明綁定的IP,因為每台機器可能有多個IP,所以要一定有這個參數,否則可能會報錯
3.5 開始複製
進入任意一臺機器,以 mongodbr0為例
3.5.1
/usr/local/mongodb/bin/mongo --port 27017
3.5.2
a.運行 rs.initiate()
b.運行 rs.add("mongodbr1:27017")
c.運行 rs.addArb("mongodbr2:27017") #仲裁集
至此,複製集配置完成
3.6 測試
3.6.1 測試數據複製
a.進入mongodbr0 ,運行 /usr/local/mongodb/bin/mongo --port 27017
b.預設是進入 test
c.插入新的數據 e.g. db.foo.insert({"name":"zhangshan","gender":"Male","age":"20","address":"suzhou"})
d.進入mongodbr1,運行 /usr/local/mongodb/bin/mongo --port 27017
e.由於r1 是secondary,所以不能直接訪問數據,需要運行 rs.slaveOk() 或 db.getMongo().setSlaveOk()
f.執行 db.foo.find(); 剛纔插入的數據會顯示在這裡
3.6.2 故障遷移測試
a.進入mongodbr0 ,運行 /usr/local/mongodb/bin/mongo --port 27017
b.執行 use admin 進入admin
c.執行 db.shutdownServer()
d.進入mongodbr1,運行 /usr/local/mongodb/bin/mongo --port 27017
e.這時候會發現這台已經變成primary 了 replset1:PRIMARY