mongodb集群方式-分片+副本集方式

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介: 分片就是水平的扩展,将数据分拆到不同的机器上,以达到存储更多的数据,处理更大的负载。可以选定将按照指定的文档键值进行分片。配置整体部署方案:启动三个分片服务,两个做数据存储,另一个作为config,配置分片的副本集,创建管理员用户,关闭mongod,打开keyfile,启动mongos,配置分片服务。

 

分片就是水平的扩展,将数据分拆到不同的机器上,以达到存储更多的数据,处理更大的负载。可以选定将按照指定的文档键值进行分片。

配置

整体部署方案:

启动三个分片服务,两个做数据存储,另一个作为config,

配置分片的副本集,创建管理员用户,关闭mongod,打开keyfile,启动mongos,配置分片服务。

角色

分片一般有三个组成部分:

分片服务(Shard Server),mongod 实例,2个以上,负责存储实际的数据分片,生产环境中一个Shard Server可由几台服务器组成一个Replica Set代替,避免主机单点故障;
路由服务(Routing Process),mongos实例,1个以上,它负责管理分片,客户端由此前端路由接入,且让整个集群看起来像单一数据库,客户端应用可以透明使用,Routing Process不存储数据,数据来自Config Server;

配置服务(Config Server),mongod 实例,1个以上,负责存储整个集群的配置信息:即数据和片的对应关系。

 

因为测试资源有限, 采取三台虚拟机的方式,

 

分片的架构图如下:

192.168.100.101所有配置如下:

############config-1############
configsvr = true
replSet = config
port = 30001
dbpath = /opt/mongo/data/config-1
logpath = /opt/mongo/logs/config-1.log
logappend = true
fork = true
profile = 1
slowms = 500
keyFile = /opt/mongo/config/keyfile
maxConns=20000
storageEngine = wiredTiger
############route############
configdb = config/192.168.100.101:30001,192.168.100.102:30002,192.168.100.103:30003
port = 20000
logpath = /opt/mongo/logs/route.log
logappend = true
fork = true
#chunkSize = 256
keyFile = /opt/mongo/config/keyfile
maxConns=20000
############rs1-1############
port = 10001
fork = true
dbpath = /opt/mongo/data/rs1-1
logpath = /opt/mongo/logs/rs1-1.log
replSet = test1
logappend = true
profile = 1
slowms = 500
directoryperdb = true
keyFile = /opt/mongo/config/keyfile
maxConns=20000
storageEngine = wiredTiger
############rs2-a############
port = 20003
fork = true
dbpath = /opt/mongo/data/rs2-a
logpath = /opt/mongo/logs/rs2-a.log
replSet = test2
logappend = true
profile = 1
slowms = 500
directoryperdb = true
keyFile = /opt/mongo/config/keyfile
maxConns=20000
storageEngine = wiredTiger

192.168.100.102所有配置如下:

############config-2############
configsvr = true
replSet = config
port = 30002
dbpath = /opt/mongo/data/config-2
logpath = /opt/mongo/logs/config-2.log
logappend = true
fork = true
profile = 1
slowms = 500
keyFile = /opt/mongo/config/keyfile
maxConns=20000
storageEngine = wiredTiger
############route############
configdb = config/192.168.100.101:30001,192.168.100.102:30002,192.168.100.103:30003
port = 20000
logpath = /opt/mongo/logs/route.log
logappend = true
fork = true
#chunkSize = 256
keyFile = /opt/mongo/config/keyfile
maxConns=20000
############rs1-2############
port = 10002
fork = true
dbpath = /opt/mongo/data/rs1-2
logpath = /opt/mongo/logs/rs1-2.log
replSet = test1
logappend = true
profile = 1
slowms = 500
directoryperdb = true
keyFile = /opt/mongo/config/keyfile
maxConns=20000
storageEngine = wiredTiger
############rs2-2############
port = 20002
fork = true
dbpath = /opt/mongo/data/rs2-2
logpath = /opt/mongo/logs/rs2-2.log
replSet = test2
logappend = true
profile = 1
slowms = 500
directoryperdb = true
keyFile = /opt/mongo/config/keyfile
maxConns=20000
storageEngine = wiredTiger

192.168.100.103所有配置如下:

############config-3############
configsvr = true
replSet = config
port = 30003
dbpath = /opt/mongo/data/config-3
logpath = /opt/mongo/logs/config-3.log
logappend = true
fork = true
profile = 1
slowms = 500
keyFile = /opt/mongo/config/keyfile
maxConns=20000
storageEngine = wiredTiger
############route############
configdb = config/192.168.100.101:30001,192.168.100.102:30002,192.168.100.103:30003
port = 20000
logpath = /opt/mongo/logs/route.log
logappend = true
fork = true
#chunkSize = 256
keyFile = /opt/mongo/config/keyfile
maxConns=20000
############rs1-a############
port = 10003
fork = true
dbpath = /opt/mongo/data/rs1-a
logpath = /opt/mongo/logs/rs1-a.log
replSet = test1
logappend = true
profile = 1
slowms = 500
directoryperdb = true
keyFile = /opt/mongo/config/keyfile
maxConns=20000
storageEngine = wiredTiger
############rs2-1############
port = 20001
fork = true
dbpath = /opt/mongo/data/rs2-1
logpath = /opt/mongo/logs/rs2-1.log
replSet = test2
logappend = true
profile = 1
slowms = 500
directoryperdb = true
keyFile = /opt/mongo/config/keyfile
maxConns=20000
storageEngine = wiredTiger

 

openfile 可以使用命令生成:

openssl rand -base64 500 > keyfile
chmod 400 keyfile

确保每台机器的keyfile一致

 

依次按照上面配置文件的内容创建配置文件和存储目录日志目录

创建完成依次启动所有的mongod节点

注意此时要把keyfile选项注释掉,否则启动之后未创建角色就要认证,无法进入操作

ls |grep -v keyfile| xargs sed -i "s/^keyFile/#keyFile/g"

启动之后依次连接每个分片的主执行以下操作:

>config = {
    _id: "test1",
    members: [{
        _id: 0,
        host: "192.168.100.101:10001"
    }, {
        _id: 1,
        host: "192.168.100.102:10002"
    }, {
        _id: 2,
        host: "192.168.100.103:10003",
        arbiterOnly: true
    }]
}
>rs.initiate(config)
>rs.status()
>db.isMaster( )
>use admin;
>db.createRole({role:"superman", privileges:[{resource:{anyResource: true}, actions:["anyAction"]}], roles:["root"]})
>db.createUser({user:"test",pwd:"test",roles:[{role:"superman", db:"admin"}]})

依次执行成功之后,

停止所有的mongod节点:

for i in `seq 10`;do killall mongod ;done

开启keyfile

ls |grep -v keyfile| xargs sed -i "s/^#keyFile/keyFile/g"

之后依次启动mongod节点

 

然后启动mongos节点

连接mongos节点

mongos>use admin;
mongos>db.auth("test","test")
mongos>sh.addShard("test1/192.168.100.101:10001")
mongos>sh.addShard("test2/192.168.100.103:20001")
mongos>sh.status()

至此分片配置完成。

相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。   相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
目录
相关文章
|
17天前
|
存储 NoSQL MongoDB
MongoDB 复制(副本集)
10月更文挑战第17天
32 2
MongoDB 复制(副本集)
|
17天前
|
存储 NoSQL 前端开发
MongoDB 分片
10月更文挑战第17天
26 2
|
2月前
|
存储 监控 NoSQL
*MongoDB的水平扩展主要通过分片技术实
*MongoDB的水平扩展主要通过分片技术实
42 5
|
2月前
|
存储 NoSQL 前端开发
MongoDB 分片总结
这篇文章总结了MongoDB分片的概念、集群结构、分片实例、配置和测试过程。
55 6
|
2月前
|
存储 NoSQL Shell
MongoDB复制(副本集)总结
这篇文章是关于MongoDB副本集的总结,包括复制原理、设置副本集、案例分析等内容。
39 1
|
3月前
|
存储 NoSQL 算法
MongoDB保姆级指南(中):从副本集群、分片集群起航,探索分布式存储的趋势!
本文一起来聊聊MongoDB集群,顺带以MongoDB集群为起点,共同探讨一下分布式存储的发展趋势~
198 15
|
3月前
|
存储 运维 NoSQL
轻松上手:逐步搭建你的高可用MongoDB集群(分片)
【8月更文挑战第13天】在数据激增的背景下,传统单机数据库难以胜任。MongoDB作为流行NoSQL数据库,采用分片技术实现水平扩展,有效处理海量数据。分片将数据分散存储,提高并发处理能力和容错性,是高可用架构基石。构建MongoDB集群需理解shard、config server和router三组件协同工作原理。通过具体实例演示集群搭建流程,包括各组件的启动及配置,确保数据高可用性和系统稳定性。合理规划与实践可构建高效稳定的MongoDB集群,满足业务需求并支持未来扩展。
81 0
|
4月前
|
自然语言处理 运维 NoSQL
MongoDB集群同步
实现 MongoDB Cluster-to-Cluster 即集群同步的工具是:mongosync 详情可参考如下官方文档: https://www.mongodb.com/zh-cn/docs/cluster-to-cluster-sync/current/quickstart/ 以上这个地址的文档一看就是机器翻译的,可能有不恰当的地方,但基本可参考使用。 以下是本次在某项目地配置集群同步的简要步骤,可参考使用。
84 6
|
3月前
|
NoSQL MongoDB Windows
MongoDB 读写分离——Windows MongoDB 副本集配置
MongoDB 读写分离——Windows MongoDB 副本集配置
61 0
|
11天前
|
NoSQL Cloud Native atlas
探索云原生数据库:MongoDB Atlas 的实践与思考
【10月更文挑战第21天】本文探讨了MongoDB Atlas的核心特性、实践应用及对云原生数据库未来的思考。MongoDB Atlas作为MongoDB的云原生版本,提供全球分布式、完全托管、弹性伸缩和安全合规等优势,支持快速部署、数据全球化、自动化运维和灵活定价。文章还讨论了云原生数据库的未来趋势,如架构灵活性、智能化运维和混合云支持,并分享了实施MongoDB Atlas的最佳实践。