欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Mac环境配置MongoDB副本集

程序员文章站 2022-03-09 08:54:00
...


上篇说了简单安装和使用MongoDB,现在大致说下MongoDB对事务的支持。

1.介绍

MongbDB事务是建立在Mongo副本集上的。所以要想支持MongoDB事务,就需要先配置Mongo副本集。

1. 复制集特点
  1. 主节点唯一:主节点唯一,但是不固定.(不确定因素的原因是,主节点挂了的话,会重新选举出一个新的主节点)
  2. 大多数原则:大多数原则,即1/2原则,一个复制集集群中,如果有大于等于1/2的节点不可用的话,那么整个进群将不可写,只可读(注:实际上应该是 投票权重的1/2
  3. 从库无法写入:从库无法写入,root权限也不行.这一点与mysql不同,mysql从库无法写入的原因是设置了readOnly
  4. 复制集可以自动进行容灾: 主节点服务不可用,会自动选举出新的主节点
2.复制集节点介绍
  1. 数据节点—主节点:主节点,负责数据的读写操作,并把写的信息记录到OpLog中(mongo隐藏的库local 的oplog集合)
  2. 数据节点—从节点:复制主节点的数据,备份容灾用,主节点挂掉,会重新成为新的主节点,从节点无法进行写操作 即使,拥有root权限也不行(不同于mysql)
  3. 投票节点:不负责数据的存储和复制,只负责投票
    注:理论上一个mongo复制集,可以有一个主节点,多个从节点,多个投票节点
3.复制集工作方式
  1. 客户端驱动指向mongo数据库,写的时候只会在主节点上进行,写的信息会记录在oplog中,从节点根据oplog把写入操作复制到从节点上.
  2. 复制集异步操作,刷盘下效率或者网络问题影响下,从节点会有一定的延迟,所以读操作默认也是指向主节点,如果对实时性要求不高,可以配置指向从节点,实现读写分离。

2. 配置

进入mongodb文件夹中,分别创建目录和启动实例配置。
1.创建三个文件夹 config,log,data来存放配置信息,日志,数据文件。
Mac环境配置MongoDB副本集
2. 然后分别在三个文件夹中创建rs1,rs2,rs3存放主节点和副本集的信息

cd config
mkdir rs1
mkdir rs2
mkdir rs3

Mac环境配置MongoDB副本集
3.在config的三个文件里分别创建启动实例配置,

cd config/rs1    #进入config/rs1目录
touch mongo.cfg  #创建配置文件
cd config/rs2    #进入config/rs2目录
touch mongo.cfg  #创建配置文件
cd config/rs3    #进入config/rs3目录
touch mongo.cfg  #创建配置文件
#rs1配置mongod.cfg
dbpath=/Users/xxx/software/mongodb/data/rs1        #mongo数据安装目录
logpath=/Users/xxx/software/mongodb/log/rs1.log    #日志打印的目录
journal=true                                             #数据是否故障恢复
port=27000                                               #端口
replSet=rs                                               #复制集名称
logappend=true                                           #复制集日志是以追加的方式进行
fork = true                                             #是否后台启动

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


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

4.启动实例

./mongod --config /Users/xxx/software/mongodb/config/rs1/mongod.cfg

./mongod --config /Users/xxx/software/mongodb/config/rs2/mongod.cfg

./mongod --config /Users/xxx/software/mongodb/config/rs3/mongod.cfg

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

5.加入副本集集群

#进入到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()

简单验证

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

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

问题:
在进入副本集查询是否配置成功的时候报错,查询失败。
解决方法:执行下 rs.slaveOk()。