本文使用的MongoDB版本为3.4.9
规划
首先我们需要三台配置服务器,配置服务器相当于集群的大脑,配置服务器中保存着集群和分片的元数据,即每个分片都包含了哪些数据信息,这些数据都是保存在配置服务器中的,我这里将开启三个配置服务器实例,这三个配置服务器将运行在三个MongoDB服务器上,地址分别如下:
192.168.248.128:20000
192.168.248.135:20000
192.168.248.136:20000
接下来需要一个Mongos实例,Mongos对请求进行路由,Mongos扮演的角色有点类似于一个门面,我们以后访问的时候,直接访问Mongos即可,再由Mongos将请求路由到不同的分片上去,Mongos在启动时会去访问配置服务器,它将从配置服务器中获取数据的存储信息,Mongos我将启动在如下服务器上:
192.168.248.128:30000
最后需要三个分片实例,三个分片依然运行在三台服务器上,如下:
192.168.248.128:27017
192.168.248.135:27017
192.168.248.136:27017
搭建配置服务器
配置服务器中不需要太多的空间和资源,因为配置服务器上保存的只是数据的分布表,不保存具体的数据,具体的数据都保存在分片上,配置服务器中1KB的空间约为200MB的真实数据。注意,从MongoDB3.4开始,配置服务器要做成集群的方式。
由于配置服务器是独立的mongod进程,所以我们可以像启动普通的MongoDB服务一样启动配置服务器,只是这里的配置不同罢了。
我这里以192.168.248.128服务器为例来讲述配置服务器的配置启动,另外两台服务器如法炮制即可:
1.在mongodb解压目录下创建db20000文件夹,用来存储配置服务器中的数据。
2.复制一份mongodb.conf,命名为mongodb20000.conf,修改文件内容如下:
dbpath=/opt/mongodb/db20000
logpath=/opt/mongodb/logs/mongodb20000.log
port=20000
fork=true
configsvr=true
replSet=rs
注意dbpath改为我们第一步创建的目录,端口号改为20000(这个随意,只要该端口没被占用即可),configsvr表示这是一个配置服务器,另外由于我们的配置服务器要做成备份集,所以要设置replSet。
3.做好前两步之后,执行如下命令启动配置服务器:
mongod -f /opt/mongodb/bin/mongodb20000.conf
最后,在另外两台服务器上重复上面三个步骤。
三台服务器上都启动成功之后,参考我们之前的MongoDB副本集搭建一文,将这三台配置服务器配成一个副本集,副本集的配置我这里就不再赘述。
搭建Mongos
Mongos实例我们可以启动在任意一台服务器上,我这里就启动在192.168.248.128上,Mongos的配置步骤如下:
1.复制一份mongodb.conf,命名为mongos.conf,修改内容:
logpath=/opt/mongodb/logs/mongos.log
port=30000
fork=true
configdb=rs/192.168.248.128:20000,192.168.248.135:20000,192.168.248.136:20000
因为mongos中不需要保存数据,所以不需要dbpath,端口号改为30000,configdb表示三个配置服务器的地址,注意最前面的rs表示配置服务器副本集的名称。
2.配置完成后,执行如下命令启动mongos:
mongos -f /opt/mongodb/bin/mongos.conf
搭建三个分片
三个分片实际上就是三个普通的MongoDB服务器,给大家看下我的配置文件:
dbpath=/opt/mongodb/db
logpath=/opt/mongodb/logs/mongodb.log
port=27017
fork=true
shardsvr=true
注意多了个shardsvr表示这是一个分片服务器。
然后在三台服务器上分别执行如下命令启动分片:
mongod -f /opt/mongodb/bin/mongodb.conf
添加分片
上面三个步骤完成之后,我们就进入到mongos的shell命令行了,如下:
mongo --port=30000
然后我们可以通过如下命令查看一下分片的当前状态:
sh.status()
执行结果如下(部分):
— Sharding Status —
sharding version: {
}
shards:
databases:
shards表示分片服务器,目前还没有,databases表示分片的库,目前也还没有,接下来我们通过如下命令添加分片服务器:
sh.addShard(“192.168.248.128:27017”)
sh.addShard(“192.168.248.135:27017”)
sh.addShard(“192.168.248.136:27017”)
添加三个分片服务器,然后再执行sh.status(),结果如下(部分):
— Sharding Status —
sharding version: {
}
shards:
{ “_id” : “shard0000”, “host” : “192.168.248.128:27017”, “state” : 1 }
{ “_id” : “shard0001”, “host” : “192.168.248.135:27017”, “state” : 1 }
{ “_id” : “shard0002”, “host” : “192.168.248.136:27017”, “state” : 1 }
databases:
{ “_id” : “test”, “primary” : “shard0000”, “partitioned” : false }
设置集合分片
接下来我们来设置集合的分片,首先执行如下命令表示给某个数据库分片:
sh.enableSharding(“sang”)
对集合分片时,需要选择一个片键,片键实际上就是集合中的一个键,MongoDB将根据这个片键来拆分数据,我们需要先对片键建立索引,如下:
小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
2021年Java中高级面试必备知识点总结
在这个部分总结了2019年到目前为止Java常见面试问题,取其面试核心编写成这份文档笔记,从中分析面试官的心理,摸清面试官的“套路”,可以说搞定90%以上的Java中高级面试没一点难度。
本节总结的内容涵盖了:消息队列、Redis缓存、分库分表、读写分离、设计高并发系统、分布式系统、高可用系统、SpringCloud微服务架构等一系列互联网主流高级技术的知识点。
目录:
(上述只是一个整体目录大纲,每个点里面都有如下所示的详细内容,从面试问题——分析面试官心理——剖析面试题——完美解答的一个过程)
部分内容:
对于每一个做技术的来说,学习是不能停止的,小编把2019年到目前为止Java的核心知识提炼出来了,无论你现在是处于什么阶段,如你所见,这份文档的内容无论是对于你找面试工作还是提升技术广度深度都是完美的。
不想被后浪淘汰的话,赶紧搞起来吧,高清完整版一共是888页,需要的话可以点赞+关注
有如下所示的详细内容,从面试问题——分析面试官心理——剖析面试题——完美解答的一个过程)
[外链图片转存中…(img-7gy1jvOb-1711025649834)]
部分内容:
[外链图片转存中…(img-WN2tI5qW-1711025649835)]
[外链图片转存中…(img-6jwmaSbo-1711025649836)]
[外链图片转存中…(img-dQRy9te0-1711025649836)]
对于每一个做技术的来说,学习是不能停止的,小编把2019年到目前为止Java的核心知识提炼出来了,无论你现在是处于什么阶段,如你所见,这份文档的内容无论是对于你找面试工作还是提升技术广度深度都是完美的。
不想被后浪淘汰的话,赶紧搞起来吧,高清完整版一共是888页,需要的话可以点赞+关注
本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录
相关文章
发表评论