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. python——psutil的使用(获取进程信息)

    import psutil psutil.pids() [1, 2, 3, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 26, 27, 28, 2 ...

  2. bash常识

    文章目录 比较是否相等 = 字符串操作 字符串变量的截取操作 字符串替换 字符串比较 取长度 查找子串的位置 选取子串 fork, exec, source fork exec source 补充 其 ...

  3. openresty 使用lua-resty-shell 执行shell 脚本

    lua-resty-shell 是一个很不错的项目,让我们可以无阻塞的执行shell命令,之间的通信 是通过socket (一般是unix socket) 环境准备 docker-compose 文件 ...

  4. Ubuntu遇到问题“Could not install packages due to an EnvironmentError: [Errno 13] 权限不够: ”

    Ubuntu在使用一些pip的时候会遇到:“Could not install packages due to an EnvironmentError: [Errno 13] 权限不够:”的问题. 在 ...

  5. 【VBA研究】VBA自己定义函数參数类型不符的错误

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/iamlaosong/article/details/36871769 作者:iamlaosong 1 ...

  6. C# 自动升级

    自动更新的软件的目的在于让客户不在为了寻找最新软件花费时间.也不用去到开发商的网站上查找.客户端的软件自动会在程序启动前查找服务器上最新的版本.和自己当前软件的版本比较,如果服务器的是最新版本.客户端 ...

  7. Python_getter和setter方法

    当给属性赋值的时候,使用实例.属性=属性值的方式显然把属性暴露出来了,并且也无法对属性值进行限制检查,java中提供了setter和getter方法,那么python是如何做的呢?更多内容请参考:Py ...

  8. ZeroTier One

    ZeroTier – 无配置,零基础「内网穿透」随时随地连回家/学校/办公室 [跨平台] https://www.appinn.com/zerotier-one/ Virtual NetworkZer ...

  9. 单节点 Elasticsearch 出现 unassigned shards 原因及解决办法

    根本原因: 是因为集群存在没有启用的副本分片,我们先来看一下官网给出的副本分片的介绍: 副本分片的主要目的就是为了故障转移,正如在 集群内的原理 中讨论的:如果持有主分片的节点挂掉了,一个副本分片就会 ...

  10. learnopengl“入门”的全部代码

    projection 里的角度,角度越大,物体离摄像机越远:角度越小,物体离摄像机越近,这个角度表示视野(fov),视野越大,看到的物体就越小 头文件 #ifndef SHADER_H_INCLUDE ...