mongos集群部署

  • 2021-03-13

1. 部署环境

组件规划

本次部署使用三台云主机(下文以mongo1mongo2mongo3指代),mongo组件规划如下:

  • Mongos Router: 3个mongos节点
  • Config Server: 1个config节点,3成员副本集;
  • Shard Server: 3个shard节点,每个节点均为3成员副本集
  • MongoDB server version: 4.0.2
mongos 角色mongo1(192.168.1.100)mongo2(192.168.1.101)mongo3(192.168.1.102)
mongos router27017(mongo默认端口)2701727017
config server27018:主节点27018:副节点27018:仲裁节点
shard server127019:主节点27019:副节点27019:仲裁节点
shard server227020:仲裁节点27020:主节点27020:副节点
shard server327021:副节点27021:仲裁节点27021:主节点

生产环境考虑:

  • 为保证高可用,任何一台物理服务器不应该存在多个主
  • Mongos Router: 2个节点
  • Config Server: 3成员副本集;
  • Shard Server: 3成员副本集,总共部署三个shard节点。
配置/etc/hosts

Linux/etc/hosts是配置ip地址和其对应主机名的文件,也就是DNS缓存和主机别名。在/etc/hosts文件末尾追加如下内容:

192.168.1.100   mongo1
192.168.1.101  mongo2
192.168.1.102  mongo3

2. 部署步骤

  • 启动顺序:configs —>shard—> mongos
下载解压
tar -xzvf mongodb-linux-x86_64-4.0.2.tgz
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.0.2.tgz
环境配置
环境变量
mv mongodb-linux-x86_64-4.0.2 mongo
echo 'export PATH=$PATH:/data/mongo/bin'    >> /etc/profile
source /etc/profile
数据存储目录
cd /data/mongo
mkdir -p  data/config
mkdir -p  data/shard1
mkdir -p  data/shard2
mkdir -p  data/shard3
配置和日志存储位置
mkdir  conf  log
touch  log/config.log
touch  log/mongos.log
touch  log/shard1.log
touch  log/shard2.log
touch  log/shard3.log
touch  conf/config.conf
touch  conf/mongos.conf
touch  conf/shard1.conf
touch  conf/shard2.conf
touch  conf/shard3.conf
mongos server配置
  • conf/mongos.conf追加如下内容:
systemLog:
  destination: file
  logAppend: true
  path: /data/mongo/log/mongos.log

processManagement:
  fork: true
  pidFilePath: /data/mongo/mongos.pid
  timeZoneInfo: /usr/share/zoneinfo

net:
  port: 27017
  bindIp: 0.0.0.0
  maxIncomingConnections: 2000

#security:
#  keyFile: /etc/mongo/mongo.key
#  authorization: enabled

sharding:
  configDB: configs/mongo1:27018,mongo2:27018,mongo3:27018
config server配置
  • conf/config.conf追加如下内容:
dbpath=/data/mongo/data/config
logpath=/data/mongo/log/config.log
port=27018
logappend=true
fork=true
maxConns=5000
replSet=configs #复制集名称
configsvr=true #置参数为true
bind_ip=0.0.0.0 #允许任意机器连接
shard server配置
  • shard1 server配置,conf/shard1.conf追加如下内容:
dbpath=/data/mongo/data/shard1 # 其他2个分片对应修改为shard2、shard3文件夹
logpath=/data/mongo/log/shard1.log #其他2个分片对应修改为shard2.log、shard3.log
port=27019 # 其他2个分片对应修改为27020、27021
logappend=true
fork=true
maxConns=5000
storageEngine=mmapv1
shardsvr=true
replSet=shard1 # 其他2个分片对应修改为shard2、shard3
bind_ip=0.0.0.0
  • shard2 server配置,conf/shard2.conf追加如下内容:
dbpath=/data/mongo/data/shard2
logpath=/data/mongo/log/shard2.log
port=27020
logappend=true
fork=true
maxConns=5000
storageEngine=mmapv1
shardsvr=true
replSet=shard2
bind_ip=0.0.0.0
  • shard3 server配置,conf/shard3.conf追加如下内容:
dbpath=/data/mongo/data/shard3
logpath=/data/mongo/log/shard3.log
port=27021
logappend=true
fork=true
maxConns=5000
storageEngine=mmapv1
shardsvr=true
replSet=shard3
bind_ip=0.0.0.0

最后将配置好的mongo目录复制到另外两台机器上

scp -r /data/mongo/*    mongo2:/data/mongo/
scp -r /data/mongo/*    mongo3:/data/mongo/
服务启动
启动config server
mongod -f /data/mongo/conf/config.conf # 三台机器上都执行
mongo --port 27018 # 三台机器上都执行

在这里插入图片描述

  • config server配置副本集
config = {
    _id : "configs",
    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" }
    ]
}

在这里插入图片描述

  • mongo1上初始化config
rs.initiate(config); 
rs.status()

在这里插入图片描述

启动shard server
  • shard1 server
mongod -f /data/mongo/conf/shard1.conf  # 三台机器上都执行
mongo --port 27019  # 三台机器上都执行
  • shard1 server配置副本集
config = {
    _id : "shard1",
    members : [
        {_id : 0, host : "192.168.1.100:27019" },
        {_id : 1, host : "192.168.1.101:27019" },
        {_id : 2, host : "192.168.1.102:27019" }
    ]
}
rs.initiate(config); 
rs.status()
  • shard2 server
mongod -f /data/mongo/conf/shard2.conf   # 三台机器上都执行
mongo --port 27020   # 三台机器上都执行
  • shard2 server配置副本集
config = {
    _id : "shard2",
    members : [
        {_id : 0, host : "192.168.1.100:27020" },
        {_id : 1, host : "192.168.1.101:27020" },
        {_id : 2, host : "192.168.1.102:27020" }
    ]
}
rs.initiate(config); 
rs.status()
  • shard3 server
mongod -f /data/mongo/conf/shard3.conf   # 三台机器上都执行
mongo --port 27021   # 三台机器上都执行
  • shard3 server配置副本集
config = {
    _id : "shard3",
    members : [
        {_id : 0, host : "192.168.1.100:27021" },
        {_id : 1, host : "192.168.1.101:27021" },
        {_id : 2, host : "192.168.1.102:27021" }
    ]
}
rs.initiate(config); 
rs.status()
启动mongos server
mongos -f /data/mongo/conf/mongos.conf
mongo --port 27017
  • 启用分片
use admin
sh.addShard("shard1/192.168.1.100:27019,192.168.1.101:27019,192.168.1.102:27019")
sh.addShard("shard2/192.168.1.100:27020,192.168.1.101:27020,192.168.1.102:27020")
sh.addShard("shard3/192.168.1.100:27021,192.168.1.101:27021,192.168.1.102:27021")

在这里插入图片描述

至此mongos集群部署安装完成…

3. 分片测试

写入数据
use config
db.setting.save({"_id":"chunksize","value":1}) # 设置分片chunk大小为1M是方便实验,不然需要插入海量数据
use  mytest # 使用mytest写入数据
db.createCollection("user", options)
for(i=1;i<=10000;i++){db.user.insert({"id":i,"name":"zzx"+i})} #模拟往mytest数据库的user表写入5万数据
启用分片
sh.enableSharding("mytest")

在这里插入图片描述

查看分片
db.user.createIndex({"id":1}) # 以"id"作为索引
sh.shardCollection("mytest.user",{"id":1}) # 根据"id"对user表进行分片
db.user.getShardDistribution() # 或者使用 sh.status() 

在这里插入图片描述

。。。分片不均匀,具体待查。。。

需要到admin数据库中开启分片

use admin
db.runCommand( { enablesharding :"testdb"});    #开启database库分片功能
db.runCommand( { shardcollection : "testdb.table1",key : {_id:"hashed"} } )    #指定数据库里需要分片的集合tables和片键_id
use testdb;
for (var i = 1; i <= 100000; i++) db.table1.save({_id:i,"test1":"testval1"});
db.user.getShardDistribution() # 或者使用 sh.status() 

在这里插入图片描述

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值