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

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实现定时备份与恢复的方法教程,文中通过示例代码介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面...

    chenjsh364522020-05-13
  • MongoDBmongodb基本命令实例小结

    mongodb基本命令实例小结

    这篇文章主要介绍了mongodb基本命令,结合实例形式总结分析了MongoDB数据库切换、查看、删除、查询等基本命令用法与操作注意事项,需要的朋友可以参考下...

    dawn-liu3652020-05-26
  • MongoDBMongoDB中javascript脚本编程简介和入门实例

    MongoDB中javascript脚本编程简介和入门实例

    作为一个数据库,MongoDB有一个很大的优势——它使用js管理数据库,所以也能够使用js脚本进行复杂的管理——这种方法非常灵活 ...

    MongoDB教程网6982020-04-24
  • MongoDBMongoDB 内存使用情况分析

    MongoDB 内存使用情况分析

    都说 MongoDB 是个内存大户,但是怎么知道它到底用了多少内存呢...

    MongoDB教程网10002020-09-29
  • MongoDB迁移sqlserver数据到MongoDb的方法

    迁移sqlserver数据到MongoDb的方法

    这篇文章主要介绍了迁移sqlserver数据到MongoDb的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...

    听枫xl9682021-01-03
  • MongoDBMongoDB凭什么跻身数据库排行前五

    MongoDB凭什么跻身数据库排行前五

    MongoDB以比去年同期超出65.96分的成绩继续雄踞榜单前五,这个增幅在全榜仅次于PostgreSQL的77.99,而其相对于4月份的6.10分的增长也是仅次于微软SQL Server排名...

    孙浩峰3892020-05-22
  • MongoDB分布式文档存储数据库之MongoDB分片集群的问题

    分布式文档存储数据库之MongoDB分片集群的问题

    这篇文章主要介绍了分布式文档存储数据库之MongoDB分片集群的问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋...

    Linux-18743072020-12-20
  • MongoDBMongoDB安装图文教程

    MongoDB安装图文教程

    这篇文章主要为大家详细介绍了MongoDB安装图文教程,分为两大部分为大家介绍下载MongoDB和安装MongoDB的方法,感兴趣的小伙伴们可以参考一下 ...

    Yangyi.He6132020-05-07