1. 程式人生 > 資料庫 >mongodb 學習之——MongoDB 複製集搭建

mongodb 學習之——MongoDB 複製集搭建

安裝:

1、複製集replica sets

1.1 什麼是複製集?

複製集是由一組擁有相同資料集的mongod例項做組成的叢集。
複製集是一個叢集,它是2臺及2臺以上的伺服器組成,以及複製整合員包括Primary主節點,secondary從節點和投票節點。
複製集提供了資料的冗餘備份,並在多個伺服器上儲存資料副本,提高了資料的可用性,保證資料的安全性。

 

1.2 為什麼要使用複製集

 

1.高可用
防止裝置(伺服器、網路)故障。
提供自動failover 功能。
技術來保證高可用
2.災難恢復
當發生故障時,可以從其他節點恢復 用於備份。
3.功能隔離
我們可以在備節點上執行讀操作,減少主節點的壓力
比如:用於分析、報表,資料探勘,系統任務等。

2 複製集搭建

 

 

    注:如果之前安裝過mongon ,請先停掉

[root@VM_0_4_centos mongodb-linux-x86_64-amazon-3.6.21]# ./bin/mongod --shutdown --dbpath /home/mongodb-linux-x86_64-amazon-3.6.21/data/mongo

步驟:

//新建資料夾
mkdir replica_sets
//copy 
cp cp mongodb-linux-x86_64-amazon-3.6.21.tgz  replica_sets/
cd replica_sets/
//解壓
tar -xvf mongodb-linux-x86_64-amazon-3.6.21.tgz

 

節點配置

[root@VM_0_4_centos mongodb-linux-x86_64-amazon-3.6.21]# vi mongo_37017.conf

[root@VM_0_4_centos mongodb-linux-x86_64-amazon-3.6.21]# cp  mongo_37017.conf mongo_37018.conf

[root@VM_0_4_centos mongodb-linux-x86_64-amazon-3.6.21]# cp  mongo_37018.conf mongo_37019.conf
[root@VM_0_4_centos mongodb-linux-x86_64-amazon-3.6.21]# mkdir /data/mongo/data/server1 -p

[root@VM_0_4_centos mongodb-linux-x86_64-amazon-3.6.21]# mkdir /data/mongo/data/server2 -p

[root@VM_0_4_centos mongodb-linux-x86_64-amazon-3.6.21]# mkdir /data/mongo/data/server3 -p
[root@VM_0_4_centos mongodb-linux-x86_64-amazon-3.6.21]# mkdir /data/mongo/logs

1.主節點配置 mongo_37017.conf

# 主節點配置
dbpath=/data/mongo/data/server1
bind_ip=0.0.0.0
port=37017
fork=true
logpath=/data/mongo/logs/server37017.log
replSet=wgCluster

2.從節點1配置 mongo_37018.conf

# 從節點配置
dbpath=/data/mongo/data/server2
bind_ip=0.0.0.0
port=37018
fork=true
logpath=/data/mongo/logs/server37018.log
replSet=wgCluster

3.從節點2配置 mongo_37019.conf

dbpath=/data/mongo/data/server3
bind_ip=0.0.0.0
port=37019
fork=true
logpath=/data/mongo/logs/server37019.log
replSet=wgCluster

4.初始化節點配置

//啟動節點
[root@VM_0_4_centos mongodb-linux-x86_64-amazon-3.6.21]# ./bin/mongod -f mongo_37017.conf about to fork child process, waiting until server is ready for connections. forked process: 10653
//進入節點
[root@VM_0_4_centos mongodb-linux-x86_64-amazon-3.6.21]# ./bin/mongo --port 37017

啟動三個節點 然後進入任意一個節點 執行如下命令:

var cfg ={"_id":"lagouCluster",
"protocolVersion" : 1,
"members":[
{"_id":1,"host":"主機ip:37017","priority":10},
{"_id":2,"host":"主機ip:37018"}
]
}
rs.initiate(cfg)
rs.status()

 

 5.節點的動態增刪,上邊我們只添加了倆個節點,下邊動態的增加刪除節點。

增加節點
rs.add("192.168.211.133:37019")
刪除slave 節點
rs.remove("192.168.211.133:37019")

 

 

 檢視節點狀態

wgCluster:PRIMARY> rs.status()
{
    "set" : "wgCluster",
    "date" : ISODate("2020-12-24T01:19:35.883Z"),
    "myState" : 1,
    "term" : NumberLong(1),
    "syncingTo" : "",
    "syncSourceHost" : "",
    "syncSourceId" : -1,
    "heartbeatIntervalMillis" : NumberLong(2000),
    "optimes" : {
        "lastCommittedOpTime" : {
            "ts" : Timestamp(1608772772, 1),
            "t" : NumberLong(1)
        },
        "readConcernMajorityOpTime" : {
            "ts" : Timestamp(1608772772, 1),
            "t" : NumberLong(1)
        },
        "appliedOpTime" : {
            "ts" : Timestamp(1608772772, 1),
            "t" : NumberLong(1)
        },
        "durableOpTime" : {
            "ts" : Timestamp(1608772772, 1),
            "t" : NumberLong(1)
        }
    },
    "members" : [
        {
            "_id" : 1,
            "name" : "152.136.193.58:37017",
            "health" : 1,
            "state" : 1,
            "stateStr" : "PRIMARY",
            "uptime" : 57238,
            "optime" : {
                "ts" : Timestamp(1608772772, 1),
                "t" : NumberLong(1)
            },
            "optimeDate" : ISODate("2020-12-24T01:19:32Z"),
            "syncingTo" : "",
            "syncSourceHost" : "",
            "syncSourceId" : -1,
            "infoMessage" : "",
            "electionTime" : Timestamp(1608715848, 1),
            "electionDate" : ISODate("2020-12-23T09:30:48Z"),
            "configVersion" : 2,
            "self" : true,
            "lastHeartbeatMessage" : ""
        },
        {
            "_id" : 2,
            "name" : "152.136.193.58:37018",
            "health" : 1,
            "state" : 2,
            "stateStr" : "SECONDARY",
            "uptime" : 56937,
            "optime" : {
                "ts" : Timestamp(1608772772, 1),
                "t" : NumberLong(1)
            },
            "optimeDurable" : {
                "ts" : Timestamp(1608772772, 1),
                "t" : NumberLong(1)
            },
            "optimeDate" : ISODate("2020-12-24T01:19:32Z"),
            "optimeDurableDate" : ISODate("2020-12-24T01:19:32Z"),
            "lastHeartbeat" : ISODate("2020-12-24T01:19:33.896Z"),
            "lastHeartbeatRecv" : ISODate("2020-12-24T01:19:34.917Z"),
            "pingMs" : NumberLong(0),
            "lastHeartbeatMessage" : "",
            "syncingTo" : "152.136.193.58:37017",
            "syncSourceHost" : "152.136.193.58:37017",
            "syncSourceId" : 1,
            "infoMessage" : "",
            "configVersion" : 2
        },
        {
            "_id" : 3,
            "name" : "152.136.193.58:37019",
            "health" : 1,
            "state" : 2,
            "stateStr" : "SECONDARY",
            "uptime" : 13,
            "optime" : {
                "ts" : Timestamp(1608772772, 1),
                "t" : NumberLong(1)
            },
            "optimeDurable" : {
                "ts" : Timestamp(1608772772, 1),
                "t" : NumberLong(1)
            },
            "optimeDate" : ISODate("2020-12-24T01:19:32Z"),
            "optimeDurableDate" : ISODate("2020-12-24T01:19:32Z"),
            "lastHeartbeat" : ISODate("2020-12-24T01:19:33.897Z"),
            "lastHeartbeatRecv" : ISODate("2020-12-24T01:19:35.214Z"),
            "pingMs" : NumberLong(0),
            "lastHeartbeatMessage" : "",
            "syncingTo" : "152.136.193.58:37017",
            "syncSourceHost" : "152.136.193.58:37017",
            "syncSourceId" : 1,
            "infoMessage" : "",
            "configVersion" : 2
        }
    ],
    "ok" : 1,
    "operationTime" : Timestamp(1608772772, 1),
    "$clusterTime" : {
        "clusterTime" : Timestamp(1608772772, 1),
        "signature" : {
            "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
            "keyId" : NumberLong(0)
        }
    }
}

6.複製集操作演示

進入主節點 ----- 插入資料 ------ 進入從節點驗證
注意:預設節點下從節點不能讀取資料。呼叫 rs.slaveOk() 解決

 

 

 

 

 

 

 

為了保證高可用,在叢集當中如果主節點掛掉後,會自動 在從節點中選舉一個 重新做為主節點。
rs.status()
節點說明:
PRIMARY 主節點: 可以查詢和新增資料
SECONDARY 從節點:只能查詢 不能新增 基於priority 權重可以被選為主節點
ARBITER 仲裁節點: 不能查詢資料 和新增資料 ,不能變成主節點

7.主從自動切換操作演示

 現在我們起倆個視窗,一主一從(37017主機,37018從機),新開啟窗口乾掉主節點。。驗證從節點是否會變成主節點。發現從節點37018變成主節點,,當再次啟動節點37017節點,因優先界別高,37017會再次變為主節點。

 

 

 

 

 

 

 

 

 8.新增衝裁節點

注:新建配置檔案mongo_37020.conf,並建立server4 資料夾,啟動37020節點

#仲裁節點
dbpath=/data/mongo/data/server4
bind_ip=0.0.0.0
port=37020
fork=true
logpath=/data/mongo/logs/server37020.log
replSet=wgCluster

 

    配置方式  

var cfg ={"_id":"wgCluster",
"protocolVersion" : 1,
"members":[
{"_id":1,"host":"152.136.193.58:37017","priority":10},
{"_id":2,"host":"152.136.193.58:37018","priority":0},
{"_id":3,"host":"152.136.193.58:37019","priority":5},
{"_id":4,"host":"152.136.193.58:37020","arbiterOnly":true}
]
};
// 重新裝載配置,並重新生成叢集節點。
rs.reconfig(cfg)
//重新檢視叢集狀態
rs.status()

動態新增

和上面的配置步驟相同 只是增加了 一個特殊的仲裁節點
注入節點 執行 rs.addArb("IP:埠");
rs.addArb("192.168.211.133:37020")

9複製整合員的配置引數