前言
近期有同學問mongodb副本集難不難部署,我的回答是不難,很快,幾分鐘搞定,比mysql MHA簡單的不止一點半點。 那么到底如何部署呢?請看下文。
1. 準備工作
1.1 下載軟件
選擇版本并下載mongodb的軟件,注意操作系統版本等。本次我選用的是percona分支的mongodb 4.2.8版本搭建,操作系統為centos6
1
2
3
4
|
cd /usr/local/ wget https: //www .percona.com /downloads/percona-server-mongodb-LATEST/percona-server-mongodb-4 .2.8-8 /binary/tarball/percona-server-mongodb-4 .2.8-8-centos6-x86_64. tar .gz tar -zxvf percona-server-mongodb-4.2.8-8-centos6-x86_64. tar .gz ln -s percona-server-mongodb-4.2.8-8 mongodb |
1.2 規劃各節點角色
各節點角色如下
IP | port | role |
192.168.128.208 | 27017 | PRIMARY |
192.168.128.209 | 27017 | SECONDARY |
192.168.128.209 | 28017 | ARBITER |
2 部署
2.1 創建各節點相關目錄
創建數據目錄、日志目錄等相關目錄
1
2
3
4
5
6
7
8
9
|
[root@m1 ~] # mkdir -p /data/mongodb/27017/{data,logs,tmp,etc,keyfile} [root@m1 ~] # cd /data/mongodb/27017/ [root@m1 27017] # ll 總用量 20 drwxr-xr-x 2 root root 4096 8月 7 16:59 data drwxr-xr-x 2 root root 4096 8月 7 16:59 etc drwxr-xr-x 2 root root 4096 8月 7 16:59 keyfile drwxr-xr-x 2 root root 4096 8月 7 16:59 logs drwxr-xr-x 2 root root 4096 8月 7 16:59 tmp |
2.2 配置文件
創建配置文件,并添加對應的配置信息,注意仲裁節點的端口
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
[root@m1 27017] # cd /data/mongodb/27017/etc/ [root@m1 etc] # vim mongod.conf 添加如下內容 storage: dbPath: /data/mongodb/27017/data journal: enabled: true systemLog: destination: file logAppend: true path: /data/mongodb/27017/logs/mongod .log processManagement: fork: true pidFilePath: /data/mongodb/27017/tmp/mongod .pid net: port: 27017 bindIp: 0.0.0.0replication: replSetName: "test1" # 副本集名稱 |
2.3 啟動各節點
以其中一個節點為例,其他節點修改對應配置文件即可
1
2
3
4
|
[root@m1 local ] # /usr/local/mongodb/bin/mongod -f /data/mongodb/27017/etc/mongod.conf about to fork child process, waiting until server is ready for connections. forked process: 30019 child process started successfully, parent exiting |
2.4 初始化副本集
初始化副本集,指定各節點id及角色,注意副本集的名稱和配置文件里一致。
在任意節點執行如下語句
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
> use admin switched to db admin > rs.initiate( { ... _id: "test1" , ... members: [ ... { _id: 0 , host: "192.168.128.208:27017" }, ... { _id: 1 , host: "192.168.128.209:27017" }, ... { _id: 2 , host: "192.168.128.209:28017" ,arbiterOnly: true } ... ] }) { "ok" : 1 , "$clusterTime" : { "clusterTime" : Timestamp( 1596792682 , 1 ), "signature" : { "hash" : BinData( 0 , "AAAAAAAAAAAAAAAAAAAAAAAAAAA=" ), "keyId" : NumberLong( 0 ) } }, "operationTime" : Timestamp( 1596792682 , 1 ) } |
完成后可以查看各集群狀態,如下,可見當前192.168.128.208:27017 為PRIMARY節點
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
|
test1:PRIMARY> rs.status() { "set" : "test1" , "date" : ISODate( "2020-08-07T11:09:24.454Z" ), "myState" : 1, "term" : NumberLong(1), "syncingTo" : "" , "syncSourceHost" : "" , "syncSourceId" : -1, "heartbeatIntervalMillis" : NumberLong(2000), "majorityVoteCount" : 2, "writeMajorityCount" : 2, "optimes" : { "lastCommittedOpTime" : { "ts" : Timestamp(1596798563, 1), "t" : NumberLong(1) }, "lastCommittedWallTime" : ISODate( "2020-08-07T11:09:23.663Z" ), "readConcernMajorityOpTime" : { "ts" : Timestamp(1596798563, 1), "t" : NumberLong(1) }, "readConcernMajorityWallTime" : ISODate( "2020-08-07T11:09:23.663Z" ), "appliedOpTime" : { "ts" : Timestamp(1596798563, 1), "t" : NumberLong(1) }, "durableOpTime" : { "ts" : Timestamp(1596798563, 1), "t" : NumberLong(1) }, "lastAppliedWallTime" : ISODate( "2020-08-07T11:09:23.663Z" ), "lastDurableWallTime" : ISODate( "2020-08-07T11:09:23.663Z" ) }, "lastStableRecoveryTimestamp" : Timestamp(1596798513, 1), "lastStableCheckpointTimestamp" : Timestamp(1596798513, 1), "electionCandidateMetrics" : { "lastElectionReason" : "electionTimeout" , "lastElectionDate" : ISODate( "2020-08-07T09:31:33.409Z" ), "electionTerm" : NumberLong(1), "lastCommittedOpTimeAtElection" : { "ts" : Timestamp(0, 0), "t" : NumberLong(-1) }, "lastSeenOpTimeAtElection" : { "ts" : Timestamp(1596792682, 1), "t" : NumberLong(-1) }, "numVotesNeeded" : 2, "priorityAtElection" : 1, "electionTimeoutMillis" : NumberLong(10000), "numCatchUpOps" : NumberLong(0), "newTermStartDate" : ISODate( "2020-08-07T09:31:33.444Z" ), "wMajorityWriteAvailabilityDate" : ISODate( "2020-08-07T09:31:34.050Z" ) }, "members" : [ { "_id" : 0, "name" : "192.168.128.208:27017" , "health" : 1, "state" : 1, "stateStr" : "PRIMARY" , "uptime" : 5950, "optime" : { "ts" : Timestamp(1596798563, 1), "t" : NumberLong(1) }, "optimeDate" : ISODate( "2020-08-07T11:09:23Z" ), "syncingTo" : "" , "syncSourceHost" : "" , "syncSourceId" : -1, "infoMessage" : "" , "electionTime" : Timestamp(1596792693, 1), "electionDate" : ISODate( "2020-08-07T09:31:33Z" ), "configVersion" : 1, "self" : true , "lastHeartbeatMessage" : "" }, { "_id" : 1, "name" : "192.168.128.209:27017" , "health" : 1, "state" : 2, "stateStr" : "SECONDARY" , "uptime" : 5882, "optime" : { "ts" : Timestamp(1596798563, 1), "t" : NumberLong(1) }, "optimeDurable" : { "ts" : Timestamp(1596798563, 1), "t" : NumberLong(1) }, "optimeDate" : ISODate( "2020-08-07T11:09:23Z" ), "optimeDurableDate" : ISODate( "2020-08-07T11:09:23Z" ), "lastHeartbeat" : ISODate( "2020-08-07T11:09:23.672Z" ), "lastHeartbeatRecv" : ISODate( "2020-08-07T11:09:22.804Z" ), "pingMs" : NumberLong(0), "lastHeartbeatMessage" : "" , "syncingTo" : "192.168.128.208:27017" , "syncSourceHost" : "192.168.128.208:27017" , "syncSourceId" : 0, "infoMessage" : "" , "configVersion" : 1 }, { "_id" : 2, "name" : "192.168.128.209:28017" , "health" : 1, "state" : 7, "stateStr" : "ARBITER" , "uptime" : 5882, "lastHeartbeat" : ISODate( "2020-08-07T11:09:23.672Z" ), "lastHeartbeatRecv" : ISODate( "2020-08-07T11:09:22.952Z" ), "pingMs" : NumberLong(0), "lastHeartbeatMessage" : "" , "syncingTo" : "" , "syncSourceHost" : "" , "syncSourceId" : -1, "infoMessage" : "" , "configVersion" : 1 } ], "ok" : 1, "$clusterTime" : { "clusterTime" : Timestamp(1596798563, 1), "signature" : { "hash" : BinData(0, "AAAAAAAAAAAAAAAAAAAAAAAAAAA=" ), "keyId" : NumberLong(0) } }, "operationTime" : Timestamp(1596798563, 1) } test1:PRIMARY> |
3 修改為認證模式
為考慮安全性等,需要開啟認證模式(需要通過用戶名/密碼方式登錄)
3.1 創建用戶
創建超級管理員賬號
1
2
3
4
5
6
7
8
9
10
|
test1:PRIMARY> db.createUser({user: "root" , pwd : "Root#123" , roles: [{role: "root" , db: "admin" }]}) Successfully added user: { "user" : "root" , "roles" : [ { "role" : "root" , "db" : "admin" } ] } |
3.2 創建key文件
在主庫上執行腳本生成key文件,然后將結拷貝到另外2個節點
1
2
3
|
[root@m1 mongodb] # cd /data/mongodb/27017/keyfile/ [root@m1 keyfile] # openssl rand -base64 756 > mongo.key [root@m1 keyfile] # chmod 600 mongo.key # 必須修改為600權限,否則無法啟動 |
以上完成后,將文件復制到另外2個節點
3.3 修改配置文件
配置文件中 添加如下內容,注意不同節點的文件路徑
1
2
3
4
|
security: authorization: enabled clusterAuthMode: keyFile keyFile: /data/mongodb/27017/keyfile/mongo .key |
3.4 重啟后并用認證模式登陸
1
2
3
4
5
6
7
8
9
10
11
12
|
# 關閉mongodb [root@m1 keyfile] # /usr/local/mongodb/bin/mongod -f /data/mongodb/27017/etc/mongod.conf -shutdown killing process with pid: 30675 # 啟動mongodb [root@m1 keyfile] # /usr/local/mongodb/bin/mongod -f /data/mongodb/27017/etc/mongod.conf about to fork child process, waiting until server is ready for connections. forked process: 2430 child process started successfully, parent exiting # 認證模式登陸 [root@m1 keyfile] # [root@m1 keyfile] # /usr/local/mongodb/bin/mongo -u root -p 'Root#123' --authenticationDatabase admin |
至此,mongodb 副本集搭建完畢,你會了嗎?
總結
到此這篇關于mongodb 4.0副本集搭建的文章就介紹到這了,更多相關mongodb4.0副本集搭建內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!
原文鏈接:https://www.cnblogs.com/gjc592/p/13454845.html