服务器之家:专注于服务器技术及软件下载分享
分类导航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|数据库技术|

服务器之家 - 数据库 - MongoDB - mongodb 4.0副本集搭建的全过程

mongodb 4.0副本集搭建的全过程

2020-08-21 15:49懂点IT的耿小厨 MongoDB

这篇文章主要给大家介绍了关于mongodb 4.0副本集搭建的全过程,文中通过示例代码介绍的非常详细,对大家学习或者使用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

延伸 · 阅读

精彩推荐
  • MongoDBMongoDB查询之高级操作详解(多条件查询、正则匹配查询等)

    MongoDB查询之高级操作详解(多条件查询、正则匹配查询等)

    这篇文章主要给大家介绍了关于MongoDB查询之高级操作(多条件查询、正则匹配查询等)的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者...

    w田翔3872020-12-19
  • MongoDBWindows下MongoDB配置用户权限实例

    Windows下MongoDB配置用户权限实例

    这篇文章主要介绍了Windows下MongoDB配置用户权限实例,本文实现需要输入用户名、密码才可以访问MongoDB数据库,需要的朋友可以参考下 ...

    MongoDB教程网3082020-04-29
  • MongoDBMongoDB多条件模糊查询示例代码

    MongoDB多条件模糊查询示例代码

    这篇文章主要给大家介绍了关于MongoDB多条件模糊查询的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用MongoDB具有一定的参考学习价值...

    浅夏晴空5902020-05-25
  • MongoDB在mac系统下安装与配置mongoDB数据库

    在mac系统下安装与配置mongoDB数据库

    这篇文章主要介绍了在mac系统下安装与配置mongoDB数据库的操作步骤,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪...

    CXYhh1219312021-11-14
  • MongoDBMongoDB的索引

    MongoDB的索引

    数据库中的索引就是用来提高查询操作的性能,但是会影响插入、更新和删除的效率,因为数据库不仅要执行这些操作,还要负责索引的更新 ...

    MongoDB教程网2532020-05-12
  • MongoDBmongodb数据库基础知识之连表查询

    mongodb数据库基础知识之连表查询

    这篇文章主要给大家介绍了关于mongodb数据库基础知识之连表查询的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用mongodb具有一定的参...

    ZJW02155642020-05-22
  • MongoDBMongodb索引的优化

    Mongodb索引的优化

    MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。接下来通过本文给大家介绍Mongodb索引的优化,本文介绍的非常详细,具有参考借鉴价值,感...

    MRR3252020-05-05
  • MongoDBMongoDB系列教程(五):mongo语法和mysql语法对比学习

    MongoDB系列教程(五):mongo语法和mysql语法对比学习

    这篇文章主要介绍了MongoDB系列教程(五):mongo语法和mysql语法对比学习,本文对熟悉Mysql数据库的同学来说帮助很大,用对比的方式可以快速学习到MongoDB的命...

    MongoDB教程网3252020-05-01