一、环境准备



1.本例使用3台Linux主机,IP地址如下:

点击(此处)折叠或打开

  1. Server B
  2. Server C

2.根据需要,开启相应主机防火墙的相关端口。本次需要用到3台主机,所以开启这3台主机的以下端口:

点击(此处)折叠或打开

  1. -A INPUT -m state --state NEW -m tcp -p tcp --dport 27017 -j ACCEPT
  2. -A INPUT -m state --state NEW -m tcp -p tcp --dport 27018 -j ACCEPT
  3. -A INPUT -m state --state NEW -m tcp -p tcp --dport 27019 -j ACCEPT
  4. -A INPUT -m state --state NEW -m tcp -p tcp --dport 20000 -j ACCEPT

二、搭建分布式集群

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

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

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



1.集群的环境



架构图:





主机设计:







2.配置Replica Sets



创建数据目录:

点击(此处)折叠或打开

  1. ,config} #在serverA上
  2. mkdir ,config} #在serverB上
  3. mkdir ,config} #在serverC上

2.1配置shard1Replica Sets

#在serverA上启动shard1-1

点击(此处)折叠或打开

  1. .log --logappend --replSet shard1 --directoryperdb

#在serverB上启动shard1-2

点击(此处)折叠或打开

  1. .log --logappend --replSet shard1 --directoryperdb

#在serverC上启动shard1-3

点击(此处)折叠或打开

  1. .log --logappend --replSet shard1 --directoryperdb

用mongo连接其中一台主机的27018端口的mongod,初始化复制集shard1:

./mongo --port 27018

点击(此处)折叠或打开

  1. >config={_id:'shard1',members:[
  2. {_id,host:'192.168.1.231:27018',priority:2},
  3. {_id,host:'192.168.1.232:27018',priority:1},
  4. {_id,host:'192.168.1.233:27018',arbiterOnly:true}]
  5. }
  6. >rs.initiate(config)

2.2 配置shard2的Replica Sets

#在serverA上启动shard2-1

点击(此处)折叠或打开

  1. .log --logappend --replSet shard2 --directoryperdb

#在serverB上启动shard2-2

点击(此处)折叠或打开

  1. .log --logappend --replSet shard2 --directoryperdb

#在serverC上启动shard2-3

点击(此处)折叠或打开

  1. .log --logappend --replSet shard2 --directoryperdb

用mongo连接其中一台主机(建议在ServerB上)的27019端口的mongod,初始化复制集shard2:

./mongo --port 27019

点击(此处)折叠或打开

  1. >config={_id:'shard2',members:[
  2. {_id,host:'192.168.1.231:27019',arbiterOnly:true},
  3. {_id,host:'192.168.1.232:27019',priority:1},
  4. {_id,host:'192.168.1.233:27019',priority:2}]
  5. }
  6. >rs.initiate(config)

3.配置config
server



#在3台主机中分别启动配置服务

点击(此处)折叠或打开

  1. ./mongod --configsvr --port 20000 --dbpath /data/config/ --logpath /data/config/config.log –replSet configdb --logappend --fork

用mongo连接其中一台主机的20000端口的mongod,初始化复制集configdb:

./mongo –port 20000

点击(此处)折叠或打开

  1. >configdb1={_id:'configdb',members:[
  2. {_id,host:'192.168.1.231:20000',priority:3},
  3. {_id,host:'192.168.1.232:20000',priority:1},
  4. {_id,host:'192.168.1.233:20000',priority:2}]
  5. }
  6. >rs.initiate(configdb1)

4.配置router
server



#在3台主机中分别运行mongos服务

点击(此处)折叠或打开

  1. :20000 --port 27017 --logpath /data/mongos.log --logappend –fork

5.配置分片(shard
cluster




#连接到其中一台机器的端口27017的mongos进程,并切换到admin数据库添加分片shard1和shard2:

./mongo --port 27017

点击(此处)折叠或打开

  1. >use admin
  2. >db.runCommand({addshard:"shard1/192.168.1.231:27018,192.168.1.232:27018,192.168.1.233:27018"})
  3. >db.runCommand({addshard:"shard2/192.168.1.231:27019,192.168.1.232:27019,192.168.1.233:27019"})

#激活数据库(work)和集合(status)的分片功能:

点击(此处)折叠或打开

  1. > db.runCommand({enablesharding:"work"})
  2. >db.runCommand({shardcollection:"work.status",key:{_id:1}})

6.验证



#查看shard1的集合work.status和shard2的文档数几乎均分,且之和等于路由节点下查看的文档数:

./mongo --port 27018 work

点击(此处)折叠或打开

  1. >db.status.count()

./mongo --port 27019 work

点击(此处)折叠或打开

  1. >db.status.count()

./mongo work

点击(此处)折叠或打开

  1. >db.status.count()

#查看分片的状态:

点击(此处)折叠或打开

  1. > printShardingStatus()

三、常见问题



1.【问题描述】执行初始化副本集时报错:

点击(此处)折叠或打开

  1. > rs.initiate(config)
  2. {
  3. ,
  4. "errmsg" : "replSetInitiate quorum check failed because not all proposed set members responded affirmatively: 192.168.1.232:27018 failed with No route to host, 192.168.1.233:27018 failed with No route to host",
  5. ,
  6. "codeName" : "NodeNotFound"
  7. }

【解决方法】

开启防火墙的相关端口

点击(此处)折叠或打开

  1. -j ACCEPT
  2. -A INPUT -m state --state NEW -m tcp -p tcp --dport 27018 -j ACCEPT
  3. -A INPUT -m state --state NEW -m tcp -p tcp --dport 27019 -j ACCEPT
  4. -A INPUT -m state --state NEW -m tcp -p tcp --dport 20000 -j ACCEPT

2.【问题描述】初始化副本集报错:

点击(此处)折叠或打开

  1. > rs.initiate(config)
  2. {
  3. ,
  4. "errmsg" : "This node, 192.168.1.231:27019, with _id 0 is not electable under the new configuration version 1 for replica set shard2",
  5. ,
  6. "codeName" : "InvalidReplicaSetConfig"
  7. }

【解决方法】

如果设置主机A为仲裁节点,那么不要在A主机上执行初始化操作,否则会报上述错误。   





3.【问题描述】启动路由器mongos报错:

点击(此处)折叠或打开

  1. :20000 --port 27017 --logpath /data/mongos.log --logappend --forkFailedToParse: mirrored config server connections are not supported; for config server replica sets be sure to use the replica set connection stringtry './mongos --help' for more information

【解决方法】

从Mongodb3.2之后,启动mongos时需使用副本集名称,否则会报上述错误。例如:

点击(此处)折叠或打开

  1. :20000 --port 27017 --logpath /data/mongos.log --logappend --fork

关于MongoDB分布式高可用集群实现的更多相关文章

  1. Hbase 完全分布式 高可用 集群搭建

    1.准备 Hadoop 版本:2.7.7 ZooKeeper 版本:3.4.14 Hbase 版本:2.0.5 四台主机: s0, s1, s2, s3 搭建目标如下: HMaster:s0,s1(备 ...

  2. ClickHouse 分布式高可用集群搭建(转载)

    一.ClickHouse安装方式: 源码编译安装 Docker安装 RPM包安装 为了方便使用,一般采用RPM包方式安装,其他两种方式这里不做说明. 二.下载安装包 官方没有提供rpm包,但是Alti ...

  3. Memcache 分布式高可用集群介绍

    分布式缓存需考虑如下三点: 1.缓存本身的水平线性扩展的问题. 2.缓存大病罚下的本身性能问题. 3.避免缓存的单点鼓掌问题. 分布式缓存存在的问题: 1.内存本身的管理问题.内存的分配,管理和回收机 ...

  4. MongoDB高可用集群配置的方案

    >>高可用集群的解决方案 高可用性即HA(High Availability)指的是通过尽量缩短因日常维护操作(计划)和突发的系统崩溃(非计划)所导致的停机时间,以提高系统和应用的可用性. ...

  5. MongoDB高可用集群配置方案

    原文链接:https://www.jianshu.com/p/e7e70ca7c7e5 高可用性即HA(High Availability)指的是通过尽量缩短因日常维护操作(计划)和突发的系统崩溃(非 ...

  6. Centos7.5基于MySQL5.7的 InnoDB Cluster 多节点高可用集群环境部署记录

    一.   MySQL InnoDB Cluster 介绍MySQL的高可用架构无论是社区还是官方,一直在技术上进行探索,这么多年提出了多种解决方案,比如MMM, MHA, NDB Cluster, G ...

  7. MongoDB 高可用集群副本集+分片搭建

    MongoDB 高可用集群搭建 一.架构概况 192.168.150.129192.168.150.130192.168.150.131 参考文档:https://www.cnblogs.com/va ...

  8. MongoDB高可用集群搭建(主从、分片、路由、安全验证)

    目录 一.环境准备 1.部署图 2.模块介绍 3.服务器准备 二.环境变量 1.准备三台集群 2.安装解压 3.配置环境变量 三.集群搭建 1.新建配置目录 2.修改配置文件 3.分发其他节点 4.批 ...

  9. MongoDB 高可用集群架构简介

    在大数据的时代,传统的关系型数据库要能更高的服务必须要解决高并发读写.海量数据高效存储.高可扩展性和高可用性这些难题.不过就是因为这些问题Nosql诞生了. 转载自严澜的博文——<如何搭建高效的 ...

随机推荐

  1. 配置Gradle构建

    构建基础配置 Android Studio包含一个顶级的构建文件和每个模块的构建文件.构建文件被称为 build.gradle,它是一个纯文本文件,它使用Groovy语法来配置由Android Gra ...

  2. [转]nopcommerce之权限模块

    本文转自:http://www.nopchina.net/category/%E6%9E%B6%E6%9E%84.html 这篇文章简单介绍一下nopcommerce的权限模块,nopcommerce ...

  3. 数据库查询,显示为树形结构(easyui+SSM)

    在实际项目上,有很多地方后台存了一个表,但是在显示查询的时候需要显示为树形结构. 本项目是easyui+SSM框架. 前台程序为: <!DOCTYPE html> <html> ...

  4. SnowKiting

    原文 Let's go fly a kite...in the snow Reach into your closet,find that dusty kite and clean it off - ...

  5. HDU 1171 Big Event in HDU 杭电大事件(母函数,有限物品)

    题意: 分家问题,对每种家具都估个值,给出同样价值的家具有多少个,要求尽可能平分,打印的第一个数要大于等于第二个数. 思路: 可以用背包做,也可以用母函数.母函数的实现只需要注意一个点,就是每次以一种 ...

  6. Python学习日志9月14日

    今天早晨又没有专心致志的学习,我感觉我可能是累了,需要减轻学习的程度来调整一下咯.这几天装电脑弄的昏天暗地的,身体有点吃不消了.时间真是神奇的魔法,这半个月来,每隔几天都有想要改变策略的想法.今天早晨 ...

  7. Maven项目报错:Failed to execute goal org.apache.maven.plugins:maven-clean-plugin:2.5:clean (default-clea

    [ERROR] Failed to execute goal org.apache.maven.plugins:maven-clean-plugin:2.5:clean (default-clean) ...

  8. 联想e431笔记本更改硬盘模式bios设置的详细教程

    用硬盘安装系统,就要进入bios,将硬盘改为第一启动项即可重装系统.不同品牌的电脑,它的bios设置方法也就不同.那么,联想e431笔记本要如何更改硬盘模式呢?今天U大侠小编就和大家分享联想e431笔 ...

  9. 新版raspbian系统的固定IP配置和启用root账户的ssh登录功能的方法

    1. 2016新版raspbian系统的固定IP配置: 自2016年2月份新版raspbian系统发布以后,树莓派的固定IP配置方法就与之前不一样了. 之前在raspbian系统中编辑/etc/net ...

  10. 解决微信小程序要求的TLS版本必须大于等于1.2的问题(windows2008服务器)

    开始->运行->输入 PowerShell 复制这段代码粘入弹出的dos窗口内 # Enables TLS 1.2 on windows Server 2008 R2 and Window ...