mongodb3.2 安装配置
最近折腾了一下最新版mongodb集群安装配置,目前测试可以运行,可能还有一些问题,需要慢慢去发现。
对于3.2之前的版本部署不了解,网上也有好多。总的来说,有以下几种部署方式:
1.单机部署
2.副本集部署
3.分片部署
4.分片副本集部署
前面几种部署都相对简单,这里不做说明。下面主要记录一下第4种方式部署,也是生产环境的建议部署方式,可以满足集群的高可用和高吞吐量。
有几个概念需要先说明一下:
configsvr:分片部署的配置节点,不存储具体数据,只存储分片的信息
shardcvr:分片部署的数据节点,存数具体的数据
mongos:分片路由节点,和configsvr关联,用户直接连接它完成数据库的操作。
primary:副本集的主节点,默认读写都在这个节点上操作,然后同步到其他副本节点上。
secondary:副本集从节点。
下面记录个按个分片,每个分片2个副本的配置过程:
需要注意的是,每一个组件都是一个单独的进程,一个mongo包要拷贝多分,来代表不同的组件。
1.首先规划好机器
总共三台机器:192.168.1.100,192.168.1.101,192.168.1.102
192.168.1.100:1个configsvr,3个shardsvr,1个mongos
192.168.1.101:1个configsvr,3个shardsvr,1个mongos
192.168.1.102:1个configsvr,3个shardsvr,1个mongos
一次配置configsvr、shardsvr、monogs。具体查看每个如何配置。
配置副本集:https://docs.mongodb.org/manual/tutorial/deploy-replica-set/
配置分片:https://docs.mongodb.org/manual/tutorial/deploy-shard-cluster/
mongo配置选项:https://docs.mongodb.org/manual/reference/configuration-options/
2.启动所有的configsvr
连接任意一个configsvr,然后初始化configsvr副本集(注意3.2+版本支持configsvr副本集),在shell输入:
rs.initiate( { _id: "configrs", configsvr: true, members: [ { _id: 0, host: "192.168.1.100:27017" }, { _id: 1, host: "192.168.1.101:27017" }, { _id: 1, host: "192.168.1.102:27017" } ] } )
3.配置每个分片的副本集
启动所有的shard节点,第一个shard副本集的配置:连接任意一个shard1的节点,然后在shell输入:
rs.initiate({ "_id" : "shard1rs", "version" : 1, "members" : [ { "_id" : 0, "host" : "192.168.1.100:27018" }, { "_id" : 1, "host" : "192.168.1.101:27018" }, { "_id" : 2, "host" : "192.168.1.102:27018" } ] })
剩余的两个shard也要做类似的操作。
4.启动mongos
需要在mongos的配置中加入
configDB configrs/192.168.1.100:27017,192.168.1.101:27017,192.168.1.102:27017
指定mongos的监听端口为17710
5.为mongos加入shard分片信息
连接mongos的shell,然后输入:
sh.addShard("shard1rs/192.168.1.100:27018,192.168.1.101:27018,192.168.1.102:27018") sh.addShard("shard2rs/192.168.1.100:27019,192.168.1.101:27019,192.168.1.102:27019") sh.addShard("shard2rs/192.168.1.100:27020,192.168.1.101:27020,192.168.1.102:27020")
6.开启分片功能
mongo分片是相对collection来说的,也就是说要对collection设置分片。
首先需要开始database的shard功能,然后才能对collection进行分片配置。
在mongos的shell
开启database分片功能:
sh.enableSharding("data")
设置collection分片:
sh.shardCollection("data.user", { "_id": "hashed" } )
下一篇: elastic search新词处理