mongodb的集群结构如上图

网上有个mongo3.0的集群例子:

mongodb分布式集群搭建手记 - 美码师 - 博客园一、架构简介 目标 单机搭建mongodb分布式集群(副本集 + 分片集群),演示mongodb分布式集群的安装部署、简单操作。 说明 在同一个vm启动由两个分片组成的分布式集群,每个分片都是一个PShttps://www.cnblogs.com/littleatp/p/8563273.htmlmongo现在已经是5.0版本,配置过程略有出入

router提供入口,mongo客户端通过router连入集群(本例只配置一个route集群)

Config Servers辅助记录数据分片(一个集群)

Shard为数据分片集群(本例中配置两个,用于验证分片),

本例中,为每个集群(shard config)三个mongo实例

config与shard为同一个类型的进程mongod

route则为mongos进程

下载mongo二进制压缩包

https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-5.0.6.tgz

解压可以看到

用openssl生成一个key,用于mongo集群内部数据通迅

openssl rand -base64 123 > keyfile

mongod配置为件(config与shard通用)

mongo_node.conf:

storage:engine: wiredTigerdirectoryPerDB: truejournal:enabled: truesystemLog:destination: filelogAppend: trueoperationProfiling:slowOpThresholdMs: 10000replication:oplogSizeMB: 10240processManagement:fork: truesecurity:authorization: "disabled"

mongos的配置文件(即图中的route)

mongos.conf:

systemLog:destination: filelogAppend: trueprocessManagement:fork: true

启动config集群(3个mongod进程)

WORK_DIR=/home/???/go/mongodb/mongo_testKEYFILE=$WORK_DIR/key/keyfile
cat $KEYFILECONFFILE=$WORK_DIR/conf/mongo_node.conf
cat $CONFFILEMONGOD=mongod
echo $MONGOD$MONGOD --port 26001 --bind_ip_all --configsvr --replSet configReplSet --keyFile $KEYFILE --dbpath $WORK_DIR/config_cluster/conf_n1/data --pidfilepath $WORK_DIR/config_cluster/conf_n1/db.pid --logpath $WORK_DIR/config_cluster/conf_n1/db.log --config $CONFFILE --wiredTigerCacheSizeGB=0.25 $MONGOD --port 26002 --bind_ip_all --configsvr --replSet configReplSet --keyFile $KEYFILE --dbpath $WORK_DIR/config_cluster/conf_n2/data --pidfilepath $WORK_DIR/config_cluster/conf_n2/db.pid --logpath $WORK_DIR/config_cluster/conf_n2/db.log --config $CONFFILE --wiredTigerCacheSizeGB=0.25$MONGOD --port 26003 --bind_ip_all --configsvr --replSet configReplSet --keyFile $KEYFILE --dbpath $WORK_DIR/config_cluster/conf_n3/data --pidfilepath $WORK_DIR/config_cluster/conf_n3/db.pid --logpath $WORK_DIR/config_cluster/conf_n3/db.log --config $CONFFILE --wiredTigerCacheSizeGB=0.25

启动成功后

用命令mongo --port 26001 --host 127.0.0.1

如下图,进入mongo的shell

在shell中输入如下js代码 设置config集群

cfg={_id:"configReplSet", configsvr: true,members:[{_id:0, host:'127.0.0.1:26001'},{_id:1, host:'127.0.0.1:26002'}, {_id:2, host:'127.0.0.1:26003'}]};
rs.initiate(cfg);

三个config mongo进程会自动选出一个primary,过一会再进入shell就会发现 shell提示变成primary

顺便给config添加一个admin用户,(一个集群只要在primary进程添加一次,会自动同步给secondary)

use admin
db.createUser({user:'admin',pwd:'123456',roles:[{role:'clusterAdmin',db:'admin'},{role:'userAdminAnyDatabase',db:'admin'},{role:'dbAdminAnyDatabase',db:'admin'},{role:'readWriteAnyDatabase',db:'admin'}
]})

同样之后shard也做同样的添加用户操作,便于后继观察数据

启动shard

WORK_DIR=/home/???/go/mongodb/mongo_testKEYFILE=$WORK_DIR/key/keyfile
cat $KEYFILECONFFILE=$WORK_DIR/conf/mongo_node.conf
cat $CONFFILEMONGOD=mongod
echo $MONGODecho "start shard1 replicaset"$MONGOD --port 27001 --bind_ip_all --shardsvr --replSet shard1 --keyFile $KEYFILE --dbpath $WORK_DIR/shard1/sh1_n1/data --pidfilepath $WORK_DIR/shard1/sh1_n1/db.pid --logpath $WORK_DIR/shard1/sh1_n1/db.log --config $CONFFILE --wiredTigerCacheSizeGB=0.25$MONGOD --port 27002 --bind_ip_all --shardsvr --replSet shard1 --keyFile $KEYFILE --dbpath $WORK_DIR/shard1/sh1_n2/data --pidfilepath $WORK_DIR/shard1/sh1_n2/db.pid --logpath $WORK_DIR/shard1/sh1_n2/db.log --config $CONFFILE --wiredTigerCacheSizeGB=0.25$MONGOD --port 27003 --bind_ip_all --shardsvr --replSet shard1 --keyFile $KEYFILE --dbpath $WORK_DIR/shard1/sh1_n3/data --pidfilepath $WORK_DIR/shard1/sh1_n3/db.pid --logpath $WORK_DIR/shard1/sh1_n3/db.log --config $CONFFILE --wiredTigerCacheSizeGB=0.25

--wiredTigerCacheSizeGB=0.25  用这个指定缓存大小,

根据本机内存配置调整,最低不能小于0.25即250m

避免因为内存不足导致mongod程序退出

用mongo --port 27001 --host 127.0.0.1进入mongo shell

cfg={_id:"shard1", members:[{_id:0, host:'127.0.0.1:27001'},{_id:1, host:'127.0.0.1:27002'},{_id:2, host:'127.0.0.1:27003'}]};rs.initiate(cfg);

同样用之前的添加用户的js

并用同样的方法启动shard2集群,用于实验数据分片

对应的目录与分片名改成shard2

启动route

WORK_DIR=/home/???/go/mongodb/mongo_testKEYFILE=$WORK_DIR/key/keyfile
cat $KEYFILECONFFILE=$WORK_DIR/conf/mongos.conf
cat $CONFFILEMONGOS=mongos
echo $MONGOSecho "start mongos route instances"$MONGOS --port=25001 --bind_ip_all --configdb configReplSet/127.0.0.1:26001,127.0.0.1:26002,127.0.0.1:26003 --keyFile $KEYFILE --pidfilepath $WORK_DIR/route/r_n1/db.pid --logpath $WORK_DIR/route/r_n1/db.log --config $CONFFILE$MONGOS --port 25002 --bind_ip_all --configdb configReplSet/127.0.0.1:26001,127.0.0.1:26002,127.0.0.1:26003 --keyFile $KEYFILE --pidfilepath $WORK_DIR/route/r_n2/db.pid --logpath $WORK_DIR/route/r_n2/db.log --config $CONFFILE$MONGOS --port 25003 --bind_ip_all --configdb configReplSet/127.0.0.1:26001,127.0.0.1:26002,127.0.0.1:26003 --keyFile $KEYFILE --pidfilepath $WORK_DIR/route/r_n3/db.pid --logpath $WORK_DIR/route/r_n3/db.log --config $CONFFILE

路由添加分片

用mongo --port 25001 --host 127.0.0.1 -u admin -p 123456进入shell

或者这样也可 mongo mongodb://admin:123456@127.0.0.1:25001

在mongo shell分别执行以下两行js

sh.addShard("shard1/127.0.0.1:27001")
sh.addShard("shard2/127.0.0.1:27011")

创建一个mongo database与collection

并设置分片

use testsh.enableSharding("test")db.createCollection("test_shard")sh.shardCollection("test.test_shard", {_id:"hashed"}, false, { numInitialChunks: 4} )

在mongo shell用以下js添加数据,可以修改循环次数避免测试时间过长

var cnt = 0;
for(var i=0; i<1000; i++){var dl = [];for(var j=0; j<100; j++){dl.push({"bookId" : "BBK-" + i + "-" + j,"type" : "Revision","version" : "IricSoneVB0001","title" : "Jackson's Life","subCount" : 10,"location" : "China CN Shenzhen Futian District","author" : {"name" : 50,"email" : "RichardFoo@yahoo.com","gender" : "female"},"createTime" : new Date()});}cnt += dl.length;db.test_shard.insertMany(dl);print("insert ", cnt);
}

在windows下安装mongodb,利用自带的compass客户端观察两个shard集群

会发现数据分流到两个集群了

也可以直接连route观察数据

补充:

把js存到文件里给shell执行会比较方便

执行js命令如下:

mongo mongodb://admin:123456@127.0.0.1:25001 ./test.js

示例js代码:

print('=========WECOME==========');conn = new Mongo("mongodb://admin:123456@192.168.2.129:25001");db = conn.getDB("testjs")
sh.enableSharding("testjs")
db.createCollection("testjs_col")
sh.shardCollection("testjs.testjs_col", {_id:"hashed"}, false, { numInitialChunks: 4} )var dl = [];for(var j=0; j<10; j++){dl.push({"bookId" : "BBK-" + 0 + "-" + j,"type" : "Revision","version" : "IricSoneVB0001","title" : "Jackson's Life","subCount" : 10,"location" : "China CN Shenzhen Futian District","author" : {"name" : 50,"email" : "RichardFoo@yahoo.com","gender" : "female"},"createTime" : new Date()});}db.testjs_col.insertMany(dl);cursor = db.testjs_col.find();
printjson(cursor.toArray());

mongodb linux下集群搭建相关推荐

  1. Linux下集群的搭建

    1.集群的简介: 集群(cluster)技术是一种较新的技术,通过集群技术,可以在付出较低成本的情况下获得在性能.可靠性.灵活性方面的相对较高的收益,其任务调度则是集群系统中的核心技术. 如果一个事情 ...

  2. mongodb分布式集群搭建手记

    一.架构简介 目标 单机搭建mongodb分布式集群(副本集 + 分片集群),演示mongodb分布式集群的安装部署.简单操作. 说明 在同一个vm启动由两个分片组成的分布式集群,每个分片都是一个PS ...

  3. MongoDB单机集群搭建

    一.单机副本集部署方案: 单台物理机,一个主节点,一个副本节点,一个仲裁节点. 二.部署步骤 1.在mongodb目录下新建config目录(目录及位置可随意指定,在此按照config目录搭建),在c ...

  4. Linux下集群技术应用概述

    原文作者:技术成就梦想 原文链接: http://ixdba.blog.51cto.com/2895551/566802 一. 集群的定义 集群是一组协同工作的服务集合,用来提供比单一服务更稳定.更高 ...

  5. Mongodb分布式集群搭建

    https://www.cnblogs.com/littleatp/p/8563273.html mongodb配置主从模式 在大数据的时代,传统的关系型数据库要能更高的服务必须要解决高并发读写.海量 ...

  6. GeoAnalyticsServer在Linux下集群部署手册

    1         GeoAnalyticsServer分布式部署架构图 此次使用三台机器进行矢量大数据服务器分布式部署,与单机部署不同,此次部署剥离比较消耗硬件资源的大数据计算节点.存储节点,这两节 ...

  7. linux磁盘阵列oravote,Oracle在Linux下集群RAC的安装与启停

    ora....SM2.asm application ONLINE ONLINE rac2 ora....C2.lsnr application ONLINE ONLINE rac2 ora.rac2 ...

  8. zookeeper windows7下集群搭建

    模拟分布式环境!!!  搞了好几天,各种错误!!终于成功了. 环境: windows7 /centos/xsheel    安装了三个虚拟机... 1.下载zookeeper http://mirro ...

  9. linux集群搭建coolrainbow,Rainbow°110408_教程▍KBFS听歌学韩语—So Cool[Rainbow]

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 -겠:用于动词词干后,表示未来时制 시간:时间          낭비하다:浪费 I know you want me I know you meet m ...

最新文章

  1. Spring Boot 以 jar 包方式运行在后台
  2. sqlserver Distributed Transaction 分布式事务
  3. lvds接口屏线安装图解_液晶屏LVDS线类型图文讲解
  4. PyTorch中的nn.Conv1d与nn.Conv2d
  5. go语言io reader_go语言之IO操作(待补充)
  6. ctl命令 usb_USB入门系列之六 —— USB设备的枚举过程
  7. 7年赚出两个阿里加两个腾讯,他是地表最强打工人!
  8. 数据源中没有 datarow_Power BI Desktop 中的数据源
  9. java控制台五子棋游戏
  10. What is DevOps?
  11. Flightgear操作方式以及几种典型飞机的起飞方法
  12. 代码行数统计工具(SourceCounter附下载链接)
  13. 外贸软件如何提升出口流程管理效率
  14. 单片机蓝牙模块与手机蓝牙通信(1)
  15. 第一章 数学建模与误差分析
  16. 性能测试--11Beanshell的脚本开发技术
  17. 前端交互之hover用法
  18. 波动方程的行波解(一)| 一维波动方程的通解和初值问题的达朗贝尔(d' Alembert)公式 | 偏微分方程(九)
  19. 【CF85D】 Sum of Medians
  20. 虚拟机中小键盘使用不了解决方案

热门文章

  1. DevExpress部分使用技巧(转存) -- 轻舞肥羊
  2. JS任务机制 - springboot实战电商项目mall4j
  3. 地址转换技术 NAT
  4. 基于Springboot+LayUI前后端分离小区物业系统带疫情防疫打卡管理
  5. 立创EDA学习---第一天
  6. 音视频入门-10-使用libyuv对YUV数据进行缩放、旋转、镜像、裁剪、混合
  7. 分享篇:第十届“泰迪杯”数据挖掘挑战赛-农田害虫图像识别(特等奖)
  8. 非线性非高斯模型的改进粒子滤波算法(Matlab代码实现)
  9. 基于对比学习的目标检测预训练方法
  10. flashfxp支持sftp了