mongodb 4.0副本集搭建的全过程
前言
近期有同学问mongodb副本集难不难部署,我的回答是不难,很快,几分钟搞定,比mysqlMHA简单的不止一点半点。那么到底如何部署呢?请看下文。
1. 准备工作
1.1下载软件
选择版本并下载mongodb的软件,注意操作系统版本等。本次我选用的是percona分支的mongodb4.2.8版本搭建,操作系统为centos6
cd/usr/local/ wgethttps://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-zxvfpercona-server-mongodb-4.2.8-8-centos6-x86_64.tar.gz ln-spercona-server-mongodb-4.2.8-8mongodb
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@m127017]#ll
总用量20
drwxr-xr-x2rootroot40968月716:59data
drwxr-xr-x2rootroot40968月716:59etc
drwxr-xr-x2rootroot40968月716:59keyfile
drwxr-xr-x2rootroot40968月716:59logs
drwxr-xr-x2rootroot40968月716:59tmp
2.2 配置文件
创建配置文件,并添加对应的配置信息,注意仲裁节点的端口
[root@m127017]#cd/data/mongodb/27017/etc/ [root@m1etc]#vimmongod.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 启动各节点
以其中一个节点为例,其他节点修改对应配置文件即可
[root@m1local]#/usr/local/mongodb/bin/mongod-f/data/mongodb/27017/etc/mongod.conf abouttoforkchildprocess,waitinguntilserverisreadyforconnections. forkedprocess:30019 childprocessstartedsuccessfully,parentexiting
2.4 初始化副本集
初始化副本集,指定各节点id及角色,注意副本集的名称和配置文件里一致。
在任意节点执行如下语句
>useadmin
switchedtodbadmin
>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"}]})
Successfullyaddeduser:{
"user":"root",
"roles":[
{
"role":"root",
"db":"admin"
}
]
}
3.2 创建key文件
在主库上执行脚本生成key文件,然后将结拷贝到另外2个节点
[root@m1mongodb]#cd/data/mongodb/27017/keyfile/ [root@m1keyfile]#opensslrand-base64756>mongo.key [root@m1keyfile]#chmod600mongo.key#必须修改为600权限,否则无法启动
以上完成后,将文件复制到另外2个节点
3.3 修改配置文件
配置文件中添加如下内容,注意不同节点的文件路径
security: authorization:enabled clusterAuthMode:keyFile keyFile:/data/mongodb/27017/keyfile/mongo.key
3.4 重启后并用认证模式登陆
#关闭mongodb [root@m1keyfile]#/usr/local/mongodb/bin/mongod-f/data/mongodb/27017/etc/mongod.conf-shutdown killingprocesswithpid:30675 #启动mongodb [root@m1keyfile]#/usr/local/mongodb/bin/mongod-f/data/mongodb/27017/etc/mongod.confabouttoforkchildprocess,waitinguntilserverisreadyforconnections. forkedprocess:2430 childprocessstartedsuccessfully,parentexiting #认证模式登陆 [root@m1keyfile]# [root@m1keyfile]#/usr/local/mongodb/bin/mongo-uroot-p'Root#123'--authenticationDatabaseadmin
至此,mongodb副本集搭建完毕,你会了吗?
总结
到此这篇关于mongodb4.0副本集搭建的文章就介绍到这了,更多相关mongodb4.0副本集搭建内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。