mongodb 4.0副本集搭建的全过程

时间:2021-05-02

前言

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

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章