Mongodb高可用之复制集搭建

Mongodb高可用之复制集搭建

 

Mongodb复制集介绍

 

1、MongoDB复制集的主要意义在于实现服务高可用,它的现实依赖于两个方面的功能:

● 数据写入时将数据迅速复制到另一个独立节点上

● 在接受写入的节点发生故障时自动选举出一个新的替代节点【自动监控、自动选举、自动切换、自动恢复】

 

2、在实现高可用的同时,复制集实现了其他几个附加作用:

● 数据分发:将数据从一个区域复制到另一个区域,减少另一个区域的读延迟

● 读写分离:不同类型的压力分别在不同的节点上执行

● 异地容灾:在数据中心故障时候快速切换到异地

 

Mongodb复制集架构

 

一个典型的复制集由3个以上具有投票权的节点组成,包括:

● 一个主节点(primary) :接受写入操作和选举时投票

● 两个(或多个)从节点(secondary) :复制主节点上的新数据和选举时投票

● Arbiter (投票节点):将某一个从库,设置为专用的投票节点,不存储数据,不负责数据复制。

数据是如何复制的?

 

当一个修改操作,无论是插入、更新或删除,到达主节点master时,它对数据的操作将被记录下来(经过一些必要的转换),这些日志记录称为oplog。

mongodb的oplog,你可以当成mysql的binlog,oracle的redo。区别在于oplog是一张表(集合collection),json格式记录的。

从节点secondary通过在主节点上打开一个tailable的游标,不断获取(抽取)新进入主节点的oplog, 并在自己的数据上回放,以此保持跟主节点的数据一致。

【RS只有 异步模式,没有同步模式的】

 

 

下面就演示一下搭建Mongodb高可用复制集(一主两副本-PSS):

--使用的是目前最新版本Mongodb 4.2.8

https://www.mongodb.com/try/download/community

 

创建目录

su - mongodbmkdir -p /mongodb/28017/conf /mongodb/28017/data /mongodb/28017/logmkdir -p /mongodb/28018/conf /mongodb/28018/data /mongodb/28018/logmkdir -p /mongodb/28019/conf /mongodb/28019/data /mongodb/28019/log

 

创建配置文件mongod.conf

 

cat > /mongodb/28017/conf/mongod.conf <<EOFsystemLog:  destination: file  path: /mongodb/28017/log/mongodb.log  logAppend: truestorage:  journal:    enabled: true  dbPath: /mongodb/28017/data  directoryPerDB: true  #engine: wiredTiger  wiredTiger:    engineConfig:      cacheSizeGB: 1      directoryForIndexes: true    collectionConfig:      blockCompressor: zlib    indexConfig:      prefixCompression: trueprocessManagement:  fork: truenet:   port: 28017   bindIp: 0.0.0.0replication:  oplogSizeMB: 2048  replSetName: my_replEOF  
cp  /mongodb/28017/conf/mongod.conf  /mongodb/28018/conf/cp  /mongodb/28017/conf/mongod.conf  /mongodb/28019/conf/
sed -i 's#28017#28018#g' /mongodb/28018/conf/mongod.confsed -i 's#28017#28019#g' /mongodb/28019/conf/mongod.conf

mongod命令启动节点

mongod -f /mongodb/28017/conf/mongod.confmongod -f /mongodb/28018/conf/mongod.confmongod -f /mongodb/28019/conf/mongod.conf
[mongodb@mongodb01 conf]$ netstat -tulnpProto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name      tcp        0      0 0.0.0.0:28017           0.0.0.0:*               LISTEN      2009/mongod         tcp        0      0 0.0.0.0:28018           0.0.0.0:*               LISTEN      2047/mongod         tcp        0      0 0.0.0.0:28019           0.0.0.0:*               LISTEN      2085/mongod

 

配置复制集

1主2从(PSS):

_id: 'my_repl' 是复制集的名字,要和配置文件中的replSetName参数一致。

config = {_id: 'my_repl', members: [                          {_id: 0, host: '192.168.1.150:28017'},                          {_id: 1, host: '192.168.1.150:28018'},                          {_id: 2, host: '192.168.1.150:28019'}]          }rs.initiate(config)   

 

开放从节点的只读权限

 

从节点默认是:不能读、不能写

一般业务上,从节点是做只读库,所以我们要开放从节点的只读权限。

登录端口为28018、28019的从库:mongo --host 192.168.1.150:28018  或者 mongo --port 28018my_repl:SECONDARY> rs.slaveOk()mongo --host 192.168.1.150:28019   或者 mongo --port 28019my_repl:SECONDARY> rs.slaveOk()

复制集的数据同步测试

主节点:use testdb.movies.insert([ { "title" : "Jaws", "year" : 1975, "imdb_rating" : 8.1 },{ "title" : "Batman", "year" : 1989, "imdb_rating" : 7.6 },] );
从节点:use testdb.movies.find().pretty();

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值