不可以在扮演仲裁角色(arbiters)的主機上,hosts寫成這樣
127.0.0.1 mongodb4 mongodb4.hgdata.com.tw
正確應該是
192.168.1.xx mongodb4 mongodb4.hgdata.com.tw
否則仲裁角色主機會一直呈現 OTHER> 的提示,
從 telnet localhost 27017 失敗時候發現的
telnet localhost 27017 會失敗,但是
telnet 127.0.0.1 27017 卻成功。
=======================================
製作KEY ( 如不製作KEY 本節可以先忽略)
openssl rand -base64 741 > /var/lib/mongo/mongo-keyfile
chmod 600 mongo-keyfile
chown mongod.mongod /var/lib/mongo/mongo-keyfile
改 600 屬性,一定要作,不然無法啟動 MongoDB
把這 Key 放到每一台機器的 /var/lib/mongo/mongo-keyfile 檔案中。
接下來就要啟用 Replica Set 與認證模式。
vi /etc/mongod.conf
改以下
security:
keyFile: /var/lib/mongo/mongo-keyfile
重啟 MongoDB 服務
systemctl restart mongod
=======================================
架構上,分別有4台 MongoDB Server
192.168.1.51 Mondb1
192.168.1.52 Mondb2
192.168.1.53 Mondb3
192.168.1.54 Mondb4 規劃轉成仲裁角色,用來分配其他三台成員的角色
開始:
vi /etc/mongod.conf
改以下
replication:
oplogSizeMB: 10240
replSetName: "rs1"
重啟 MongoDB 服務
systemctl restart mongod
=======================================
從 192.168.1.21 輸入 mongo 進去 concole
確認
rs.status()
初使化 replSet
rs.initiate()
再確認
rs.status()
會看到PRIMARY字眼,表示初始化完成
加入第二台DB
rs.add("192.168.1.22:27017")
rs.add("192.168.1.23:27017")
加入仲裁主機
rs.addArb("192.168.1.24:27017")
從 192.168.1.21 再確認
rs.status()
看到 192.168.1.22 是
"health" : 1,
"state" : 0,
"stateStr" : "STARTUP"
state的意義
0 Phase 1, starting up
1 Primary member
2 Secondary member
然後發現 192.168.1.21 變成了 rs1:SECONDARY> 提示
意思各主機之間選舉完成,該主機已經轉型成 SECONDARY 角色
*** 到 192.168.1.22 主機上
初使化 replSet
rs.initiate()
確認
rs.status()
然後發現 192.168.1.22 變成了 rs1:PRIMARY> 提示
*** 到 192.168.1.23 主機上
初使化 replSet
rs.initiate()
注意:如果 /etc/mongod.conf 裡面的設定是 bindIp: 127.0.0.1 就會失敗
確認
rs.status()
然後發現 192.168.1.23 變成了 rs1:PRIMARY> 提示
確認本機DB 角色是否為 Master, 指令:
rs.isMaster()
END
-----------------------------------------------
查看複制集狀態
rs.status()
rs.isMaster();
以rs.help() 顯示更多 rs指令
以db.help() 顯示更多 db指令
db.oplog.rs.find();
db.printReplicationInfo();
db.printSlaveReplicationInfo();
db.system.replset.find();
db.getMongo().setSlaveOk();
增加節點
rs.add("localhost:28013")
rs.status();
減少節點
rs.remove("localhost:28014")