mongodb 4.0副本集搭建
近期有同学问mongodb副本集难不难部署,我的回答是不难,很快,几分钟搞定,比mysql MHA简单的不止一点半点。那么到底如何部署呢?请看下文。
1. 准备工作
1.1 下载软件
选择版本并下载mongodb的软件,注意操作系统版本等。本次我选用的是percona分支的mongodb 4.2.8版本搭建,操作系统为centos6
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.gztar -zxvf percona-server-mongodb-4.2.8-8-centos6-x86_64.tar.gzln -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 创建各节点相关目录
创建数据目录、日志目录等相关目录
[root@m1 ~]# mkdir -p /data/mongodb/27017/{data,logs,tmp,etc,keyfile}[root@m1 ~]# cd /data/mongodb/27017/[root@m1 27017]# ll总用量 20drwxr-xr-x 2 root root 4096 8月 7 16:59 datadrwxr-xr-x 2 root root 4096 8月 7 16:59 etcdrwxr-xr-x 2 root root 4096 8月 7 16:59 keyfiledrwxr-xr-x 2 root root 4096 8月 7 16:59 logsdrwxr-xr-x 2 root root 4096 8月 7 16:59 tmp
2.2 配置文件
创建配置文件,并添加对应的配置信息,注意本次仲裁节点的端口
27017]# cd /data/mongodb/27017/etc/etc]# vim mongod.conf添加如下内容storage:dbPath: /data/mongodb/27017/datajournal:enabled: truesystemLog:destination: filelogAppend: truepath: /data/mongodb/27017/logs/mongod.logprocessManagement:fork: truepidFilePath: /data/mongodb/27017/tmp/mongod.pidnet:port: 27017bindIp: 0.0.0.0replication:replSetName: "test1" # 副本集名称
2.3 启动各节点
以其中一个节点为例,其他节点修改对应配置文件即可
[root@m1 local]# /usr/local/mongodb/bin/mongod -f /data/mongodb/27017/etc/mongod.confabout to fork child process, waiting until server is ready for connections.forked process: 30019child process started successfully, parent exiting
2.4 初始化副本集
初始化副本集,指定各节点id及角色,注意副本集的名称和配置文件里一致。
在任意节点执行如下语句
> use adminswitched 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节点
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 创建用户
创建超级管理员账号
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个节点
[][][]
以上完成后,将文件复制到另外2个节点
3.3 修改配置文件
配置文件中 添加如下内容,注意不同节点的文件路径
security:authorization: enabledclusterAuthMode: keyFilekeyFile: /data/mongodb/27017/keyfile/mongo.key
3.4 重启后并用认证模式登陆
[]killing process with pid: 30675[]forked process: 2430child process started successfully, parent exiting[][]
至此,mongodb 副本集搭建完毕,你会了吗?
想了解更多内容或参与技术交流可以关注微信公众号【数据库干货铺】或进技术交流群沟通。
1. MySQL高可用之MHA集群部署
2. mysql8.0新增用户及加密规则修改的那些事
3. 比hive快10倍的大数据查询利器-- presto
4. 监控利器出鞘:Prometheus+Grafana监控MySQL、Redis数据库
5. PostgreSQL主从复制--物理复制
6. MySQL传统点位复制在线转为GTID模式复制
7. MySQL敏感数据加密及解密
8. MySQL数据备份及还原(一)
9. MySQL数据备份及还原(二)
相关文章