MongoDB分片集群搭建

Posted 闻歌感旧

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MongoDB分片集群搭建相关的知识,希望对你有一定的参考价值。

最近搭建了一个Mongodb的分片集群,这里将整个过程做个记录。

一、规划

MongoDB的分片集群,由mongos路由进程、配置服务器、分片集合组成。其中,mongos和配置服务器都是轻量级进程,不会保存数据,配置服务器只保存分片的一些状态信息;而分片集合通常使用复制集(Replica Set)而不是单实例,这样能有效保证不会因某个实例失效而导致整个集群失效。

在本例中,整个分片集群搭建在三台物理服务器(IP分别为192.168.64.161/162/163,简称为w1, w2, w3,均为Windows Server 2012)上。相应地,集群由一个mongos进程、三个config server进程、三个分片集合(分别名为rs1, rs2rs3,每个集合都包括一个Master、一个Slave、一个Arbiter进程)构成,除mongos外其它进程均为一个mongod进程实例。每个物理服务器上都运行一个master、一个slave、一个arbiter、一个config server(另外轻量级的mongos运行在w1上)进程,以此均匀承担压力。如下图所示:

 

注意:端口分配规则:master一律为27017slave一律为27018arbiter一律为27019config server一律为30001mongos30000

二、前期准备

l  安装mongodb

在每台物理服务器上安装MongoDB,强烈建议使用相同版本的安装程序(本例中为3.4.10),安装在D:\\MongoDB\\3.4目录(可以不相同)。详略。

有些可能还需安装VC redist64位或32位,依服务器操作系统而定),否则将来启动时可能报“api-ms-win-crt-runtimel1-1-0.dll缺失”的错误。

l  创建目录

在每台物理服务器上创建配置目录(可共用一个)、数据目录(每分片集一个)、日志目录(建议每分片集一个)。以w1为例:

mkdir D:\\mongodata\\conf\\db

mkdir D:\\mongodata\\conf\\log

mkdir D:\\mongodata\\rs1\\db

mkdir D:\\mongodata\\rs2\\db

mkdir D:\\mongodata\\rs3\\db

mkdir D:\\mongodata\\rs1\\log

mkdir D:\\mongodata\\rs2\\log

mkdir D:\\mongodata\\rs3\\log

另外在w1,再为mongos创建日志目录:

mkdir D:\\mongodata\\mongos\\log

注意:按目前规划,w1rs2目录其实用不到,因为arbiter2进程对数据无影响;此处为统一而保留。

l  修改防火墙

 

修改每台服务器的防火墙,开放27017, 27018, 27019, 30000, 30001端口。详略。

三、配置第一个分片集rs1

l  w1上配置master1的配置文件,假设为master1.conf,目录为D:\\mongodata\\conf

port = 27017

bind_ip=0.0.0.0

pidfilepath = D:\\mongodata\\conf\\master1.pid

logpath = D:\\mongodata\\rs1\\log\\master1.log

dbpath = D:\\mongodata\\rs1\\db

journal = true

nohttpinterface = true

directoryperdb = true

logappend = true

replSet =rs1

l  w2上配置slave1的配置文件,假设为slave1.conf,目录为D:\\mongodata\\conf

port = 27018

bind_ip=0.0.0.0

pidfilepath = D:\\mongodata\\conf\\slave1.pid

logpath = D:\\mongodata\\rs1\\log\\slave1.log

dbpath = D:\\mongodata\\rs1\\db

journal = true

nohttpinterface = true

directoryperdb = true

logappend = true

replSet =rs1

l  w3上配置arbiter1的配置文件,假设为arbiter1.conf,目录为D:\\mongodata\\conf

port = 27019

bind_ip=0.0.0.0

pidfilepath = D:\\mongodata\\conf\\arbiter1.pid

logpath = D:\\mongodata\\rs1\\log\\arbiter1.log

dbpath = D:\\mongodata\\rs1\\db

journal = true

nohttpinterface = true

directoryperdb = true

logappend = true

replSet =rs1

l  启动分片集rs1

在三台服务器分别启动master1, slave1arbiter1

D:\\> mongod.exe -f D:\\mongodata\\conf\\master1.cfg

D:\\> mongod.exe -f D:\\mongodata\\conf\\slave1.cfg

D:\\> mongod.exe -f D:\\mongodata\\conf\\arbiter1.cfg

再用MongoDB shell连接master所在服务器:

D:\\mongo 192.168.64.161:27017

> use admin

> config = { _id:"rs1",  members:

     [ {_id:0,host:\'192.168.64.161:27017\'}, 

      {_id:1,host:\'192.168.64.162:27018\'},   

      {_id:2,host:\'192.168.64.163:27019\',arbiterOnly:true}] };

执行副本集初始化:

> rs.initiate(config)

成功(出现提示"OK":1)后,可检查集群的状态:

 

> rs.status()

四、配置另两个分片集rs2和rs3

按照上一步骤将另两个分片集rs2rs3也配置好,注意目录名、文件名、IP、端口、副本集名与规划保持一致。

 

此步骤完成后,w1上有master1, slave3arbiter2三个mongod实例,w2上有master2, arbiter3slave1三个mongod实例,而w3上有master3, arbiter1slave2三个mongod实例。

五、 配置config servermongos

l  config server的配置文件

在三台服务器各配置一个config server

w1为例,其配置文件名为configsvr1.conf,目录为D:\\mongodata\\conf

port = 30001

bind_ip=0.0.0.0

logpath = D:\\mongodata\\conf\\log\\configsvr1.log

dbpath = D:\\mongodata\\conf\\db

configsvr = true

replSet = cfgReplSet

w2w3上的操作类似,注意区分文件名就可以了。

注意:3.4版起,congig server必须设置replSetMongoDB分片集群搭建

MongoDB分片集群搭建

MongoDB 搭建分片集群

MongoDB分片集群搭建及扩容

MongoDB分片集群原理搭建及测试详解

mongodb3.6集群搭建:分片+副本集