MongoDB學習【三】MongoDB 副本集(Replication)搭建詳解(單服務器:Windows)

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  ^_^

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章