mongodb的复制集及搭建
1.mongodb的复制集
MongoDB复制是将数据同步在多个服务器的过程。
复制提供了数据的冗余备份,并在多个服务器上存储数据副本,提高了数据的可用性, 并可以保证数据的安全性。
MongoDB复制集是一组拥有相同数据集的mongodb实例组成的集群。
2.mongodb复制集中的读写
写操作:
在mongodb中,进行写操作时,都是写入主节点的,同时会把操作记录在主节点的oplog记录中,而从节点则根据oplog的操作记录复制主节点的操作
读操作:
读操作也是从主节点中读取,因为由于各种原因,从节点的更新速度会慢与主节点
(这里与MYSQL的区别:虽然MYSQL可以设置主从表,而且从表可以加上read only限制,但是拥有一定权限则可以对从表进行写入操作,但是mongodb是绝对不可以)
3.mongodb复制集的特性
- 数据一致性
mongodb是支持主节点唯一的,很好的保证了数据的一致性(注意:Mysql是有双主结构的),但是主节点不是固定的,当主节点挂了之后,从节点会进行选举,或者是人为配置,选出一个从节点作为主节点 - 大多数原则(保证数据的备份)
集群存活节点小于等于二分之一时,集群则不可写,只能读。(复制集的服务器挂了一半就无法进行选举,全部变为从节点)
4.复制集中的节点类型
数据节点:存储数据,允许读写(可以作为主从节点)
投票节点:只在选举主节点时起作用,不允许存储数据
5.mongodb复制集搭建过程
- 建立数据文件夹
mkdir -p /mongodb/data/master
mkdir -p /mongodb/data/slaver
mkdir -p /mongodb/data/arbiter
#三个目录分别对应主,备,仲裁节点
- 建立配置文件
#master.conf
dbpath=/mongodb/data/master
logpath=/mongodb/log/master.log
pidfilepath=/mongodb/master.pid
directoryperdb=true
logappend=true
replSet=testrs
bind_ip=10.10.148.130
port=27017
oplogSize=10000
fork=true
noprealloc=true
#arbiter.conf
dbpath=/mongodb/data/arbiter
logpath=/mongodb/log/arbiter.log
pidfilepath=/mongodb/arbiter.pid
directoryperdb=true
logappend=true
replSet=testrs
bind_ip=10.10.148.132
port=27017
oplogSize=10000
fork=true
noprealloc=true
参数解释:
dbpath:数据存放目录
logpath:日志存放路径
pidfilepath:进程文件,方便停止mongodb
directoryperdb:为每一个数据库按照数据库名建立文件夹存放
logappend:以追加的方式记录日志
replSet:replica set的名字
bind_ip:mongodb所绑定的ip地址
port:mongodb进程所使用的端口号,默认为27017
oplogSize:mongodb操作日志文件的最大大小。单位为Mb,默认为硬盘剩余空间的5%
fork:以后台方式运行进程
noprealloc:不预先分配存储
- 启动mongodb(进入每一个mongodb节点的bin目录下,启动)
./monood -f master.conf
./mongod -f slaver.conf
./mongod -f arbiter.conf
- 配置主,备,仲裁节点
可以通过客户端连接mongodb,也可以直接在三个节点中选择一个连接mongodb
./mongo 10.10.148.130:27017 #ip和port是某个节点的地址
>use admin
>cfg={ _id:"testrs", members:[ {_id:0,host:'10.10.148.130:27017',priority:2}, {_id:1,host:'10.10.148.131:27017',priority:1},
{_id:2,host:'10.10.148.132:27017',arbiterOnly:true}] };
>rs.initiate(cfg) #使配置生效
cfg是可以任意的名字,当然最好不要是mongodb的关键字,conf,config都可以。最外层的_id表示replica set的名字,members里包含的是所有节点的地址以及优先级。优先级最高的即成为主节点,即这里的10.10.148.130:27017。特别注意的是,对于仲裁节点,需要有个特别的配置——arbiterOnly:true。这个千万不能少了,不然主备模式就不能生效。
上一篇: mongodb简单入门教程
下一篇: Docker安装及基本操作