MongoDB Sharding学习操作篇

本文使用的MongoDB版本是2.4.6,采用如下部署架构用于测试使用,不可用于线上环境。以下测试都是在本机上完成,线上环境需要各个组件分开部署。

1.添加主机列表

vim /etc/hosts 添加如下列表

127.0.0.1  mongo-sharding-router1
127.0.0.1  mongo-sharding-router2
127.0.0.1  mongo-sharding-config1
127.0.0.1  mongo-sharding-config2
127.0.0.1  mongo-sharding-config3
127.0.0.1  mongo-sharding-replica1
127.0.0.1  mongo-sharding-replica2
127.0.0.1  mongo-sharding-replica3
127.0.0.1  mongo-sharding-replica4
127.0.0.1  mongo-sharding-replica5
127.0.0.1  mongo-sharding-replica6

2.配置两个Shard,各自拥有三个成员的Replica Set

相应的主机列表

shard1

127.0.0.1  mongo-sharding-replica1     2811            Primary
127.0.0.1  mongo-sharding-replica2     2822            Secondary
127.0.0.1  mongo-sharding-replica3     2833            Secondary

shard2

127.0.0.1  mongo-sharding-replica4     3811            Primary
127.0.0.1  mongo-sharding-replica5     3822            Secondary
127.0.0.1  mongo-sharding-replica6     3833            Secondary

部署架构如下:

A.分别配置mongo-sharding-replica1,mongo-sharding-replica2和mongo-sharding-replica3的MongoDB的配置文件和启动脚本并启动MongoDB

如mongo-sharding-replica1相关配置

# cat /etc/mongod2811.conf 
logpath=/data/app_data/mongodb/log2811/mongodb.log 
logappend=true
fork=true
port=2811
dbpath=/data/app_data/mongodb/data2811/
pidfilepath=/data/app_data/mongodb/data2811/mongod.pid
maxConns=2048
nohttpinterface=true
directoryperdb=true
replSet=test_shard1

/etc/init.d/mongod2811

#!/bin/bash

# mongod - Startup script for mongod

# chkconfig: 35 85 15
# description: Mongo is a scalable, document-oriented database.
# processname: mongod
# config: /etc/mongod.conf
# pidfile: /data/app_data/mongodb/data/mongodb/mongod.pid

. /etc/rc.d/init.d/functions

# things from mongod.conf get there by mongod reading it

# NOTE: if you change any OPTIONS here, you get what you pay for:
# this script assumes all options are in the config file.
CONFIGFILE="/etc/mongod2811.conf"
OPTIONS=" -f $CONFIGFILE"
SYSCONFIG="/etc/sysconfig/mongod"

# FIXME: 1.9.x has a --shutdown flag that parses the config file and
# shuts down the correct running pid, but that‘s unavailable in 1.8
# for now.  This can go away when this script stops supporting 1.8.
DBPATH=`awk -F= ‘/^dbpath=/{print $2}‘ "$CONFIGFILE"`
PIDFILE=`awk -F= ‘/^pidfilepath=/{print $2}‘ "$CONFIGFILE"`
mongod=${MONGOD-/data/app_platform/mongodb/bin/mongod}

MONGO_USER=mongod
MONGO_GROUP=mongod

if [ -f "$SYSCONFIG" ]; then
    . "$SYSCONFIG"
fi

# Handle NUMA access to CPUs (SERVER-3574)
# This verifies the existence of numactl as well as testing that the command works
NUMACTL_ARGS="--interleave=all"
if which numactl >/dev/null 2>/dev/null && numactl $NUMACTL_ARGS ls / >/dev/null 2>/dev/null
then
    NUMACTL="numactl $NUMACTL_ARGS"
else
    NUMACTL=""
fi

start()
{
  echo -n $"Starting mongod: "
  daemon --user "$MONGO_USER" $NUMACTL $mongod $OPTIONS
  RETVAL=$?
  echo
  [ $RETVAL -eq 0 ] && touch /var/lock/subsys/mongod
}

stop()
{
  echo -n $"Stopping mongod: "
  killproc -p "$PIDFILE" -d 300 /data/app_platform/mongodb/bin/mongod
  RETVAL=$?
  echo
  [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/mongod
}

restart () {
    stop
    start
}

ulimit -n 12000
RETVAL=0

case "$1" in
  start)
    start
    ;;
  stop)
    stop
    ;;
  restart|reload|force-reload)
    restart
    ;;
  condrestart)
    [ -f /var/lock/subsys/mongod ] && restart || :
    ;;
  status)
    status $mongod
    RETVAL=$?
    ;;
  *)
    echo "Usage: $0 {start|stop|status|restart|reload|force-reload|condrestart}"
    RETVAL=1
esac

exit $RETVAL

注意/data/app_data/mongodb/这个目录的权限设置成为mongod进程运行的用户权限。

# service mongod2811 start
Starting mongod: about to fork child process, waiting until server is ready for connections.
all output going to: /data/app_data/mongodb/log2811/mongodb.log
forked process: 4589
child process started successfully, parent exiting
                                                           [  OK  ]
# service mongod2822 start
Starting mongod: about to fork child process, waiting until server is ready for connections.
all output going to: /data/app_data/mongodb/log2822/mongodb.log
forked process: 4656
child process started successfully, parent exiting
                                                           [  OK  ]
# service mongod2833 start
Starting mongod: about to fork child process, waiting until server is ready for connections.
all output going to: /data/app_data/mongodb/log2833/mongodb.log
forked process: 4723
child process started successfully, parent exiting
                                                           [  OK  ]

B.初始化Replica Set

# /data/app_platform/mongodb/bin/mongo   --port 2811
MongoDB shell version: 2.4.6
connecting to: 127.0.0.1:2811/test
> rs.status();
{
	"startupStatus" : 3,
	"info" : "run rs.initiate(...) if not yet done for the set",
	"ok" : 0,
	"errmsg" : "can‘t get local.system.replset config from self or any seed (EMPTYCONFIG)"
}
> rs.initiate("mongo-sharding-replica1:2811");
{
	"info2" : "no configuration explicitly specified -- making one",
	"me" : "mongo-sharding-replica1:2811",
	"info" : "Config now saved locally.  Should come online in about a minute.",
	"ok" : 1
}
> 
test_shard1:PRIMARY> 

test_shard1:PRIMARY> rs.status();
{
	"set" : "test_shard1",
	"date" : ISODate("2015-01-07T10:16:51Z"),
	"myState" : 1,
	"members" : [
		{
			"_id" : 0,
			"name" : "mongo-sharding-replica1:2811",
			"health" : 1,
			"state" : 1,
			"stateStr" : "PRIMARY",
			"uptime" : 569,
			"optime" : Timestamp(1420625715, 1),
			"optimeDate" : ISODate("2015-01-07T10:15:15Z"),
			"self" : true
		}
	],
	"ok" : 1
}

C.向Replica Set添加mongo-sharding-replica2和mongo-sharding-replica3

test_shard1:PRIMARY> rs.add("mongo-sharding-replica2:2822");
{ "ok" : 1 }
test_shard1:PRIMARY> rs.add("mongo-sharding-replica3:2833");
{ "ok" : 1 }
test_shard1:PRIMARY> rs.config();
{
	"_id" : "test_shard1",
	"version" : 5,
	"members" : [
		{
			"_id" : 0,
			"host" : "mongo-sharding-replica1:2811"
		},
		{
			"_id" : 1,
			"host" : "mongo-sharding-replica2:2822"
		},
		{
			"_id" : 2,
			"host" : "mongo-sharding-replica3:2833"
		}
	]
}
test_shard1:PRIMARY>

D.查看mongo-sharding-replica2:2822和mongo-sharding-replica3:2833的状态

# /data/app_platform/mongodb/bin/mongo --port 2822
MongoDB shell version: 2.4.6
connecting to: 127.0.0.1:2822/test
test_shard1:SECONDARY> db.isMaster();
{
	"setName" : "test_shard1",
	"ismaster" : false,
	"secondary" : true,
	"hosts" : [
		"mongo-sharding-replica2:2822",
		"mongo-sharding-replica3:2833",
		"mongo-sharding-replica1:2811"
	],
	"primary" : "mongo-sharding-replica1:2811",
	"me" : "mongo-sharding-replica2:2822",
	"maxBsonObjectSize" : 16777216,
	"maxMessageSizeBytes" : 48000000,
	"localTime" : ISODate("2015-01-07T10:21:41.522Z"),
	"ok" : 1
}
test_shard1:SECONDARY>
# /data/app_platform/mongodb/bin/mongo --port 2833
MongoDB shell version: 2.4.6
connecting to: 127.0.0.1:2833/test
test_shard1:SECONDARY> db.isMaster();
{
	"setName" : "test_shard1",
	"ismaster" : false,
	"secondary" : true,
	"hosts" : [
		"mongo-sharding-replica3:2833",
		"mongo-sharding-replica2:2822",
		"mongo-sharding-replica1:2811"
	],
	"primary" : "mongo-sharding-replica1:2811",
	"me" : "mongo-sharding-replica3:2833",
	"maxBsonObjectSize" : 16777216,
	"maxMessageSizeBytes" : 48000000,
	"localTime" : ISODate("2015-01-07T10:22:27.125Z"),
	"ok" : 1
}
test_shard1:SECONDARY>

同理对shard2的MongoDB实例进行相同的配置

3.配置config server

参考文章:

http://docs.mongodb.org/manual/administration/sharded-cluster-deployment/

时间: 2024-11-01 01:31:26

MongoDB Sharding学习操作篇的相关文章

MongoDB Sharding学习操作篇二

接上一篇 14.配置集群中的balancer进程 balancer进程运行在集群中的某一个mongos实例上,确保chunks均匀分布在整个集群上. 更改指定shard的最大存储大小

MongoDB索引(一) --- 入门篇:学习使用MongoDB数据库索引

这个系列文章会分为两篇来写: 第一篇:入门篇,学习使用MongoDB数据库索引 第二篇:进阶篇,研究数据库索引原理--B/B+树的基本原理 1. 准备工作 在学习使用MongoDB数据库索引之前,有一些准备工作要做,之后的探索都是基于这些准备工作. 首先需要建立一个数据库和一些集合,这里我就选用一个国内手机号归属地的库,大约32W条记录,数据量不大,不过做一些基本的分析是够了. 首先我们建立一个数据库,叫做db_phone,然后导入测试数据.测试数据就是一些手机号归属地的信息.单个文档长这个样子

第五部分 架构篇 第二十一章 MongoDB Sharding 架构(实践)

这是一种将海量的数据水平扩展的数据库集群系统,数据分别存储在sharding的各个节点上,使用者通过简单的配置就可以很方便地构建一个分布式MongoDB集群. MongoDB的数据分块成为chunk,每个chunk都是Collection中一段连续的数据记录,通常最大尺寸是200MB,超出则生成新的数据块. 要构建一个MongoDB Sharding Cluster需要以下三个角色: Shard Server 即存储实际数据的分片,每个Shard可以使一个mongod实例,也可以使一组mongo

MongoDB Sharding学习理论篇

MongoDB Sharding技术

MongoDB对图片进行CRUD操作——与JAVA结合

上几篇博客简单对MongoDB进行了简单介绍和如何安装,以及在dos下是如何操作MongoDB和在安装MongoDB中,出现了什么错误,是如何解决的.当然这些都还不够,我们还要用到实际当中去.我用MyEclipse+JDK1.7做了一个简单的demo,来展示下MongoDB怎么运用到实际中去. MongoDB作为一个NoSql数据库的代表,存取多媒体数据,应该是强项吧?那么,在MongoDB中是如何对图片进行CRUD操作的. 上几篇博客中已经提到,MongoDB的文档结构是BSON格式,BSON

MongoDB的CRUD操作

1. 前言 在上一篇文章中,我们介绍了MongoDB.现在,我们来看下如何在MongoDB中进行常规的CRUD操作.毕竟,作为一个存储系统,它的基本功能就是对数据进行增删改查操作. MongoDB中的增删改查操作,不同于我们熟悉的关系数据库中的操作.在关系数据库中,比如MySQL,我们通常使用SQL语句对数据库进行增(INSERT)删(DELETE)改(UPDATE)查(SELECT).MongoDB在对数据进行操作过程中,使用的是Document进行数据操作.在对数据库进行操作的时候,使用Do

MongoDB入门学习(四):MongoDB的索引

上一篇讲到了MongoDB的基本操作增删查改,对于查询来说,必须按照我们的查询要求去集合中,并将查找到的结果返回,在这个过程中其实是对整个集合中每个文档进行了扫描,如果满足我们的要求就添加到结果集中最后返回.对于小集合来说,这个过程没什么,但是集合中数据很大的时候,进行表扫描是一个非常恐怖的事情,于是有了索引一说,索引是用来加速查询的,相当于书籍的目录,有了目录可以很精准的定位要查找内容的位置,从而减少无谓的查找. 1.索引的类型 创建索引可以是在单个字段上,也可以是在多个字段上,这个根据自己的

MongoDB入门学习(二):MongoDB的基本概念和数据类型

上一篇讲了MongoDB的安装和管理,其中涉及到了一些概念,数据结构还有一些API的调用,不知道的没关系,其实很简单,这篇会简单介绍一下. 1.文档 文档是MongoDB的核心概念,多个键值对有序的放在一起就是一个文档,文档是MongoDB存储数据最基本的数据结构.对MongoDB都是以文档的形式来操作的,使用了一种类似JSON的二进制BSON数据格式,对API的调用都是传的文档参数.每种编程语言都有标示文档的数据结构,比如java的map,lua的table,python的dict等等,但是都

三层学习------理论篇

学校放假了,刚回家的孩子就像个客人被父母招待着.在放假的前几天里,你尽管开口,想吃啥爸妈都会满足你,不过好景可不长!在我家,厨房是老妈的地盘,买菜.做饭.洗碗刷锅,一个人全包了.而在饭店吃饭呢,吃饭的人多了,顾客点的饭菜种类各不相同.前前后后,一个人忙乎,哪里顾得过来,所以饭店就有了分工.前台服务员负责将顾客点的菜上报给厨师和:厨师根据上报的菜单做菜:采购员负责柴米油盐酱醋茶.这样,大家各司其职,井井有条. 我们在家中吃饭比较简单,没有具体的分工.饭店就是一个复杂庞大的系统了,需要合理规划,分工