MongoDB副本集和分片集群搭建以及基础概念

勿以浮沙筑高台


基础准备:
搭建三台Linux服务器,其中109配置mongodb。见文章:

Linux下MongoDB安装

副本集搭建

MongoDB集群搭建

  1. 配置conf配置文件
    # mongod.conf
    # for documentation of all options, see:
    #   http://docs.mongodb.org/manual/reference/configuration-options/
    # where to write logging data
    # 日志文件路径配置.
    systemLog:        
     destination: file
     logAppend: true
     path: /usr/local/mongodb/log/mongod.log
    # Where and how to store data.
    # 数据文件路径配置.
    storage:
     dbPath: /usr/local/mongodb/data
     journal:
       enabled: true
    # engine:
    # wiredTiger:
    # how the process runs
    processManagement:
    # fork代表后台运行
     fork: true # fork and run in background
     pidFilePath: /var/run/mongodb/mongod.pid # location of pidfile
     timeZoneInfo: /usr/share/zoneinfo
    # network interfaces
    net:
    # 端口
     port: 27017
     # bindIp改为任意IP访问
     bindIp: 0.0.0.0 # Enter 0.0.0.0,:: to bind to all IPv4 and IPv6 addresses or, 
    # alternatively, use the net.bindIpAll setting.
    ### 添加授权,授权要注释掉
    # security:
    #  authorization: enabled
    ### 副本集参数
    replication:
     replSetName: rs0
    
  2. 将文件发送至108,107,2台机器
    scp -r /usr/local/mongodb/ root@192.168.31.107:/usr/local
    scp -r /usr/local/mongodb/ root@192.168.31.108:/usr/local
    
  3. 创建进程文件路径,进程文件路径是默认不创建的,三台都要创建
    mkdir -p /var/run/mongodb
    
  4. 启动三台服务器
    /usr/local/mongodb/bin/mongod -f /usr/local/mongodb/conf/mongod.conf
    
  5. 启动客户端,通过IP链接,不要直接启动,直接启动链接的是127.0.0.1.外网访问不到
     /usr/local/mongodb/bin/mongo 192.168.31.109:27018
    
  6. 初始化链接,建立主从关系
    ##第一种方式
      rs.initiate();
      rs.add("192.168.31.107:27017");
      rs.add("192.168.31.108:27017");
    
    ##第二种方式
    >rs.initiate({ _id:"rs0", members:[
     {_id:0,host:"192.168.31.109:27017"},
     {_id:1,host:"192.168.31.108:27017"},
     {_id:2,host:"192.168.31.107:27017"}]
     }
     )
    
  7. 查看主从关系
     rs.status()
    
  8. 验证是否成功
    use testdb
    db.users.save({name:"张三",age:19});
    
    在从机器上启动客户端并执行脚本,开启查询配置
    /usr/local/mongodb/bin/mongo 192.168.31.108:27017
    db.getMongo().setSlaveOk();    #开启查询配置
    use testdb
    db.users.find()
    
    2台机子查询出数据即成功。 在这里插入图片描述

分片集搭建

基础概念

同样准备3台Linux虚拟机,分别是109,108,107。
因为理解不像主从关系这么简单,因此画了个图:
MongoDB副本集和分片集群搭建以及基础概念_第1张图片
在mongodb集群中有三个集群结构。

路由集群(mongos)
负责请求消息的分发与每个分片集群都有关系,并与配置服务的主集群有关系。将请求分发到每一个shard上。

配置服务集群(coing server)
主要是负责分片数据和路由数据的配置文件的管理与每一个路由和每个分片的主有联系,当配置服务发生变化会通知config更新。mongos 本身没有物理存储分片服务器和数据路由信息,只是缓存在内存里,配置服务器则实际存储这些数据。mongos 第一次启动或者关掉重启就会从 config server 加载配置信息,以后如果配置服务器信息变化会通知到所有的 mongos 更新自己的状态,这样mongos 就能继续准确路由。在生产环境通常有多个 config server 配置服务器,因为它存储了分片路由的元数据,这个可不能丢失!就算挂掉其中一台,只要还有存货,mongodb 集群就不会挂掉。

分片集群(shard)
负责数据的分片。比如750MB的数据,分片下来就是250MB的数据,减少数据库的压力

配置服务器(configs-server)配置

  1. 创建文件夹
    #	创建集群文件夹
    /usr/local/mongodb-cluster/
    #	创建分片文件夹
    /usr/local/mongodb-cluster/shard/
    /usr/local/mongodb-cluster/shard/log   #分片日志
    /usr/local/mongodb-cluster/shard/config    #分片配置文件夹
    /usr/local/mongodb-cluster/shard/data     #分片进程文件文件夹
    #	创建配置服务器文件夹
    /usr/local/mongodb-cluster/configs/
    /usr/local/mongodb-cluster/configs/log   #分片日志
    /usr/local/mongodb-cluster/configs/config    #分片配置文件夹
    /usr/local/mongodb-cluster/configs/data     #分片进程文件文件夹
    #	创建路由文件夹
    #	日志
    /usr/local/mongodb-cluster/mongos/log
    /usr/local/mongodb-cluster/mongos/conf
    #	将mongodb源文件copy到集群文件夹下
    cp /usr/local/mongodb/   /usr/local/mongodb-cluster
    
  2. 配置服务启动文件
    cd /usr/local/mongodb-cluster/configs/conf/
    #编辑配置文件
    vim config.conf
    
    systemLog:
     destination: file
     path: "/usr/local/mongodb-cluster/configs/log/config-server.log"
     logAppend: true
    storage:
     journal:
       enabled: true
     dbPath: "/usr/local/mongodb-cluster/configs/data/"
    net:
    # 真实环境这里改为本机IP,这里的改为让任意访问
     bindIp: 0.0.0.0   
     port: 27018
    replication:
     oplogSizeMB: 2048
     replSetName: configs
    sharding:
     clusterRole: configsvr 
    processManagement:
     fork: true
    
  3. 将整个mongodb-cluster集群文件夹发送到另外2台服务器上
    scp -r /usr/local/mongodb-cluster root@192.168.31.108:/usr/local/
    scp -r /usr/local/mongodb-cluster root@192.168.31.107:/usr/local/
    
  4. 启动3台配置服务器(configs-server)主机
    /usr/local/mongodb-cluster/mongodb/bin/mongod -f /usr/local/mongodb-cluster/configs/conf/config.conf
    
  5. 登录任意一台服务器主机。添加configs-server的主从关系
    #	登录操作客户端
    /usr/local/mongodb-cluster/mongodb/bin/mongo --host 192.168.31.109 --port 27018
    #	配置主从关系
    rs.initiate({_id:"configs",members:[{_id:0,host:"192.168.31.109:27018"},{_id:1,host:"192.168.31.107:27018"}, {_id:2,host:"192.168.31.108:27018"}]})  
    
    配置成功
    MongoDB副本集和分片集群搭建以及基础概念_第2张图片
    #	查看配置状态
    rs.status();
    

分片服务器(shard)配置

  1. 编写配置文件,这样的配置文件修改为三份。

    #	
    cd /usr/local/mongodb-cluster/shard/config/
    #	
    vim shard1.conf
    #	
    vim shard2.conf
    #
    vim shard3.conf
    
    systemLog:
       destination: file
       	#	这里需要根据配置更改   改
       path: "/usr/local/mongodb-cluster/shard/log/shard1.log"
       logAppend: true
    storage:
       journal:
         enabled: true
       # 这里需要根据配置更改   改
       dbPath: "/usr/local/mongodb-cluster/shard/data/shard1"
    processManagement:
       fork: true
    net:
    #	改为任意访问IP
       bindIp: 0.0.0.0
    #	这里需要根据配置更改   改
       port: 27001
    setParameter:
       enableLocalhostAuthBypass: false
    replication:
    # 分片集群ID    改
       replSetName: "rs1"
    sharding:
    #角色 
       clusterRole: shardsvr
    
  2. 将配置文件发送到其他2台电脑上

    scp -r /usr/local/mongodb-cluster/shard/config/  root@192.168.31.107:/usr/local/mongodb-cluster/shard/config/
    
    scp -r /usr/local/mongodb-cluster/shard/config/  root@192.168.31.108:/usr/local/mongodb-cluster/shard/config/
    
  3. 启动分片服务,一台机子上3个服务。(三台机子都要执行这个命令)

    /usr/local/mongodb-cluster/mongodb/bin/mongod -f /usr/local/mongodb-cluster/shard/config/shard1.conf
    /usr/local/mongodb-cluster/mongodb/bin/mongod -f /usr/local/mongodb-cluster/shard/config/shard2.conf
    /usr/local/mongodb-cluster/mongodb/bin/mongod -f /usr/local/mongodb-cluster/shard/config/shard3.conf
    
  4. 任意登录2700X端口,服务器客户端,给分片服务器添加主从关系。

    #	登录 27001 分片服务
    /usr/local/mongodb-cluster/mongodb/bin/mongo --host 192.168.31.109 --port 27001
    #	添加主从关系
    rs.initiate({_id:"rs1",members:[{_id:0,host:"192.168.31.109:27001"},{_id:1,host:"192.168.31.108:27001"},{_id:2,host:"192.168.31.107:27001"}]})
    
    #	登录 27002分片服务
    /usr/local/mongodb-cluster/mongodb/bin/mongo --host 192.168.31.109 --port 27002
    #	添加主从关系
    rs.initiate({_id:"rs2",members:[{_id:0,host:"192.168.31.109:27002"},{_id:1,host:"192.168.31.108:27002"},{_id:2,host:"192.168.31.107:27002"}]})
    
    #	登录 27003分片服务
    /usr/local/mongodb-cluster/mongodb/bin/mongo --host 192.168.31.109 --port 27003
    #	添加主从关系
    rs.initiate({_id:"rs3",members:[{_id:0,host:"192.168.31.109:27003"},
    {_id:1,host:"192.168.31.108:27003"},{_id:2,host:"192.168.31.107:27003"}]})
    

    成功:MongoDB副本集和分片集群搭建以及基础概念_第3张图片
    上面:搭建了**分片(shard)配置服务器集群(configs-server)**下面搭建路由服务

路由服务(mongos)配置

  1. 配置mongos配置文件

    #
    cd /usr/local/mongodb-cluster/mongos/conf/
    #	vim
    vim mongos.conf
    
    systemLog:
     destination: file
     path: "/usr/local/mongodb-cluster/mongos/log/mongos.log"
     logAppend: true
    net:
     bindIp: 0.0.0.0
     port: 27017
    sharding:
     configDB: configs/192.168.31.109:27018,192.168.31.108:27018,192.168.31.107:27018
    processManagement:
     fork: true
    
  2. 将mongos配置文件,发送当另外2台主机上

    scp -r /usr/local/mongodb-cluster/mongos/ root@192.168.31.108:/usr/local/mongodb-cluster/mongos/
    scp -r /usr/local/mongodb-cluster/mongos/ root@192.168.31.107:/usr/local/mongodb-cluster/mongos/
    
  3. 三台启动路由mongos

    /usr/local/mongodb-cluster/mongodb/bin/mongos -f /usr/local/mongodb-cluster/mongos/conf/mongos.conf
    
  4. 登录一台服务器

    #登录一个路由
    /usr/local/mongodb-cluster/mongodb/bin/mongo --host 192.168.31.109 --port 27017 
    #切换到admin
    use admin
    #添加切片集群	 
    sh.addShard("rs1/192.168.31.109:27001,192.168.31.108:27001,192.168.31.107:27001")
    sh.addShard("rs2/192.168.31.109:27002,192.168.31.108:27002,192.168.31.107:27002")
    sh.addShard("rs3/192.168.31.109:27003,192.168.31.108:27003,192.168.31.107:27003")
    

    成功 MongoDB副本集和分片集群搭建以及基础概念_第4张图片
    这里解释一下为什么只用在一个路由配置,因为我们配置configs-server集群,集群会自动的帮助我们同步消息。

  5. 启用数据库分片
    需要对哪一个数据库进行分片
    对哪一个表那个字段作为哈希分片算法

    sh.enableSharding("tests")  #需要对哪一个数据库进行分片
    sh.shardCollection("tests.user",{"id":"hashed"})   #对哪一个表那个字段作为哈希分片算法
    

测试

  1. 测试

    use tests
    switched to db tests
    for(i=1;i<=5000;i++){db.user.insert({"id":i,"name":"mr_fu"+i})}
    WriteResult({ "nInserted" : 1 })
    

    Navicat链接集群查询成功!!!

    MongoDB副本集和分片集群搭建以及基础概念_第5张图片

    sh.status()  #查看分片情况	
    

    MongoDB副本集和分片集群搭建以及基础概念_第6张图片

你可能感兴趣的:(MongoDB,数据库,java)