MongoDB 分片集群

Posted zuimao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MongoDB 分片集群相关的知识,希望对你有一定的参考价值。

mongodb集群
 
组件:
mongos:请求分发
config server 配置服务器
shard 分片数据服务器
 
三台机器
192.168.174.128
192.168.174.129
192.168.174.130
服务器规划
 
技术分享图片技术分享图片
 
端口分配:
 
mongos:20000
config:21000
shard1:27001
shard2:27002
shard3:27003
 
服务器需要同步时间,否则测试不通过
 
128机器操作
 
1、下载官网:
 
2、解压
    tar -xf mongodb-linux-x86_64-rhel70-3.6.5.tgz && mv mongodb-linux-x86_64-rhel70-3.6.5 /usr/local/mongodb
 
3、加环境变量,方便操作(3台机器)
    vim /etc/profile
        export PATH=$PATH:/usr/local/mongodb/bin
    source /etc/profile
 
4、创建所需目录
 
    mkdir -p /usr/local/mongodb/{conf,config/{data,log},shard1/{data,log},shard2/{data,log},shard3/{data,log},mongos/log}
 
5、编写配置文件config.conf、shard1.conf、shard2.conf、shard3.conf、mongos.conf
 
====================================================================================
vim /usr/local/mongodb/conf/config.conf
systemLog:
  destination: file
  logAppend: true
  path: /usr/local/mongodb/config/log/configsvr.log
storage:
  dbPath: /usr/local/mongodb/config/data
  journal:
    enabled: true
processManagement:
  fork: true
  pidFilePath: /usr/local/mongodb/config/log/configsvr.pid
  timeZoneInfo: /usr/share/zoneinfo
net:
  port: 21000
  bindIp: 192.168.174.128
  maxIncomingConnections: 20000
replication:
  replSetName: configs
sharding:
  clusterRole: configsvr    
======================================================================================    
vim /usr/local/mongodb/conf/shard1.conf
systemLog:
  destination: file
  logAppend: true
  path: /usr/local/mongodb/shard1/log/shard1.log
storage:
  dbPath: /usr/local/mongodb/shard1/data
  journal:
    enabled: true
processManagement:
  fork: true
  pidFilePath: /usr/local/mongodb/shard1/log/shard1.pid
  timeZoneInfo: /usr/share/zoneinfo
net:
  port: 27001
  bindIp: 192.168.174.128
  maxIncomingConnections: 20000
replication:
  replSetName: shard1
sharding:
  clusterRole: shardsvr
=======================================================================================
vim /usr/local/mongodb/conf/shard2.conf
systemLog:
  destination: file
  logAppend: true
  path:  /usr/local/mongodb/shard2/log/shard2.log
storage:
  dbPath:  /usr/local/mongodb/shard2/data
  journal:
    enabled: true
processManagement:
  fork: true
  pidFilePath:  /usr/local/mongodb/shard2/log/shard2.pid
  timeZoneInfo: /usr/share/zoneinfo
net:
  port: 27002
  bindIp: 192.168.174.128
  maxIncomingConnections: 20000
replication:
  replSetName: shard2
sharding:
  clusterRole: shardsvr
=========================================================================================
vim /usr/local/mongodb/conf/shard3.conf
systemLog:
  destination: file
  logAppend: true
  path:  /usr/local/mongodb/shard3/log/shard3.log
storage:
  dbPath:  /usr/local/mongodb/shard3/data
  journal:
    enabled: true
processManagement:
  fork: true
  pidFilePath:  /usr/local/mongodb/shard3/log/shard3.pid
  timeZoneInfo: /usr/share/zoneinfo
net:
  port: 27003
  bindIp: 192.168.174.128
  maxIncomingConnections: 20000
replication:
  replSetName: shard3
sharding:
  clusterRole: shardsvr
===========================================================================================
vim /usr/local/mongodb/conf/mongos.conf
systemLog:
  destination: file
  logAppend: true
  path: /usr/local/mongodb/mongos/log/mongos.log
processManagement:
  fork: true
  pidFilePath: /usr/local/mongodb/mongos/log/mongos.pid
  timeZoneInfo: /usr/share/zoneinfo
net:
  port: 20000
  bindIp: 192.168.174.128
  maxIncomingConnections: 20000
sharding:
  configDB: configs/192.168.174.128:21000,192.168.174.130:21000,192.168.174.131:21000
============================================================================================
 
6、将mongodb目录scp到其两台服务器
    scp -r /usr/local/mongodb 192.168.174.130:/usr/local/mongodb
    scp -r /usr/local/mongodb 192.168.174.131:/usr/local/mongodb
 
    **注意:130和131节点,配置文件中的bindIp需要修改为对应的IP
 
7、创建用户,授权(三台机器)
    useradd mongod
    chown -R mongod:mongod /usr/local/mongodb/
 
============================================================================
8、启动配置服务器(3台)
    mongod -f /usr/local/mongodb/conf/config.conf
 
9、初始化副本集(登陆任意一个实例即可)
    #连接
        mongo 192.168.174.128:21000
    #初始化副本集        
rs.initiate(
  {
    _id: "configs",
    configsvr: true,
    members: [
      { _id : 0, host : "192.168.174.128:21000" },
      { _id : 1, host : "192.168.174.130:21000" },
      { _id : 2, host : "192.168.174.131:21000" }
    ]
  }
)
 
    #查看状态
    rs.status();
==============================================================================
10、启动shard1、shard2、shard3(3台)
    mongod -f /usr/local/mongodb/conf/shard1.conf
    mongod -f /usr/local/mongodb/conf/shard2.conf
    mongod -f /usr/local/mongodb/conf/shard3.conf
 
11、初始化副本集(在一台执行即可)
 
    #连接
        mongo 192.168.174.130:27001
    #初始化副本集        
rs.initiate(
  {
    _id : "shard1",
    members: [
      { _id : 0, host : "192.168.174.128:27001",priority:2},
      { _id : 1, host : "192.168.174.130:27001",priority:1},
      { _id : 2, host : "192.168.174.131:27001",arbiterOnly: true}
    ]
  }
)
    #查看状态
    rs.status();
 
    #连接
        mongo 192.168.174.131:27002
    #初始化副本集        
rs.initiate(
  {
    _id : "shard2",
    members: [
      { _id : 0, host : "192.168.174.128:27002",arbiterOnly: true},
      { _id : 1, host : "192.168.174.130:27002",priority:2},
      { _id : 2, host : "192.168.174.131:27002",priority:1}
    ]
  }
)
    #查看状态
    rs.status();
 
    #连接
        mongo 192.168.174.128:27003
    #初始化副本集        
rs.initiate(
  {
    _id : "shard3",
    members: [
      { _id : 0, host : "192.168.174.128:27003",priority:1},
      { _id : 1, host : "192.168.174.130:27003",arbiterOnly: true},
      { _id : 2, host : "192.168.174.131:27003",priority:2}
    ]
  }
)
 
    #查看状态
    rs.status();
===============================================================================
12、启动mongos(3台)
    mongos -f /usr/local/mongodb/conf/mongos.conf
 
13、启用分片(登陆任意一个实例)
        mongo 192.168.174.128:20000
        
        use  admin        
        sh.addShard("shard1/192.168.174.128:27001,192.168.174.130:27001,192.168.174.130:27001");
        sh.addShard("shard2/192.168.174.128:27002,192.168.174.130:27002,192.168.174.130:27002");
        sh.addShard("shard3/192.168.174.128:27003,192.168.174.130:27003,192.168.174.130:27003");
    
        #查看集群状态
        sh.status();
 
===============================================================================
 
14、测试
        
        设置chunk大小
            use config
            db.settings.save({ "_id" : "chunksize", "value" : 1 })
            #为方便测试设为1M,否则需要插入大量数据才会分片存储
 
        登陆
            mongo 192.168.127.128:20000
        指定testdb分片生效
            use admin;
            db.runCommand({ enablesharding :"testdb"});
        指定需要分片的集合和片键
            db.runCommand({ shardcollection : "testdb.table1",key : {id: 1} });
 
               use testdb;
        插入数据
            for (var i = 1; i <= 10000; i++) db.table1.save({id:i,"test1":"testval1"});
        查看是分片情况
               db.table1.stats();
           可以看到数据分到3个分片,各自分片数量为: shard1 “count” : 42183,shard2 “count” : 38937,shard3 “count” : 18880。已经成功了!
 
启动关闭
 
    mongodb的启动顺序是,先启动配置服务器,在启动分片,最后启动mongos.
 
        mongod -f /usr/local/mongodb/conf/config.conf
        mongod -f /usr/local/mongodb/conf/shard1.conf
        mongod -f /usr/local/mongodb/conf/shard2.conf
        mongod -f /usr/local/mongodb/conf/shard3.conf
        mongos -f /usr/local/mongodb/conf/mongos.conf
 
关闭时,直接killall杀掉所有进程(测试使用)
 
    pkill mongo

以上是关于MongoDB 分片集群的主要内容,如果未能解决你的问题,请参考以下文章

Docker——基于Docker搭建MongoDB分片集群

MongoDB分片集群搭建

MongoDB——MongoDB分片集群(Sharded Cluster)两种搭建方式

MongoDB——MongoDB分片集群(Sharded Cluster)

MongoDB分片集群搭建

MongoDB 搭建分片集群