前面我们介绍了简单的集群配置实例。在简单实例中,虽然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. JDK8简化if-else

    简化if-else 1234567891011 User user = ...if (user != null) { String userName = user.getUserName(); if ...

  2. Mysql的select in会自动过滤重复的数据

    默认使用 SELECT 语句: 当加上in范围后,结果如下图: in范围内的数据,如果有重复的,只会选择第一个数据. 所以如果不是直接使用SQL语句来查询,而是在代码中来查询时,记得使用 distin ...

  3. [Python学习笔记-004] 可变参数*args和**kwargs

    在Python中,可变参数的传递使用*args和**kwargs来实现,其中: *args表示任意个位置参数(positional argument),被表示为一个只读的数组(tuple): **kw ...

  4. Android so 文件进阶<二> 从dlsym()源码看android 动态链接过程

    0x00  前言 这篇文章其实是我之前学习elf文件关于符号表的学习笔记,网上也有很多关于符号表的文章,怎么说呢,感觉像是在翻译elf文件格式的文档一样,千篇一律,因此把自己的学习笔记分享出来.dls ...

  5. Docker轻量级web图形页面管理 - Portainer部署记录

    Docker图形页面管理工具基本常用的有三种: Docker UI,Shipyard,Portainer,之前分别介绍了Docker UI和Shipyard部署,下面简单介绍下Portainer部署. ...

  6. mysql 获取自增主键

    MyBatis 3.2.6插入时候获取自增主键方法有二 以MySQL5.5为例: 方法1: <insert id="insert" parameterType="P ...

  7. 拓展KMP算法详解

    拓展KMP解决的问题是给两个串S和T,长度分别是n和m,求S的每一个后缀子串与T的最长公共前缀分别是多少,记作extend数组,也就是说extend[i]表示S[i,n-1](i从0开始)和T的最长公 ...

  8. 分布式理论(一) —— CAP 定理

    目录: 什么是 CAP 定理 为什么只能 3 选 2 能不能解决 3 选 2 的问题 引用 1. 什么是 CAP 定理 2000 年的时候,Eric Brewer 教授提出了 CAP 猜想,2年后,被 ...

  9. jQuery加载部分视图(Partial Views)

    本篇是演示使用jQuery加载部分视图(Partial View).如果你不想使用Razor的语法呈现部分视图,那此篇的方法是最理想的了.它可以Render至指定的tag上. 创建两个部分视图,一个为 ...

  10. SVN问题之——org.apache.subversion.javahl.ClientException: Attempted to lock an already-locked dir(网摘文)

    一.问题描述 今天在 Eclipse 中用 SVN 插件提交代码时遇到 org.apache.subversion.javahl.ClientException: Attempted to lock ...