centos7 單機搭建MongoDB 4.2.5副本集羣(支持事務)

一、下載&解壓:

1、版本及下載:
版本:mongodb-4.2.5解壓版
網盤下載地址:mongodb-linux-x86_64-rhel70-4.2.5(解壓版).tgz

2、集羣列表:

副本名 IP 端口 系統版本
1、從節點 192.168.101.150 40000 CentOS7.5.0
2、主節點 192.168.101.150 50000 CentOS7.5.0
3、從節點 192.168.101.150 60000 CentOS7.5.0

3、上傳文件到集羣服務器並解壓、修改名稱:

[root@localhost ~]# mkdir -p /opt
[root@localhost ~]# cd /opt/
[root@localhost opt]# rz
[root@localhost opt]# tar -zxvf mongodb-linux-x86_64-rhel70-4.2.5(解壓版).tgz 
[root@localhost opt]# ll
total 129596
drwxr-xr-x. 3 root root       135 May 10 17:40 mongodb-linux-x86_64-rhel70-4.2.5
-rw-r--r--. 1 root root 132702741 Mar 31 19:11 mongodb-linux-x86_64-rhel70-4.2.5(解壓版).tgz
[root@localhost opt]# 
[root@localhost opt]# mv mongodb-linux-x86_64-rhel70-4.2.5 mongodb-4.2.5
[root@localhost opt]# ll
total 129596
drwxr-xr-x. 3 root root       135 May 10 17:40 mongodb-4.2.5
-rw-r--r--. 1 root root 132702741 Mar 31 19:11 mongodb-linux-x86_64-rhel70-4.2.5(解壓版).tgz
[root@localhost opt]#
[root@localhost opt]# cd mongodb-4.2.5/
[root@localhost mongodb-4.2.5]# ll
total 312
drwxr-xr-x. 2 root root    231 May 10 17:40 bin
-rw-r--r--. 1 root root  30608 Mar 24 12:47 LICENSE-Community.txt
-rw-r--r--. 1 root root  16726 Mar 24 12:47 MPL-2
-rw-r--r--. 1 root root   2617 Mar 24 12:47 README
-rw-r--r--. 1 root root  75405 Mar 24 12:47 THIRD-PARTY-NOTICES
-rw-r--r--. 1 root root 183512 Mar 24 12:49 THIRD-PARTY-NOTICES.gotools
[root@localhost mongodb-4.2.5]# 

二、創建資源目錄:

4、創建40000、50000、60000端口對應的儲存數據文件夾:

[root@localhost mongodb-4.2.5]# mkdir -p /opt/mongodb-4.2.5/40000/logs/
[root@localhost mongodb-4.2.5]# mkdir -p /opt/mongodb-4.2.5/40000/data/
[root@localhost mongodb-4.2.5]# mkdir -p /opt/mongodb-4.2.5/40000/key/
[root@localhost mongodb-4.2.5]# mkdir -p /opt/mongodb-4.2.5/40000/pid/
[root@localhost mongodb-4.2.5]# 
[root@localhost mongodb-4.2.5]# mkdir -p /opt/mongodb-4.2.5/50000/logs/
[root@localhost mongodb-4.2.5]# mkdir -p /opt/mongodb-4.2.5/50000/data/
[root@localhost mongodb-4.2.5]# mkdir -p /opt/mongodb-4.2.5/50000/key/
[root@localhost mongodb-4.2.5]# mkdir -p /opt/mongodb-4.2.5/50000/pid/
[root@localhost mongodb-4.2.5]# 
[root@localhost mongodb-4.2.5]# mkdir -p /opt/mongodb-4.2.5/60000/logs/
[root@localhost mongodb-4.2.5]# mkdir -p /opt/mongodb-4.2.5/60000/data/
[root@localhost mongodb-4.2.5]# mkdir -p /opt/mongodb-4.2.5/60000/key/
[root@localhost mongodb-4.2.5]# mkdir -p /opt/mongodb-4.2.5/60000/pid/

備註:

  • logs文件夾:存儲日誌
  • data文件夾:存儲mongodb數據
  • key文件夾:存儲密鑰
  • pid文件夾:存放啓動文件

三、創建 & 修改配置文件:

5、創建mongo-40000.confmongo-50000.confmongo-60000.conf配置文件:

[root@localhost mongodb-4.2.5]# touch /opt/mongodb-4.2.5/mongo-40000.conf
[root@localhost mongodb-4.2.5]# touch /opt/mongodb-4.2.5/mongo-50000.conf
[root@localhost mongodb-4.2.5]# touch /opt/mongodb-4.2.5/mongo-60000.conf

6、mongo-40000.conf配置:
修改命令:vi /opt/mongodb-4.2.5/mongo-40000.conf

systemLog:
   destination: file
   path: "/opt/mongodb-4.2.5/40000/logs/mongodb.log"
   logAppend: true
storage:
   dbPath: "/opt/mongodb-4.2.5/40000/data"
   journal:
      enabled: true
#   mmapv1:
#     smallFiles: true
   wiredTiger:
      engineConfig:
        configString: cache_size=500m
processManagement:
      fork: true
net:
   port: 40000
   bindIp: 0.0.0.0
setParameter:
   enableLocalhostAuthBypass: false
# 開啓授權認證
security:
   authorization: disabled

replication:
   oplogSizeMB: 100
   replSetName: sszh
   enableMajorityReadConcern: true

7、mongo-50000.conf配置:
修改命令:vi /opt/mongodb-4.2.5/mongo-50000.conf

systemLog:
   destination: file
   path: "/opt/mongodb-4.2.5/50000/logs/mongodb.log"
   logAppend: true
storage:
   dbPath: "/opt/mongodb-4.2.5/50000/data"
   journal:
      enabled: true
#   mmapv1:
#     smallFiles: true
   wiredTiger:
      engineConfig:
        configString: cache_size=500m
processManagement:
      fork: true
net:
   port: 50000
   bindIp: 0.0.0.0
setParameter:
   enableLocalhostAuthBypass: false
# 開啓授權認證
security:
   authorization: disabled

replication:
   oplogSizeMB: 100
   replSetName: sszh
   enableMajorityReadConcern: true

8、mongo-60000.conf配置:
修改命令:vi /opt/mongodb-4.2.5/mongo-60000.conf

systemLog:
   destination: file
   path: "/opt/mongodb-4.2.5/60000/logs/mongodb.log"
   logAppend: true
storage:
   dbPath: "/opt/mongodb-4.2.5/60000/data"
   journal:
      enabled: true
#   mmapv1:
#     smallFiles: true
   wiredTiger:
      engineConfig:
        configString: cache_size=500m
processManagement:
      fork: true
net:
   port: 60000
   bindIp: 0.0.0.0
setParameter:
   enableLocalhostAuthBypass: false
# 開啓授權認證
security:
   authorization: disabled

replication:
   oplogSizeMB: 100
   replSetName: sszh
   enableMajorityReadConcern: true

四、創建 & 修改啓動服務shell腳本:

9、創建start-40000start-50000start-60000的shell啓動腳本:

[root@localhost mongodb-4.2.5]# touch /opt/mongodb-4.2.5/start-40000
[root@localhost mongodb-4.2.5]# touch /opt/mongodb-4.2.5/start-50000
[root@localhost mongodb-4.2.5]# touch /opt/mongodb-4.2.5/start-60000

10、start-40000內容:
修改命令:vi /opt/mongodb-4.2.5/start-40000

/opt/mongodb-4.2.5/bin/mongod --config /opt/mongodb-4.2.5/mongo-40000.conf

11、start-50000內容:
修改命令:vi /opt/mongodb-4.2.5/start-50000

/opt/mongodb-4.2.5/bin/mongod --config /opt/mongodb-4.2.5/mongo-50000.conf

12、start-60000內容:
修改命令:vi /opt/mongodb-4.2.5/start-60000

/opt/mongodb-4.2.5/bin/mongod --config /opt/mongodb-4.2.5/mongo-60000.conf

五、創建 & 修改停止服務shell腳本:

13、創建start-40000start-50000start-60000的shell啓動腳本:

[root@localhost mongodb-4.2.5]# touch /opt/mongodb-4.2.5/stop-40000
[root@localhost mongodb-4.2.5]# touch /opt/mongodb-4.2.5/stop-50000
[root@localhost mongodb-4.2.5]# touch /opt/mongodb-4.2.5/stop-60000

14、stop-40000內容:
修改命令:vi /opt/mongodb-4.2.5/stop-40000

ps -ef|grep /opt/mongodb-4.2.5/mongo-40000.conf|grep -v grep|awk '{printf $2}'|xargs kill -9

15、stop-50000內容:
修改命令:vi /opt/mongodb-4.2.5/stop-50000

ps -ef|grep /opt/mongodb-4.2.5/mongo-50000.conf|grep -v grep|awk '{printf $2}'|xargs kill -9

16、stop-60000內容:
修改命令:vi /opt/mongodb-4.2.5/stop-60000

ps -ef|grep /opt/mongodb-4.2.5/mongo-60000.conf|grep -v grep|awk '{printf $2}'|xargs kill -9

六、賦予權限:

17、給/opt/mongodb-4.2.5/文件夾及全部文件添加權限(正式環境酌情考慮是否開放外部權限):

[root@localhost mongodb-4.2.5]# chmod -R 777 /opt/mongodb-4.2.5/

備註:

  • 參數-R是遞歸的意思
  • 777表示開放所有權限
  • 如果給所有人添加可執行權限:chmod a+x 文件名;
  • 如果給文件所有者添加可執行權限:chmod u+x 文件名;
  • 如果給所在組添加可執行權限:chmod g+x 文件名;
  • 如果給所在組以外的人添加可執行權限:chmod o+x 文件名;

七、啓動mongodb:

18、先留意下如下錯誤信息:

  • 錯誤1:
    mongodb.conf文件粘貼時缺少字母,報錯誤信息如下:
    Unrecognized option: ystemLog.destination
    try ‘/opt/mongodb-4.2.5/bin/mongod --help’ for more information
  • 解決1:
    修改mongo.config文件,將 ystemLog 替換成 systemLog ,啓動成功

19、啓動mongodb服務:

[root@localhost mongodb-4.2.5]# sh start-40000 
about to fork child process, waiting until server is ready for connections.
forked process: 5866
child process started successfully, parent exiting
[root@localhost mongodb-4.2.5]# 
[root@localhost mongodb-4.2.5]# sh start-50000  
2020-05-10T18:27:42.526+0800 I  STORAGE  [main] Engine custom option: cache_size=500m
about to fork child process, waiting until server is ready for connections.
forked process: 5928
child process started successfully, parent exiting
[root@localhost mongodb-4.2.5]# 
[root@localhost mongodb-4.2.5]# sh start-60000 
2020-05-10T18:27:53.770+0800 I  STORAGE  [main] Engine custom option: cache_size=500m
about to fork child process, waiting until server is ready for connections.
forked process: 5976
child process started successfully, parent exiting
[root@localhost mongodb-4.2.5]# 

20、查看是否啓動成功:

[root@localhost mongodb-4.2.5]# ps -ef|grep mongo
root       5866      1  1 18:27 ?        00:00:01 /opt/mongodb-4.2.5/bin/mongod --config /opt/mongodb-4.2.5/mongo-40000.conf
root       5928      1  1 18:27 ?        00:00:01 /opt/mongodb-4.2.5/bin/mongod --config /opt/mongodb-4.2.5/mongo-50000.conf
root       5976      1  1 18:27 ?        00:00:00 /opt/mongodb-4.2.5/bin/mongod --config /opt/mongodb-4.2.5/mongo-60000.conf
root       6054   3308  0 18:28 pts/0    00:00:00 grep --color=auto mongo
[root@localhost mongodb-4.2.5]# 

七、添加集羣節點:

21、登錄數據庫192.168.101.150:40000,命令如下:

[root@localhost mongodb-4.2.5]# cd /opt/mongodb-4.2.5/bin/
[root@localhost bin]# ./mongo --port=50000
MongoDB shell version v4.2.5
connecting to: mongodb://127.0.0.1:50000/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("c06d47bb-3012-44d8-a53d-f26c6ce32e35") }
MongoDB server version: 4.2.5
Server has startup warnings: 
2020-05-10T18:35:07.614+0800 I  CONTROL  [initandlisten] ** WARNING: You are running this process as the root user, which is not recommended.
2020-05-10T18:35:07.614+0800 I  CONTROL  [initandlisten] 
2020-05-10T18:35:07.614+0800 I  CONTROL  [initandlisten] 
2020-05-10T18:35:07.614+0800 I  CONTROL  [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
2020-05-10T18:35:07.614+0800 I  CONTROL  [initandlisten] **        We suggest setting it to 'never'
2020-05-10T18:35:07.614+0800 I  CONTROL  [initandlisten] 
2020-05-10T18:35:07.614+0800 I  CONTROL  [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
2020-05-10T18:35:07.614+0800 I  CONTROL  [initandlisten] **        We suggest setting it to 'never'
2020-05-10T18:35:07.614+0800 I  CONTROL  [initandlisten] 
---
Enable MongoDB's free cloud-based monitoring service, which will then receive and display
metrics about your deployment (disk utilization, CPU, operation statistics, etc).

The monitoring data will be available on a MongoDB website with a unique URL accessible to you
and anyone you share the URL with. MongoDB may use this information to make product
improvements and to suggest MongoDB products and deployment options to you.

To enable free monitoring, run the following command: db.enableFreeMonitoring()
To permanently disable this reminder, run the following command: db.disableFreeMonitoring()
---

> 

22、登入後在 mongodb 命令行模式,執行 ’ > ’ 後面的命令:

> use admin
switched to db admin
> config={_id:"sszh", members:[{_id:0,host:'192.168.101.150:40000'}, {_id:1,host:'192.168.101.150:50000'}, {_id:2,host:'192.168.101.150:60000'}]};
{
        "_id" : "sszh",
        "members" : [
                {
                        "_id" : 0,
                        "host" : "192.168.101.150:40000"
                },
                {
                        "_id" : 1,
                        "host" : "192.168.101.150:50000"
                },
                {
                        "_id" : 2,
                        "host" : "192.168.101.150:60000"
                }
        ]
}
> rs.initiate(config)
{
        "ok" : 1,
        "$clusterTime" : {
                "clusterTime" : Timestamp(1589107742, 1),
                "signature" : {
                        "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
                        "keyId" : NumberLong(0)
                }
        },
        "operationTime" : Timestamp(1589107742, 1)
}
sszh:SECONDARY> 
sszh:PRIMARY> rs.status()
{
        "set" : "sszh",
        "date" : ISODate("2020-05-10T10:49:52.275Z"),
        "myState" : 1,
        "term" : NumberLong(1),
        "syncingTo" : "",
        "syncSourceHost" : "",
        "syncSourceId" : -1,
        "heartbeatIntervalMillis" : NumberLong(2000),
        "majorityVoteCount" : 2,
        "writeMajorityCount" : 2,
        "optimes" : {
                "lastCommittedOpTime" : {
                        "ts" : Timestamp(1589107783, 1),
                        "t" : NumberLong(1)
                },
                "lastCommittedWallTime" : ISODate("2020-05-10T10:49:43.308Z"),
                "readConcernMajorityOpTime" : {
                        "ts" : Timestamp(1589107783, 1),
                        "t" : NumberLong(1)
                },
                "readConcernMajorityWallTime" : ISODate("2020-05-10T10:49:43.308Z"),
                "appliedOpTime" : {
                        "ts" : Timestamp(1589107783, 1),
                        "t" : NumberLong(1)
                },
                "durableOpTime" : {
                        "ts" : Timestamp(1589107783, 1),
                        "t" : NumberLong(1)
                },
                "lastAppliedWallTime" : ISODate("2020-05-10T10:49:43.308Z"),
                "lastDurableWallTime" : ISODate("2020-05-10T10:49:43.308Z")
        },
        "lastStableRecoveryTimestamp" : Timestamp(1589107753, 3),
        "lastStableCheckpointTimestamp" : Timestamp(1589107753, 3),
        "electionCandidateMetrics" : {
                "lastElectionReason" : "electionTimeout",
                "lastElectionDate" : ISODate("2020-05-10T10:49:13.299Z"),
                "electionTerm" : NumberLong(1),
                "lastCommittedOpTimeAtElection" : {
                        "ts" : Timestamp(0, 0),
                        "t" : NumberLong(-1)
                },
                "lastSeenOpTimeAtElection" : {
                        "ts" : Timestamp(1589107742, 1),
                        "t" : NumberLong(-1)
                },
                "numVotesNeeded" : 2,
                "priorityAtElection" : 1,
                "electionTimeoutMillis" : NumberLong(10000),
                "numCatchUpOps" : NumberLong(0),
                "newTermStartDate" : ISODate("2020-05-10T10:49:13.306Z"),
                "wMajorityWriteAvailabilityDate" : ISODate("2020-05-10T10:49:14.729Z")
        },
        "members" : [
                {
                        "_id" : 0,
                        "name" : "192.168.101.150:40000",
                        "health" : 1,
                        "state" : 2,
                        "stateStr" : "SECONDARY",
                        "uptime" : 50,
                        "optime" : {
                                "ts" : Timestamp(1589107783, 1),
                                "t" : NumberLong(1)
                        },
                        "optimeDurable" : {
                                "ts" : Timestamp(1589107783, 1),
                                "t" : NumberLong(1)
                        },
                        "optimeDate" : ISODate("2020-05-10T10:49:43Z"),
                        "optimeDurableDate" : ISODate("2020-05-10T10:49:43Z"),
                        "lastHeartbeat" : ISODate("2020-05-10T10:49:51.314Z"),
                        "lastHeartbeatRecv" : ISODate("2020-05-10T10:49:50.722Z"),
                        "pingMs" : NumberLong(0),
                        "lastHeartbeatMessage" : "",
                        "syncingTo" : "192.168.101.150:50000",
                        "syncSourceHost" : "192.168.101.150:50000",
                        "syncSourceId" : 1,
                        "infoMessage" : "",
                        "configVersion" : 1
                },
                {
                        "_id" : 1,
                        "name" : "192.168.101.150:50000",
                        "health" : 1,
                        "state" : 1,
                        "stateStr" : "PRIMARY",
                        "uptime" : 886,
                        "optime" : {
                                "ts" : Timestamp(1589107783, 1),
                                "t" : NumberLong(1)
                        },
                        "optimeDate" : ISODate("2020-05-10T10:49:43Z"),
                        "syncingTo" : "",
                        "syncSourceHost" : "",
                        "syncSourceId" : -1,
                        "infoMessage" : "could not find member to sync from",
                        "electionTime" : Timestamp(1589107753, 1),
                        "electionDate" : ISODate("2020-05-10T10:49:13Z"),
                        "configVersion" : 1,
                        "self" : true,
                        "lastHeartbeatMessage" : ""
                },
                {
                        "_id" : 2,
                        "name" : "192.168.101.150:60000",
                        "health" : 1,
                        "state" : 2,
                        "stateStr" : "SECONDARY",
                        "uptime" : 50,
                        "optime" : {
                                "ts" : Timestamp(1589107783, 1),
                                "t" : NumberLong(1)
                        },
                        "optimeDurable" : {
                                "ts" : Timestamp(1589107783, 1),
                                "t" : NumberLong(1)
                        },
                        "optimeDate" : ISODate("2020-05-10T10:49:43Z"),
                        "optimeDurableDate" : ISODate("2020-05-10T10:49:43Z"),
                        "lastHeartbeat" : ISODate("2020-05-10T10:49:51.314Z"),
                        "lastHeartbeatRecv" : ISODate("2020-05-10T10:49:50.723Z"),
                        "pingMs" : NumberLong(0),
                        "lastHeartbeatMessage" : "",
                        "syncingTo" : "192.168.101.150:50000",
                        "syncSourceHost" : "192.168.101.150:50000",
                        "syncSourceId" : 1,
                        "infoMessage" : "",
                        "configVersion" : 1
                }
        ],
        "ok" : 1,
        "$clusterTime" : {
                "clusterTime" : Timestamp(1589107783, 1),
                "signature" : {
                        "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
                        "keyId" : NumberLong(0)
                }
        },
        "operationTime" : Timestamp(1589107783, 1)
}
sszh:PRIMARY> 

備註:

  • 語句 use admin 解釋:使用admin數據庫
  • 語句 config={} 解釋:臨時參數
  • 語句 rs.initiate(config) 解釋:使用config臨時參數初始化副本集
  • 語句 rs.status() 解釋:查看集羣狀態
  • 集羣狀態參數 members[0].stateStr 解釋:PRIMARY 表示主節點、SECONDARY表示從節點
  • PRIMARY 主節點:可讀可寫
  • SECONDARY 從節點:可讀不可寫
  • 更多參數解釋:請查閱官網解釋

23、使用工具連接測試:

  • Java連接副本集羣url:mongodb://192.168.101.150:40000,192.168.101.150:50000,192.168.101.150:60000/?replicaSet=sszh
  • 連接工具:
    在這裏插入圖片描述


























注:以上內容僅提供參考和交流,請勿用於商業用途,如有侵權聯繫本人刪除!


持續更新中…

如有對思路不清晰或有更好的解決思路,歡迎與本人交流,微信:seesun2012(非緊急項目請加QQ羣解答),QQ羣:273557553
你遇到的問題是小編創作靈感的來源!


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