MongoDB复制集

一组Mongodb复制集,就是一组mongod进程,这些进程维护同一个数据集合。复制集提供了数据冗余和高等级的可靠性,这是生产部署的基础。
保证数据在生产部署时的冗余和可靠性,通过在不同的机器上保存副本来保证数据的不会因为单点损坏而丢失。能够随时应对数据丢失、机器损坏带来的风险,牛逼到不行。换一句话来说,还能提高读取能力,用户的读取服务器和写入服务器在不同的地方,而且,由不同的服务器为不同的用户提供服务,提高整个系统的负载,简直就是云存储的翻版…一组复制集就是一组mongod实例掌管同一个数据集,实例可以在不同的机器上面。实例中包含一个主导,接受客户端所有的写入操作,其他都是副本实例,从主服务器上获得数据并保持同步。
主服务器很重要,包含了所有的改变操作(写)的日志。但是副本服务器集群包含有所有的主服务器数据,因此当主服务器挂掉了,就会在副本服务器上重新选取一个成为主服务器。每个复制集还有一个仲裁者,仲裁者不存储数据,只是负责通过心跳包来确
认集群中集合的数量,并在主服务器选举的时候作为仲裁决定结果。

一个包含3个mongod的复制集架构如下所示
在这里插入图片描述

如果主服务器失效,会变成:在这里插入图片描述

加上可选的仲裁者:在这里插入图片描述
主服务器失效:
在这里插入图片描述

三节点MongoDB复制集
#创建多mongodb多实例
mkdir -p /mongodb/28017/conf /mongodb/28017/data /mongodb/28017/log
mkdir -p /mongodb/28018/conf /mongodb/28018/data /mongodb/28018/log
mkdir -p /mongodb/28019/conf /mongodb/28019/data /mongodb/28019/log
mkdir -p /mongodb/28020/conf /mongodb/28020/data /mongodb/28020/log
#创建mongodb多
vim /mongodb/28017/conf/mongod.conf
systemLog:
destination: file
path: /mongodb/28017/log/mongodb.log
logAppend: true
storage:
journal:
enabled: true
dbPath: /mongodb/28017/data
directoryPerDB: true
#engine: wiredTiger
wiredTiger:
engineConfig:
cacheSizeGB: 1
directoryForIndexes: true
collectionConfig:
blockCompressor: zlib
indexConfig:
prefixCompression: true
processManagement:
fork: true
net:
port: 28017
replication:
oplogSizeMB: 2048
replSetName: my_repl

\cp /mongodb/28017/conf/mongod.conf /mongodb/28018/conf/
\cp /mongodb/28017/conf/mongod.conf /mongodb/28019/conf/
\cp /mongodb/28017/conf/mongod.conf /mongodb/28020/conf/
sed ‘s#28017#28018#g’ /mongodb/28018/conf/mongod.conf -i
sed ‘s#28017#28019#g’ /mongodb/28019/conf/mongod.conf -i
sed ‘s#28017#28020#g’ /mongodb/28020/conf/mongod.conf -i

登录:
chown -R mongod:mongod /mongodb/

su - mongod
mongod -f /mongodb/28017/conf/mongod.conf
mongod -f /mongodb/28018/conf/mongod.conf
mongod -f /mongodb/28019/conf/mongod.conf
mongod -f /mongodb/28020/conf/mongod.conf

mongo --port=28017
use admin
config = {_id: ‘my_repl’, members: [
{_id: 0, host: ‘10.0.0.134:28017’},
{_id: 1, host: ‘10.0.0.134:28018’},
{_id: 2, host: ‘10.0.0.134:28019’}]
}
rs.initiate(config)
use test;
db.movies.insert([ { “title” : “Jaws”, “year” : 1975, “imdb_rating” : 8.1 },{ “title” : “Batman”, “year” : 1989, “imdb_rating” : 7.6 },
] );

复制集状态查询:
[mongod@mongo ~]$ mongo --port=28017
MongoDB shell version: 3.2.8
connecting to: 127.0.0.1:28017/test
my_repl:PRIMARY> rs.status();
{
“set” : “my_repl”,
“date” : ISODate(“2018-01-04T09:06:52.951Z”),
“myState” : 1,
“term” : NumberLong(1),
“heartbeatIntervalMillis” : NumberLong(2000),
“members” : [
{
“_id” : 0,
“name” : “10.0.0.134:28017”, #ip port
“health” : 1,
“state” : 1,
“stateStr” : “PRIMARY”, “PRIMARY” 主节点
“uptime” : 772,
“optime” : {
“ts” : Timestamp(1515056188, 1),
“t” : NumberLong(1)
},
“optimeDate” : ISODate(“2018-01-04T08:56:28Z”),
“electionTime” : Timestamp(1515056187, 1),
“electionDate” : ISODate(“2018-01-04T08:56:27Z”),
“configVersion” : 1,
“self” : true
},
{
“_id” : 1,
“name” : “10.0.0.134:28018”, #ip port
“health” : 1,
“state” : 2,
“stateStr” : “SECONDARY”, #从节点
“uptime” : 635,
“optime” : {
“ts” : Timestamp(1515056188, 1),
“t” : NumberLong(1)
},
“optimeDate” : ISODate(“2018-01-04T08:56:28Z”),
“lastHeartbeat” : ISODate(“2018-01-04T09:06:52.289Z”),
“lastHeartbeatRecv” : ISODate(“2018-01-04T09:06:51.722Z”),
“pingMs” : NumberLong(0),
“syncingTo” : “10.0.0.134:28017”,
“configVersion” : 1
},
{
“_id” : 2,
“name” : “10.0.0.134:28019”, #ip port
“health” : 1,
“state” : 2,
“stateStr” : “SECONDARY”, #从节点
“uptime” : 635,
“optime” : {
“ts” : Timestamp(1515056188, 1),
“t” : NumberLong(1)
},
“optimeDate” : ISODate(“2018-01-04T08:56:28Z”),
“lastHeartbeat” : ISODate(“2018-01-04T09:06:52.289Z”),
“lastHeartbeatRecv” : ISODate(“2018-01-04T09:06:51.601Z”),
“pingMs” : NumberLong(0),
“syncingTo” : “10.0.0.134:28017”,
“configVersion” : 1
}
],
“ok” : 1
}

主节点上添加节点:
my_repl:PRIMARY> rs.add (“10.0.0.134:28020”) #添加从节点
{ “ok” : 1 }
my_repl:PRIMARY> rs.status()
{
“set” : “my_repl”,
“date” : ISODate(“2018-01-04T09:16:33.144Z”),
“myState” : 1,
“term” : NumberLong(1),
“heartbeatIntervalMillis” : NumberLong(2000),
“members” : [
{
“_id” : 0,
“name” : “10.0.0.134:28017”,
“health” : 1,
“state” : 1,
“stateStr” : “PRIMARY”,
“uptime” : 1353,
“optime” : {
“ts” : Timestamp(1515057249, 1),
“t” : NumberLong(1)
},
“optimeDate” : ISODate(“2018-01-04T09:14:09Z”),
“electionTime” : Timestamp(1515056187, 1),
“electionDate” : ISODate(“2018-01-04T08:56:27Z”),
“configVersion” : 2,
“self” : true
},
{
“_id” : 1,
“name” : “10.0.0.134:28018”,
“health” : 1,
“state” : 2,
“stateStr” : “SECONDARY”,
“uptime” : 1216,
“optime” : {
“ts” : Timestamp(1515057249, 1),
“t” : NumberLong(1)
},
“optimeDate” : ISODate(“2018-01-04T09:14:09Z”),
“lastHeartbeat” : ISODate(“2018-01-04T09:16:31.632Z”),
“lastHeartbeatRecv” : ISODate(“2018-01-04T09:16:31.693Z”),
“pingMs” : NumberLong(0),
“syncingTo” : “10.0.0.134:28017”,
“configVersion” : 2
},
{
“_id” : 2,
“name” : “10.0.0.134:28019”,
“health” : 1,
“state” : 2,
“stateStr” : “SECONDARY”,
“uptime” : 1216,
“optime” : {
“ts” : Timestamp(1515057249, 1),
“t” : NumberLong(1)
},
“optimeDate” : ISODate(“2018-01-04T09:14:09Z”),
“lastHeartbeat” : ISODate(“2018-01-04T09:16:31.632Z”),
“lastHeartbeatRecv” : ISODate(“2018-01-04T09:16:31.693Z”),
“pingMs” : NumberLong(0),
“syncingTo” : “10.0.0.134:28017”,
“configVersion” : 2
},
{
“_id” : 3,
“name” : “10.0.0.134:28020”,
“health” : 1,
“state” : 2,
“stateStr” : “SECONDARY”, #从节点10.0.0.134:28020
“uptime” : 143,
“optime” : {
“ts” : Timestamp(1515057249, 1),
“t” : NumberLong(1)
},
“optimeDate” : ISODate(“2018-01-04T09:14:09Z”),
“lastHeartbeat” : ISODate(“2018-01-04T09:16:31.647Z”),
“lastHeartbeatRecv” : ISODate(“2018-01-04T09:16:30.645Z”),
“pingMs” : NumberLong(0),
“configVersion” : 2
}
],
“ok” : 1
}

删除节点:
my_repl:PRIMARY> rs.remove(“10.0.0.134:28020”) #删除从节点
{ “ok” : 1 }
my_repl:PRIMARY> rs.status()
{
“set” : “my_repl”,
“date” : ISODate(“2018-01-04T09:18:10.582Z”),
“myState” : 1,
“term” : NumberLong(1),
“heartbeatIntervalMillis” : NumberLong(2000),
“members” : [
{
“_id” : 0,
“name” : “10.0.0.134:28017”,
“health” : 1,
“state” : 1,
“stateStr” : “PRIMARY”,
“uptime” : 1450,
“optime” : {
“ts” : Timestamp(1515057484, 1),
“t” : NumberLong(1)
},
“optimeDate” : ISODate(“2018-01-04T09:18:04Z”),
“electionTime” : Timestamp(1515056187, 1),
“electionDate” : ISODate(“2018-01-04T08:56:27Z”),
“configVersion” : 3,
“self” : true
},
{
“_id” : 1,
“name” : “10.0.0.134:28018”,
“health” : 1,
“state” : 2,
“stateStr” : “SECONDARY”,
“uptime” : 1313,
“optime” : {
“ts” : Timestamp(1515057484, 1),
“t” : NumberLong(1)
},
“optimeDate” : ISODate(“2018-01-04T09:18:04Z”),
“lastHeartbeat” : ISODate(“2018-01-04T09:18:10.231Z”),
“lastHeartbeatRecv” : ISODate(“2018-01-04T09:18:10.241Z”),
“pingMs” : NumberLong(0),
“syncingTo” : “10.0.0.134:28017”,
“configVersion” : 3
},
{
“_id” : 2,
“name” : “10.0.0.134:28019”,
“health” : 1,
“state” : 2,
“stateStr” : “SECONDARY”,
“uptime” : 1313,
“optime” : {
“ts” : Timestamp(1515057484, 1),
“t” : NumberLong(1)
},
“optimeDate” : ISODate(“2018-01-04T09:18:04Z”),
“lastHeartbeat” : ISODate(“2018-01-04T09:18:10.231Z”),
“lastHeartbeatRecv” : ISODate(“2018-01-04T09:18:10.243Z”),
“pingMs” : NumberLong(0),
“syncingTo” : “10.0.0.134:28017”,
“configVersion” : 3
}
],
“ok” : 1
}

添加仲裁节点:
my_repl:PRIMARY> rs.addArb(“10.0.0.134:28020”);#添加仲裁节点
{ “ok” : 1 }
my_repl:PRIMARY> rs.status();
{
“set” : “my_repl”,
“date” : ISODate(“2018-01-04T09:19:32.814Z”),
“myState” : 1,
“term” : NumberLong(1),
“heartbeatIntervalMillis” : NumberLong(2000),
“members” : [
{
“_id” : 0,
“name” : “10.0.0.134:28017”,
“health” : 1,
“state” : 1,
“stateStr” : “PRIMARY”,
“uptime” : 1532,
“optime” : {
“ts” : Timestamp(1515057570, 1),
“t” : NumberLong(1)
},
“optimeDate” : ISODate(“2018-01-04T09:19:30Z”),
“electionTime” : Timestamp(1515056187, 1),
“electionDate” : ISODate(“2018-01-04T08:56:27Z”),
“configVersion” : 6,
“self” : true
},
{
“_id” : 1,
“name” : “10.0.0.134:28018”,
“health” : 1,
“state” : 2,
“stateStr” : “SECONDARY”,
“uptime” : 1395,
“optime” : {
“ts” : Timestamp(1515057570, 1),
“t” : NumberLong(1)
},
“optimeDate” : ISODate(“2018-01-04T09:19:30Z”),
“lastHeartbeat” : ISODate(“2018-01-04T09:19:30.915Z”),
“lastHeartbeatRecv” : ISODate(“2018-01-04T09:19:30.926Z”),
“pingMs” : NumberLong(0),
“syncingTo” : “10.0.0.134:28017”,
“configVersion” : 5
},
{
“_id” : 2,
“name” : “10.0.0.134:28019”,
“health” : 1,
“state” : 2,
“stateStr” : “SECONDARY”,
“uptime” : 1395,
“optime” : {
“ts” : Timestamp(1515057534, 1),
“t” : NumberLong(1)
},
“optimeDate” : ISODate(“2018-01-04T09:18:54Z”),
“lastHeartbeat” : ISODate(“2018-01-04T09:19:30.902Z”),
“lastHeartbeatRecv” : ISODate(“2018-01-04T09:19:30.922Z”),
“pingMs” : NumberLong(0),
“syncingTo” : “10.0.0.134:28017”,
“configVersion” : 5
},
{
“_id” : 4,
“name” : “10.0.0.134:28020”,
“health” : 1,
“state” : 7,
“stateStr” : “ARBITER”, #仲裁节点
“uptime” : 34,
“lastHeartbeat” : ISODate(“2018-01-04T09:19:30.903Z”),
“lastHeartbeatRecv” : ISODate(“2018-01-04T09:19:30.924Z”),
“pingMs” : NumberLong(0),
“syncingTo” : “10.0.0.134:28019”,
“configVersion” : 5
}
],
“ok” : 1
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值