好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

mongodb 4.0副本集搭建的全过程

前言

近期有同学问 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

查看更多关于mongodb 4.0副本集搭建的全过程的详细内容...

  阅读:23次