mongodb分片


mongodb分片:

本次是用三台主机搭建3个集群(主、备、仲裁)作为三个分片,一个集群(主、备、备)做为config服务器,三个mongos单点做路由,每台5个,一共15个。

新建一个mongodb用户,作为mongo用户
useradd mongodb

新建文件夹及设置权限
mkdir -p /data/mongodb_data_sd1/data
mkdir -p /data/mongodb_data_sd1/log
mkdir -p /data/mongodb_data_sd2/data
mkdir -p /data/mongodb_data_sd2/log
mkdir -p /data/mongodb_data_sd3/data
mkdir -p /data/mongodb_data_sd3/log
mkdir -p /data/mongodb_data_conf/data
mkdir -p /data/mongodb_data_conf/log
mkdir -p /data/mongodb_data_os/log
chown mongodb -R /data/mongodb_data_sd1
chown mongodb -R /data/mongodb_data_sd2
chown mongodb -R /data/mongodb_data_sd3
chown mongodb -R /data/mongodb_data_conf
chown mongodb -R /data/mongodb_data_os

数据集群就是普通的mongodb集群,唯一注意的是:“shardsvr=true”,集群配置文件:配置文件的名字及集群名字和文件夹的名字一样,每台三个,集群端口是28021、28022、28023

cat > /usr/local/mongodb/conf/mongodb_data_sd3.conf <<'EOF'
dbpath=/data/mongodb_data_sd3/data/
logpath=/data/mongodb_data_sd3/log/mongod.log
logappend=true
bind_ip_all=true
port=28023
replSet=mongodb_data_sd3
fork=true
shardsvr=true
EOF

config,可以是一个或者三个单点,也可以是集群,推荐用集群。也是普通集群,唯一注意是的“configsvr=true”,然后不能有仲裁。

cat > /usr/local/mongodb/conf/mongodb_data_conf.conf <<'EOF'
dbpath=/data/mongodb_data_conf/data/
logpath=/data/mongodb_data_conf/log/mongod.log
logappend=true
bind_ip_all=true
port=28031
replSet=mongodb_data_conf
fork=true
configsvr=true
EOF

mongos,只有日志没有数据,只有单点,但是可以建三个,随便连那个都可以,也可以用keepalive和ha做vip。

cat > /usr/local/mongodb/conf/mongodb_data_os.conf <<'EOF'
logpath=/data/mongodb_data_os/log/mongos.log
logappend=true
bind_ip_all=true
port=28017
configdb=mongodb_data_conf/192.168.1.31:28031,192.168.1.32:28031,192.168.1.33:28031
fork=true
EOF

启动、启动、全部启动:分片集群创建好以后,如果重启的话一定要按照先启动config集群,然后数据集群和mongos集群,每个集群启动的时候最好是先主,然后是备和仲裁。
su mongodb -c "/usr/local/mongodb/bin/mongod -f /usr/local/mongodb/conf/mongodb_data_sd1.conf"
设置分片1的集群
rs.initiate({_id:'mongodb_data_sd1',members:[{_id:0,host:'192.168.1.31:28021',priority:10},{_id:1,host:'192.168.1.32:28021',priority:5},{_id:2,host:'192.168.1.33:28021',"arbiterOnly":true}]})

su mongodb -c "/usr/local/mongodb/bin/mongod -f /usr/local/mongodb/conf/mongodb_data_sd2.conf"
设置分片2的集群
rs.initiate({_id:'mongodb_data_sd2',members:[{_id:0,host:'192.168.1.31:28022',"arbiterOnly":true},{_id:1,host:'192.168.1.32:28022',priority:10},{_id:2,host:'192.168.1.33:28022',priority:5}]})

su mongodb -c "/usr/local/mongodb/bin/mongod -f /usr/local/mongodb/conf/mongodb_data_sd3.conf"
设置分片3的集群
rs.initiate({_id:'mongodb_data_sd3',members:[{_id:0,host:'192.168.1.31:28023',priority:5},{_id:1,host:'192.168.1.32:28023',"arbiterOnly":true},{_id:2,host:'192.168.1.33:28023',priority:10}]})

su mongodb -c "/usr/local/mongodb/bin/mongod -f /usr/local/mongodb/conf/mongodb_data_conf.conf"
设置config集群
rs.initiate({_id:'mongodb_data_conf',members:[{_id:0,host:'192.168.1.31:28031',priority:5},{_id:1,host:'192.168.1.32:28031',priority:3},{_id:2,host:'192.168.1.33:28031',priority:10}]})

su mongodb -c "/usr/local/mongodb/bin/mongos -f /usr/local/mongodb/conf/mongodb_data_os.conf"
添加分片
use admin
db.runCommand( { addshard : "mongodb_data_sd1/192.168.1.31:28021,192.168.1.32:28021,192.168.1.33:28021",name:"mongodb_data_sd1"} )
db.runCommand( { addshard : "mongodb_data_sd2/192.168.1.31:28022,192.168.1.32:28022,192.168.1.33:28022",name:"mongodb_data_sd2"} )
db.runCommand( { addshard : "mongodb_data_sd3/192.168.1.31:28023,192.168.1.32:28023,192.168.1.33:28023",name:"mongodb_data_sd3"} )


启用数据库分片:
use admin
sh.enableSharding("test")

然后对集合设置片键,每个集合都要设置,以后不能修改。

sh.shardCollection("test.vast",{"_id": 1})

插入数据测试分片:
use test
for(i=0;i<20000;i++){ db.vast1.insert({"id":i,"name":"clsn","age":70,"date":new Date()}); }

看是不是分片了,你可以用可视化工具登录mongos和各个数据集群上去看。用命令看起来没有那么直观,预计结果是每个分片都有数据库和部分数据。但是你可能会失望哦。在分片的策越中,如果片键的数据是连续的,比如日期,自增的数字等,
很有可能写在一个分片上,他是为了查询更快;即使你的片键的数据是随机的,也不一定会在每个分片都有,他会根据主机的性能来分配,如果你的主机够好,也可能在一个分片上。只要当前分片性能不够了才会写到其他分片。
你可以多建几个数据库,然后你会发现数据库是是会分配到不同的分片上的。

如果你确定要把数据尽可能的平均写到不同的分片,片键设置选择哈希片键。这样数据会在每个分片都有了。写是快了,存储也解决了,但是读会慢,他要去所有的分片中找数据,然后返回给你。所以要平衡具体的项目。

sh.shardCollection("test.vast",{"_id": "hashed"})

分片的其他操作:

 

转载于:https://www.cnblogs.com/xuyingzhong/p/9934040.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/352240.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

批量添加PDF帐号目录

本文参考&#xff1a;https://blog.csdn.net/qq_34104395/article/details/78766400然后根据需要整理的。如作者介意请留言&#xff0c;本人会尽快处理&#xff01; 准备材料&#xff1a; 下载工具FreePic2Pdf&#xff08;在本博客上传资料上找PDF转换工具包&#xff09; 找到…

驳斥5条普通流Tropes

我刚读完“ JDK 8收集器的强大功能的一种例外” &#xff0c;我不得不说我很失望。 Java冠军 Simon Ritter是Oracle的前Java推广者&#xff0c;现在是Oracle的Java传播者&#xff0c;现在是Azul Systems的副CTO&#xff08;使用JVM的人 &#xff09;写了它&#xff0c;因此我希…

私网IP如何访问Internet

公网、内网是两种Internet的接入方式。 内网接入方式&#xff1a;上网的计算机得到的IP地址是Inetnet上的保留地址&#xff0c;保留地址有如下3种形式&#xff1a; 10.x.x.x 172.16.x.x至172.31.x.x 192.168.x.x 内网的计算机以NAT&#xff08;网络地址转换&#xf…

钉钉机器人发送图片 python_python封装钉钉Webhook机器人消息发送逻辑

python封装钉钉Webhook机器人消息发送逻辑&#xff0c;目前仅支持python2。安装pip install dingmsgapi初始化实例from ding_msg_api import MsgClient# Webhook机器人access_tokenmsgClient MsgClient("****************")发送Text消息from ding_msg_api import Te…

[LevelDB] 写批处理过程详解

leveldb的write代码初看瞎搞一堆&#xff0c;细看则实为短小精悍。1 Status DBImpl::Write(const WriteOptions& options, WriteBatch* my_batch) { 2  // -----A begin------- 3 Writer w(&mutex_); 4 w.batch my_batch; 5 w.sync options.sync; 6 w.d…

关于excel vba 使用CopyFromRecordset出现格式问题的解决方法

关于excel vba 使用CopyFromRecordset出现格式问题的解决方法 出现问题的写法&#xff1a; With ActiveSheet .Name k(i) For num 1 To UBound(myArray) .Cells(1, num) myArray(num, 1) Next num .rang…

python histo 改变 bins 大小_在Python中显示具有非常不均匀的bin宽度的直方图

这是直方图为了生成这个图,我做了&#xff1a;bins np.array([0.03, 0.3, 2, 100])plt.hist(m, bins bins, weightsnp.zeros_like(m) 1. / m.size)但是,正如您所注意到的,我想绘制每个数据点的相对频率的直方图,只有3个不同大小的区间&#xff1a;bin1 0.03 – > 0.3bin…

parted工具详解

通常我们用的比较多的一般都是fdisk工具来进行分区&#xff0c;但是现在由于磁盘越来越廉价&#xff0c;而且磁盘空间越来越大&#xff1b;而fdisk工具他对分区是有大小限制的&#xff0c;它只能划分小于2T的磁盘。但是现在的磁盘空间很多都已经是远远大于2T了&#xff0c;甚至…

Python安装pyinstaller模块的错误:NO module name “setuptools“

出现改pyinstaller安装错误常见问题是&#xff1a;pip版本或者setuptools包版本过低。 出现上图提示的错误后&#xff0c;升级一下setuptools包&#xff1a; &#xff08;1&#xff09;pip install --upgrade setuptools &#xff08;2&#xff09;pip install pyinstaller

jvm ide_预热JVM –超快速生产服务器和IDE

jvm ide几个月前&#xff0c;我正在阅读Java中的复杂事件处理以及实现低延迟的方法。 在我长达一个小时的研究结束时&#xff0c;我发现即使您的应用程序编写正确并且您的方法主要在0&#xff08;log n&#xff09;的时间内运行&#xff0c;并且您使用的是某些尖端的硬件解决方…

Python 项目打包成可执行程序命令

一、安装pyinstaller (1)winR输入cmd&#xff0c;打开命令窗口 2&#xff09;安装pyinstaller&#xff0c;安装指令&#xff1a;pip install pyinstaller 二、打包 1&#xff0c;切换到打包程序目录 例&#xff1a;需要打包程序目录为&#xff1a;D:\pythonfun\useringfunct…

软RAID-mdadm折腾小记

RAID --- 磁盘阵列,简言之,用来提高硬盘的利用率和速度RAID种类(理论):RAID 0 : 读写性能(最少两块硬盘) --- 硬盘使用量是所有硬盘大小之和,性能是所有硬盘之和RAID 1 : 读写性能,冗余性(最少两块硬盘) --- 空间利用率:所有磁盘中最小的那块(n/2); 读性能接近RAID0,写性能较r…

python学习笔记:第19天 类的约束、异常、MD5和logging

目录 一、类的约束二、异常处理&#xff1a;三、MD5加密四、日志&#xff08;logging模块&#xff09;一、类的约束 真正写写项目的代码时都是多人协作的&#xff0c;所以有些地方需要约束程序的结构。也就是说&#xff0c;在分配任务之前就应该把功能定义好&#xff0c;然后分…

新ANTLR 4.6的重要更改

自从上一个主要版本发布以来&#xff0c;已经过去了将近一年的时间&#xff0c;推出了新的ANTLR版本&#xff1a; 4.6 。 有很多新闻&#xff1a;新的目标&#xff0c;更好的性能&#xff0c;更好的错误处理以及ANTLR本身开发中的一些改进。 新目标 影响最大的新闻可能是新目标…

strcmp可以比较数组么_C语言数组越界了,后果很严重,如何避免?

素材来源&#xff1a;嵌入式ARM所谓的数组越界&#xff0c;简单地讲就是指数组下标变量的取值超过了初始定义时的大小&#xff0c;导致对数组元素的访问出现在数组的范围之外&#xff0c;这类错误也是 C 语言程序中最常见的错误之一。在 C 语言中&#xff0c;数组必须是静态的。…

MongoDB 问题123

MongoDB 是非关系型数据库中的一种。 出于某些原因&#xff0c;我们用了Mongo。他们说Mongo的最大特点是快。 不过这种快是以空间换时间的代价而得来的。 这个空间代价包括 1.DB至少占用64M(好像是这个数字&#xff0c;因为我们的DB实际往往只有几M,但却要占用那么多&#xff0…

两个excel文档查找相同选项后替换_看似普通的查找和替换功能,用好了,能让你的工作效率翻一番...

关注【新精英充电站】能力提升看得见&#xff01;在Word中&#xff0c;查找和替换功能是编辑文档时时常要用到的重要功能&#xff0c;它能帮助我们快速将文档或表格中查找到的内容或格式等替换为指定的内容或格式&#xff0c;特别是遇到大量需要修改的相同文字内容或格式时非常…

Mongodb内存管理和使用情况情况查询

overview MongoDB使用的是内存映射存储引擎,即Memory Mapped Storage Engine&#xff0c;简称MMAP。MMAP可以把磁盘文件的一部分或全部内容直接映射到内存&#xff0c;这样文件中的信息位置就会在内存中有对应的地址空间&#xff0c;这时对文件的读写可以直接用指针来做&#…

mapreduce文本排序_MapReduce:通过数据密集型文本处理

mapreduce文本排序自上次发布以来已经有一段时间了&#xff0c;因为我一直忙于Coursera提供的一些课程。 有一些非常有趣的产品&#xff0c;值得一看。 前一段时间&#xff0c;我购买了Jimmy Lin和Chris Dyer的MapReduce数据密集型处理程序 。 本书以伪代码格式介绍了几种关键的…

nginx根据参数转发到不同服务器_Nginx服务器之负载均衡策略

一、关于Nginx的负载均衡在服务器集群中&#xff0c;Nginx起到一个代理服务器的角色&#xff08;即反向代理&#xff09;&#xff0c;为了避免单独一个服务器压力过大&#xff0c;将来自用户的请求转发给不同的服务器。二、Nginx负载均衡策略负载均衡用于从“upstream”模块定义…