MongoDB 副本集

MongoDB复制是将数据同步在多个服务器的过程。
复制提供了数据的冗余备份,并在多个服务器上存储数据副本,提高了数据的可用性, 并可以保证数据的安全性。
复制还允许您从硬件故障和服务中断中恢复数据。

mongodb的复制至少需要两个节点。其中一个是主节点,负责处理客户端请求,其余的都是从节点,负责复制主节点上的数据。
mongodb各个节点常见的搭配方式为:一主一从、一主多从。
主节点记录在其上的所有操作oplog,从节点定期轮询主节点获取这些操作,然后对自己的数据副本执行
这些操作,从而保证从节点的数据与主节点一致。

MongoDB复制结构图

具有 自动故障转移机制
MongoDB副本集在主从复制基础上实现了故障转移的功能,也就是当主节点宕机时,某一台副本节点会自动提升为新主节点。

缺陷
所有读写都在主节点,不能解决主节点单点压力问题

搭建副本集

至少两个节点以上,一般时奇数个,3台、5台、7台……

1. 创建数据目录

# 在安装目录(~/mongodb/bin)中创建
- mkdir -p ../repl/data1
- mkdir -p ../repl/data2
- mkdir -p ../repl/data3

2. 搭建副本集

建议localhost写成具体IP

# 在多个命令行窗口分别启用
# 一个副本集的多个MongoDB进程,要在同一副本集中名字相同(myReplaceName)

$ mongo --port 27017 --dbpath ../repl/data1 --bind_ip 0.0.0.0 --replSet myReplaceName/[localhost:27018,localhost:27019]
$ mongo --port 27018 --dbpath ../repl/data2 --bind_ip 0.0.0.0 --replSet myReplaceName/[localhost:27017,localhost:27019]
$ mongo --port 27019 --dbpath ../repl/data3 --bind_ip 0.0.0.0 --replSet myReplaceName/[localhost:27017,localhost:27018]

# --replSet 副本集 myReplace 副本集名称/集群中其他节点的主机端口

3. 配置副本集

不初始化不能进行选举

3.1 登录任意客户端节点,连接任意节点

$ cd mongodb/bin
$ ./mongo --port 27017

3.2 初始化副本集

> use admin
> var config = {
        _id:"myReplaceName",
        members:[
        {_id:0,host:"localhost:27017"},
        {_id:1,host:"localhost:27018"},
        {_id:2,host:"localhost:27019"}]
}
> rs.initiate(config);  #初始化配置
#从节点是无法读的
> rs.slaveOk();  
> rs.secondaryOk()  #允许客户端临时访问

客户端使用副本集

SpringBoot应用程序中

spring:
  data:
    mongodb:
      uri: mongodb://192.168.0.1:27017,192.168.0.1:27018,192.168.0.1:27019/databaseName?replicaSet=myReplaceName
#语法:
mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容