概念圖
mongodb
可複製集須要至少3個以上的mongodb節點,其中有一個主節點promary,其他的爲副本節點secondary安全
可複製集有三個角色:服務器
關於仲裁者:
若是主節點+副本節點是偶數推薦添加仲裁者,若是主節點+ 副本節點是奇數能夠不添加仲裁者。仲裁者將永遠是仲裁者,而主要人員可能會退出併成爲次要人員,而次要人員可能成爲選舉期間的主要人員。負載均衡
正準備三個mongodb節點,咱們先搭建一個主節點,2個副本節點的模式
修改配置mongo.conf性能
systemLog: #MongoDB發送全部日誌輸出的目標指定爲文件 destination: file #mongod或mongos應向其發送全部診斷日誌記錄信息的日誌文件的路徑 path: "/home/amber/mongodb/mongodb-001/log/mongod.log" #當mongos或mongod實例從新啓動時,mongos或mongod會將新條目附加到現有日誌文件的末尾。 logAppend: true storage: #mongod實例存儲其數據的目錄。storage.dbPath設置僅適用於mongod。 dbPath: "/home/amber/mongodb/mongodb-001/data/db" journal: #啓用或禁用持久性日誌以確保數據文件保持有效和可恢復。 enabled: true processManagement: #啓用在後臺運行mongos或mongod進程的守護進程模式。 fork: true #指定用於保存mongos或mongod進程的進程ID的文件位置,其中mongos或mongod將寫入其PID pidFilePath: "/home/amber/mongodb/mongodb-001/log/mongod.pid" net: #服務實例綁定全部IP,有反作用,副本集初始化的時候,節點名字會自動設置爲本地域名,而不是ip #bindIpAll: true #服務實例綁定的IP bindIp: 0.0.0.0 #bindIp #綁定的端口 port: 27017 replication: #副本集的名稱 replSetName: myrs
mongodb-001
換成mongodb-002``mongodb-003
而後分別在mongodb-00X的根目錄下執行啓動命令測試
./bin/mongod -f ./conf/mongod.conf
檢查進程命令行
ps -ef|grep mongod
進入27017的那個mongod的客戶端,而且執行3d
rs.initiate({ _id: "myrs", // 須要和replSetName的名稱一致 version: 1, members: [{ _id: 0, host : "192.168.xx.xx:27017" }]});
或者日誌
rs.initiate({})
執行結果code
提示: 1)「ok」的值爲1,說明建立成功。 2)命令行提示符發生變化,變成了一個從節點角色,此時默認不能讀寫。稍等片刻,回車,變成主節 點。
再27017的mongod客戶端,也就是主節點上執行192.168.xx.xx:27018
是副本節點的ip和端口
rs.add("192.168.xx.xx:27018") rs.add("192.168.xx.xx:27019")
使用
rs.status()
就能夠看到members會有三個節點了
再主節點插入一條數據
use article; db.comment.insert({name: "amber"})
再從節點查看,結果
這是由於須要再從節點再次進行
rs.slaveok() // 確認當前節點是副本節點 db.comment.find(); // 查看當前數據
能夠看到已經有數據了,這樣一主二從的可複製成功了
若是關閉主節點,在從節點執行rs.status();
能夠看到原來的主節點的health變成了0
27018變成了新的主節點