热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

MongoDB集群(分片)安装与配置方法图解

软件准备下载mongoDB(mongoDB下载地址),笔者使用的是mongoDB2.0.4的Linux64-bit版本。解压:tarxzfmongo.tgz默认情况下,mongoDB将数据存储在/data/db目录下,但它不会自动创建该目录,所以我们需要手动创建它:$sudomkdir-p/data/db/$sudo

软件准备

下载mongoDB(mongoDB下载地址),笔者使用的是mongoDB 2.0.4的Linux 64-bit版本。

解压:tar xzf mongo.tgz

默认情况下,mongoDB将数据存储在/data/db目录下,但它不会自动创建该目录,所以我们需要手动创建它:

$ sudo mkdir -p /data/db/

$ sudo chown `id -u` /data/db

也可以使用--dbpath参数来指定别的数据库目录。

如果只是想在单机上测试一下mongoDB的话,非常简单,首先启动MongoDB server,

$ ./mongodb-xxxxxxx/bin/mongod

在另外一个终端,连接到我们启动的server:

$ ./mongodb-xxxxxxx/bin/mongo

> db.foo.save( { a : 1 } )

> db.foo.find()

Sharding Cluster介绍

这是一种可以水平扩展的模式,在数据量很大时特给力,实际大规模应用一般会采用这种架构去构建monodb系统,其构架图如下:

mongoDB集群(分片)搭建与配置

要构建一个 MongoDB Sharding Cluster,需要三种角色:

Shard Server:每个Shard可以是一个mongod 实例,也可以是一组mongod实例,用于存储实际的数据分片,实际生产环境中一个shard server角色可由几台机器组个一个relica set承担,防止主机单点故障。

Config Server:为了将一个特定的collection存储在多个Shard中,需要为该collection指定一个Shard key,决定该记录属于哪个chunk。mongod 实例,存储了整个 Cluster Metadata,其中包括 chunk 信息。具体来说,配置服务器可以存储以下信息:

每个chunk的Shard key范围

chunk在各Shard的分布情况

集群中所有DB和collection的Sharding配置信息

Route Server:mongos 实例,前端路由,客户端由此接入,且让整个集群看上去像单一数据库,前端应用可以透明使用。路由首先询问配置服务器需要到哪个Shard上查询或保存记录,然后连接相应的Shard执行操作,最后将结果返回给客户端。

整体配置概览

首先说一下笔者的分片搭建环境,三台服务器,操作系统都是Ubuntu 11.04 Server 版,64位。IP分别为192.168.56.191、192.168.56.168、192.168.56.169,具体如下表所示:

主机

IP

服务及端口

server1

192.168.56.191

mongod shard11:27017

mongod shard12:27018

mongod config1:20000

mongs1:30000

server2

192.168.56.168

mongod shard12:27017
mongod shard22:27018
mongod config2:20000
mongs2:30000

server3

192.168.56.169

mongod shard13:27017
mongod shard23:27018
mongod config3:20000
mongs3:30000

这样我们集群包含了:

2个shard(mongod)、3个replica

shard1:192.168.56.191:27017、192.168.56.168:27017、192.168.56.169:27017

shard2:192.168.56.191:27018、192.168.56.168:27018、192.168.56.169:27018

3个config server:192.168.56.191:20000、192.168.56.168:20000、192.168.56.169: 20000

3个mongos:192.168.56.191:30000、192.168.56.168:30000、192.168.56.169: 30000

步骤

1)创建文件夹

在各台server上创建shard文件目录

Server1:
mkdir -p data/db/shard11
mkdir -p data/db/shard21


Server2:
mkdir -p data/db/shard12
mkdir -p data/db/shard22



Server3:
mkdir -p data/db/shard13
mkdir -p data/db/shard23


创建完毕后,请确保当前用户对该文件夹拥有读写权限(使用chown命令),否则之后会报错。

2) 在三台机器上分别启动mongod进程

Server1:

./bin/mongod --shardsvr --replSet shard1 --port 27017 --dbpath /data/db/shard11/ --oplogSize 100 --logpath /data/db/shard12.log --logappend --fork --rest

./bin/mongod -shardsvr -replSet shard2 -port 27018 -dbpath /data/db/shard21/ -oplogSize 100 -logpath /data/db/shard22.log -logappend -fork

Server2:
./bin/mongod --shardsvr --replSet shard1 --port 27017 --dbpath /data/db/shard11/ --oplogSize 100 --logpath /data/db/shard12.log --logappend --fork --rest

./bin/mongod -shardsvr -replSet shard2 -port 27018 -dbpath /data/db/shard21/ -oplogSize 100 -logpath /data/db/shard22.log -logappend -fork

Server3:
./bin/mongod --shardsvr --replSet shard1 --port 27017 --dbpath /data/db/shard13/ --oplogSize 100 --logpath /data/db/shard12.log --logappend --fork --rest

./bin/mongod -shardsvr -replSet shard2 -port 27018 -dbpath /data/db/shard23/ -oplogSize 100 -logpath /data/db/shard22.log -logappend -fork

3) 初始化两组Replica Set

确认第2步没有报错之后,我们开始配置Replica Set。 通过mongo连接到shard1的一个mongod:

./bin/mongo 192.168.56.191:27017

执行如下命令:

cOnfig= {_id: 'shard1', members: [{_id: 0, host: '192.168.56.191:27017'}, {_id: 1, host: '192.168.56.168:27017'}, {_id: 2, host: '192.168.56.169:27017'}]};

rs.initiate(config);

同样方法,配置shard2用到的replica set:

./bin/mongo 192.168.56.191:27018

cOnfig= {_id: 'shard2', members: [{_id: 0, host: '192.168.56.191:27018'}, {_id: 1, host: '192.168.56.168:27018'}, {_id: 2, host: '192.168.56.169:27018'}]};

rs.initiate(config);

4) 启动Config Server

在三台机器上分别启动并配置一台Config Server。命令如下:

./bin/mongod --configsvr --dbpath /data/db/config/ --port 20000 --logpath /data/db/config.log --logappend --fork

5)启动Routing Server

部署并配置三台Routing Server

./bin/mongos --configdb 192.168.56.191:20000,192.168.56.168:20000,192.168.56.169:20000 --port 30000 --chunkSize 100 --logpath /data/db/mongos.log --logappend --fork

6)添加分片

连接到mongs服务器,并切换到admin

./bin/mongo 192.168.56.191:30000/admin

db.runCommand({addshard:"shard1/192.168.56.191:27017,192.168.56.168:27017,192.168.56.169:27017",name:"shard1",maxsize:2048, allowLocal:true });

注意:

如果在上述操作中抛出类似如下的错误信息:

in seed list shard1/192.168.56.191:27017,192.168.56.168:27017,192.168.56.169:27017, host 192.168.56.191:27017 does not belong to replica set shard1

那么将“192.168.56.191:27017”去掉再试试,笔者试过,可以成功,但原因目前还不太清楚。

db.runCommand({addshard:"shard2/192.168.56.191:27018,192.168.56.168:27018,192.168.56.169:27018", name:"shard2",maxsize:2048, allowLocal:true });

db.runCommand( { listshards : 1 } );

如果列出(sharding)了以上二个你加的shards,表示shards已经配置成功。笔者测试的输出如下:

mongos> db.runCommand( { listshards : 1 } );

{

"shards" : [

{

"_id" : "shard1",

"host" : "shard1/192.168.56.168:27017,192.168.56.169:27017,192.168.56.155:27017"

},

{

"_id" : "shard2",

"host" : "shard2/192.168.56.168:27018,192.168.56.169:27018,192.168.56.191:27018"

}

],

"ok" : 1

}


推荐阅读
  • 本文介绍了如何使用Node.js通过两种不同的方法连接MongoDB数据库,包括使用MongoClient对象和连接字符串的方法。每种方法都有其特点和适用场景,适合不同需求的开发者。 ... [详细]
  • 本文详细介绍了如何在 Ubuntu 14.04 系统上搭建仅使用 CPU 的 Caffe 深度学习框架,包括环境准备、依赖安装及编译过程。 ... [详细]
  • H5技术实现经典游戏《贪吃蛇》
    本文将分享一个使用HTML5技术实现的经典小游戏——《贪吃蛇》。通过H5技术,我们将探讨如何构建这款游戏的两种主要玩法:积分闯关和无尽模式。 ... [详细]
  • Node.js在服务器上的多种部署策略
    本文探讨了Node.js应用程序在服务器上部署的几种有效方法,包括使用Screen、PM2以及通过宝塔面板进行简易管理。 ... [详细]
  • 从CodeIgniter中提取图像处理组件
    本指南旨在帮助开发者在未使用CodeIgniter框架的情况下,如何独立使用其强大的图像处理功能,包括图像尺寸调整、创建缩略图、裁剪、旋转及添加水印等。 ... [详细]
  • PHP面试题精选及答案解析
    本文精选了新浪PHP笔试题及最新的PHP面试题,并提供了详细的答案解析,帮助求职者更好地准备PHP相关的面试。 ... [详细]
  • 解决ADODB连接Access时出现80004005错误的方法
    本文详细介绍了如何解决在使用ADODB连接Access数据库时遇到的80004005错误,包括错误原因分析和具体的解决步骤。 ... [详细]
  • Ubuntu系统下的GIF动画录制解决方案
    在撰写文章或教程时,GIF动态图能够有效地传达信息。对于Windows用户而言,ScreenToGif是一款非常实用的工具。而在Ubuntu系统中,用户同样拥有多种选择来创建GIF动画,本文将重点介绍两款录屏工具——Byzanz和Peek。 ... [详细]
  • 对于初学者而言,搭建一个高效稳定的 Python 开发环境是入门的关键一步。本文将详细介绍如何利用 Anaconda 和 Jupyter Notebook 来构建一个既易于管理又功能强大的开发环境。 ... [详细]
  • 本文详细介绍了如何在Oracle VM VirtualBox中实现主机与虚拟机之间的数据交换,包括安装Guest Additions增强功能,以及如何利用这些功能进行文件传输、屏幕调整等操作。 ... [详细]
  • 软件测试行业深度解析:迈向高薪的必经之路
    本文深入探讨了软件测试行业的发展现状及未来趋势,旨在帮助有志于在该领域取得高薪的技术人员明确职业方向和发展路径。 ... [详细]
  • 本文详细介绍了如何在 Ubuntu 16.04 系统上配置 Qt 5.5 的交叉编译环境,特别针对 i.MX6 平台进行了优化设置。内容涵盖从基本的软件安装到高级配置的全过程。 ... [详细]
  • 利用 Calcurse 在 Linux 终端高效管理日程与任务
    对于喜爱使用 Linux 终端进行日常操作的系统管理员来说,Calcurse 提供了一种强大的方式来管理日程安排、待办事项及会议。本文将详细介绍如何在 Linux 上安装和使用 Calcurse,帮助用户更有效地组织工作。 ... [详细]
  • 本文详细探讨了Linux系统中的文件权限设置,包括常见的755、700等权限模式,以及这些权限在实际应用中的具体含义和作用。 ... [详细]
  • 调试利器SSH隧道
    在开发微信公众号或小程序的时候,由于微信平台规则的限制,部分接口需要通过线上域名才能正常访问。但我们一般都会在本地开发,因为这能快速的看到 ... [详细]
author-avatar
perfect--林榆盛
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有