bash大法好啊,一键玩mongo。

我的mongo版本是:MongoDB shell version v4.0.2

这里准备为大家献上Mongo创建分片和可复制集的脚本,以及在部署的时候踩的坑。

分完片插入的文档没有包含分片的键:

兄弟们,权限自动化的脚本来了~

安装好了mongo之后,执行脚本就可以玩了,呵呵

mon-config-cluster-start.sh

#!/bin/bash

# 杀死与mongo有关的所有进程, 先把进程都清一遍
pid=$(ps -ef | grep 'mongo' | grep -v grep | awk '{print $2}')
for temp in $pid
do
echo "this is $temp"
if ps -p $temp > /dev/null
then
echo "$temp is running"
kill - $temp
fi
done # 创建分片实验的数据文件, 如果已经存在data的话就先删除
if [ ! -d "/root/data" ]; then
mkdir /root/data
else
echo "文件夹已经存在, 先清空/root/data"
rm -rf /root/data/*
fi # 创建shard-a的数据目录
echo "创建shard-a的数据目录"
mkdir /root/data/rs-a-1
mkdir /root/data/rs-a-2
mkdir /root/data/rs-a-3 # 启动第一个可复制集
mongod --shardsvr --replSet shard-a --dbpath /root/data/rs-a-1 --port 30000 --logpath /root/data/rs-a-1.log --fork
mongod --shardsvr --replSet shard-a --dbpath /root/data/rs-a-2 --port 30001 --logpath /root/data/rs-a-2.log --fork
mongod --shardsvr --replSet shard-a --dbpath /root/data/rs-a-3 --port 30002 --logpath /root/data/rs-a-3.log --fork mongo localhost:30000/test initial-shard-a.js # 创建shard-b的数据目录
echo "创建shard-b的数据目录"
mkdir /root/data/rs-b-1
mkdir /root/data/rs-b-2
mkdir /root/data/rs-b-3 # 启动第二个可复制集
mongod --shardsvr --replSet shard-b --dbpath /root/data/rs-b-1 --port 30100 --logpath /root/data/rs-b-1.log --fork
mongod --shardsvr --replSet shard-b --dbpath /root/data/rs-b-2 --port 30101 --logpath /root/data/rs-b-2.log --fork
mongod --shardsvr --replSet shard-b --dbpath /root/data/rs-b-3 --port 30102 --logpath /root/data/rs-b-3.log --fork mongo localhost:30100/test initial-shard-b.js # 创建配置文件的目录
mkdir /root/data/config-1
mkdir /root/data/config-2
mkdir /root/data/config-3 echo "准备启动配置服务进程"
# 启动配置服务器进程
# Failed global initialization: BadValue: nojournal is not allowed when configsvr is specified
# 这里没有指定配置项 --nojournal
mongod --configsvr --replSet conf --dbpath /root/data/config-1 --port 27019 --logpath /root/data/config-1.log --fork
mongod --configsvr --replSet conf --dbpath /root/data/config-2 --port 27020 --logpath /root/data/config-2.log --fork
mongod --configsvr --replSet conf --dbpath /root/data/config-3 --port 27021 --logpath /root/data/config-3.log --fork mongo localhost:27019/test initial-conf.js # 启动mongos进程
# 注意前面要有conf这个配置集群可复制集的名字
echo "准备启动路由进程......"
mongos --configdb conf/localhost:27019,localhost:27020,localhost:27021 --logpath /root/data/mongos.log --port 40000 --fork # 添加分片, 以及对哪个库和集合进行分片
mongo localhost:40000/test add-shard.js # 执行插入数据, 然后你就可以去shard-a和shard-b上去看数据了, 确实被分片了
mongo localhost:40000/test add-doc.js

initial-shard-a.js

// 使用这种单条的方式不行, 似乎只有第一条语句有效果, 后面的rs.add就没用了
// rs.initiate();
// print("执行了initiate()");
// rs.add("127.0.0.1:30001");
// print("added secondary...");
// rs.addArb("127.0.0.1:30002"); config={
_id:"shard-a",
members:[
{_id:0,host:"localhost:30000"},
{_id:1,host:"localhost:30001"},
{_id:2,host:"localhost:30002",arbiterOnly:true}
]
};
rs.initiate(config);

initial-shard-b.js

// rs.initiate();
// rs.add("localhost:30101");
// rs.addArb("localhost:30102"); config={
_id:"shard-b",
members:[
{_id:0,host:"localhost:30100"},
{_id:1,host:"localhost:30101"},
{_id:2,host:"localhost:30102",arbiterOnly:true}
]
};
rs.initiate(config);

initial-conf.js

// 日了狗了, 配置服务器不能使用arbiter
config={
_id:"conf",
members:[
{_id:0,host:"localhost:27019"},
{_id:1,host:"localhost:27020"},
{_id:2,host:"localhost:27021"}
]
};
rs.initiate(config); print("初始化配置可复制集...");

add-shard.js

print("准备添加分片......");
printjson(sh.addShard('shard-a/localhost:30000,localhost:30001'));
printjson(sh.addShard('shard-b/localhost:30100,localhost:30101'));
print("开启test可分片")
printjson(sh.enableSharding("test"));
printjson(sh.shardCollection('test.user',{name: 1}));
printjson(sh.status());
print("添加分片完毕");

add-doc.js

print("start....");

t = "I love China, I love palying DOTA, 妈蛋国庆节怎么说...."
for(i=0; i<10; i++) {
t = t + t;
} print("heheda");
for(a=0; a<1000; a++) {
print("a = " + a);
db.user.insert({name:Math.random().toString(36).substr(2), filename: "sheet-1", updated_at: new Date(),data: t});
}

Mongo分片集群脚本的更多相关文章

  1. Mongo--04 Mongo分片集群

    目录 一.分片的概念 二. 分片工作原理 三.IP端口目录规划 1.IP端口规划 2.目录规划 四.分片集群搭建副本集步骤 1.安装软件 2.创建目录 3.创建配置文件 4.优化警告 5.启动服务 6 ...

  2. 从零搭建mongo分片集群的简洁方法

    一.目录 1.mongo路径,config数据路径,shard数据路径

  3. mongo分片集群部署

    测试环境192.168.56.101-213 前期准备: openssl rand -base64 756 > /home/software/mongodb/mongodbkey chmod   ...

  4. mongo 分片集群的搭建

    MongoDB版本当前使用的MongoDB版本为4.2.0,下载地址.https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.2. ...

  5. Mongo 整体架构介绍(1)-------分片集群

    摘要 在mongo初识文中介绍了mongo与cassandra的主要区别,以及mongo物理部署架构图.本文接着上一篇的mongo 架构图,来继续讲分片集群. 分片介绍 shard key mongo ...

  6. mongo 3.4分片集群系列之八:分片管理

    这个系列大致想跟大家分享以下篇章: 1.mongo 3.4分片集群系列之一:浅谈分片集群 2.mongo 3.4分片集群系列之二:搭建分片集群--哈希分片 3.mongo 3.4分片集群系列之三:搭建 ...

  7. mongo 3.4分片集群系列之七:配置数据库管理

    这个系列大致想跟大家分享以下篇章: 1.mongo 3.4分片集群系列之一:浅谈分片集群 2.mongo 3.4分片集群系列之二:搭建分片集群--哈希分片 3.mongo 3.4分片集群系列之三:搭建 ...

  8. mongo 3.4分片集群系列之六:详解配置数据库

    这个系列大致想跟大家分享以下篇章: 1.mongo 3.4分片集群系列之一:浅谈分片集群 2.mongo 3.4分片集群系列之二:搭建分片集群--哈希分片 3.mongo 3.4分片集群系列之三:搭建 ...

  9. mongo 3.4分片集群系列之五:详解平衡器

    这个系列大致想跟大家分享以下篇章: 1.mongo 3.4分片集群系列之一:浅谈分片集群 2.mongo 3.4分片集群系列之二:搭建分片集群--哈希分片 3.mongo 3.4分片集群系列之三:搭建 ...

随机推荐

  1. 【转】标准C++类std::string的内存共享和Copy-On-Write技术

    1.             概念 Scott Meyers在<More Effective C++>中举了个例子,不知你是否还记得?在你还在上学的时候,你的父母要你不要看电视,而去复习功 ...

  2. rdlc 分页操作和分页统计

    1. 工具箱中拖一个列表过来,设置 列表-->行组-->组属性常规-->组表达式=Int((RowNumber(Nothing)-1)/10)分页符-->勾选在组的结尾. 2. ...

  3. [转] spring的普通类中如何取session和request对像

    在使用spring时,经常需要在普通类中获取session,request等对像.比如一些AOP拦截器类,在有使用struts2时,因为struts2有一个接口使用org.apache.struts2 ...

  4. php分享十三:mysql事物

    一:事物的隔离级别 1:隔离级别的类型 SQL标准定义了4类隔离级别,包括了一些具体规则,用来限定事务内外的哪些改变是可见的,哪些是不可见的: Read Uncommitted(读取未提交内容) Re ...

  5. Java:多线程,CyclicBarrier同步器

    1. 背景 CyclicBarrier类,它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point).在涉及一组固定大小的线程的程序中,这些线程必须不时地互相等待,此 ...

  6. 【Android UI】如何做一个纯粹的Android app UI 设计

    原文:http://android.eoe.cn/topic/summary 许多开发者会在多个平台上发布应用.如果您打算为 Android 开发应用,请记住在不同的平台需要遵守不同的要求和惯例.在某 ...

  7. 利用阿里云如何开发一款直播app?

    在开发的过程中应该注意些什么?下面让小编告诉你: 随着互联网的发展,越来越多的人已经加入互联网的行列.而且很多的人也开始直播,和众多的网友分享自己身边事情.互联网还在加速发展,从PC互联网,到移动互联 ...

  8. SharePreference 注册 registerOnSharedPreferenceChangeListener 无法回调的问题

    以前一直没有用过 registerOnSharedPreferenceChangeListener 回调方法,今天用到了,就设置了下,结果发现不起作用,因为一直没有回调. 代码: mSp = this ...

  9. Android 开发之修改 app 的字体大小(老人模式)

    新的需求(可参见 微信和QQ改变字体): app 字体不随着系统字体大小变化 app 设置中有设置字体大小的开关,变大以后,整个 app 字体变大. 解决方案:(字体需要采用 dp 为单位,不能使用 ...

  10. python之celery使用详解一

    前段时间需要使用rabbitmq做写缓存,一直使用pika+rabbitmq的组合,pika这个模块虽然可以很直观地操作rabbitmq,但是官方给的例子太简单,对其底层原理了解又不是很深,遇到很多坑 ...