MongoDB的副本集

436 阅读2分钟

副本集部署

复制数据的目的

  1. 存储数据冗余,保证数据的高可用性,避免因单点故障导致数据的丢失。可以随时应对数据的丢失,保证服务的高可靠性。
  2. 读写分离,分担读的压力,提高服务的整体负载能力。
  3. 可以进行对用户透明的系统维护升级。

副本集组件

  1. 主节点Primary 一个副本集,只能一个Primary; Primary,可读取、可写入,同时将更改操作写入oplog; 主节点故障时,自动在从节点中选出一个作为主节点。

  2. 从节点Secondary 一个副本集,可以有一个或者多个从节点; 从节点默认不可读,需要设置才可以读取数据; 从节点异步地从主节点同步oplog,然后作用于自己的数据集,保证实现一个完整的数据副本。

  3. 仲裁节点Arbiter 不存储数据,只记录副本集中的节点数或者选举主节点时进行仲裁; 具有选举权,但自己不能成为主;

以上每个节点均为mongod进程。

生产环境部署

常用集群架构: 在这里插入图片描述 在这里插入图片描述 以1主2从的结构为例,搭建伪分布式集群:

  1. 规划 localhost:27017 localhost:27018 localhost:27019 分别在三个端口开三个mongod进程
  2. 编辑配置文件 rs_mongod1.conf rs_mongod2.conf rs_mongod3.conf
systemLog:
  destination: file
  path: /var/log/mongodb/mongod1.conf
  logAppend: true
storage:
  dbPath: /usr/local/mongodb4.4.1/data/rs_mongod1
  journal:
    enabled: true
net:
  bindIp: localhost
  port: 27017
processManagement:
  fork: true
replication:
  oplogSimeMB: 100
  replSetName: my_repl

#认证
#security:
#  keyFile: xxxx.keyfile
#  authorization: enabled

  1. 使用配置文件启动mongod
sudo mongod --config ./rs_mongod1.conf
sudo mongod --config ./rs_mongod2.conf
sudo mongod --config ./rs_mongod3.conf
  1. 主节点初始化 指定一个主节点,并使用mongo shell连接
mongo --host localhost --port 27017

>show dbs; //无法查询
>var conf = {_id:"my_repl",members:[{_id:1,host:"localhost:27017"},{_id:2,host:"localhost:27018"},{_id:3,host:"localhost:27019"}]}

>rs.initiate(conf)
>rs.status()
>rs.add("ip:port") //在主节点增加从节点
>rs.addArb("ip:port") //在主节点增加仲裁节点
>rs.remove("ip:port") //删除节点
>//将一个从节点改为仲裁节点,删除-->添加
>//主节点插入数据,在从节点读取,复制功能
>rs.slaveOk() //在从节点设置可读
>rs.config() //查看各个节点的属性
>var conf = rs.config()
>conf.members[0].priority = 2
>rs.reconfig(conf)

也可以使用==命令行==启动一个副本集的mongod实例:

sudo mongod --dbpath /usr/local/mongodb4.4.1/data/mongodx 
--logpath /var/log/mongodb/mongodx.log 
--logappend 
--bind_ip localhost --port 27020
--fork --replSet my_repl --shardsvr

注意:数据目录一定要存在,且当前用户具有写入的权限 - -shardsvr 允许数据库分片

上一篇:MongoDB的索引操作