实际环境架构

分别在3台机器运行一个mongod实例(称为mongod shard11,mongod shard12,mongod shard13)组织replica set1,作为cluster的shard1

分别在3台机器运行一个mongod实例(称为mongod shard21,mongod shard22,mongod shard23)组织replica set2,作为cluster的shard2

每台机器运行一个mongod实例,作为3个config server

每台机器运行一个mongs进程,用于客户端连接

-------------------------------------------------------------------------

Server1  10.3.0.100

Mongod shard11:27017

Mongod shard21:17017

Mongod config1:20000

Mongos1:20001

-------------------------------------------------------------------------

Server1 10.3.0.101

Mongod shard12:27017

Mongod shard22:17017

Mongod config1:20000

Mongos1:20001

--------------------------------------------------------------------------

Server3 10.3.0.102

Mongod shard13:27017

Mongod shard23:17017

Mongod config1:20000

Mongos1:20001

-------------------------------------------------------------------------

1. 创建用户 mongodb (如果用root启用mongodb,可略此步)

useradd -u 1001 mongodb

2. 下载 mongodb-linux-x86_64-2.2.0

tar zxvf mongodb-linux-x86_64-2.2.0.tgz

mv mongodb-linux-x86_64-2.2.0 /opt/local/mongodb

3. 创建 数据目录 日志目录 配置目录 (server 1)

mkdir -p /opt/local/mongodb/data/shard

mkdir -p /opt/local/mongodb/data/logs

mkdir -p /opt/local/mongodb/data/config

4. 创建 数据目录 日志目录 配置目录 (server 2)

mkdir -p /opt/local/mongodb/data/shard12

mkdir -p /opt/local/mongodb/data/shard22

mkdir -p /opt/local/mongodb/data/logs

mkdir -p /opt/local/mongodb/data/config

5. 创建 数据目录 日志目录 配置目录 (server 3)

mkdir -p /opt/local/mongodb/data/shard13

mkdir -p /opt/local/mongodb/data/shard23

mkdir -p /opt/local/mongodb/data/logs

mkdir -p /opt/local/mongodb/data/config

6. 修改 目录 所有者

chown -R mongodb:mongodb /opt/local/mongodb

7. 配置relica sets

7.1.1 配置shard1所用到的replica sets:

--------------------------------------------------------------------------------------

port=27017                                                  #端口号

fork=true                                                   #以守护进程的方式运行,创建服务器进程

logpath=/opt/local/mongodb/data/logs/shard.log              #日志输出文件路径

logappend=true                                              #日志输出方式

dbpath=/opt/local/mongodb/data/shard/                       #数据库路径

shardsvr=true                                               #设置是否分片

maxConns=10000                                              #数据库的最大连接数

replSet=shard1                                              #设置副本集名称

oplogSize=5000                                              #设置oplog的大小(MB)

----------------------------------------------------------------------------------------

server 1

/opt/local/mongodb/bin/mongod --shardsvr --maxConns 10000 --replSet shard1 --port 27017 --dbpath /opt/local/mongodb/data/shard11/ --oplogSize 500 --logpath=/opt/local/mongodb/data/logs/shard11.log --logappend --fork

server 2

/opt/local/mongodb/bin/mongod --shardsvr --maxConns 10000 --replSet shard1 --port 27017 --dbpath /opt/local/mongodb/data/shard12/ --oplogSize 500 --logpath=/opt/local/mongodb/data/logs/shard12.log --logappend --fork

server 3

/opt/local/mongodb/bin/mongod --shardsvr --maxConns 10000 --replSet shard1 --port 27017 --dbpath /opt/local/mongodb/data/shard13/ --oplogSize 500 --logpath=/opt/local/mongodb/data/logs/shard13.log --logappend --fork

7.1.2 初始化replica set

用mongo连接其中一个mongod,执行:

/opt/local/mongodb/bin/mongo --host 10.3.0.100:27017

----------------------------------------------------------------------

> config= {_id: 'shard1', members: [ {_id:0,host:'10.3.0.100:27017'},

... {_id:1,host:'10.3.0.101:27017'},

... {_id:2,host:'10.3.0.102:27017'},]

... }

{

"_id" : "shard1",

"members" : [

{

"_id" : 0,

"host" : "10.3.0.100:27017"

},

{

"_id" : 1,

"host" : "10.3.0.101:27017"

},

{

"_id" : 2,

"host" : "10.3.0.102:27017"

}

]

}

> rs.initiate(config);

{

"info" : "Config now saved locally. Should come online in about a minute.",

"ok" : 1

}

-------------------------------------------------------------------------

7.2.1 配置shard2所用到的replica sets:

/opt/local/mongodb/bin/mongod --shardsvr --maxConns 10000 --replSet shard2 --port 17017 --dbpath /opt/local/mongodb/data/shard21/ --oplogSize 100 --logpath=/opt/local/mongodb/data/logs/shard21.log --logappend --fork

server 2

/opt/local/mongodb/bin/mongod --shardsvr --maxConns 10000 --replSet shard2 --port 17017 --dbpath /opt/local/mongodb/data/shard22/ --oplogSize 100 --logpath=/opt/local/mongodb/data/logs/shard22.log --logappend --fork

server 3

/opt/local/mongodb/bin/mongod --shardsvr --maxConns 10000 --replSet shard2 --port 17017 --dbpath /opt/local/mongodb/data/shard23/ --oplogSize 100 --logpath=/opt/local/mongodb/data/logs/shard23.log --logappend --fork

7.2.2 初始化replica set

用mongo连接其中一个mongod,执行:

/opt/local/mongodb/bin/mongo --host 10.3.0.100:17017

-------------------------------------------------------------------------

> config= {_id: 'shard2', members: [ {_id:0,host:'10.3.0.100:17017'},

... {_id:1,host:'10.3.0.101:17017'},

... {_id:2,host:'10.3.0.102:17017'},]

... }

{

"_id" : "shard2",

"members" : [

{

"_id" : 0,

"host" : "10.3.0.100:17017"

},

{

"_id" : 1,

"host" : "10.3.0.101:17017"

},

{

"_id" : 2,

"host" : "10.3.0.102:17017"

}

]

}

> rs.initiate(config);

{

"errmsg" : "couldn't initiate : set name does not match the set name host 10.3.0.101:17017 expects",

"ok" : 0

}

>

-------------------------------------------------------------------------

8. 配置三台config server

server 1

/opt/local/mongodb/bin/mongod --configsvr --dbpath /opt/local/mongodb/data/config/ --port 20000 --logpath /opt/local/mongodb/data/logs/config.log --logappend --fork

server 2

/opt/local/mongodb/bin/mongod --configsvr --dbpath /opt/local/mongodb/data/config/ --port 20000 --logpath /opt/local/mongodb/data/logs/config.log --logappend --fork

server 3

/opt/local/mongodb/bin/mongod --configsvr --dbpath /opt/local/mongodb/data/config/ --port 20000 --logpath /opt/local/mongodb/data/logs/config.log --logappend --fork

9. 配置 mongs

在server1,server2,server3 上分别执行:

/opt/local/mongodb/bin/mongos --configdb 10.3.0.100:20000,10.3.0.101:20000,10.3.0.102:20000 --port 20001 --chunkSize 5 --logpath /opt/local/mongodb/data/logs/mongos.log --logappend --fork

#mongs不需要dbpath

10 Configuring the Shard Cluster

连接到其中一个mongos进程,并切换到admin数据库做以下配置

10.1  连接到mongs,并切换到admin

/opt/local/mongodb/bin/mongo 10.3.0.100:20001/admin

MongoDB shell version: 2.2.0

connecting to: 10.3.0.100:20001/admin

mongos> db

admin

10.2  加入shards

如里shard是单台服务器,

用>db.runCommand( { addshard : “<serverhostname>[:<port>]” } )加入

如果shard是replica sets,用replicaSetName/<serverhostname>[:port]

----------------------------------------------------------------------

shard 1

db.runCommand( { addshard : "shard1/10.3.0.100:27017,10.3.0.101:27017,10.3.0.102:27017", maxsize:204800});

{ "shardAdded" : "shard1", "ok" : 1 }

--------------------------------------------------------------------

shard 2

mongos> db.runCommand( { addshard : "shard2/10.3.0.100:17017,10.3.0.101:17017,10.3.0.102:17017", maxsize:204800});

{ "shardAdded" : "shard2", "ok" : 1 }

----------------------------------------------------------------------

查看是否添加成功

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

{

"shards" : [

{

"_id" : "shard1",

"host" : "shard1/10.3.0.100:27017,10.3.0.101:27017,10.3.0.102:27017"

},

{

"_id" : "shard2",

"host" : "shard2/10.3.0.100:17017,10.3.0.101:17017,10.3.0.102:17017"

}

],

"ok" : 1

}

删除 shards

db.runCommand( { removeshard : "shard1/10.3.0.100:27017,10.3.0.101:27017"} );

11. 激活分片

命令:

> db.runCommand( { enablesharding : “<dbname>” } );

通过执行以上命令,可以让数据库跨shard,如果不执行这步,数据库只会存放在一个shard,一旦激活数据库分片,数据库中不同的collection将被存放在不同的shard上,但一个collection仍旧存放在同一个shard上,要使单个collection也分片,

还需单独对collection作些操作

PS: 其他命令.....操作...

#增添节点:

以一个新建的mongodb服务为例,

连接 mongo

/opt/local/mongodb/bin/mongo --host 10.3.0.100:27017

MongoDB shell version: 2.2.0

connecting to: 10.3.0.100:27017/test

shard1:PRIMARY>rs.add(“IP:port”);

#删除节点:

必须在主节点上操作:

PRIMARY>rs.remove(“127.0.0.1:27020”)

查看同步状态

rs.status()

让从有读的权限:

在主控上执行:PRIMARY> db.getMongo().setSlaveOk();

SECONDARY> rs.slaveOk();

群集增加验证 auth  keyFile

群集如果加了 auth 验证,群集之前互相取不到 主 就无法验证...必须要增加 keyFile 验证才行...

先创建auth 验证

-----------------------------------------------------------------

> use admin

switched to db admin

> db.addUser('sa','sa')

{

"_id" : ObjectId("4e2914a585178da4e03a16c3"),

"user" : "sa",

"readOnly" : false,

"pwd" : "75692b1d11c072c6c79332e248c4f699"

}

>

----------------------------------------------------------------------------------

然后在每个server里创建 key 文件....

vi /opt/local/mongodb/data/config/key

输入随意字符....  1234567890111111111

授权 chown mongodb:mongodb key

chmod 600 key

-------------------------------------------------------------------------

然后分别启动

server 1

/opt/local/mongodb/bin/mongod --shardsvr --replSet shard1 --port 27017 --dbpath /opt/local/mongodb/data/shard11/ --oplogSize 100 --logpath=/opt/local/mongodb/data/logs/shard11.log --logappend --fork --keyFile /opt/local/mongodb/data/config/key

server 2

/opt/local/mongodb/bin/mongod --shardsvr --replSet shard1 --port 27017 --dbpath /opt/local/mongodb/data/shard12/ --oplogSize 100 --logpath=/opt/local/mongodb/data/logs/shard12.log --logappend --fork --keyFile /opt/local/mongodb/data/config/key

server 3

/opt/local/mongodb/bin/mongod --shardsvr --replSet shard1 --port 27017 --dbpath /opt/local/mongodb/data/shard13/ --oplogSize 100 --logpath=/opt/local/mongodb/data/logs/shard13.log --logappend --fork --keyFile /opt/local/mongodb/data/config/key

-------------------------------------------------------------------------

在启动config

server 1

/opt/local/mongodb/bin/mongod --configsvr --dbpath /opt/local/mongodb/data/config/ --port 20000 --logpath /opt/local/mongodb/data/logs/config.log --logappend --fork --keyFile /opt/local/mongodb/data/config/key

server 2

/opt/local/mongodb/bin/mongod --configsvr --dbpath /opt/local/mongodb/data/config/ --port 20000 --logpath /opt/local/mongodb/data/logs/config.log --logappend --fork --keyFile /opt/local/mongodb/data/config/key

server 3

/opt/local/mongodb/bin/mongod --configsvr --dbpath /opt/local/mongodb/data/config/ --port 20000 --logpath /opt/local/mongodb/data/logs/config.log --logappend --fork --keyFile /opt/local/mongodb/data/config/key

-------------------------------------------------------------------------

最后分别启动mongos

/opt/local/mongodb/bin/mongos --configdb 10.3.0.100:20000,10.3.0.101:20000,10.3.0.102:20000 --port 20001 --chunkSize 5 --logpath /opt/local/mongodb/data/logs/mongos.log --logappend --fork --keyFile /opt/local/mongodb/data/config/key

-------------------------------------------------------------------------

然后在查看是否能读取主....

./mongo

MongoDB shell version: 2.2.0

connecting to: test

> show dbs

Wed Sep 5 01:51:44 uncaught exception: listDatabases failed:{ "errmsg" : "need to login", "ok" : 0 }

> use admin

switched to db admin

> db.auth('sa','sa')

1

shard1:SECONDARY> db.serverStatus()

就可以查看....

注意:

添加auth 以后...导入数据 等一系列操作...都必须验证用户...

如:

/opt/local/mongodb/bin/mongorestore -u sa -p sa --drop /opt/1

其他都需要进行操作!否则!报错!!!

强制切换主

cfg = rs.conf()

cfg.members[0].priority = 0.5

cfg.members[1].priority = 0.5

cfg.members[2].priority = 1

rs.reconfig(cfg)

升级MongoDB分片集群到2.2版本

MongoDB 2.2版本与2.0版本在分片集群中共存存在问题,所以升级需要按照官方文档的步骤进行:

禁用Balancer

mongos> sh.setBalancerState(false)

首先升级所有的mongos

升级Config服务器,一次升级一台

升级一个分片的复制集

依次关闭并升级一个复制集的secondary

在Primary库上执行rs.stepDown(),强制下线。关闭Primary库并升级二进制程序。

当都升级完成后,连接mongos执行:sh.setBalancerState(true)恢复平衡器。

----------------------------------------------------------------------------------

WARNING: You are running on a NUMA machine.

We suggest launching mongod like this to avoid performance problems:

numactl --interleave=all mongod [other options]

sudo -u mongodb numactl --interleave=all /opt/local/mongodb/bin/mongod --shardsvr --maxConns 10000 --replSet shard1 --port 27017 --dbpath /opt/local/mongodb/data/shard16/ --oplogSize 1000 --logpath=/opt/local/mongodb/data/logs/shard16.log --logappend --fork

编辑内核  echo 0 > /proc/sys/vm/zone_reclaim_mode

----------------------------------------------------------------------------------

限制 mongodb 占用系统所有内存

ulimit -s 4096 && ulimit -m 31457280 && sudo -u mongodb numactl --interleave=all /opt/local/mongodb/bin/mongod --shardsvr --maxConns 10000 --replSet shard1 --port 27017 --dbpath /opt/local/mongodb/data/shard16/ --oplogSize 1000 --logpath=/opt/local/mongodb/data/logs/shard16.log --logappend --fork

mongodb 分片群集(sharding cluster)的更多相关文章

  1. 【MangoDB分片】配置mongodb分片群集(sharding cluster)

    配置mongodb分片群集(sharding cluster) Sharding cluster介绍 这是一种可以水平扩展的模式,在数据量很大时特给力,实际大规模应用一般会采用这种架构去构建monod ...

  2. MongoDB分片群集的部署(用心描述,详细易懂)!!

    概念: MongoDB分片是使用多个服务器存储数据的方法,以支持巨大的数据存储和对数据进行存储 优势: 1.减少了每个分片需啊哟处理的请求数,群集可以提高自己的存储容量和吞吐量 2.减少了每个分片存储 ...

  3. 009.MongoDB分片群集部署

    一 前期准备 1.1 组件说明 MongoDB分片群集包含以下组件: shard:每个分片是分片数据的子集.从MongoDB 3.6开始,必须将分片部署为副本集. mongos:mongos充当查询路 ...

  4. MongoDB分片(Sharding)技术

    分片(sharding)是MongoDB用来将大型集合分割到不同服务器(或者说一个集群)上所采用的方法.尽管分片起源于关系型数据库分区,但MongoDB分片完全又是另一回事. 和MySQL分区方案相比 ...

  5. 008.MongoDB分片群集概念及原理

    一 MongoDB分片介绍 1.1 分片 Mongodb另一种集群,就是分片技术,可以满足MongoDB数据量大量增长的需求. 当MongoDB存储海量的数据时,一台机器可能不足以存储数据,也可能不足 ...

  6. 搭建 MongoDB分片(sharding) / 分区 / 集群环境

    1. 安装 MongoDB 三台机器 关闭防火墙 systemctl stop firewalld.service 192.168.252.121 192.168.252.122 192.168.25 ...

  7. MongoDB分片集群-Sharded Cluster

    分片概念 分片(sharding)是一种跨多台机器分布数据的方法, MongoDB使用分片来支持具有非常大的数据集和高吞吐量操作的部署. 换句话说:分片(sharding)是指将数据拆分,将其分散存在 ...

  8. Mongodb分片集群技术+用户验证

    随着数据量持续增多,后续迟早会出现一台机器硬件瓶颈问题的.而mongodb主打的就是海量数据架构,“分片”就用这个来解决这个问题. 从图中可以看到有四个组件:mongos.config server. ...

  9. MongoDB 分片集群技术

    在了解分片集群之前,务必要先了解复制集技术! 1.1 MongoDB复制集简介 一组Mongodb复制集,就是一组mongod进程,这些进程维护同一个数据集合.复制集提供了数据冗余和高等级的可靠性,这 ...

随机推荐

  1. Mysql-左连接查询条件失效的解决办法

    on 后面不能 接and 要接where 这个条件才能判断成功 判断条件先后顺序,先判断主条件where,再判断条件on 如果是左连接on限制的就是右表,如果不为真则那一行的值为null,where限 ...

  2. org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.reflection.ReflectionException: There is no getter for property named '__frch_lableId_0' in 'class com.cd.entity.Page'

    #号改为$即可

  3. table详解

    1.tr 元素定义表格行,th 元素定义表头,td 元素定义表格单元. tr内是th还是td可由自己定义,th,td可存在于任一行,th与td的区别在与th字体更粗 2.定义一个table默认有bor ...

  4. UIGestureRecognizer 手势浅析

    目录[-] iOS开发中的手势体系——UIGestureRecognizer分析及其子类的使用 一.引言 二.手势的抽象类——UIGestureRecognizer 1.统一的初始化方法 2.手势状态 ...

  5. oracle10g遇到ORA-16038日志无法归档问题

    SQL> shutdown immediate ORA-01109: 数据库未打开 已经卸载数据库. ORACLE 例程已经关闭. SQL> startup ORACLE 例程已经启动. ...

  6. 2016-3-6.16:43------------js开始

    -------------------------------------------------------------------

  7. cocos2d-x 3.10 显示Box2d 调试视图

    1.将cocos2d-x-3.10\tests\cpp-tests\Classes\Box2DTestBed目录下的GLES-Render.h和GLES-Render.cpp拷贝到当前项目的Class ...

  8. myEclipse JSP 调用 IDL8.2 配置

    新安装了Envi5.0 IDL8.2,路径改动了,一些配置也要随之改动.现在总结一下,JSP调用IDL的配置. jar包配置,环境变量配置,dll配置,tomcat路径配置,tomcat运行选项配置, ...

  9. zabbix Lack of free swap space

    Zabbix初始设计是大型公司用于监控服务器集群的,但日常中也用于监控VPS或云主机.后者情况下Zabbix的很多配置和属性就没有经过优化,取决于监控的对象和用途,经常需要对一些Zabbix配置进行调 ...

  10. MyEclipse2015 javaweb项目从svn检出后变成java项目,clean之后不能编译,解决办法是

     javaweb项目从svn检出后变成java项目,解决办法是:1.项目右键–properties–Project Facets,勾选上Dynamic Web Module .Java 两个复选框.点 ...