`
m635674608
  • 浏览: 5031136 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

mongodb副本集和分片

 
阅读更多

1.mongodb副本集概念

mongodb的复制至少需要两个节点。其中一个是主节点,负责数据库写操作,其余的都是从节点,负责复制主节点上的数据以及可以进行读操作。

mongodb各个节点常见的搭配方式为:一主一从、一主多从。

主节点记录在其上的所有操作oplog,从节点定期轮询主节点获取这些操作,然后对自己的数据副本执行这些操作,从而保证从节点的数据与主节点一致。

mongodb在副本集中可以有arbiter节点,arbiter节点主要负责选举主节点,本身不存储数据

mongodb副本集如果正常工作至少需要n/2+1个节点存活,n/2是向下取整数

1.1.mongodb副本集搭建

现在搭建含有3个mongodb节点的副本集,一个主节点、一个从节点、一个arbiter节点,主要参数如下:

--dbpath   数据文件路径

--logpath  日志文件路径

--port        端口号,默认是27017.我这里使用的也是这个端口号.

--replSet   复制集的名字,一个replica sets中的每个节点的这个参数都要用一个复制集名字

--maxConns   最大连接数

--fork       后台运行

--logappend   日志文件循环使用,如果日志文件已满,那么新日志覆盖最久日志。

1.1.1 启动mongodb节点1

mongod.exe --port 27017 --dbpath D:\work\mongodb\1 --replSet test --logpath D:\work\mongodb\1\log1\log.txt --logappend

1.1.2 启动mongodb节点2

mongod.exe --port 27018 --dbpath D:\work\mongodb\2 --replSet test --logpath D:\work\mongodb\2\log2\log.txt --logappend

1.1.3 启动mongodb节点3

mongod.exe --port 27019 --dbpath D:\work\mongodb\3 --replSet test --logpath D:\work\mongodb\3\log3\log.txt --logappend

1.1.4 集群节点配置

step1:mongo.exe 连接到mongod服务器

step2:假设hosts中配置了当前的ip指向的host为zhq.test.com

rs.initiate()

rs.add("zhq.test.com:27018")

rs.addArb("zhq.test.com:27019")

rs.status()就可以查看副本集状态

2.mongodb分片的概念

当MongoDB存储海量的数据时,一台机器可能不足以存储数据,也可能不足以提供可接受的读写吞吐量,或许一个主节点不能提供足够的写吞吐量。这时,我们就可以通过在多台机器上分割数据,使得数据库系统能存储和处理更多的数据,使用分片的结构如下:

Shard:用于存储真实的分片数据,每个分片可以使用一个副本集来作为一个集群冗余存储数据

Config Server: mongod实例,存储了整个集群的元数据

Router:路由服务,应用服务器通过接入路由服务就可以使用mongodb的分片功能

2.1 建立两个mongodb复制集

按照那个步骤我们建立test和test1复制集,不同的是需要添加--shardsvr参数:

2.1.1 启动test和test1集群的mongodb节点1

mongod.exe --port 27017 --dbpath D:\work\mongodb\1 --replSet test --logpath D:\work\mongodb\1\log1\log.txt --logappend --shardsvr

mongod.exe --port 27020 --dbpath D:\work\mongodb\4 --replSet test1 --logpath D:\work\mongodb\4\log4\log.txt --logappend --shardsvr

2.1.2 启动test和test1集群的mongodb节点2

mongod.exe --port 27018 --dbpath D:\work\mongodb\2 --replSet test --logpath D:\work\mongodb\2\log2\log.txt --logappend --shardsvr

mongod.exe --port 27021 --dbpath D:\work\mongodb\5 --replSet test1 --logpath D:\work\mongodb\5\log5\log.txt --logappend --shardsvr

2.1.3 启动test和test1集群的mongodb节点3

mongod.exe --port 27019 --dbpath D:\work\mongodb\3 --replSet test --logpath D:\work\mongodb\3\log3\log.txt --logappend --shardsvr

mongod.exe --port 27022 --dbpath D:\work\mongodb\6 --replSet test1 --logpath D:\work\mongodb\6\log6\log.txt --logappend --shardsvr

2.1.4 集群节点配置

step1:mongo.exe --port 27020连接到mongod服务器

step2:假设hosts中配置了当前的ip指向的host为zhq.test.com

rs.initiate()

rs.add("zhq.test.com:27021")

rs.addArb("zhq.test.com:27022")

rs.status()就可以查看副本集状态

2.2 建立两个mongodb config server组成的集群(这个是按照mongodb3.2版本来的,mongodb3.0以下版本只需要启动两个mongod节点,不需要建立集群)

mongod.exe --port 27023 --dbpath D:\work\mongodb\config1 --logpath D:\work\mongodb\config1\config.log --logappend --replSet config --configsvr

mongod.exe --port 27024 --dbpath D:\work\mongodb\config2 --logpath D:\work\mongodb\config2\config.log --logappend --replSet config --configsvr

mongo.exe --port 27023连接到mongod服务器

假设hosts中配置了当前的ip指向的host为zhq.test.com

rs.initiate()

rs.add("zhq.test.com:27024")

rs.status()就可以查看副本集状态

2.3 建立两个mongos节点

mongos.exe --port 27025 --configdb config/zhq.test.com:27024,zhq.test.com:27023 --fork --logpath D:\work\mongodb\route1\route.log

mongos.exe --port 27026 --configdb config/zhq.test.com:27024,zhq.test.com:27023 --fork --logpath D:\work\mongodb\route2\route.log

2.4 连接一个mongos节点并配置分片(只需要连接一个mongos添加这些配置即可,其他的mongos的配置会通过config server自动同步过去)

mongo.exe --port 27025

db.runCommand({addshard:"test/zhq.test.com:27017,zhq.test.com:27018,zhq.test.com:27019"})//添加分片1集群

db.runCommand({addshard:"test1/zhq.test.com:27020,zhq.test.com:27021,zhq.test.com:27022"})//添加分片2集群

db.runCommand({ enablesharding:"test" }) //设置分片的数据库

db.runCommand({ shardcollection: "test.log", key: { title:1}})//设置使用表log的字段title进行分片

sh.status({verbose:true})可以查看当前分片的状态

2.5 如何选择分片字段

a.每条记录必须要包含分片的字段,分片字段设置之后,mongodb会自动为该字段建立索引

a.分片字段需要拥有很多不同的值。 便于数据的切分和迁移

b.分片字段要和应用程序相结合,便于应用程序查询的时候尽量查询到一个分片上去,不需要多个分片组合结果

c.分片字段的值要尽量的分散、随机,这样在插入数据的时候可以插入到不同的分片中去,避免造成一个分片压力过大

 

https://my.oschina.net/seektechnology/blog/870316

分享到:
评论

相关推荐

    mongodb副本集加分片集群安全认证使用账号密码登录

    mongodb副本集加分片集群安全认证使用账号密码登录

    MongoDB4.2分片及副本集群搭建

    MongoDB4.2分片及副本集群搭建 MongoDB集群 MongoDB分片 MongoDB副本 MongoDB副本集群

    k8s 安装 mongodb 分片(Sharding)+ 副本集(Replica Set)

    k8s 安装 MongoDB 分片(Sharding)+ 副本集(Replica Set)是结合 Kubernetes(k8s)和 MongoDB 实现高可用性和高性能的解决方案。本解决方案通过使用 Kubernetes 部署 MongoDB 分片(Sharding)和副本集(Replica ...

    Mongodb副本集和分片示例详解

    要搭建一个MongoDB副本集,你需要启动至少两个MongoDB实例,并在每个实例启动时指定`--replSet`参数,例如: ```bash # 主节点 mongod --bind_ip=0.0.0.0 --port=27018 --logpath=/var/log/mongodb/mongodb_4_0_10....

    K8s 部署 MongoDB(副本集)

    副本集可提供冗余和高可用性,是所有生产部署的基础。也可以说,副本集类似于有自动故障恢复功能的主从集群。通俗的讲就是用多台机器进行同一数据的异步同步,从而使多台机器拥有同一数据的多个副本,并且当主库当...

    MongoDB分片副本级

    MongoDB分片副本级 详细的讲述了MongoDB分片副本级配置

    mongodb分片与副本集详细配置方案

    MongoDB 是一个高性能、分布式、开源的文档型数据库,...总之,这个配置方案提供了一个包含分片和副本集的MongoDB集群,能够支持大规模数据存储和高可用性需求。通过合理配置和管理,可以实现高效、稳定的数据库服务。

    Cent OS安装 + MongoDB安装部署(单节点+副本集+分片) 详细教程 MARKDOWN文档

    ## 三、MongoDB副本集安装 1. **创建数据目录**:为每个副本集成员创建一个独立的数据目录,如`/var/lib/mongodb/replica1`、`/var/lib/mongodb/replica2`等。 2. **修改配置文件**:在`mongod.conf`中,添加`...

    Mongodb分片副本集集群搭建

    总结以上知识点,搭建MongoDB分片副本集集群需要考虑架构设计、版本兼容性、配置服务器和分片服务器的设置、机器规划以及配置参数等方面。了解这些知识点并结合实际操作,可以有效避免搭建过程中遇到的常见问题,...

    MongoDB企业级分片集群搭建视频.zip

    7 MongoDB副本集的搭建.mp4 8 MongoDB副本集故障自动切换.mp4 9 MongoDB副本集各实例的优先级设置.mp4 10 MongoDB副本集的伸缩.mp4 11 MongoDB数据的备份和恢复.mp4 12 Python简单操作MongoDB.mp4 13 Python获取...

    application(Cent OS安装 + MongoDB安装部署(单节点+副本集+分片) 详细教程)

    最后,启用分片和指定分片集合: ```bash sh.enableSharding("testDB") sh.shardCollection("testDB.testCollection", {"_id": "hashed"}) ``` 至此,你已经成功地在Cent OS上安装了MongoDB,并完成了单节点、副本...

    mongodb4.22分片及副本集搭建

    mongodb4.22分片及副本集搭建

    MongoDB副本集集群

    MongoDB的集群与分片功能是其一大亮点,其中集群方面,MongoDB支持主从复制和副本集集群。副本集集群的搭建步骤包括成员的初始化、配置副本集的配置文件、启动副本集成员服务、加入副本集以及副本集功能扩展。副本集...

    MongoDB集群配置

    通过Spring Data MongoDB可以实现对MongoDB副本集和分片集群的连接和操作。 - **配置连接**:在Spring Boot应用程序中,可以通过配置文件来指定连接MongoDB副本集或分片集群的必要信息,包括主机地址、端口、认证...

    mongodb分片设计

    每个分片可以是一个单一的MongoDB服务器,也可以是一个副本集(Replica Set),从而为数据提供冗余和高可用性。配置服务器是保存整个分片集群元数据的关键组件,它记录了所有分片的信息和集群的数据分布情况。 数据...

    mongo集群脚本参考.zip

    在大型应用中,为了确保高可用性、可扩展性和性能,MongoDB 提供了两种核心技术:副本集和分片。 **副本集(Replica Sets)** 副本集是 MongoDB 的一种高可用性解决方案,它通过复制数据到多个节点来确保数据的冗余...

    mongodb分片集群增加acl

    在大数据时代背景下,为了提高数据库的性能和可用性,采用分片技术是一种常见的解决方案。MongoDB是一种流行的NoSQL数据库,它支持自动分片功能,使得数据可以在多个服务器节点间自动平衡。除了性能提升之外,...

    centos7+mongodb 3.4 集群搭建:分片+副本集

    - mongos的配置文件中需要包含configserver的地址列表,以便它们能够通过这些服务器来获取关于分片和路由的元数据。 5. 测试集群 - 启动所有组件,包括mongos、configserver、shards和仲裁者,并检查集群状态,...

Global site tag (gtag.js) - Google Analytics