这个系列大致想跟大家分享以下篇章:

1、mongo 3.4分片集群系列之一:浅谈分片集群

2、mongo 3.4分片集群系列之二:搭建分片集群--哈希分片

3、mongo 3.4分片集群系列之三:搭建分片集群--哈希分片 + 安全

4、mongo 3.4分片集群系列之四:搭建分片集群--哈希分片 + 安全 + 区域

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

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

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

8、mongo 3.4分片集群系列之八:分片管理

这一篇是实践篇。

1、说说分片集群的架构

这里要搭建的分片集群架构如下:

2个mongos,1个三个成员的副本集配置服务器,2个单实例的分片。图示如下:

简单介绍一下MongoDB分片集群由以下组件组成:

    • mongos:mongos作为查询路由器,提供客户端应用程序和分片集群之间的接口。
    • 配置服务器:配置服务器存储集群的元数据和配置信息。从MongoDB 3.4开始,配置服务器必须部署为副本集(CSRS)。
    • 分片:每个分片包含分片数据的一部分。每个分片可以部署为副本集。这里先做单实例,没有做副本集。

2、分片前注意事项

关于分片集群的一些注意点,请参阅:mongo 3.4分片集群系列之一:浅谈分片集群 ,其中第4点,分片前考虑事项。

好啦。慎重考虑完分片前考虑事项的话,接下来就进入实践吧~~~

3、搭建哈希分片集群

下面是参照官网的  https://docs.mongodb.com/manual/tutorial/deploy-sharded-cluster-ranged-sharding/

3.1、搭建前准备:

物理环境:

我这边是用两个虚拟机模仿两台服务器的(真实服务器也按照这个方法实践,可以行得通)。

IP分别为192.168.209.155和192.168.209.156。其中,这两个IP之间必须互通。即192.168.209.155可以ping通192.168.209.156,192.168.209.156也可以ping通192.168.209.155。

配置大致如下:(此操作是建立在mongo3.4版本)

名称 主机 端口 副本集 Data路径 Log路径 配置文件路径
router1 192.168.209.155 6666 /etc/mongo_router1.conf
router2 192.168.209.156 6666 /etc/mongo_router2.conf
config1 192.168.209.155 6000 mongo_config /mongo_config1/data /mongo_config1/log /mongo_config1/mongo_config1.conf
config2 6001 /mongo_config2/data /mongo_config2/log /mongo_config2/mongo_config2.conf
config3 6002 /mongo_config3/data /mongo_config3/log /mongo_config3/mongo_config3.conf
shard1 192.168.209.155 6100 /mongo_shard1/data /mongo_shard1/log /mongo_shard1/mongo_shard1.conf
shard2 192.168.209.156 6100 /mongo_shard2/data /mongo_shard2/log /mongo_shard2/mongo_shard2.conf

接下来就来搭建哈希分片集群咯~~~

3.2、创建配置服务器副本集

部署具有三个成员的配置服务器副本集。

(1)   mongo_config1 (在192.168.209.155上操作)

1)         创建数据路径文件夹和日志路径文件夹

# sudo mkdir –p /mongo_config1/data

# sudo mkdir –p /mongo_config1/log

2)         创建配置文件

# sudo vim /mongo_config1/mongo_config1.conf

文件中的配置如下:(所有空位都是空格,不是TAB键哦,大小写是严格区分的)

storage:

 dbPath: “/mongo_config1/data”

 indexBuildRetry: false

systemLog:

 destination: file

 path: “/mongo_config1/log/mongo_config1.log

net:

 port: 6000

sharding:

 clusterRole: configsvr

replication:

 replSetName: mongo_config

如下图:

    

    关于mongo3.4的配置文件YAML格式,也可以参阅我的另一篇文章mongo3.4 配置文件 注意事项

3)         启动mongod实例

# mongod --fork --config /mongo_config1/mongo_config1.conf

--fork 是以线程方式启动mongod服务

--config 指定配置文件路径

(2)   mongo_config2(在192.168.209.155上操作)

1)         创建数据路径文件夹和日志路径文件夹

# sudo mkdir –p /mongo_config2/data

# sudo mkdir –p /mongo_config2/log

2)         创建配置文件

# sudo vim /mongo_config2/mongo_config2.conf

文件中的配置如下:(所有空位都是空格,不是TAB键哦,大小写是严格区分的)

storage:

 dbPath: “/mongo_config2/data”

 indexBuildRetry: false

systemLog:

 destination: file

 path: “/mongo_config2/log/mongo_config2.log

net:

 port: 6001

sharding:

 clusterRole: configsvr

replication:

 replSetName: mongo_config

如下图:

    

3)         启动mongod实例

# mongod --fork --config /mongo_config2/mongo_config2.conf

--fork 是以线程方式启动mongod服务

--config 指定配置文件路径

(3)   mongo_config3 (在192.168.209.155上操作)

1)         创建数据路径文件夹和日志路径文件夹

# sudo mkdir –p /mongo_config3/data

# sudo mkdir –p /mongo_config3/log

2)         创建配置文件

# sudo vim /mongo_config3/mongo_config3.conf

文件中的配置如下:(所有空位都是空格,不是TAB键哦,大小写是严格区分的)

storage:

 dbPath: “/mongo_config3/data”

 indexBuildRetry: false

systemLog:

 destination: file

 path: “/mongo_config3/log/mongo_config3.log

net:

 port: 6002

sharding:

 clusterRole: configsvr

replication:

 replSetName: mongo_config

如下图:

    

3)         启动mongod实例

# mongod --fork --config /mongo_config3/mongo_config3.conf

--fork 是以线程方式启动mongod服务

--config 指定配置文件路径

(4)   初始化副本集mongo_config(在192.168.209.155上操作)

1)         连接任意一个mongod实例

# sudo mongod --port 6000

2)         初始化副本集

输入以下命令:(这里只是为了方便理解,其实命令行打成一行即可)

rs.initiate(

  {

    _id: "mongo_config",

    configsvr: true,

    members: [

      { _id : 0, host : "192.168.209.155:6000" },

      { _id : 1, host : "192.168.209.155:6001" },

      { _id : 2, host : "192.168.209.155:6002" }

    ]

  }

)

_id:必须匹配传递给mongod 的--replSet参数。

members:是一个数组,每个副本集成员都需要一个文档。

configsvr:必须设置true。

3.3、创建分片

(1)   mongo_shard1 (在192.168.209.155上操作)

1)         为mongo_shard1创建配置文件

# sudo vim /mongo_shard1/mongo_shard1.conf

文件中的配置如下:(所有空位都是空格,不是TAB键哦,大小写是严格区分的)

storage:

 dbPath: “/mongo_shard1/data”

 indexBuildRetry: false

systemLog:

 destination: file

 path: “/mongo_shard1/log/mongo_shard1.log

net:

 port: 6100

sharding:

 clusterRole: shardsvr

如下图:

    

2)         启动mongod实例

# mongod --fork --config /mongo_shard1/mongo_shard1.conf

(2)   mongo_shard2(在192.168.209.156上操作)

1)         为mongo_shard2创建配置文件

# sudo vim /mongo_shard2/mongo_shard2.conf

文件中的配置如下:(所有空位都是空格,不是TAB键哦,大小写是严格区分的)

storage:

 dbPath: “/mongo_shard2/data”

 indexBuildRetry: false

systemLog:

 destination: file

 path: “/mongo_shard2/log/mongo_shard2.log

net:

 port: 6101

sharding:

 clusterRole: shardsvr

如下图:

2)         启动mongod实例

# mongod --fork --config /mongo_shard2/mongo_shard2.conf

3.3、创建路由

(1)   mongo_router1(在192.168.209.155上操作)

1)         为mongo_router1创建配置文件

# sudo vim /etc/mongo_router1.conf

文件中的配置如下:(所有空位都是空格,不是TAB键哦,大小写是严格区分的)

net:

 port: 6666

sharding:

 configDB: mongo_config/192.168.209.155:6000,192.168.209.155:6001,192.168.209.155:6002

如下图:

  

2)         启动mongos实例

# mongos --config /etc/mongo_router1.conf

(2)   mongo_router2(在192.168.209.156上操作)

1)         为mongo_router2创建配置文件

# sudo vim /etc/mongo_router2.conf

文件中的配置如下:(所有空位都是空格,不是TAB键哦,大小写是严格区分的)

net:

 port: 6666

sharding:

 configDB: mongo_config/192.168.209.155:6000,192.168.209.155:6001,192.168.209.155:6002

如下图:

    

2)         启动mongos实例

# mongos --config /etc/mongo_router2.conf

3.4、添加分片到集群

(1)   连接任意一个mongos,这里连接mongo_router1(在192.168.209.155上操作)

# mongo --port 6666

(2)   添加分片

1)         添加第一个分片mongo_shard1

sh.addShard(“192.168.209.155:6100”);

2)         添加第二个分片mongo_shard2

sh.addShard(“192.168.209.156:6100”);

3.5、为数据库启用分片(直接在3.4的窗口中运行即可)

sh.enableSharding(“databaseName”);

其中databaseName,为要分片的数据库。

3.6、使用哈希分片分片集合(直接在3.5的窗口中运行即可)

这里有两种情况,一种是空集合,另一种是有数据的集合,但对于这两种情况都建议用以下方法。

(1)   对于确定作为分片键的字段,建立哈希索引

use databaseName;

db.collectionName.createIndex(Name:”hashed”);

其中,databaseName是3.5启用的分片数据库名称;collectionName是要分片的集合;Name是作为分片键的字段。

(2)   哈希分片

sh.shardCollection(“databaseName.collectionName”,{Name:”hashed”})

其中,databaseName是3.5启用的分片数据库名称;collectionName是要分片的集合;Name是作为分片键的字段。

--------------------------------------- over ------------------------------------------------------

以上资料,大部分是参考官网的资料,在此表示感谢。

https://docs.mongodb.com/manual/tutorial/deploy-sharded-cluster-ranged-sharding/

mongo 3.4分片集群系列之二:搭建分片集群--哈希分片的更多相关文章

  1. mongo 3.4分片集群系列之四:搭建分片集群--哈希分片 + 安全 + 区域

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

  2. mongo 3.4分片集群系列之三:搭建分片集群--哈希分片 + 安全

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

  3. Elasticsearch-6.7.0系列(二)ES集群安装与验证

    准备3台centos7机器/虚拟机,每台都安装上elasticsearch6.7.0 ,安装过程参考我的另一篇博客<Elasticsearch-6.7.0系列(一)9200端口 .tar.gz版 ...

  4. 集群技术(二) MySQL集群简介与配置详解

    when?why? 用MySQL集群? 减少数据中心结点压力和大数据量处理(读写分离),采用把MySQL分布,一个或多个application对应一个MySQL数据库.把几个MySQL数据库公用的数据 ...

  5. MongoDB学习4:MongoDB复制集机制和原理,搭建复制集

    1.复制集的作用   1.1 MongoDB复制集的主要意义在于实现服务高可用   1.2 它的实现依赖于两个方面的功能:    · 数据写入时将数据迅速复制到另一个独立节点上    · 在接收写入的 ...

  6. 剖析Elasticsearch集群系列之二:分布式的三个C、translog和Lucene段

    转载:http://www.infoq.com/cn/articles/anatomy-of-an-elasticsearch-cluster-part02 共识——裂脑问题及法定票数的重要性 共识是 ...

  7. WAS集群系列(6):集群搭建:步骤4:安装WAS升级软件

    逐步点击"下一步",注意一处流程,例如以下列举: "升级软件"安装的路径设置,建议与之前的WAS及IHS安装的绝对路径同样,例如以下所看到的: 逐步点击,完毕安 ...

  8. WAS集群系列(3):集群搭建:步骤1:准备文件

    说明:"指示轨迹"为"点选顺序",截图为点击后效果截图 环境 项目点 指标 WAS版本号 7.0 操作系统 Windows 2008 系统位数 64bit 内存 ...

  9. WAS集群系列(5):集群搭建:步骤3:安装IHS软件

    选择"安装IBM HTTPServer"选项,点击"安装向导".例如以下图提示: 安装提示,逐步点击"下一步",当中偶有几处细节注意就可以. ...

随机推荐

  1. cmd-net命令详解

    NET ViewNET UserNET UseNET TimeNet Start Net PauseNet ContinueNET StopNet StatisticsNet Share Net Se ...

  2. PowerDesinger15设置字体大小

    使用PowerDesigner时,它默认table的字体大小颜色等很难看: 假设通过 Symbol ---> Format进行设置.仅仅能对选中的最改动,新建的Table无效. 能够通过例如以下 ...

  3. (工具类)Linux笔记之终端日志记录工具script

    在学习Linux时,有时候终端的打印消息对于我们很重要,可是终端显示也是有一定的缓冲空间的.当信息打印许多时,前面的信息就会被覆盖掉.所以这里网上搜索了一下这方面的介绍.现总结例如以下: script ...

  4. MySQL具体解释(21)------------缓存參数优化

    数据库属于 IO 密集型的应用程序.其主要职责就是数据的管理及存储工作. 而我们知道,从内存中读取一个数据库的时间是微秒级别,而从一块普通硬盘上读取一个IO是在毫秒级别,二者相差3个数量级.所以,要优 ...

  5. C++入门学习——模板

    为什么须要模板? 我们已经学过重载(Overloading),对重载函数而言,C++ 通过函数參数(參数个数.參数类型)的正确匹配来调用重载函数.比如.为求两个数的最大值,我们定义 max () 函数 ...

  6. ZOJ 3956 Course Selection System 背包DP

    ZOJ3956 观察数据范围, c的值非常小 只有100 所以c的和也很有限 只有50000 是否可以从这里下手? 对于某一个c的和 我们一定希望h的和最大 才有可能是最终答案. 于是有了类似背包的d ...

  7. SPI操作flash MX25L64读写数据

    STM32F10X SPI操作flash MX25L64读写数据 简单的一种应用,ARM芯片作为master,flash为slaver,实现单对单通信.ARM主控芯片STM32F103,flash芯片 ...

  8. JavaScript代码优化新工具UglifyJS

    jQuery 1.5 发布的时候 john resig 大神说所用的代码优化程序从Google Closure切换到UglifyJS,新工具的压缩效果非常令人满意. UglifyJS 是一个服务端no ...

  9. RAR去除广告

    现在注册已经不能去掉广告了,给你一个100%有效的办法(##此教程已更新,最新的winrar5.5同样适用,但是多了一个步骤) 电脑桌面新建一个txt文件,重命名为“rarreg.key” 2. 将. ...

  10. 第2章 微信小程序的基础组件学习

    小程序也可以用div+css进行排版. flex-direction排列方向,可以控制内部的成员的顺序,比如从左到右.从右到左.上下,纵向和横向. flex-wrap可以控制换行是如何去换行的,控制它 ...