mongdb集群3.4 shard 模式

从图中可以看到有四个组件:mongos、config server、shard、replica set。

mongos:数据库集群请求的入口,所有的请求都通过mongos进行协调,不需要在应用程序添加一个路由选择器,mongos自己就是一个请求分发中心,它负责把对应的数据请求请求转发到对应的shard服务器上。在生产环境通常有多mongos作为请求的入口,防止其中一个挂掉所有的mongodb请求都没有办法操作。

config server:顾名思义为配置服务器,存储所有数据库元信息(路由、分片)的配置。mongos本身没有物理存储分片服务器和数据路由信息,只是缓存在内存里,配置服务器则实际存储这些数据。mongos第一次启动或者关掉重启就会从 config server 加载配置信息,以后如果配置服务器信息变化会通知到所有的 mongos 更新自己的状态,这样 mongos 就能继续准确路由。在生产环境通常有多个 config server 配置服务器,因为它存储了分片路由的元数据,这个可不能丢失!就算挂掉其中一台,只要还有存货, mongodb集群就不会挂掉。

shard:这就是传说中的分片了。上面提到一个机器就算能力再大也有天花板,就像军队打仗一样,一个人再厉害喝血瓶也拼不过对方的一个师。俗话说三个臭皮匠顶个诸葛亮,这个时候团队的力量就凸显出来了。在互联网也是这样,一台普通的机器做不了的多台机器来做。

我们要求是做的 6片的集群 参考上面3切片图片 数据存储 用的是内存存储盘提高速度(机器配置 32h 260GB内存)。

一,3台机器建立准备工作

yum -y install numactl vim  lrzsz

mkdir -p /data/{work,app}

mkdir -p /data/work/mongodb/conf

调整存储空间大小

umount  /dev/shm/

mount tmpfs /dev/shm -t tmpfs -o size=200G

[[email protected] work]# df -h

Filesystem      Size  Used Avail Use% Mounted on

/dev/sda3        78G  1.1G   73G   2% /

/dev/sda1       485M   31M  429M   7% /boot

/dev/sdb2       3.6T   33M  3.6T   1% /data

/dev/sda2       197G  267M  187G   1% /home

tmpfs           200G     0  200G   0% /dev/shm

cd /data/work/mongodb/

mkdir {shard1,shard2,shard3,shard4,shard5,shard6,server,mongos}

cd /dev/shm/

mkdir {shard1,shard2,shard3,shard4,shard5,shard6,server}

二启动sharding服务

wget http://10.31.67.32:8099/Download/mongodb/mongodb-linux-x86_64-rhel62-3.4.2.tgz

tar -zxvf mongodb-linux-x86_64-rhel62-3.4.2.tgz

mv  mongodb-linux-x86_64-rhel62-3.4.2 /data/app/mongodb

#####开启验证需要 任意服务器产生kefile文件:

openssl rand -base64 741 > keyfile

chmod 600 keyfile

注意:要上传到集群中每一台服务器:/data/work/mongodb/mongo-keyfile

cd /data/work/mongodb/conf

吧配置文件上传

cat /data/work/mongodb/conf/shard1.conf

storage:

dbPath: /dev/shm/shard1

journal:

enabled: true

directoryPerDB: true

#syncPeriodSecs: 60

engine: wiredTiger

processManagement:

fork: true

pidFilePath: /data/work/mongodb/shard1/mongod.pid

net:

port: 27011

http:

enabled: false

systemLog:

destination: file

path: /data/work/mongodb/shard1/mongod.log

logAppend: true

operationProfiling:

slowOpThresholdMs: 100

mode: slowOp

需要用户认证则开启

###security:

## keyFile: /data/work/mongodb/mongo-keyfile

#authorization: enabled

replication:

oplogSizeMB: 20000

replSetName: rs001

每个配置文件 日志路径和存储路径 改下即可

3台机器从别启动

numactl --interleave=all /data/app/mongodb/bin/mongod --shardsvr -f /data/work/mongodb/conf/shard1.conf

numactl --interleave=all /data/app/mongodb/bin/mongod --shardsvr -f /data/work/mongodb/conf/shard2.conf

numactl --interleave=all /data/app/mongodb/bin/mongod --shardsvr -f /data/work/mongodb/conf/shard3.conf

numactl --interleave=all /data/app/mongodb/bin/mongod --shardsvr -f /data/work/mongodb/conf/shard4.conf

numactl --interleave=all /data/app/mongodb/bin/mongod --shardsvr -f /data/work/mongodb/conf/shard5.conf

numactl --interleave=all /data/app/mongodb/bin/mongod --shardsvr -f /data/work/mongodb/conf/shard6.conf

以上3台机器全部执行

让 主从仲裁 分别在每台机器上

host rs001 rs002 rs003 rs004 rs005 rs006
10.33.100.118
10.33.100.118
10.33.100.119

登入 端口27011 -27016

/data/app/mongodb/bin/mongo  --port 27016

cfg={ _id:"rs006", members:[ {_id:0,host:‘10.33.100.119:27016‘,priority:2}, {_id:1,host:‘10.33.100.117:27016‘,priority:1},{_id:2,host:‘10.33.100.118:27016‘,arbiterOnly:true}] };

rs.initiate(cfg)

rs.status()

三启动配置服务

[[email protected] ~]# cat  /data/work/mongodb/conf/server.conf

storage:

dbPath: /dev/shm/server

journal:

enabled: true

directoryPerDB: true

#syncPeriodSecs: 60

engine: wiredTiger

processManagement:

fork: true

pidFilePath: /data/work/mongodb/server/mongod.pid

net:

port: 27020

http:

enabled: false

systemLog:

destination: file

path: /data/work/mongodb/server/mongod.log

logAppend: true

replication:

replSetName: configReplSet

/data/app/mongodb/bin/mongod --configsvr  -f /data/work/mongodb/conf/server.conf

3台分别 配置服务启动

/data/app/mongodb/bin/mongo  --port 27020

rs.initiate( {_id: "configReplSet",configsvr: true,members: [{ _id: 0, host: "10.33.100.117:27020"},{ _id: 1, host: "10.33.100.118:27020"},{ _id: 2, host: "10.33.100.119:27020"}]} )

四:3台分别路由接口

cat /data/work/mongodb/conf/mongos.conf

processManagement:

fork: true

pidFilePath: /data/work/mongodb/mongos/mongos.pid

net:

port: 27030

http:

enabled: false

systemLog:

destination: file

path: /data/work/mongodb/mongos/mongos.log

logAppend: true

sharding:

configDB: configReplSet/10.33.100.117:27020,10.33.100.118:27020,10.33.100.119:27020

#配置服务的端口和地址。

numactl --interleave=all /data/app/mongodb/bin/mongos -f /data/work/mongodb/conf/mongos.conf

至此每个机器保证8个mongodb 进程。

/data/app/mongodb/bin/mongo  --port 27030

依次添加6个分片

sh.addShard("rs001/10.33.100.117:27011,10.33.100.118:27011,10.33.100.119:27011")

测试分片

sh.enableSharding("test")

sh.shardCollection("test.Log", { id: 1})

use test

for(var i = 1; i <= 100000; i++){

db.Log.save({id:i,"message":"message"+i});

}

rs.status()

db.Log.stats()

db.Log.drop()

时间: 2024-08-28 09:20:32

mongdb集群3.4 shard 模式的相关文章

c# 链接mongDB集群实战开发

最近看着公司的项目是在太悲剧了看不下去了.各种供跨库调用各种卡,想换一种思路模式,找了很久感觉mongDB非关系型数据库比较合适也比较好玩.开始学习首先第一步 c# 链接mongDB集群 一  了解mongdb 一  学习部署 二 部署集群 三 C#链接mongdb 完成测试 mongdb 是作为非关系型数据库,数据存储在内存中,由于目前我我们公司全部采用sqlserver数据库,项目太大.数据库也太多,读取数据压力太大.所以研究这种数据库来提高效率. 首先下载数据库文件 点击这里下载自己需要办

c# 链接mongDB集群实战开发2

c# 链接mongDB集群 一 了解mongdb 二  部署集群 三 C#链接mongdb 完成测试 部署集群 由于是在我本地做研究测试,所以我下载的是32位版本 (我下载到的名称是 mongodb-win32-i386-2.6.0.zip),再次因为我们后续可能在多台服务器上部署.所以我加压出来之后修改了名称并且做成5个不同文件夹, 为什么要这样做,下面是思路部署方式,有些不对的地方各位伙伴们可以提出不同建议 首先我说一下 我在这里 mongodbServer 1,mongodbServer

c# 链接mongDB集群实战开发3

c# 链接mongDB集群 一 了解mongdb 二  部署集群 三 C#链接mongdb 完成测试 C#链接mongdb 完成测试 此章节继续我们上一章节将的我们开始用程序去链接mondbdb,大家都知道我们链接sqlserver其实用的是微软自己写的驱动.它已经封装了一些对象,要我们去链接.但是我们链接mondbdb 同样需要一些对象,这个mongdb官网有说明,可以自己去看看或者直接下载我的这里下载 或者在第一章节有些伙伴们已经下载好了 开发驱动文件夹 在  mongo-csharp-dr

Spark教程-构建Spark集群-配置Hadoop单机模式并运行Wordcount(1)

安装ssh Hadoop是采用ssh进行通信的,此时我们要设置密码为空,即不需要密码登陆,这样免去每次通信时都输入秘密,安装如下: 输入“Y”进行安装并等待自动安装完成. 安装ssh完成后启动服务 以下命令验证服务是否正常启动: 可以看到ssh正常启动: 设置免密码登录,生成私钥和公钥: 在/root/.ssh中生成两个文件:id_rsa和id_rsa.pub,id_rsa为私钥,id_rsa.pub为公钥,我们将公钥id_rsa.pub追加到 authorized_keys中,因为author

Spark2.1集群安装(standalone模式)

机器部署 准备三台Linux服务器,安装好JDK1.7 下载Spark安装包 上传spark-2.1.0-bin-hadoop2.6.tgz安装包到Linux(intsmaze-131)上 解压安装包到指定位置tar -zxvf spark-2.1.0-bin-hadoop2.6.tgz -C /home/hadoop/app/spark2.0/ 原文和作者一起讨论:http://www.cnblogs.com/intsmaze/p/6569036.html 微信:intsmaze 配置Spar

【Spark01】SparkSubmit兼谈Spark集群管理和部署模式

关于Cluster Manager和Deploy Mode的组合在SparkSubmit.scala的createLaunchEnv中有比较详细的逻辑. Cluster Manager基本上有Standalone,YARN和Mesos三种情况,说明Cluster Manager用来指明集群的资源管理器.这就是说不管是Client还是Cluster部署方式(deployMode的两种可能),都会使用它们做集 群管理器,也就是说Client也是一种集群部署方式??? /** * @return a

LVS 服务器集群三种实现模式配置

LVS (Linux Virtual Server) Linux 服务器集群 LVS服务器集群中基于IP的负载均衡技术,有3种实现模式:VS/NET模式,VS/TUN模式(IP隧道模式),VS/DR模式(直接路由模式) 一,[VS/NET 模式] 1,配置Linux Director(前端负载调度器)IP,并打开IP数据包转发功能 1 2 3 ifconfig eth0 192.168.1.2 broacast 192.168.1.255 netmask 255.255.255.0 up ifc

搭建高可用的redis集群,避免standalone模式带给你的苦难

现在项目上用redis的话,很少说不用集群的情况,毕竟如果生产上只有一台redis会有极大的风险,比如机器挂掉,或者内存爆掉,就比如我们生产环境 曾今也遭遇到这种情况,导致redis内存不够挂掉的情况,当然这些都是我们及其不能容忍的,第一个必须要做到高可靠,其次才是高性能,好了,下面我来 逐一搭建一下. 一:Redis集群搭建 1. 下载 首先去官网下载较新的3.2.0版本,下载方式还是非常简单的,比如官网介绍的这样. $ wget http://download.redis.io/releas

LVS集群配置(DR模式)

基本介绍: LVS集群的Director Server主要有三种配置模式,分别为 TUN .NAT.DR,可以对各种服务做负载均 衡,而LVS架设的服务器集群系统由三个部分组成,分别是最前端的负载均衡层(Load Balance),中 间的服务器集群层(Server Array)和最底层的数据共享存储层(Shared Storage). LVS的IP负载均衡技术是通过IPVS模块来实现的,IPVS是LVS集群系统的核心软件,它的主要作用是: 安装在Director Server上,同时在Dire