MongoDB 分片集群部署(无副本)

本文详细介绍了在MongoDB 3.4.24版本中如何配置和管理分片集群,包括配置服务器、路由服务(mongos)、分片节点以及副本集的初始化。内容涵盖了端口分配、目录创建、启动与初始化各个组件,以及测试数据分片的均匀分布。同时,还展示了在节点故障时的系统响应。
摘要由CSDN通过智能技术生成

分片是每个节点存储数据的不同片段,复制集是每个节点存储数据的相同副本

mongos:接收请求和路由请求

config servers:记录所有节点信息

shard:分片集存储数据

Mongodb版本:3.4.24

查看版本命令:mongo version

1. 端口分配和目录创建

1.1 端口分配

这个是用作下面配置文件里的,找些没用的端口,不用自己去分配

验证端口是否被使用命令:netstat -ap | grep 端口

集群节点192.168.2.195192.168.2.196192.168.2.197
configsvr(配置服务)192.168.2.195:20000192.168.2.196:20000192.168.2.197:20000
mongos(路由)192.168.2.195:27017192.168.2.196:27017192.168.2.197:27017
Shard(分片)192.168.2.195:26021192.168.2.196:26021192.168.2.197:26021
副本集:每个分片只有一个副本集,没有冗余备份。

1.2 目录创建

每台设备都要创建

dbpath( 数据库配置路径):

mkdir -p /flash/system/volume/database/shard_test #数据库存储

mkdir -p /flash/system/volume/data/test/shard_test #分片存储

Logpath(日志文件配置):

mkdir -p /var/log/test/shard_test #这条没有,方便复制粘贴命令加上的

touch /var/log/test/shard_test/config.log #config server日志

touch /var/log/test/shard_test/route.log #route日志

touch /var/log/test/shard_test/shard.log #shard日志

2. config server配置服务器

2.1 配置服务器

每台设备都要配置

vi /usr/etc/dbconf/npbase_shard.conf

fork=true

quiet=true

nounixsocket=true

bind_ip=0.0.0.0

port=20000

logappend=true

configsvr=true

replSet=configs

logpath=/var/log/test/shard_test/config.log

dbpath=/flash/system/volume/database/shard_test

2.2 配置完成后启动config server

每台设备都要启动

mongod -f /usr/etc/dbconf/npbase_shard.conf

2.3 初始化配置服务器副本集

进入Mongo命令行,可选择任意配置服务器节点初始化配置副本集

只需要在一台设备上初始化

mongo -port 20000

config = (

{

_id : "configs",

members: [

{ _id : 0, host : "192.168.2.195:20000" },

{ _id : 1, host : "192.168.2.196:20000" },

{ _id : 2, host : "192.168.2.197:20000" },

]

}

)

初始化之前要保证每台设备都启动完毕,配置好了,不然会报错

rs.initiate(config)

3. shard分片集

3.1 配置分片集

shard分片集是实际存储数据的地方,配置shard一定要配置shardsvr=true。

每台设备都要配置,每台机子蓝字的地方需要改完自己IP

vi /usr/etc/dbconf/shard_test.conf

--------------分片1-----------------------

fork=true

nounixsocket=true

bind_ip=192.168.2.195

port=26021

logappend=true

shardsvr=true

replSet=shard1

logpath=/var/log/test/shard_test/shard.log

dbpath=/flash/system/volume/data/test/shard_test

--------------分片2-----------------------

fork=true

nounixsocket=true

bind_ip=192.168.2.196

port=26021

logappend=true

shardsvr=true

replSet=shard2

logpath=/var/log/test/shard_test/shard.log

dbpath=/flash/system/volume/data/test/shard_test

--------------分片3-----------------------

fork=true

nounixsocket=true

bind_ip=192.168.2.197

port=26021

logappend=true

shardsvr=true

replSet=shard3

logpath=/var/log/test/shard_test/shard.log

dbpath=/flash/system/volume/data/test/shard_test

3.2 开启shard服务

每台设备都要开启,每个shard节点服务都要开启

mongod -f /usr/etc/dbconf/shard_test.conf

3.3 初始化shard分片副本集

每台设备上都要初始化

mongo -port 26021 -host 192.168.2.195

config = (

{

_id : "shard1",

members: [

{ _id : 0, host : "192.168.2.195:26021" },

]

}

)

初始化之前要保证每台设备都启动完毕,配置好了,不然会报错

rs.initiate(config)

--------------分片2-----------------------

mongo -port 26021 -host 192.168.2.196

config = (

{

_id : "shard2",

members: [

{ _id : 0, host : "192.168.2.196:26021" },

]

}

)

初始化之前要保证每台设备都启动完毕,配置好了,不然会报错

rs.initiate(config)

--------------分片3-----------------------

mongo -port 26021 -host 192.168.2.197

config = (

{

_id : "shard3",

members: [

{ _id : 0, host : "192.168.2.197:26021" },

]

}

)

初始化之前要保证每台设备都启动完毕,配置好了,不然会报错

rs.initiate(config)

 

4. 配置mogos路由服务

4.1 参数启动

mongodb中的router(mongos)角色只负责提供一个入口,不存储任何的数据,router最重要的配置是指定configsvr的地址,使用复制集ip+端口的方式指定配置多个router,任何一个都能正常的获取数据。

每台设备都需要启动,蓝字的地方需要根据机子变动

mongos --port 27017 --configdb configs/192.168.2.195:20000,192.168.2.196:20000,192.168.2.197:20000 --logpath /var/log/test/shard_test/route.log --fork

4.2 将之前配置好的shard副本集添加到分片中

只需要在一台设备上初始化

mongo admin -port 27017

sh.addShard("shard1/192.168.2.195:26021")

sh.addShard("shard2/192.168.2.196:26021")

sh.addShard("shard3/192.168.2.197:26021")

查看分片

sh.status()

4.3指定数据库和集合分片策略

在刚刚初始化的那台机子上

接下来需要指定数据库分片并配置片键,片键必须是索引。

激活数据库分片功能

db.runCommand({ enablesharding:"shardtest" })

开启Hash分片

db.runCommand({ shardcollection: "shardtest.test", key: { _id:"hashed"}})

 

5.测试

5.1插入数据测试

mongo admin -port 27017

#切换到db shardtest

use shardtest

#往shardtest的test集合中插入20000条数据

for(i=1;i<20001;i++){db.test.insert({"name":"test","number":i,"date":new Date()});}

#查看test表中的记录数,判断数据是否插入成功

db.getCollection('test').count()

5.2 分片结果测试

20000条数据经过hash算法分别插入到了三个分片中。

三个分片分别插入了6725条、9942条记录、9942条记录。

#分片一:6725条记录

mongo -port 26021 -host 192.168.2.195

use shardtest

db.getCollection('test').count()

#分片二:6589条记录

mongo -port 26021 -host 192.168.2.196

use shardtest

db.getCollection('test').count()

#分片三:6686条记录

mongo -port 26021 -host 192.168.2.197

use shardtest

db.getCollection('test').count()

  

5.3 关闭一个分片节点测试

结束其中一个分片节点,再次查询shardtest数据库中test集合数量,系统报错

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

快吃土的小羊吖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值