1.本例使用1台Linux主机,通过Docker 启动三个容器 IP地址如下:

docker run -d -v `pwd`/data/master:/mongodb -p 27017:27017 docker.io/mongodb:3.6.3 /usr/sbin/init
docker run -d -v `pwd`/data/slaver:/mongodb -p 27018:27017 docker.io/mongodb:3.6.3 /usr/sbin/init
docker run -d -v `pwd`/data/arbiter:/mongodb -p 27019:27017 docker.io/mongodb:3.6.3 /usr/sbin/init

Server A: 172.17.0.2
Server B: 172.17.0.3
Server C: 172.17.0.4

2.搭建分布式集群

运用MongoDB的复制集(Replica Sets)+分片(Sharding)就能实现MongoDB分布式高可用的集群。

分片(sharding)能够增加更多的机器来应对不断增加的负载和数据,也不影响应用。

复制集(Replica Sets)能确保每个分片节点都具有自动备份、自动故障恢复能力。

1.集群的环境

架构图:

主机设计:

2.配置shard1的Replica Sets
./mongod -shardsvr -replSet shard1 -port 27017 -dbpath /mongodb/mongodb/bin/datas/shard11 -oplogSize 100 -logpath /mongodb/mongodb/bin/logs/shard11.log -bind_ip 172.17.0.2 -logappend -fork
./mongod --shardsvr --replSet shard1 --port 27017 --dbpath /mongodb/mongodb/bin/datas/shard12 --oplogSize 100 --logpath /mongodb/mongodb/bin/logs/shard12.log -bind_ip 172.17.0.3  --logappend --fork
./mongod --shardsvr --replSet shard1 --port 27017 --dbpath /mongodb/mongodb/bin/datas/shard13 --oplogSize 100 --logpath /mongodb/mongodb/bin/logs/shard13.log -bind_ip 172.17.0.4  --logappend --fork
############################################################################################################
./mongo 172.17.0.2:27017
 config = {_id: 'shard1', members: [{_id: 0, host: '172.17.0.2:27017'},{_id: 1, host: '172.17.0.3:27017'},{_id: 2, host: '172.17.0.4:27017'}]}
 rs.initiate(config);
-----------------------------------------------------------------------------------------------------------------------------------
3.配置shard2的Replica Sets
./mongod -shardsvr -replSet shard2 -port 27018 -dbpath /mongodb/mongodb/bin/datas/shard21 -oplogSize 100 -logpath /mongodb/mongodb/bin/logs/shard21.log -bind_ip 172.17.0.2 -logappend -fork
./mongod -shardsvr -replSet shard2 -port 27018 -dbpath /mongodb/mongodb/bin/datas/shard22 -oplogSize 100 -logpath /mongodb/mongodb/bin/logs/shard22.log -bind_ip 172.17.0.3  -logappend -fork
./mongod -shardsvr -replSet shard2 -port 27018 -dbpath /mongodb/mongodb/bin/datas/shard23 -oplogSize 100 -logpath /mongodb/mongodb/bin/logs/shard23.log -bind_ip 172.17.0.4  -logappend -fork
############################################################################################################
 ./mongo 172.17.0.2:27017
 config = {_id: 'shard2', members: [{_id: 0, host: '172.17.0.2:27018'},{_id: 1, host: '172.17.0.3:27018'},{_id: 2, host: '172.17.0.4:27018'}]}
 rs.initiate(config);
-----------------------------------------------------------------------------------------------------------------------------------
4.配置config server
./mongod -configsvr -dbpath /mongodb/mongodb/bin/config -port 20000 -logpath /mongodb/mongodb/bin/logs/config.log -replSet configdb -bind_ip 172.17.0.2 -logappend -fork   #config server也需要dbpath
./mongod -configsvr -dbpath /mongodb/mongodb/bin/config -port 20000 -logpath /mongodb/mongodb/bin/logs/config.log -replSet configdb -bind_ip 172.17.0.3 -logappend -fork 
./mongod -configsvr -dbpath /mongodb/mongodb/bin/config -port 20000 -logpath /mongodb/mongodb/bin/logs/config.log -replSet configdb -bind_ip 172.17.0.4 -logappend -fork 
############################################################################################################
./mongo --host 172.17.0.2 --port 20000
configdb1={_id:'configdb',members:[{_id:0,host:'172.17.0.2:20000',priority:3},{_id:1,host:'172.17.0.3:20000',priority:1},{_id:2,host:'172.17.0.4:20000',priority:2}]}
rs.initiate(configdb1)
-----------------------------------------------------------------------------------------------------------------------------------
5.配置router server
在3台主机中分别运行mongos服务:
./mongos -configdb configdb/172.17.0.2:20000,172.17.0.3:20000,172.17.0.4:20000 -port 27020 -logpath /mongodb/mongodb/bin/logs/mongos.log -bind_ip 172.17.0.2 -logappend -fork
./mongos -configdb configdb/172.17.0.2:20000,172.17.0.3:20000,172.17.0.4:20000 -port 27020 -logpath /mongodb/mongodb/bin/logs/mongos.log -bind_ip 172.17.0.3 -logappend -fork
./mongos -configdb configdb/172.17.0.2:20000,172.17.0.3:20000,172.17.0.4:20000 -port 27020 -logpath /mongodb/mongodb/bin/logs/mongos.log -bind_ip 172.17.0.4 -logappend -fork
-----------------------------------------------------------------------------------------------------------------------------------
6.配置分片(shard cluster)
#连接到其中一台机器的端口27017的mongos进程,并切换到admin数据库添加分片shard1和shard2:
 ./mongo 172.17.0.2:27020
use admin
db.runCommand({addshard:"shard1/172.17.0.2:27017,172.17.0.3:27017,172.17.0.4:27017"})
db.runCommand({addshard:"shard2/172.17.0.2:27018,172.17.0.3:27018,172.17.0.4:27018"})
db.runCommand({enablesharding:"work"})
db.runCommand({shardcollection:"work.status",key:{_id:1}})
-----------------------------------------------------------------------------------------------------------------------------------
7.验证
其它命令:
db.dropDatabase() --删除db

Mongodb集群搭建之 Sharding+ Replica Sets集群架构的更多相关文章

  1. Mongodb集群搭建之 Sharding+ Replica Sets集群架构(2)

    参考http://blog.51cto.com/kaliarch/2047358 一.概述 1.1 背景 为解决mongodb在replica set每个从节点上面的数据库均是对数据库的全量拷贝,从节 ...

  2. windows+mysql集群搭建-三分钟搞定集群

    注:本文来源:  陈晓婵   <  windows+mysql集群搭建-三分钟搞定集群   > 一:mysql集群搭建教程-基础篇 计算机一级考试系统要用集群,目标是把集群搭建起来,保证一 ...

  3. 学习MongoDB(Troubleshoot Replica Sets) 集群排除故障

    Test Connections Between all Members(集群中节点网络测试) 在进行Mongodb集群时,每个节点的网络都需要互动,假设有3个服务器节点. m1.example.ne ...

  4. MongoDB集群搭建---副本和分片(伪集群)

    参考地址:https://blog.csdn.net/weixin_43622131/article/details/105984032 已配置好的所有的配置文件下载地址:https://files. ...

  5. MongoDB分布式集群搭建(分片加副本集)

    # 环境准备 服务器 # 环境搭建 文件配置和目录添加 新建目录的操作要在三台机器中进行,为配置服务器新建数据目录和日志目录 mkdir -p $MONGODB_HOME/config/data mk ...

  6. 学习MongoDB(三) Add an Arbiter to Replica Set 集群中加入仲裁节点

    Add an Arbiter to Replica Set 在集群中加入仲裁节点,当集群中主节点挂掉后负责选出新的主节点,仲裁节点也是一个mongo实力,但是它不存储数据. 1.仲裁节点消耗很小的资源 ...

  7. k8s集群搭建之二:etcd集群的搭建

    一 介绍 Etcd是一个高可用的 Key/Value 存储系统,主要用于分享配置和服务发现. 简单:支持 curl 方式的用户 API (HTTP+JSON) 安全:可选 SSL 客户端证书认证 快速 ...

  8. redis集群主从集群搭建、sentinel(哨兵集群)配置以及Jedis 哨兵模式简要配置

    前端时间项目上为了提高平台性能,为应用添加了redis缓存,为了提高服务的可靠性,redis部署了高可用的主从缓存,主从切换使用的redis自带的sentinel集群.现在权作记录.

  9. hbase 集群搭建(公司内部测试集群)

    我用的是cdh4.5版本:配置文件:$HBASE_HOME/conf/hbase-env.shexport JAVA_HOME=$JAVA_HOMEexport JAVA_HOME=/home/had ...

随机推荐

  1. drone 1.0 新的定时任务界面&&构建任务支持重启

    drone 1.0 的定时任务是一个不错的功能,早期的版本是必须使用cron 表达式的 最近发布的版本支持通过配置就可以了,很方便,只是目前比较简单的,支持小时. 天.周.月.年的模式 环境准备 do ...

  2. storage 事件监听

    在公司的一次内部分享会上, 偶然知道了这个H5的新事件, 解决了我之前的一个bug. 事情是这样的, 第A网页上显示的数量的总和, 点击去是B页面, 可以进行管理, 增加或者删除, 当用户做了增删操作 ...

  3. webpack 中的 chunk 种类

    webpack 将 chunk 划分为三类: 入口 chunk.入口 chunk 包含 webpack runtime 和将要加载的模块. 普通 chunk.普通 chunk 不包含 webpack ...

  4. Webpack 的 Tree Shaking

    为什么要使用 Tree Shaking? 当从某文件模块中导出(某一个或几个变量.函数.对象等),然而这个文件模块还有许多其它(我们这次并不需要)的导出,webpack会不管三七二十一简单粗暴的将整个 ...

  5. Jmeter学习—004—使用代理录制脚本—HTTP代理服务器(APP、web皆可)

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/mmmmmmm_2niu/article/details/78136253记得我最开始使用jmeter ...

  6. Spring 集成Junit单元测试

    1.在pom增加junit和spring-test <dependency> <groupId>junit</groupId> <artifactId> ...

  7. Sqoop 导入及导出表数据子集命令详解

    Sqoop命令详解 1.import命令 案例1:将mysql表test中的数据导入hive的hivetest表,hive的hivetest表不存在. sqoop import --connect j ...

  8. centos 6.X 安装nodejs v6.11.0和npm

    下载nodejs wget -c https://nodejs.org/dist/v6.11.0/node-v6.11.0-linux-x64.tar.xz 安装gcc++ yum install - ...

  9. GTX log 6

    5.24-7.2 相关算法 判断两颗二叉树相等 有两种方法:一种是递归比较.另一种是二叉树的遍历. 先说二叉树的遍历.由于先序遍历 再加上 中序遍历能唯一确定一棵二叉树.故,对这两棵树分别进行先序和中 ...

  10. Centos 使用find查找

    CentOS查找目录或文件 find / -name svn 查找目录:find /(查找范围) -name '查找关键字' -type d查找文件:find /(查找范围) -name 查找关键字 ...