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

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. DELL T110II Server如何通过RAID 级别迁移的方式在OMSA下实现磁盘阵列扩容?

    目录: RAID 转移规则说明 操作步骤 本文介绍了 通过RAID 级别转换来实现扩容的方法注意:本文相关RAID的操作,仅供在测试环境里学习和理解戴尔PowerEdge服务器RAID控制卡的功能和使 ...

  2. 笔记本能连上WIFI网络,但是无法上网怎么办

    在插网线的台式机上登陆192.168.1.1,点击无线设置,修改一下SSID号,别的什么都不用改.   然后保存,需要重启路由器.重启之后再用笔记本连接新的无线网络即可.

  3. vuex 存值 及 取值 的操作

    1.传值 // 定义参数 let params = { workItemId: workItemId, flowInstId: flowInstId, itemStatus: itemStatus, ...

  4. 理解C语言中指针的声明以及复杂声明的语法

    昨天刚把<C程序设计语言>中"指针与数组"章节读完,最终把心中的疑惑彻底解开了.如今记录下我对指针声明的理解.顺便说下怎样在C语言中创建复杂声明以及读懂复杂声明. 本文 ...

  5. openstack (3)---------部署memcached缓存服务,keystone服务

    一.memcached概念 Memcached 是一个开源的.高性能的分布式内存对象缓存系统.通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高网站访问速度,加速动态WEB应用.减轻数据库负载 ...

  6. Wordpress3.9开启多网站配置配置nginx进行局域网測试.

    由于须要帮staff迁移一些数据, 所以想到了使用wordpress的多网站. 这个功能在wordpress3.0后就有了. 软件系统等信息:  OS: linux debian wheezy php ...

  7. python partial

    1 很好记忆 partial的第一个参数是函数,后面都是该函数的参数. 2 特殊的地方 partial第一个参数是函数名,但是第二个参数是另外一个函数名. 比如partial(filter, func ...

  8. Linux/Android——usb触摸屏驱动 - usbtouchscreen (一)【转】

    本文转载自:http://blog.csdn.net/jscese/article/details/41827495 最近需要往TV上装一个触摸屏设备,现在比较常见的就是使用usb接口的触摸框,适用于 ...

  9. cc1: error: bad value (armv5) for -march= switch【转】

    本文转载自:https://stackoverflow.com/questions/23871924/cc1-error-bad-value-armv5-for-march-switch Ask Qu ...

  10. 【JSOI 2008】 最小生成树计数

    [题目链接] 点击打开链接 [算法] 笔者做这题参考了这篇博客 : https://blog.sengxian.com/solutions/bzoj-1016 推荐阅读 首先,我们需要知道三个定理 : ...