前面我们介绍了简单的集群配置实例。在简单实例中,虽然MongoDB auto-Sharding解决了海量存储问题,和动态扩容问题,但是离我们在真实环境下面所需要的高可靠性和高可用性还有一定的距离。
下面我们就介绍一个接近实际的解决方案:
  • Shard:使用Replica Sets,来确保数据的可靠性。通过这个方案,可以在每个节点有数据的备份、实现自动控制容错转移和自动恢复
  • Config:使用3个配置服务器,确保元数据完整性
  • Route:配合LVS,实现负载均衡,提高接入性能。
 

1、配置集群目录

 
数据存储目录:
 $ mkdir -p /home/scotte.ye/data/
$ mkdir -p /home/scotte.ye/data/
$ mkdir -p /home/scotte.ye/data/ $ mkdir -p /home/scotte.ye/data/
$ mkdir -p /home/scotte.ye/data/
$ mkdir -p /home/scotte.ye/data/ $ mkdir -p /home/scotte.ye/data/config1
$ mkdir -p /home/scotte.ye/data/config2
$ mkdir -p /home/scotte.ye/data/config3

日志目录:

 $ mkdir -p /home/scotte.ye/data/logs
2、配置 Shard Replica Sets
 
配置第一组Sets
 //
$ ./mongod --shardsvr --fork -logpath=/home/data/logs/null -dbpath=/home/data// -port= --nohttpinterface --replSet set1 //
$ ./mongod --shardsvr --fork -logpath=/home/data/logs/null -dbpath=/home/data// -port= --nohttpinterface --replSet set1 //
$ ./mongod --shardsvr --fork -logpath=/home/data/logs/null -dbpath=/home/data// -port= --nohttpinterface --replSet set1

配置集群

 $ ./mongo -port
MongoDB shell version: 2.0.
connecting to: 127.0.0.1:/test
>#配置集合1
>#构建参数
>cfg={_id:'set1',
members:[{_id:,host:'192.168.35.106:10001'},
{_id:,host:'192.168.35.106:10002'},
{_id:,host:'192.168.35.106:10003'}]
};
{
"_id":"set1",
"members":[
{
"_id":,
"host":"192.168.35.106:10001"
},
{
"_id":,
"host":"192.168.35.106:10002"
},
{
"_id":,
"host":"192.168.35.106:10003"
}
]
}
>#让参数生效
>rs.initiate(cfg);
{
"info":"Config now saved locally. Should come online in about aminute.",
"OK":
}
>#查看运行状态
>rs.status();
{
"set" : "set1",
"date" : ISODate("2012-02-29T12:02:46Z"),
"myState" : ,
"syncingTo" : "192.168.35.106:10003",
"members" : [
{
"_id" : ,
"name" : "192.168.35.106:10001",
"health" : ,
"state" : ,
"stateStr" : "PRIMARY",
"optime" : {
"t" : ,
"i" :
},
"optimeDate" : ISODate("2012-02-28T13:22:19Z"),
"self" : true
},
{
"_id" : ,
"name" : "192.168.35.106:10002",
"health" : ,
"state" : ,
"stateStr" : "SECONDARY",
"uptime" : ,
"optime" : {
"t" : ,
"i" :
},
"optimeDate" : ISODate("2012-02-28T13:22:19Z"),
"lastHeartbeat" : ISODate("2012-02-29T12:02:45Z"),
"pingMs" :
},
{
"_id" : ,
"name" : "192.168.35.106:10003",
"health" : ,
"state" : ,
"stateStr" : "SECONDARY",
"uptime" : ,
"optime" : {
"t" : ,
"i" :
},
"optimeDate" : ISODate("2012-02-28T13:22:19Z"),
"lastHeartbeat" : ISODate("2012-02-29T12:02:46Z"),
"pingMs" :
}
],
"ok" :
}

配置第二组sets

 //
$ ./mongod --shardsvr --fork -logpath=/home/data/logs/null -dbpath=/home/data// -port= --nohttpinterface --replSet set2 //
$ ./mongod --shardsvr --fork -logpath=/home/data/logs/null -dbpath=/home/data// -port= --nohttpinterface --replSet set2 //
$ ./mongod --shardsvr --fork -logpath=/home/data/logs/null -dbpath=/home/data// -port= --nohttpinterface --replSet set2

配置集群

 $ ./mongo -port
MongoDB shell version: 2.0.
connecting to: 127.0.0.1:/test
>#配置集合1
>#构建参数
>cfg={_id:'set2',
members:[{_id:,host:'192.168.35.106:10011'},
{_id:,host:'192.168.35.106:10012'},
{_id:,host:'192.168.35.106:10013'}]
};
{
"_id":"set2",
"members":[
{
"_id":,
"host":"192.168.35.106:10011"
},
{
"_id":,
"host":"192.168.35.106:10012"
},
{
"_id":,
"host":"192.168.35.106:10013"
}
]
}
>#让参数生效
>rs.initiate(cfg);
{
"info":"Config now saved locally. Should come online in about aminute.",
"OK":
}
>#查看运行状态
>rs.status();
{
"set" : "set2",
"date" : ISODate("2012-02-29T12:12:46Z"),
"myState" : ,
"syncingTo" : "192.168.35.106:10011",
"members" : [
{
"_id" : ,
"name" : "192.168.35.106:10011",
"health" : ,
"state" : ,
"stateStr" : "PRIMARY",
"optime" : {
"t" : ,
"i" :
},
"optimeDate" : ISODate("2012-02-28T13:22:19Z"),
"self" : true
},
{
"_id" : ,
"name" : "192.168.35.106:10012",
"health" : ,
"state" : ,
"stateStr" : "SECONDARY",
"uptime" : ,
"optime" : {
"t" : ,
"i" :
},
"optimeDate" : ISODate("2012-02-28T13:22:19Z"),
"lastHeartbeat" : ISODate("2012-02-29T12:02:45Z"),
"pingMs" :
},
{
"_id" : ,
"name" : "192.168.35.106:10013",
"health" : ,
"state" : ,
"stateStr" : "SECONDARY",
"uptime" : ,
"optime" : {
"t" : ,
"i" :
},
"optimeDate" : ISODate("2012-02-28T13:22:19Z"),
"lastHeartbeat" : ISODate("2012-02-29T12:02:46Z"),
"pingMs" :
}
],
"ok" :
}

启用config servier

 $ ./mongod --configsvr --fork -logpath=/home/data/logs/null -dbpath=/home/data/config1/ -port= --nohttpinterface
$ ./mongod --configsvr --fork -logpath=/home/data/logs/null -dbpath=/home/data/config2/ -port= --nohttpinterface
$ ./mongod --configsvr --fork -logpath=/home/data/logs/null -dbpath=/home/data/config3/ -port= --nohttpinterface

启用Route server

 $ ./mongos -configdb="192.168.35.106:20000,192.168.35.106:20001,192.168.35.106:20002" --fork -logpath=/home/data/logs/null
>#查看是否正常运行
>ps aux|grep mongos|grep -v grep
root 0.0 0.1 ? Sl Feb16 : ./mongos -configdb=192.168.35.106:,192.168.35.106:,192.168.35.106: --fork -logpath=/home/data/logs/null

开始配置Sharding

 $ ./mongo -port
MongoDB shell version: 2.0.
connecting to: 127.0.0.1:/test
>#进入管理数据库
>use admin
switched to db admin
>#添加Sharding
> db.runcommand({addshard:'set1/192.168.35.106:10001,192.168.35.106:10002,192.168.35.106:10003'})
{"shardAdded":"set1","ok":}
> db.runCommand({addshard:'set2/192.168.35.106:10011,192.168.35.106:10012,192.168.35.106:10013'})
{"shardAdded":"set2","ok":}
>#让test数据库支持Sharding
>db.runCommand({enablesharding:'test'})
{"ok":}
>#让数据库中的一个集合生效,且根据ID来进行分片
>db.runCommand({shardcollection:'test.user',key:{_id:}})
{"collectionshrded":"test.user","ok":} 注:另外可以通过下面两个命令查看sharding情况:
>db.runCommand({listshards:}
>printShardingStatus();

Mongodb集群与分片 2的更多相关文章

  1. MongoDB集群搭建-分片

    MongoDB集群搭建-分片 一.场景: 1,机器的磁盘不够用了.使用分片解决磁盘空间的问题. 2,单个mongod已经不能满足写数据的性能要求.通过分片让写压力分散到各个分片上面,使用分片服务器自身 ...

  2. Mongodb集群与分片 1

    分片集群   Mongodb中数据分片叫做chunk,它是一个Collection中的一个连续的数据记录,但是它有一个大小限制,不可以超过200M,如果超出产生新的分片.   下面是一个简单的分片集群 ...

  3. MongoDB集群之分片

    原文:点击打开链接 MongoDB分片 分片(sharding)是将数据拆分,将其分散在不同的机器上的过程.MongoDB支持自动分片 片键(shard key)设置分片时,需要从集合里面选一个键,用 ...

  4. mongodb集群配置分片集群

    测试环境 操作系统:CentOS 7.2 最小化安装 主服务器IP地址:192.168.197.21 mongo01 从服务器IP地址:192.168.197.22 mongo02 从服务器IP地址: ...

  5. mongodb 集群部署--分片服务器搭建

    部署分片服务器 1.分片 为了突破单点数据库服务器的I/O能力限制,对数据库存储进行水平扩展,严格地说,每一个服务器或者实例或者复制集就是一个分片. 2.优势 提供类似现行增·长架构 提高数据可用性 ...

  6. ubuntu docker 下mongodb集群和分片

    首先我们计划启动了三个mongo服务:master,salve,arbiter 1.准备工作 新建文件夹如图(每个文件夹下面有db和configdb文件夹): 生成认证文件并修改权限 openssl ...

  7. MongoDB集群之分片技术应用 —— 学习笔记

    课程链接:https://www.imooc.com/learn/501 一.什么是分片? 分片:将数据进行2拆分,将数据水平的分散到不同的服务器上. 二.为什么要分片? 架构上:读写均衡.去中心化 ...

  8. 搭建高可用mongodb集群(四)—— 分片(经典)

    转自:http://www.lanceyan.com/tech/arch/mongodb_shard1.html 按照上一节中<搭建高可用mongodb集群(三)-- 深入副本集>搭建后还 ...

  9. [转]搭建高可用mongodb集群(四)—— 分片

    按照上一节中<搭建高可用mongodb集群(三)—— 深入副本集>搭建后还有两个问题没有解决: 从节点每个上面的数据都是对数据库全量拷贝,从节点压力会不会过大? 数据压力大到机器支撑不了的 ...

随机推荐

  1. Android之内存泄漏

    开篇之前,我们要先理解:什么是内存泄漏.百度百科:内存泄漏(Memory Leak)是指程序中己动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等 ...

  2. 使用ffmpeg实现对h264视频解码 -- (实现了一个易于使用的c++封装库)

    H264是当今流行的视频压缩格式:ffmpeg是一个开源库,实现了对h264视频文件的解压缩. 为了降低使用ffmpeg的复杂性,尽量隐藏实现细节,我写了一个封装库.c#也可以很方便的使用此库.解压后 ...

  3. MVC源码分析 - Authorize授权过滤器

    从 上一篇 其实能看到, 程序执行的过滤器, 有四种 : 过滤器类型 接口 描述 Authorization IAuthorizationFilter 此类型(或过滤器)用于限制进入控制器或控制器的某 ...

  4. dhcp服务器(一)

    DHCP服务概述: 名称:DHCP -Dynamic Host Configuration Protocol动态主机配置协议. 功能:DHCP(Dynamic Host Configuration P ...

  5. HTML5知识汇总,总有你不知道的o(≧v≦)o~~

    html5知识点汇总 一.html5发展历程以及规划 html5从2006年开始立项,用于替代1999年的html4,历经12年,完成了第一个版本html5.0,并于2014年底发布. 在接下来的日子 ...

  6. mongodb索引--1亿条记录的查询从55.7秒到毫秒级别<补充版>

    从头开始,验证mongodb的索引的好处.(window7环境下) 下载mongodb服务器,并解压到d盘,并使用以下命令启动 mongod --dbpath D:\mongodb\data mong ...

  7. MVC初级教程(一)

    演示产品源码下载地址:http://www.jinhusns.com/Products/Download 

  8. angular项目使用Swiper组件Loop时 ng-click点击事件失效处理方法

    在Angular项目中,使用swiper组件进行轮播展示时,存在将swper的loop设置为true时,部分页面的ng-click失效. 原因:将swiper中的looper设置为true时,为了视觉 ...

  9. [日常] Linux下的docker实践

    1.Linux 发展出了另一种虚拟化技术:Linux 容器(Linux Containers,缩写为 LXC) 2.Linux 容器不是模拟一个完整的操作系统,而是对进程进行隔离 3.Docker 属 ...

  10. 记录怎样把安全证书导入到java中的cacerts证书库

    这次项目上需要去证书中解析公钥所以这里分享下方法: 首先准备一个证书文件比如叫:test.crt(一般是cer结尾) 下一步准备把证书导入到导入java中的cacerts证书库里 方法如下: 比如本地 ...