MongoDB 副本集(Replication)搭建詳解
一.下載安裝MongoDB,可參考地址:https://blog.csdn.net/qq_28316065/article/details/102594991(之前未給MongoDB配置賬號密碼,現在讓我們來重新配置一遍,設置一個安全密碼吧)
1.下載解壓後如下:此處使用 MongoDB 4.0.12 版本
2.創建conf文件,內容如下:(文件夾datas\data、logs、pids需要先創建哦)
# mongod.conf
#數據存放路徑
dbpath=C:\SoftWare\mongodb\datas\data
#日誌相關配置
#logpath=C:\SoftWare\mongodb\logs\mongo.log
#logappend=true
#進程號
pidfilepath=C:\SoftWare\mongodb\pids\mongod.pid
#以後臺方式運行進程
#fork=true
#端口設置
port=27017
#允許任意機器連接 0.0.0.0
bind_ip=127.0.0.1
#最大連接數 默認2000
maxConns=2000
#開啓認證
auth=true
問題:我這裏設置日誌的配置時會啓動報錯,暫未解決就把日誌相關配置註釋了,希望有大神可以指導一下,嘿嘿。
報錯如下:
3.再來個啓動的批處理文件startup.bat,內容如下:
mongod --config "C:\SoftWare\mongodb\conf\mongod.conf"
4.建成後目錄如下,讓我們雙擊startup.bat啓動MongoDB
5.啓動成功
6.接下來配置賬號密碼咯,進入bin目錄打開cmd窗口,執行如下命令進入mongo:
mongo.exe --port 27017
這個時候沒有驗證賬號密碼,可以看到是無法訪問db和collections的哦。
接下來咱們切換到admin,創建賬號密碼:
成功,驗證密碼,然後就可以訪問數據庫信息啦。我這裏給admin的權限是root權限哦。具體可參考官方文檔:https://docs.mongodb.com/manual/reference/method/db.createUser/index.html
二、現在讓我們來搭建副本集吧。副本集官方參考地址:https://docs.mongodb.com/manual/replication/
1.修改剛剛我們新增的conf文件的配置,加上副本集配置和keyfile配置。
生成keyfile:
openssl rand -base64 741 > keyfile //生成文件
chmod 600 keyfile //修改權限
conf配置如下:replSet需要配置一致
# mongod.conf
#數據存放路徑
dbpath=C:\SoftWare\mongodb\datas\data
#日誌相關配置
#logpath=C:\SoftWare\mongodb\logs\mongo.log
#logappend=true
#進程號
pidfilepath=C:\SoftWare\mongodb\pids\mongod.pid
#以後臺方式運行進程
#fork=true
#端口設置
port=27017
#允許任意機器連接 0.0.0.0
bind_ip=127.0.0.1
#最大連接數 默認2000
maxConns=2000
#開啓認證
auth=true
keyFile=C:\SoftWare\mongodb\keyfile
#複製集名稱
replSet=rs_test
2.然後添加兩個副本集,需要添加配置文件,分別配置如下:
(1)mongod_r1.conf
# mongod_r1.conf
#數據存放路徑
dbpath=C:\SoftWare\mongodb\datas\data1
#日誌相關配置
#logpath=C:\SoftWare\mongodb\logs\mongo1.log
#logappend=true
#進程號
pidfilepath=C:\SoftWare\mongodb\pids\mongod1.pid
#以後臺方式運行進程
#fork=true
#端口設置
port=27018
#允許任意機器連接 0.0.0.0
bind_ip=127.0.0.1
#最大連接數 默認2000
maxConns=2000
#開啓認證
auth=true
keyFile=C:\SoftWare\mongodb\keyfile
#複製集名稱
replSet=rs_test
(2)mongod_r2.conf
# mongod_r2.conf
#數據存放路徑
dbpath=C:\SoftWare\mongodb\datas\data2
#日誌相關配置
#logpath=C:\SoftWare\mongodb\logs\mongo2.log
#logappend=true
#進程號
pidfilepath=C:\SoftWare\mongodb\pids\mongod2.pid
#以後臺方式運行進程
#fork=true
#端口設置
port=27019
#允許任意機器連接 0.0.0.0
bind_ip=127.0.0.1
#最大連接數 默認2000
maxConns=2000
#開啓認證
auth=true
keyFile=C:\SoftWare\mongodb\keyfile
#複製集名稱
replSet=rs_test
3.分別添加r1和r2的啓動文件:
(1)startup_r1.bat
mongod --config "C:\SoftWare\mongodb\conf\mongod_r1.conf"
(2)startup_r2.bat
mongod --config "C:\SoftWare\mongodb\conf\mongod_r2.conf"
4.創建好後目錄如下:
5.接下來讓我們重新跑起來吧
6.然後我們再來進入27017端口,看一下副本集的配置。
rs.status() //查看副本集狀態
可以看到現在並沒有配置副本集
7.接下來初始化副本集,並將27018、27019加到副本節點。
rs.initiate() //初始化副本集
rs.add("127.0.0.1:27018") //添加副本集節點
然後我們再來看狀態,可以看到已經有副本集節點了,“PRIMARY”爲主節點。
rs_test:PRIMARY> rs.status()
{
"set" : "rs_test",
"date" : ISODate("2020-05-26T10:00:34.699Z"),
"myState" : 1,
"term" : NumberLong(1),
"syncingTo" : "",
"syncSourceHost" : "",
"syncSourceId" : -1,
"heartbeatIntervalMillis" : NumberLong(2000),
"optimes" : {
"lastCommittedOpTime" : {
"ts" : Timestamp(1590487233, 1),
"t" : NumberLong(1)
},
"readConcernMajorityOpTime" : {
"ts" : Timestamp(1590487233, 1),
"t" : NumberLong(1)
},
"appliedOpTime" : {
"ts" : Timestamp(1590487233, 1),
"t" : NumberLong(1)
},
"durableOpTime" : {
"ts" : Timestamp(1590487233, 1),
"t" : NumberLong(1)
}
},
"lastStableCheckpointTimestamp" : Timestamp(1590487183, 4),
"members" : [
{
"_id" : 0,
"name" : "127.0.0.1:27017",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 561,
"optime" : {
"ts" : Timestamp(1590487233, 1),
"t" : NumberLong(1)
},
"optimeDate" : ISODate("2020-05-26T10:00:33Z"),
"syncingTo" : "",
"syncSourceHost" : "",
"syncSourceId" : -1,
"infoMessage" : "could not find member to sync from",
"electionTime" : Timestamp(1590487181, 2),
"electionDate" : ISODate("2020-05-26T09:59:41Z"),
"configVersion" : 3,
"self" : true,
"lastHeartbeatMessage" : ""
},
{
"_id" : 1,
"name" : "127.0.0.1:27018",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 25,
"optime" : {
"ts" : Timestamp(1590487233, 1),
"t" : NumberLong(1)
},
"optimeDurable" : {
"ts" : Timestamp(1590487233, 1),
"t" : NumberLong(1)
},
"optimeDate" : ISODate("2020-05-26T10:00:33Z"),
"optimeDurableDate" : ISODate("2020-05-26T10:00:33Z"),
"lastHeartbeat" : ISODate("2020-05-26T10:00:34.059Z"),
"lastHeartbeatRecv" : ISODate("2020-05-26T10:00:34.582Z"),
"pingMs" : NumberLong(0),
"lastHeartbeatMessage" : "",
"syncingTo" : "127.0.0.1:27017",
"syncSourceHost" : "127.0.0.1:27017",
"syncSourceId" : 0,
"infoMessage" : "",
"configVersion" : 3
},
{
"_id" : 2,
"name" : "127.0.0.1:27019",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 18,
"optime" : {
"ts" : Timestamp(1590487216, 1),
"t" : NumberLong(1)
},
"optimeDurable" : {
"ts" : Timestamp(1590487216, 1),
"t" : NumberLong(1)
},
"optimeDate" : ISODate("2020-05-26T10:00:16Z"),
"optimeDurableDate" : ISODate("2020-05-26T10:00:16Z"),
"lastHeartbeat" : ISODate("2020-05-26T10:00:34.061Z"),
"lastHeartbeatRecv" : ISODate("2020-05-26T10:00:34.675Z"),
"pingMs" : NumberLong(0),
"lastHeartbeatMessage" : "",
"syncingTo" : "",
"syncSourceHost" : "",
"syncSourceId" : -1,
"infoMessage" : "",
"configVersion" : 3
}
],
"ok" : 1,
"operationTime" : Timestamp(1590487233, 1),
"$clusterTime" : {
"clusterTime" : Timestamp(1590487233, 1),
"signature" : {
"hash" : BinData(0,"TGjkHRzRpzVyqglrx2e5XCpdY7U="),
"keyId" : NumberLong("6831090435692167169")
}
}
}
到這裏,副本集就搭建成功啦。
三、接下來我們測試一下副本集的數據
1.進入27017創建一個數據庫,集合以及一條數據:
2.進入27018和27019查看數據,會發現居然查看不了,哦,原來SECONDARY默認是不允許讀寫的,如果要解決那就執行一下命令:
rs.slaveOk()
然後查看數據,也已經同步過來啦
再來主節點插入一批數據吧,可以看到數據是同步到了副節點。
好的,今天就學習到這裏啦,資源已上傳有需要的下載哦,下載鏈接:https://download.csdn.net/download/qq_28316065/12462534 ^_^