MongoDB中的副本集(Replica Set)是一组维护相同数据集的mongod服务。副本集可提供冗余和高可用性。也可以说,副本集类似于有自动故障恢复功能的主从集群。通俗的讲就是用多台机器进行同一数据的异步同步,从而使多台机器拥有同一数据的多个副本,并且当主库当掉时在不需要用户干预的情况下自动切换其他备份服务器做主库。而且还可以利用副本服务器做只读服务器,实现读写分离,提高负载。
副本集有两种类型三种角色
两种类型
- 主节点(Primary)类型:数据操作的主要连接点,可读写。
- 次要(辅助、从)节点(Secondaries)类型:数据冗余备份节点,可以读或选举。
三种角色
- 主要成员(Primary) :主要接收所有写操作。就是主节点。
- 副本成员(Replicate):从主节点通过复制操作以维护相同的数据集,即备份数据,不可写操作,但可以读操作(但需要配置)。是默认的一种从节点类型。
- 仲裁者(Arbiter):不保留任何数据的副本,只具有投票选举作用。当然也可以将仲裁服务器维护为副本集的一部分,即副本成员同时也可以是仲裁者。也是一种从节点类型。
创建主节点建立存放数据和日志的目录
mkdir -p /data/mongodb/replica_sets/myrs_23001/log \ &&
mkdir -p /data/mongodb/replica_sets/myrs_23001/db
新建或修改配置文件
vim /data/mongodb/replica_sets/myrs_23001/mongod.conf
systemLog:
destination: file
path: /data/mongodb/replica_sets/myrs_23001/log/mongod.log
logAppend: true
storage:
dbPath: /data/mongodb/replica_sets/myrs_23001/db
journal:
enabled: true
engine: wiredTiger
wiredTiger:
engineConfig:
configString: cache_size=300M
directoryForIndexes: true
processManagement:
fork: true
net:
bindIp: 127.0.0.1
port: 23001
replication:
replSetName: myrs
配置解析
systemLog:
##指定日志的输出目标为文件。
destination: file
path: "/data/mongodb/replica_sets/myrs_23001/log/mongod.log"
##启用日志追加模式,新的日志将追加到现有日志文件末尾。
logAppend: true
storage:
dbPath: "/data/mongodb/replica_sets/myrs_23001/db"
journal:
##启用日志功能,确保数据持久化到磁盘。
enabled: true
##指定存储引擎为WiredTiger。
engine: wiredTiger
wiredTiger:
engineConfig:
##设置WiredTiger的缓存大小为300MB。
configString: cache_size=300M
##使用单独的目录存储索引文件。
directoryForIndexes: true
processManagement:
##以守护进程的方式运行MongoDB,即将其转变为后台进程。
fork: true
net:
bindIp: 127.0.0.1
port: 23001
replication:
##副本集的名称
replSetName: myrs
和配置第一个副本集一样,继续配置其他两个实例,端口为23002,23002,数据存放目录分别为
mkdir -p /data/mongodb/replica_sets/myrs_23002/log \ &&
mkdir -p /data/mongodb/replica_sets/myrs_23002/db
mkdir -p /data/mongodb/replica_sets/myrs_23003/log \ &&
mkdir -p /data/mongodb/replica_sets/myrs_23003/db
配置完后,分别启动三个服务
cd /usr/local/mongodb4.0/bin/
./mongod --config /data/mongodb/replica_sets/myrs_23001/mongod.conf
./mongod --config /data/mongodb/replica_sets/myrs_23002/mongod.conf
./mongod --config /data/mongodb/replica_sets/myrs_23003/mongod.conf
初始化副本集
使用客户端命令连接任意一个节点,但这里尽量要连接主节点(23001节点),连接上之后,很多命令无法使用,比如show dbs等,必须初始化副本集才行。
./mongo 127.0.0.1:23001
初始化
rs.initiate(configuration)
configuration:可选,如果没有配置,则使用默认,一般不填。
查看副本集的配置内,返回包含当前副本集配置的文档。
rs.conf(configuration)
configuration:可选,如果没有配置,则使用默认主节点配置。
添加副本节点
rs.add("127.0.0.1:23002")
添加仲裁节点,该节点不存放任何业务数据的,
rs.addArb("127.0.0.1:23003")
查看副本集状态
rs.status()
集群测试,主节点插入数据
./mongo 127.0.0.1:23001
use test
db.test_user.insertOne({"uid":1,"account":"A1"})
db.test_user.find()
登录从节点查看数据
./mongo 127.0.0.1:23002
show dbs;
发现不能读取集合的数据。当前从节点只是一个备份,不是奴隶节点,无法读取数据。因为默认情况下,从节点是没有读写权限的,可以增加读的权限。
设置为奴隶节点,允许在从成员上运行读的操作语法:
rs.slaveok()或者rs.slaveOk(true)//该方法已被弃用
//使用下面的
rs.secondaryOk()