mongodb4.0最新版本副本集(复制集)搭建---单机多实例

一.副本集相关知识介绍

1.复制集特点

  • 主节点唯一

        主节点唯一,但是不固定.(不确定因素的原因是,主节点挂了的话,会重新选举出一个新的主节点)

  •  大多数原则

      大多数原则,即1/2原则,一个复制集集群中,如果有大于等于1/2的节点不可用的话,那么整个进群将不可写,只可读(注:实际上应该是 投票权重的1/2

  •  从库无法写入

     从库无法写入,root权限也不行.这一点与mysql不同,mysql从库无法写入的原因是设置了readOnly

  •  复制集可以自动进行容灾

     主节点服务不可用,会自动选举出新的主节点

2.复制集节点介绍

  •  数据节点—主节点

        主节点,负责数据的读写操作,并把写的信息记录到OpLog中(mongo隐藏的库local 的oplog集合)

  • 数据节点—从节点

       复制主节点的数据,备份容灾用,主节点挂掉,会重新成为新的主节点,从节点无法进行写操作  即使,拥有root权限也不行(不同于mysql)

  • 投票节点

       不负责数据的存储和复制,只负责投票

  注:理论上一个mongo复制集,可以有一个主节点,多个从节点,多个投票节点

3.复制集工作方式

  •    客户端驱动指向mongo数据库,写的时候只会在主节点上进行,写的信息会记录在oplog中,从节点根据oplog把写入操作复制到从节点上.
  •   复制集异步操作,刷盘下效率或者网络问题影响下,从节点会有一定的延迟,所以读操作默认也是指向主节点,如果对实时性要求不高,可以配置指向从节点,实现读写分离

二.副本集集群环境

  •     系统:Mac os
  •     版本: 4.05(Linux环境下搭建一毛一样,没有任何区别,这里不是问题)
  •     机器:单机三实例
  •     组成:

        Primary    localhost:27000             主节点 负责读写

        Secondary    localhost:27001        从节点,负责容灾,主节点挂掉,则从节点成为主节点

        Arbiter       localhost:27002             投票节点,不负责数据的存储读写,存在的意义是,遵循下mongo复制集的1/2原则

三.复制集搭建

1.下载安装包

wget https://fastdl.mongodb.org/osx/mongodb-osx-ssl-x86_64-4.0.5.tgz

#Linux系统请下载
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.0.5.tgz

后续步骤完全相同,无须关心系统的问题

2.解压安装包

tar -zxvf  mongodb-osx-ssl-x86_64-4.0.5.tgz

#修改文件解压后的文件名称
mv mongodb-osx-ssl-x86_64-4.0.5 ./mongodb

#linux操作
tar -zxvf mongodb-linux-x86_64-4.0.5.tgz

3.创建目录

#在解压后的mongodb目录新建 data  log  config目录
mkdir data|mkdir log|mkdir config

在data和config目录分别创建rs1  rs2 rs3目录
cd data && mkdir rs1|mkdir rs2|mkdir rs3
cd config && mkdir rs1|mkdir rs2|mkdir rs3

4.创建实例启动配置

在config中的rs1 rs2 rs3分别增加mongod.cfg目录

touch mongod.cfg

#分别编辑mongod.cfg,这里目录是本人所在目录,具体目录请根据个人情况配置

#rs1配置mongod.cfg
dbpath=/Users/eastcool/work/soft/mongodb/data/rs1        #mongo数据安装目录
logpath=/Users/eastcool/work/soft/mongodb/log/rs1.log    #日志打印的目录
journal=true                                             #数据是否故障恢复
port=27000                                               #端口
replSet=rs                                               #复制集名称
logappend=true                                           #复制集日志是以追加的方式进行
fork = true                                             #是否后台启动

Rs2配置mongod.cfg
dbpath=/Users/eastcool/work/soft/mongodb/data/rs2        
logpath=/Users/eastcool/work/soft/mongodb/log/rs2.log
journal=true
port=27001
replSet=rs
logappend=true
fork = true


Rs3配置mongod.cfg
dbpath=/Users/eastcool/work/soft/mongodb/data/rs3        
logpath=/Users/eastcool/work/soft/mongodb/log/rs3.log
journal=true
port=27002
replSet=rs
logappend=true
fork = true

5.启动实例

#进入到mongodb的bin目录
./mongod --config /Users/eastcool/work/soft/mongodb/config/rs1/mongod.cfg

./mongod --config /Users/eastcool/work/soft/mongodb/config/rs2/mongod.cfg

./mongod --config /Users/eastcool/work/soft/mongodb/config/rs3/mongod.cfg

#实例启动说明
./mongod  mongodb守护进程命令
--config  启动配置文件标志参数
/Users/eastcool/work/soft/mongodb/config/rs3/mongod.cfg 启动配置的目录

6.加入副本集集群

#进入到27000实例
#入口在mongodb的bin目录
./mongo -port 27000

#初始化一个副本集
rs.initiate()

#查看副本集状态命令
rs.conf()

#加入secondary节点
rs.add("localhost:27001")

#加入投票节点
rs.addArb("localhost:27002")

#查看副本集状态
rs.status()


#重要且必须, secondary节点允许读取操作在当前节点进行,否则从节点无法复制主节点的数据
#进入secondary实例
./mongo -port 27001
rs.slaveOk()



7.验证

1>验证数据复制

#主节点
use test
db.createCollection('user')
db.user.insert({'name':'james'})

#从节点
use test
show collections
db.user.find()

2>验证自动切换主节点

#关闭主节点实例
ps -ef|grep 27000
kill -2 进程号

#同时打开从节点,按几次回车会发现,从节点名称从secondary变成primary表示进行了自动切换节点

8.思考

主节点服务停掉后,secondary节点成为新的主节点,当主节点恢复后,之前的主节点将会变成secondary节点,有什么办法让他继续成为主节点呢?

查看权重

rs.conf()

mongodb4.0最新版本副本集(复制集)搭建---单机多实例_第1张图片

修改权重后再次查看权重

cfg = rs.conf();
cfg.members[0].priority = 2;
rs.reconfig(cfg);

rs.conf()

mongodb4.0最新版本副本集(复制集)搭建---单机多实例_第2张图片

 

按几次回车键,神奇的发现

这时会发现之前的主节点再次成为主节点,成为主节点的secondary再次变成secondary

mongodb4.0最新版本副本集(复制集)搭建---单机多实例_第3张图片

 

 

 

 

 

 

你可能感兴趣的:(mongodb)