mongodb 副本集搭建
一 环境说明
搭建副本集一般需要三台机器,也是三个角色,主节点、从节点、仲裁节点仲裁节点不存储数据,主从节点都存储数据。
我这里使用了一台机器,安装了三个mongodb,使用了不同的端口,分别为
192.168.0.134:27017 192.168.0.134:27018 192.168.0.134:27019
二 安装多个mongodb
我这里使用的压缩包安装,去官网下载适合自己系统的安装包https://www.mongodb.com/download-center/community?tck=docs_server,我这里使用的是rhel4.2.6版本
1 解压
tar -zxvf mongodb-linux-x86_64-rhel70-4.2.6.tgz
2 移动到新目录
mv mongodb-linux-x86_64-rhel70-4.2.6 /usr/local/mongodb 然后去/usr/local/mongodb 目录里面新创建db和logs两个目录
3 更改配置文件
dbpath = /usr/local/mongodb/db #数据文件存放目录 logpath = /usr/local//mongodb/logs/mongodb.log #日志文件存放目录 port = 27018 #端口 fork = true #以守护程序的方式启用,即在后台运行 replSet=rs001 # 集群名字 bind_ip=0.0.0.0
4 启动
./mongod -f mongodb.conf
这样一个mongodb就完成了安装,然后把mongodb的安装目录复制一份
5 安装多个mongodb
cp -r /usr/local/mongodb /usr/local/mongodb2
然后需要修改的文件有mongodb.conf
mongodb.conf的配置:
dbpath = /usr/local/mongodb2/db #数据文件存放目录 logpath = /usr/local//mongodb2/logs/mongodb.log #日志文件存放目录 port = 27019 #端口 (端口不能一样) fork = true #以守护程序的方式启用,即在后台运行
最后再次启动即可。
三 副本集设置
1 三个节点配置文件
节点1
dbpath = /usr/local/mongodb/db #数据文件存放目录 logpath = /usr/local//mongodb/logs/mongodb.log #日志文件存放目录 port = 27018 #端口 fork = true #以守护程序的方式启用,即在后台运行 replSet=rs001 # 相同的集群副本集名称要一致 bind_ip=0.0.0.0
节点二
dbpath = /usr/local/mongodb2/db #数据文件存放目录 logpath = /usr/local//mongodb2/logs/mongodb.log #日志文件存放目录 port = 27019 #端口 fork = true #以守护程序的方式启用,即在后台运行 bind_ip=0.0.0.0 replSet=rs001
节点三
dbpath = /usr/local/mongodb3/db #数据文件存放目录 logpath = /usr/local//mongodb3/logs/mongodb.log #日志文件存放目录 port = 27017 #端口 fork = true #以守护程序的方式启用,即在后台运行 bind_ip=0.0.0.0 replSet=rs001
2 配置副本集(无仲裁类型)
副本集有两个模式一种是有仲裁角色的,一种是没有仲裁角色的。两者的优缺点如下:
优点: 主如果宕机,仲裁节点会选举从作为新的主 如果副本集中没有仲裁节点,那么集群的主从切换依然可以进行。缺点: 如果副本集中拥有仲裁节点,那么一旦仲裁节点挂了,集群中就不能进行主从切换了。
我这里设置的无仲裁的类型
需要先登录一个mongodb,这里我选择27017
mongo --port 27017 use admin #选择数据库 cfg={_id:"rs001",members: [ {_id:0,host:"192.168.0.134:27017"}, {_id:1,host:"192.168.0.134:27018"}, {_id:2,host:"192.168.0.134:27019"}
执行完上面的最后一条命令,提示如下:
{ "_id" : "rs001", "members" : [ { "_id" : 0, "host" : "192.168.0.134:27017" }, { "_id" : 1, "host" : "192.168.0.134:27018" }, { "_id" : 2, "host" : "192.168.0.134:27019" } ] }
然后进行初始化操作
rs.initiate(cfg)
rs.initiate(cfg); { "ok" : 1, "$clusterTime" : { "clusterTime" : Timestamp(1589512443, 1), "signature" : { "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="), "keyId" : NumberLong(0) } }, "operationTime" : Timestamp(1589512443, 1) }
最后验证 rs.status()
rs001:SECONDARY> rs.status() { "set" : "rs001", "date" : ISODate("2020-05-15T03:14:21.861Z"), "myState" : 1, "term" : NumberLong(1), "syncingTo" : "", "syncSourceHost" : "", "syncSourceId" : -1, "heartbeatIntervalMillis" : NumberLong(2000), "majorityVoteCount" : 2, "writeMajorityCount" : 2, "optimes" : { "lastCommittedOpTime" : { "ts" : Timestamp(1589512455, 1), "t" : NumberLong(1) }, "lastCommittedWallTime" : ISODate("2020-05-15T03:14:15.356Z"), "readConcernMajorityOpTime" : { "ts" : Timestamp(1589512455, 1), "t" : NumberLong(1) }, "readConcernMajorityWallTime" : ISODate("2020-05-15T03:14:15.356Z"), "appliedOpTime" : { "ts" : Timestamp(1589512455, 1), "t" : NumberLong(1) }, "durableOpTime" : { "ts" : Timestamp(1589512455, 1), "t" : NumberLong(1) }, "lastAppliedWallTime" : ISODate("2020-05-15T03:14:15.356Z"), "lastDurableWallTime" : ISODate("2020-05-15T03:14:15.356Z") }, "lastStableRecoveryTimestamp" : Timestamp(1589512454, 3), "lastStableCheckpointTimestamp" : Timestamp(1589512454, 3), "electionCandidateMetrics" : { "lastElectionReason" : "electionTimeout", "lastElectionDate" : ISODate("2020-05-15T03:14:14.596Z"), "electionTerm" : NumberLong(1), "lastCommittedOpTimeAtElection" : { "ts" : Timestamp(0, 0), "t" : NumberLong(-1) }, "lastSeenOpTimeAtElection" : { "ts" : Timestamp(1589512443, 1), "t" : NumberLong(-1) }, "numVotesNeeded" : 2, "priorityAtElection" : 1, "electionTimeoutMillis" : NumberLong(10000), "numCatchUpOps" : NumberLong(0), "newTermStartDate" : ISODate("2020-05-15T03:14:14.759Z"), "wMajorityWriteAvailabilityDate" : ISODate("2020-05-15T03:14:15.344Z") }, "members" : [ { "_id" : 0, "name" : "192.168.0.134:27017", "health" : 1, "state" : 1, "stateStr" : "PRIMARY", "uptime" : 214, "optime" : { "ts" : Timestamp(1589512455, 1), "t" : NumberLong(1) }, "optimeDate" : ISODate("2020-05-15T03:14:15Z"), "syncingTo" : "", "syncSourceHost" : "", "syncSourceId" : -1, "infoMessage" : "could not find member to sync from", "electionTime" : Timestamp(1589512454, 1), "electionDate" : ISODate("2020-05-15T03:14:14Z"), "configVersion" : 1, "self" : true, "lastHeartbeatMessage" : "" }, { "_id" : 1, "name" : "192.168.0.134:27018", "health" : 1, "state" : 2, "stateStr" : "SECONDARY", "uptime" : 18, "optime" : { "ts" : Timestamp(1589512455, 1), "t" : NumberLong(1) }, "optimeDurable" : { "ts" : Timestamp(1589512455, 1), "t" : NumberLong(1) }, "optimeDate" : ISODate("2020-05-15T03:14:15Z"), "optimeDurableDate" : ISODate("2020-05-15T03:14:15Z"), "lastHeartbeat" : ISODate("2020-05-15T03:14:20.723Z"), "lastHeartbeatRecv" : ISODate("2020-05-15T03:14:20.237Z"), "pingMs" : NumberLong(11), "lastHeartbeatMessage" : "", "syncingTo" : "192.168.0.134:27019", "syncSourceHost" : "192.168.0.134:27019", "syncSourceId" : 2, "infoMessage" : "", "configVersion" : 1 }, { "_id" : 2, "name" : "192.168.0.134:27019", "health" : 1, "state" : 2, "stateStr" : "SECONDARY", "uptime" : 18, "optime" : { "ts" : Timestamp(1589512455, 1), "t" : NumberLong(1) }, "optimeDurable" : { "ts" : Timestamp(1589512455, 1), "t" : NumberLong(1) }, "optimeDate" : ISODate("2020-05-15T03:14:15Z"), "optimeDurableDate" : ISODate("2020-05-15T03:14:15Z"), "lastHeartbeat" : ISODate("2020-05-15T03:14:20.726Z"), "lastHeartbeatRecv" : ISODate("2020-05-15T03:14:21.346Z"), "pingMs" : NumberLong(0), "lastHeartbeatMessage" : "", "syncingTo" : "192.168.0.134:27017", "syncSourceHost" : "192.168.0.134:27017", "syncSourceId" : 0, "infoMessage" : "", "configVersion" : 1 } ], "ok" : 1, "$clusterTime" : { "clusterTime" : Timestamp(1589512455, 1), "signature" : { "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="), "keyId" : NumberLong(0) } }, "operationTime" : Timestamp(1589512455, 1) }
3 有仲裁类型
cfg={_id:"rs001",members: [ {_id:0,host:"192.168.0.134:27017",priority:2}, {_id:1,host:"192.168.0.134:27018",priority:1}, {_id:2,host:"192.168.0.134:27019",arbiterOnly:true} ]}
其余配置都不变。
四 验证
登录到主上面,建立一个新集合
use mydb db.acc.insert({AccountID:1,UserName:"123",password:"123456"}) show tables
然后登录到从上面去查看
mongo --port 27018
show dbs 查看数据库
admin 0.000GB config 0.000GB local 0.000GB mydb 0.000GB
查看表acc是否存在
use mydb show tables
如果show dbs的时候报错,需要执行rs.slaveOk()即可。
相关推荐
lbyd0 2020-11-17
BigYellow 2020-11-16
sushuanglei 2020-11-12
我心似明月 2020-11-09
zhushenghan 2020-11-09
sunnnyduan 2020-10-16
不要皱眉 2020-10-14
xiaohai 2020-09-29
songxiugongwang 2020-09-22
萌亖 2020-09-17
LuckyLXG 2020-09-08
sdmzhu 2020-09-01
mkhhxxttxs 2020-09-16
xiaohai 2020-09-16
newcome 2020-09-09
jaylong 2020-08-19
大秦铁骑 2020-08-19
thatway 2020-08-19