### 实验:分片集群搭建及扩容
#### 实验目标及流程
* 目标:学习如何搭建一个两分片的分片集群
* 环境:3台Linux虚拟机器,4Core 8GB
* 步骤:
* 配置域名解析
* 准备分片目录
* 创建第一个分片复制集并初始化
* 初始化分片集群,加入第一个分片
* 创建分片表
* 加入第二个分片
#### 实验架构
```
demo1 shard1(Primary|27017) shard2(Primary|27011) Config1(27019) mongos(27017)
```
```
demo2 Secondary|27010 Secondary|27011 Config2(27019)
```
```
demo3 Secondary|27010 Secondary|27011 Config3(27019)
```

| | member1 | member2 | member3 | member4 | member5 | member6 |
|-------|---------|---------|---------|---------|---------|---------|
| shard1 | ● | | ● | | ● | |
| shard2 | | ● | | ● | | ● |
| config | ● | | ● | | ● | |
| mongos | | ● | | ● | | ● |

demo1 member1.example.com member2.example.com

demo2 member3.example.com member4.example.com

demo3 member5.example.com member6.example.com

1. 配置域名解析
在3台虚拟器上分别执行以下3条命令,注意替换实际IP地址
```
echo "192.168.1.1 demo1 member1.example.com member2.example.com" >> /etc/hosts
echo "192.168.1.2 demo2 member3.example.com member4.example.com" >> /etc/hosts
echo "192.168.1.3 demo3 member5.example.com member6.example.com" >> /etc/hosts
```
2. 准备分片目录
在各服务器上创建数据目录,我们用`/data`,请按自己需要修改为其他目录:
- 在member1/member3/member5上执行以下命令:
mkdir -p /data/shard1/
mkdir -p /data/config/
_ 在member2/member4/member6上执行以下命令:
mkdir -p /data/shard2/
mkdir -p /data/mongos/
3. 创建第一个分片用的复制集
在member1/member3/member5上执行以下命令
```
mongod --bind_id 0.0.0.0 --replSet shard1 --dbpath /data/shard1 --logpath
/data/shard1/mongod.lgo --port 27010 --fork --shardsvr --wiredTigerCacheSizeGB 1
```
4. 初始化第一个分片复制集
```
mongo --host member1.example.com:27010
rs.initiate({
_id : "shard1",
"members": [
{
"_id": 0,
"host": "member1.example.com:27010"
},
{
"_id": 1,
"host": "member3.example.com:27010"
},
{
"_id": 2,
"host": "member5.example.com:27010"
},
]
})
```
5. 创建config server复制集
在member1/member3/member5上执行以下命令
```
mongod --bind_id 0.0.0.0 --replSet shard1 --dbpath /data/shard1 --logpath
/data/shard1/mongod.lgo --port 27010 --fork --shardsvr --wiredTigerCacheSizeGB 1
```
6. 初始化config server复制集
```
mongo --host member1.example.com:27010
rs.initiate({
_id : "shard1",
"members": [
{
"_id": 0,
"host": "member1.example.com:27010"
},
{
"_id": 1,
"host": "member3.example.com:27010"
},
{
"_id": 2,
"host": "member5.example.com:27010"
},
]
})
```
7. 在第一台机器上搭建mongos
```
# mongos --bind_ip 0.0.0.0 --logpath /data/mongos/mongos.log --port 27017 --fork
-- configdb config/member1.example.com:27019,member3.example.com:27019,member5.example.com:27019
# 连接到mongos,添加分片
# mongo --host member1.example.com:27017
mongos>
sh.addShard("shard1/member1.example.com:27010,member3.example.com:27010,member5.example.com:27010");
```
8. 创建分片表
```
# 连接到mongos,创建分片集合
# mongo --host member1.example.com:27017
mongos > sh.status();
mongos > sh.enableSharding("foo");
mongos > sh.shardCollection("foo.bar", {_id:'hashed'});
mongos > sh.status();
插入测试数据
use foo
for (var i = 0; i < 10000; i++) {
db.bar.insert({i:i});
}
```
9. 创建第2个分片复制集
在 member2/member4/member6上执行以下命令
```
mongod --bind_id 0.0.0.0 --replSet shard2 --dbpath /data/shard2
--logpath /data/shard2/mongod.log --port 27011 --fork --shardsvr --wiredTigerCacheSizeGB 1
```
10. 初始化第二个分片的复制集
```
# mongo --host member2.example.com:27011
rs.initiate({
_id : "shard2",
"members": [
{
"_id": 0,
"host": "member2.example.com:27011"
},
{
"_id": 1,
"host": "member4.example.com:27011"
},
{
"_id": 2,
"host": "member6.example.com:27011"
},
]
})
```
11. 加入第2个分片
```
# 连接到mongos,添加分片
# mongo --host member1.example.com:27017
mongos>
sh.addShard("shard2/member2.example.com:27011,member4.example.com:27011,member6.example.com:27011");
mongos>sh.status()
```

MongoDB分片集群搭建及扩容的更多相关文章

  1. MongoDB 分片集群搭建

    一.概述 分片是一种在多台机器上分配数据的方法.MongoDB使用分片来支持具有非常大的数据集和高吞吐量操作.有两种解决系统增长的方法:垂直扩展和水平扩展. 垂直扩展涉及增加单个服务器的容量,例如使用 ...

  2. MongoDB 分片集群实战

    背景 在如今的互联网环境下,海量数据已随处可见并且还在不断增长,对于如何存储处理海量数据,比较常见的方法有两种: 垂直扩展:通过增加单台服务器的配置,例如使用更强悍的 CPU.更大的内存.更大容量的磁 ...

  3. 分布式文档存储数据库之MongoDB分片集群

    前文我们聊到了mongodb的副本集以及配置副本集,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/13953598.html:今天我们来聊下mongodb的分片 ...

  4. Windows 搭建MongoDB分片集群(一)

    一.角色说明 要构建一个MongoDB分片集群,需要三个角色: shard server  即存储实际数据得分片,每个shard 可以是一个Mongod实例,也可以是一组mongod实例构成得Repl ...

  5. 搭建MongoDB分片集群

    在部门服务器搭建MongoDB分片集群,记录整个操作过程,朋友们也可以参考. 计划如下: 用5台机器搭建,IP分别为:192.168.58.5.192.168.58.6.192.168.58.8.19 ...

  6. Windows 搭建MongoDB分片集群(二)

    在本篇博客中我们主要讲描述分片集群的搭建过程.配置分片集群主要有两个步骤,第一启动所有需要的mongod和mongos进程.第二步就是启动一个mongos与集群通信.下面我们一步步来描述集群的搭建过程 ...

  7. MongoDB分片集群原理、搭建及测试详解

    随着技术的发展,目前数据库系统对于海量数据的存储和高效访问海量数据要求越来越高,MongoDB分片机制就是为了解决海量数据的存储和高效海量数据访问而生. MongoDB分片集群由mongos路由进程( ...

  8. 网易云MongoDB分片集群(Sharding)服务已上线

    此文已由作者温正湖授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. MongoDB sharding cluster(分片集群)是MongoDB提供的数据在线水平扩展方案,包括 ...

  9. [ MongoDB ] 分片集群及测试

    分片 在Mongodb里面存在另一种集群,就是分片技术,可以满足MongoDB数据量大量增长的需求. 当MongoDB存储海量的数据时,一台机器可能不足以存储数据,也可能不足以提供可接受的读写吞吐量. ...

随机推荐

  1. vue中vuex的五个属性和基本用法

    VueX 是一个专门为 Vue.js 应用设计的状态管理构架,统一管理和维护各个vue组件的可变化状态(你可以理解成 vue 组件里的某些 data ). Vuex有五个核心概念: state, ge ...

  2. ES6 object.defineProperty

    Object.defineProperty() 方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性, 并返回这个对象. Object.defineProperty(obj, prop, ...

  3. BS版本的TCP程序

    // 使用Socket对象中的方法getInputStream,获取到网络字节输入流InputStream对象 InputStream is = socket.getInputStream();// ...

  4. 阿里巴巴Java开发手册摘要(二)

    MySql数据库 一建表规约 1.表达是与否概念的字段,必须使用is_xxx的命名方式,数据类型是unsigned tinyint(1:是,0否) 正例:表达逻辑删除的字段名is_deleted,1表 ...

  5. binlog浅析

    binlog浅析 一.基础知识 什么是binlog? (图一) 全称:Binary Log (二进制日志),包含描述数据库更改的" 事件 ",例如表创建操作或对表数据的更改.二进制 ...

  6. [BUUCTF]PWN——bjdctf_2020_router

    bjdctf_2020_router 附件 步骤: 例行检查,64位程序,开启了NX保护 本地试运行一下程序,看看大概的情况 会让我们选择,选择4.root,没什么用,但是注意了,这边选1会执行pin ...

  7. uni-app + Cloudbase——uni-app 项目中如何使用腾讯云开发后端服务

    1 基本介绍 uni-app 是一个基于 Vue.js 的跨端开发框架,一套代码可以发布到 App.小程序.Web 等不同平台 腾讯云开发平台 Cloudbase 提供的 @cloudbase/js- ...

  8. RegExp正则表达式(三)–js中正则表达式的定义

    在js中,RegExp正则表达式的定义有两种方式:一种是普通方式,另一种是构造函数方式.无论是那种定义正则表达式的方式,它们都会返回RegExp对象. 普通方式定义正则表达式的格式 语法: var 变 ...

  9. Struts拦截器设置完的值为什么在页面取不到

    Struts拦截器设置完的值为什么在页面取不到. ActionContext ac = (ActionContext) invocation.getInvocationContext(); ac.pu ...

  10. C++ 智能指针(shared_ptr/weak_ptr)原理分析

    其主要的类关系如下所示(省略相关的类模板参数): 图1 从上面的类图可以清楚的看出shared_ptr内部含有一个指向被管理对象(managed object)T的指针以及一个__shared_cou ...