mongodb linux下集群搭建
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下集群搭建相关推荐
- Linux下集群的搭建
1.集群的简介: 集群(cluster)技术是一种较新的技术,通过集群技术,可以在付出较低成本的情况下获得在性能.可靠性.灵活性方面的相对较高的收益,其任务调度则是集群系统中的核心技术. 如果一个事情 ...
- mongodb分布式集群搭建手记
一.架构简介 目标 单机搭建mongodb分布式集群(副本集 + 分片集群),演示mongodb分布式集群的安装部署.简单操作. 说明 在同一个vm启动由两个分片组成的分布式集群,每个分片都是一个PS ...
- MongoDB单机集群搭建
一.单机副本集部署方案: 单台物理机,一个主节点,一个副本节点,一个仲裁节点. 二.部署步骤 1.在mongodb目录下新建config目录(目录及位置可随意指定,在此按照config目录搭建),在c ...
- Linux下集群技术应用概述
原文作者:技术成就梦想 原文链接: http://ixdba.blog.51cto.com/2895551/566802 一. 集群的定义 集群是一组协同工作的服务集合,用来提供比单一服务更稳定.更高 ...
- Mongodb分布式集群搭建
https://www.cnblogs.com/littleatp/p/8563273.html mongodb配置主从模式 在大数据的时代,传统的关系型数据库要能更高的服务必须要解决高并发读写.海量 ...
- GeoAnalyticsServer在Linux下集群部署手册
1 GeoAnalyticsServer分布式部署架构图 此次使用三台机器进行矢量大数据服务器分布式部署,与单机部署不同,此次部署剥离比较消耗硬件资源的大数据计算节点.存储节点,这两节 ...
- linux磁盘阵列oravote,Oracle在Linux下集群RAC的安装与启停
ora....SM2.asm application ONLINE ONLINE rac2 ora....C2.lsnr application ONLINE ONLINE rac2 ora.rac2 ...
- zookeeper windows7下集群搭建
模拟分布式环境!!! 搞了好几天,各种错误!!终于成功了. 环境: windows7 /centos/xsheel 安装了三个虚拟机... 1.下载zookeeper http://mirro ...
- linux集群搭建coolrainbow,Rainbow°110408_教程▍KBFS听歌学韩语—So Cool[Rainbow]
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 -겠:用于动词词干后,表示未来时制 시간:时间 낭비하다:浪费 I know you want me I know you meet m ...
最新文章
- Spring Boot 以 jar 包方式运行在后台
- sqlserver Distributed Transaction 分布式事务
- lvds接口屏线安装图解_液晶屏LVDS线类型图文讲解
- PyTorch中的nn.Conv1d与nn.Conv2d
- go语言io reader_go语言之IO操作(待补充)
- ctl命令 usb_USB入门系列之六 —— USB设备的枚举过程
- 7年赚出两个阿里加两个腾讯,他是地表最强打工人!
- 数据源中没有 datarow_Power BI Desktop 中的数据源
- java控制台五子棋游戏
- What is DevOps?
- Flightgear操作方式以及几种典型飞机的起飞方法
- 代码行数统计工具(SourceCounter附下载链接)
- 外贸软件如何提升出口流程管理效率
- 单片机蓝牙模块与手机蓝牙通信(1)
- 第一章 数学建模与误差分析
- 性能测试--11Beanshell的脚本开发技术
- 前端交互之hover用法
- 波动方程的行波解(一)| 一维波动方程的通解和初值问题的达朗贝尔(d' Alembert)公式 | 偏微分方程(九)
- 【CF85D】 Sum of Medians
- 虚拟机中小键盘使用不了解决方案