mongodb分片群集介绍及搭建

mongodb分片群集介绍

1、背景与目的

在大数据的时代,传统的关系型数据库要提供更高的服务必须要解决高并发读写、海量数据高效存储、高可扩展性和高可用性这些难题。不过就是因为这些问题Nosql诞生了。
NOSQL有这些优势:

●大数据量,可以通过廉价服务器存储大量的数据,轻松摆脱传统mysql单表存储量级限制。

●高扩展性,Nosql去掉了关系数据库的关系型特性,很容易横向扩展,摆脱了以往老是纵向扩展的诟病。

●高性能,Nosql通过简单的key-value方式获取数据,非常快速。还有NoSQL的Cache是记录级的,是一种细粒度的Cache,所以NoSQL在这个层面上来说就要性能高很多。
灵活的数据模型,NoSQL无需事先为要存储的数据建立字段,随时可以存储自定义的数据格式。而在关系数据库里,增删字段是一件非常麻烦的事情。如果是非常大数据量的表,增加字段简直就是一个噩梦。

●高可用,NoSQL在不太影响性能的情况,就可以方便的实现高可用的架构。比如mongodb通过mongos、mongo分片就可以快速配置出高可用配置。

●在nosql数据库里,大部分的查询都是键值对(key、value)的方式。MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中最像关系数据库的。支持类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。所以这个非常方便,我们可以用sql操作MongoDB,从关系型数据库迁移过来,开发人员学习成本会大大减少。如果再对底层的sql API做一层封装,开发基本可以感觉不到mongodb和关系型数据库的区别。

mongodb分片群集搭建

推荐步骤

1.将工具解压,并进行优化
在这里插入图片描述

[root@localhost ~]# tar zxvf mongodb-linux-x86_64-3.2.1.tgz -C /opt/    ##解压工具
[root@localhost ~]# cd /opt/
[root@localhost opt]# mv mongodb-linux-x86_64-3.2.1/ /usr/local/mongodb   ##将工具配置到/usr/local目录下
[root@localhost opt]# cd /usr/local/mongodb

在这里插入图片描述

[root@localhost mongodb]# ln -s /usr/local/mongodb/bin/mongo /usr/bin/mongo   ##将命令文件建立软链接
[root@localhost mongodb]# ln -s /usr/local/mongodb/bin/mongod /usr/bin/mongod
[root@localhost mongodb]# mkdir -p /data/mongodb/mongodb{
    
    1,2,3,4}   ##创建数据目录
[root@localhost mongodb]# cd /data/mongodb/
[root@localhost mongodb]# ls
mongodb1  mongodb2  mongodb3  mongodb4
[root@localhost mongodb]# mkdir logs             ##创建日志
[root@localhost mongodb]# cd logs
[root@localhost logs]# touch /data/mongodb/logs/mongodb{
    
    1,2,3,4}.log   ####创建数据日志文件 
[root@localhost logs]# chmod 777 *.log     ##增加权限 
[root@localhost logs]# ls
mongodb1.log  mongodb2.log  mongodb3.log  mongodb4.log
[root@localhost logs]# ulimit -u 25000    ##做下优化
[root@localhost logs]# ulimit -u 25000
[root@localhost logs]# cd /usr/local/bin/
[root@localhost bin]# ls
[root@localhost bin]# vim mongodb1.conf
port=37017
dbpath=/data/mongodb/mongodb1
logpath=/data/mongodb/logs/mongodb1.log
logappend=true
fork=true
maxConns=5000
storageEngine=mmapv1
configsvr=true

某节点内存不足时,从其他节点分配内存

[root@localhost bin]# sysctl -w vm.zone_reclaim_mode=0
vm.zone_reclaim_mode = 0
[root@localhost bin]# echo never > /sys/kernel/mm/transparent_hugepage/enabled 
[root@localhost bin]# echo never > /sys/kernel/mm/transparent_hugepage/defrag 
[root@localhost bin]# mongod -f mongodb1.conf 
about to fork child process, waiting until server is ready for connections.
forked process: 11180
child process started successfully, parent exiting

分片服务器配置

[root@localhost bin]# cp -p mongodb1.conf mongodb2.conf
[root@localhost bin]# vim mongodb2.conf 

在这里插入图片描述

[root@localhost bin]# cp -p mongodb2.conf mongodb3.conf
[root@localhost bin]# vim mongodb3.conf 

在这里插入图片描述

[root@localhost bin]# mongod -f mongodb2.conf    ##将服务启动
[root@localhost bin]# mongod -f mongodb3.conf   ##将服务启动

配置路由服务器
指定对方连接入口,只要访问27017,就会把处理交给37017去处理,指定数据块

[root@localhost bin]# ./mongos --port 27017 --fork --logpath=/usr/local/mongodb/bin/route.log --configdb 192.168.148.134:37017 --chunkSize 1

添加分片服务器
1.先查看受否添加了分片服务器

[root@localhost bin]# mongo
mongos> show dbs
config  0.031GB
mongos> sh.status()   ##查看分片服务器

在这里插入图片描述
2.添加分片服务器

mongos> sh.addShard("192.168.148.134:37018")   ##添加分片37018
{
    
     "shardAdded" : "shard0000", "ok" : 1 }
mongos> sh.addShard("192.168.148.134:37019")   ####添加分片37019
{
    
     "shardAdded" : "shard0001", "ok" : 1 }

3.分片功能

mongos> use test    ##创建一个test库
switched to db test
mongos> db.users.insert({
    
    "id":1,"name":"zhangsan"})    ##写入数据
WriteResult({
    
     "nInserted" : 1 })
mongos> show dbs
config  0.031GB
test    0.078GB
mongos> sh.enableSharding("test")    ##开启分片管理
{
    
     "ok" : 1 }
mongos> sh.status()

在这里插入图片描述

mongos> db.users.createIndex({
    
    "id":1})    ##建立索引
mongos> sh.shardCollection("test.users",{
    
    "id":1})     ##建立表分片
{
    
     "collectionsharded" : "test.users", "ok" : 1 }

分片管理
1.创建集合,写入5000条信息

mongos> use test
mongos> for(var i=1;i<=5000;i++)db.users2.insert({
    
    "id":i,"name":"tom"+i})
WriteResult({
    
     "nInserted" : 1 })     ##写入5000条信息
mongos> db.users2.count()    ##统计信息数量
5000
mongos>
mongos> db.users2.createIndex({
    
    "id":1})    ##给users2创建索引
mongos> sh.shardCollection("test.users2",{
    
    "id":1})    ##users2建立表分片

2.给目标添加标签

mongos> sh.addShardTag("shard0000","abc00")     

3.连接配置服务器

[root@localhost bin]# mongo --port 37017
configsvr> use config
configsvr> show tables
configsvr> db.databases.find()   ##查看数据库是否被分片
{
    
     "_id" : "test", "primary" : "shard0000", "partitioned" : true }
configsvr> db.collections.find()   ##查看分片
{
    
     "_id" : "test.users", "lastmodEpoch" : ObjectId("5f5c7cba52ab4dc5c493c260"), "lastmod" : ISODate("1970-02-19T17:02:47.296Z"), "dropped" : false, "key" : {
    
     "id" : 1 }, "unique" : false }
{
    
     "_id" : "test.users2", "lastmodEpoch" : ObjectId("5f5c7f3a52ab4dc5c493c2e2"), "lastmod" : ISODate("1970-02-19T17:02:47.296Z"), "dropped" : false, "key" : {
    
     "id" : 1 }, "unique" : false }
configsvr> db.chunks.find()   ##查询数据块

创建一个mongodb4实例

[root@localhost bin]# cd /usr/local/mongodb/bin/
[root@localhost bin]# cp -p mongodb3.conf mongodb4.conf
[root@localhost bin]# vim mongodb4.conf 

在这里插入图片描述

[root@localhost bin]# mongod -f mongodb4.conf 
[root@localhost bin]# mongo
mongos> sh.addShard("192.168.148.134:37020")    ##将37020添加到分片管理
{
    
     "shardAdded" : "shard0002", "ok" : 1 }
mongos> sh.status()    ##查看状态

在这里插入图片描述
4.删除分片

mongos> use admin
switched to db admin
mongos> db.runCommand({
    
    "removeshard":"192.168.148.134:37020"})

猜你喜欢

转载自blog.csdn.net/Cpureman/article/details/108552785