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, rs2和rs3,每个集合都包括一个Master、一个Slave、一个Arbiter进程)构成,除mongos外其它进程均为一个mongod进程实例。每个物理服务器上都运行一个master、一个slave、一个arbiter、一个config server(另外轻量级的mongos运行在w1上)进程,以此均匀承担压力。如下图所示:
注意:端口分配规则:master一律为27017,slave一律为27018,arbiter一律为27019,config server一律为30001,mongos为30000。
二、前期准备
l 安装mongodb
在每台物理服务器上安装MongoDB,强烈建议使用相同版本的安装程序(本例中为3.4.10),安装在D:\\MongoDB\\3.4目录(可以不相同)。详略。
有些可能还需安装VC redist(64位或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
注意:按目前规划,w1上rs2目录其实用不到,因为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, slave1和arbiter1:
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
按照上一步骤将另两个分片集rs2和rs3也配置好,注意目录名、文件名、IP、端口、副本集名与规划保持一致。
此步骤完成后,w1上有master1, slave3和arbiter2三个mongod实例,w2上有master2, arbiter3和slave1三个mongod实例,而w3上有master3, arbiter1和slave2三个mongod实例。
五、 配置config server及mongos
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
在w2和w3上的操作类似,注意区分文件名就可以了。
注意:自3.4版起,congig server必须设置replSetMongoDB分片集群搭建