400 028 6601

建站动态

根据您的个性需求进行定制 先人一步 抢占小程序红利时代

搭建高可用mongo分布式---具体操作-创新互联

首先还是上图看看mongodb通过哪些机制实现路由、分片:

成都创新互联是一家专注于成都网站设计、成都网站制作与策划设计,红岗网站建设哪家好?成都创新互联做网站,专注于网站建设10余年,网设计领域的专业建站公司;建站业务涵盖:红岗等地区。红岗做网站价格咨询:028-86922220

搭建高可用mongo分布式---具体操作

从图中可以看到有四个组件:mongos、config server、shard、replica set。

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

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

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

搭建高可用mongo分布式---具体操作


一台机器的一个数据表 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台机器,在同一台机器只要端口不同就可以,看一下物理部署图:

搭建高可用mongo分布式---具体操作

    7、目前搭建了mongodb配置服务器、路由服务器,各个分片服务器,不过应用程序连接到 mongos 路由服务器并不能使用分片机制,还需要在程序里设置分片配置,让分片生效。

#连接mongos
mongo 127.0.0.1:20000
#注意 这里要加上逗号
user  admin;
#串联路由器与分片副本集1
db.runCommand( { addshard:"shard1/192.168.5.100:22001,192.168.5.101:22001,192.168.5.102:22001"});
#串联路由器与分片副本集2
user  admin;
db.runCommand( { addshard:"shard2/192.168.5.100:22002,192.168.5.101:22002,192.168.5.102:22002"});
#串联路由器与分片副本集3
user  admin;
db.runCommand( { addshard:"shard3/192.168.5.100:22003,192.168.5.101:22003,192.168.5.102:22003"});

#查看分片服务器的配置
db.runCommand( { listshards : 1 } );
#内容输出
{
         "shards" : [
                {
                        "_id" : "shard1",
                        "host" : "shard1/192.168.5.100:22001,192.168.5.101:22001"
                },
                {
                        "_id" : "shard2",
                        "host" : "shard2/192.168.5.100:22002,192.168.5.101:22002"
                },
                {
                        "_id" : "shard3",
                        "host" : "shard3/192.168.5.100:22003,192.168.5.101:22003"
                }
        ],
        "ok" : 1
}


另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


本文标题:搭建高可用mongo分布式---具体操作-创新互联
URL地址:http://mbwzsj.com/article/dhpogh.html

其他资讯

让你的专属顾问为你服务