### 实验:分片集群搭建及扩容
#### 实验目标及流程
* 目标:学习如何搭建一个两分片的分片集群
* 环境: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. Linux基础命令---lftp登录ftp服务器

    lftp lftp指令可以用来登录远程ftp服务器,这是一个字符界面的文件传输工具. 此命令的适用范围:RedHat.RHEL.Ubuntu.CentOS.SUSE.openSUSE.Fedora. ...

  2. HashMap 和 HashSet

    对于HashSet而言,系统采用Hash算法决定集合元素的存储位置,这样可以保证快速存取集合元素: 对于HashMap,系统将value当成key的附属,系统根据Hash算法来决定key的存储位置,这 ...

  3. 使用 ACE 库框架在 UNIX 中开发高性能并发应用

    使用 ACE 库框架在 UNIX 中开发高性能并发应用来源:developerWorks 中国 作者:Arpan Sen ACE 开放源码工具包可以帮助开发人员创建健壮的可移植多线程应用程序.本文讨论 ...

  4. Spring Boot简单操作

    目录 一.自定义异常页面 二.单元测试 ​三.多环境选择 四.读取主配置文件中的属性 五.读取List属性 一.自定义异常页面 对于404.405.500等异常状态,服务器会给出默认的异常页面,而这些 ...

  5. java 对 final 关键字 深度理解

    基础理解 : 1.修饰类 当用final去修饰一个类的时候,表示这个类不能被继承.处于安全,在JDK中,被设计为final类的有String.System等,这些类不能被继承 .注意:被修饰的类的成员 ...

  6. java的父类声明,子类实例化(强制类型转换导致异常ClassCastException)

    一.使用原因 父类声明,子类实例化,既可以使用子类强大的功能,又可以抽取父类的共性. 二.使用要点 1.父类类型的引用可以调用父类中定义的所有属性和方法: 2.父类中方法只有在是父类中定义而在子类中没 ...

  7. JS21. 使用原生JS封装一个公共的Alert插件(HTML5: Shadow Dom)

    效果预览 Shadow DOM Web components  的一个重要属性是封装--可以将标记结构.样式和行为隐藏起来,并与页面上的其他代码相隔离,保证不同的部分不会混在一起,可使代码更加干净.整 ...

  8. Jenkins实例 自由风格项目

    目录 一.General 二.源码管理 三..构建触发器 四.构建环境 五.构建 六.构建后操作 一.General General是构建任务的一些基本配置.名称,描述之类的. 项目名称:是刚才创建构 ...

  9. Python语法之变量

    一.变量简介 1.什么是变量 变量即变化的量,用于记录事物的某种状态,比如人的年龄.性别,游戏角色的等级.金钱. 2.如何使用变量 日常生活中: 姓名:Jason 年龄:18 爱好:音乐 程序中: u ...

  10. Python解释器下载安装

    一.简介 吉多·范罗苏姆(Guido van Rossum)在1989年的圣诞节期间,编写能够解释Python语言语法的解释器. 解释器版本 第一个数字是大版本号 数字不同功能上可能会有很大差异 py ...