当前位置:Gxlcms > 数据库问题 > 搭建高可用MongoDB集群(四):分片

搭建高可用MongoDB集群(四):分片

时间:2021-07-01 10:21:17 帮助过:26人阅读

,数据库集群请求的入口,所有的请求都通过mongos进行协调,不需要在应用程序添加一个路由选择器,mongos自己就是一个请求分发中心,它负责把对应的数据请求请求转发到对应的shard服务器上。在生产环境通常有多mongos作为请求的入口,防止其中一个挂掉所有的mongodb请求都没有办法操作。

config server,顾名思义为配置服务器,存储所有数据库元信息(路由、分片)的配置。mongos本身没有物理存储分片服务器和数据路由信息,只是缓存在内存里,配置服务器则实际存储这些数据。mongos第一次启动或者关掉重启就会从 config server 加载配置信息,以后如果配置服务器信息变化会通知到所有的 mongos 更新自己的状态,这样 mongos 就能继续准确路由。在生产环境通常有多个 config server 配置服务器,因为它存储了分片路由的元数据,这个可不能丢失!就算挂掉其中一台,只要还有存货, mongodb集群就不会挂掉。

shard,这就是传说中的分片了。上面提到一个机器就算能力再大也有天花板,就像军队打仗一样,一个人再厉害喝血瓶也拼不过对方的一个师。俗话说三个臭皮匠顶个诸葛亮,这个时候团队的力量就凸显出来了。在互联网也是这样,一台普通的机器做不了的多台机器来做,如下图:

技术分享

一台机器的一个数据表 Collection1 存储了 1T 数据,压力太大了!在分给4个机器后,每个机器都是256G,则分摊了集中在一台机器的压力。也许有人问一台机器硬盘加大一点不就可以了,为什么要分给四台机器呢?不要光想到存储空间,实际运行的数据库还有硬盘的读写、网络的IO、CPU和内存的瓶颈。在mongodb集群只要设置好了分片规则,通过mongos操作数据库就能自动把对应的数据操作请求转发到对应的分片机器上。在生产环境中分片的片键可要好好设置,这个影响到了怎么把数据均匀分到多个分片机器上,不要出现其中一台机器分了1T,其他机器没有分到的情况,这样还不如不分片!

replica set,上两节已经详细讲过了这个东东,怎么这里又来凑热闹!其实上图4个分片如果没有 replica set 是个不完整架构,假设其中的一个分片挂掉那四分之一的数据就丢失了,所以在高可用性的分片架构还需要对于每一个分片构建 replica set 副本集保证分片的可靠性。生产环境通常是 2个副本 + 1个仲裁。

说了这么多,还是来实战一下如何搭建高可用的mongodb集群:

首先确定各个组件的数量,mongos 3个, config server 3个,数据分3片 shard server 3个,每个shard 有一个副本一个仲裁也就是 3 * 2 = 6 个,总共需要部署15个实例。这些实例可以部署在独立机器也可以部署在一台机器,我们这里测试资源有限,只准备了 3台机器,在同一台机器只要端口不同就可以,看一下物理部署图:

技术分享

架构搭好了,安装软件!

  • 1、准备机器,IP分别设置为: 192.168.0.136、192.168.0.137、192.168.0.138。
  • 2、分别在每台机器上建立mongodb分片对应测试文件夹。

XHTML <textarea wrap="soft" class="crayon-plain print-no" data-settings="dblclick" readonly="readonly" style="border: none; outline: none; font-stretch: normal; display: block; -webkit-appearance: none; padding-top: 0px; padding-right: 5px; padding-left: 5px; width: 608px; height: 103.5px; resize: none; overflow: auto; margin: 0px; position: absolute; opacity: 0; box-shadow: none; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; -webkit-box-shadow: none; white-space: pre; word-wrap: normal; color: rgb(0, 0, 0); tab-size: 4; z-index: 0; line-height: 15px !important; font-family: Monaco, MonacoRegular, 'Courier New', monospace !important; background-image: initial; background-attachment: initial; background-size: initial; background-origin: initial; background-clip: initial; background-position: initial; background-repeat: initial;"></textarea>
12345#存放mongodb数据文件mkdir -p /data/mongodbtest #进入mongodb文件夹cd  /data/mongodbtest

3、下载mongodb的安装程序包

XHTML<textarea wrap="soft" class="crayon-plain print-no" data-settings="dblclick" readonly="readonly" style="border: none; outline: none; font-stretch: normal; display: block; -webkit-appearance: none; padding-top: 0px; padding-right: 5px; padding-left: 5px; width: 608px; height: 88.5px; resize: none; overflow: auto; margin: 0px; position: absolute; opacity: 0; box-shadow: none; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; -webkit-box-shadow: none; white-space: pre; word-wrap: normal; color: rgb(0, 0, 0); tab-size: 4; z-index: 0; line-height: 15px !important; font-family: Monaco, MonacoRegular, 'Courier New', monospace !important; background-image: initial; background-attachment: initial; background-size: initial; background-origin: initial; background-clip: initial; background-position: initial; background-repeat: initial;"></textarea>
1 2 3 4 wgethttp://fastdl.mongodb.org/linux/mongodb-linux-x86_64-2.4.8.tgz   #解压下载的压缩包 tarxvzfmongodb-linux-x86_64-2.4.8.tgz

4、分别在每台机器建立mongos 、config 、 shard1 、shard2、shard3 五个目录。
因为mongos不存储数据,只需要建立日志文件目录即可。

XHTML <textarea wrap="soft" class="crayon-plain print-no" data-settings="dblclick" readonly="readonly" style="border: none; outline: none; font-stretch: normal; display: block; -webkit-appearance: none; padding-top: 0px; padding-right: 5px; padding-left: 5px; width: 608px; height: 463.5px; resize: none; overflow: auto; margin: 0px; position: absolute; opacity: 0; box-shadow: none; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; -webkit-box-shadow: none; white-space: pre; word-wrap: normal; color: rgb(0, 0, 0); tab-size: 4; z-index: 0; line-height: 15px !important; font-family: Monaco, MonacoRegular, 'Courier New', monospace !important; background-image: initial; background-attachment: initial; background-size: initial; background-origin: initial; background-clip: initial; background-position: initial; background-repeat: initial;"></textarea>
1234567891011121314151617181920212223242526272829#建立mongos目录mkdir -p /data/mongodbtest/mongos/log #建立config server 数据文件存放目录mkdir -p /data/mongodbtest/config/data #建立config server 日志文件存放目录mkdir -p /data/mongodbtest/config/log #建立config server 日志文件存放目录mkdir -p /data/mongodbtest/mongos/log #建立shard1 数据文件存放目录mkdir -p /data/mongodbtest/shard1/data #建立shard1 日志文件存放目录mkdir -p /data/mongodbtest/shard1/log #建立shard2 数据文件存放目录mkdir -p /data/mongodbtest/shard2/data #建立shard2 日志文件存放目录mkdir -p /data/mongodbtest/shard2/log #建立shard3 数据文件存放目录mkdir -p /data/mongodbtest/shard3/data #建立shard3 日志文件存放目录mkdir -p /data/mongodbtest/shard3/log

  • 5、规划5个组件对应的端口号,由于一个机器需要同时部署 mongos、config server 、shard1、shard2、shard3,所以需要用端口进行区分。
    这个端口可以自由定义,在本文 mongos为 20000, config server 为 21000, shard1为 22001 , shard2为22002, shard3为22003.
  • 6、在每一台服务器分别启动配置服务器。

XHTML<textarea wrap="soft" class="crayon-plain print-no" data-settings="dblclick" readonly="readonly" style="border: none; outline: none; font-stretch: normal; display: block; -webkit-appearance: none; padding-top: 0px; padding-right: 5px; padding-left: 5px; width: 608px; height: 49.5px; resize: none; overflow: auto; margin: 0px; position: absolute; opacity: 0; box-shadow: none; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; -webkit-box-shadow: none; white-space: pre; word-wrap: normal; color: rgb(0, 0, 0); tab-size: 4; z-index: 0; line-height: 15px !important; font-family: Monaco, MonacoRegular, 'Courier New', monospace !important; background-image: initial; background-attachment: initial; background-size: initial; background-origin: initial; background-clip: initial; background-position: initial; background-repeat: initial;"></textarea>
1 /data/mongodbtest/mongodb-linux-x86_64-2.4.8/bin/mongod--configsvr--dbpath/data/mongodbtest/config/data--port21000--logpath/data/mongodbtest/config/log/config.log--fork

7、在每一台服务器分别启动mongos服务器。

Java <textarea wrap="soft" class="crayon-plain print-no" data-settings="dblclick" readonly="readonly" style="border: none; outline: none; font-stretch: normal; display: block; -webkit-appearance: none; padding-top: 0px; padding-right: 5px; padding-left: 5px; width: 608px; height: 49.5px; resize: none; overflow: auto; margin: 0px; position: absolute; opacity: 0; box-shadow: none; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; -webkit-box-shadow: none; white-space: pre; word-wrap: normal; color: rgb(0, 0, 0); tab-size: 4; z-index: 0; line-height: 15px !important; font-family: Monaco, MonacoRegular, 'Courier New', monospace !important; background-image: initial; background-attachment: initial; background-size: initial; background-origin: initial; background-clip: initial; background-position: initial; background-repeat: initial;"></textarea>
1/data/mongodbtest

人气教程排行