非docker部署

为了避免过分冗余,并且在主节点挂了,还能顺利自动提升,所以加入仲裁节点

为什么要用docker部署,因为之前直接在虚拟机启动10个mongod 进程.多线程并发测试的时候,mongo的进程经常会挂掉.

所以这次使用docker部署测试

之前用的是7200转的固态硬盘

这次用nvme 的固态硬盘,性能是飞跃提升,使用批量插入,每次插入100个文档 ,每个文档里面有内嵌又内嵌文档1=10个文档, 算上内嵌总数相当于关系型数据库5000W数据量,总耗时130秒,而且非常稳定,未见异常情况!

镜像版本: 3.4.10-jessie3.4-jessie3-jessiejessie (3.4/Dockerfile)

环境:一台虚拟机

三个configsvr 副本: 端口为 27020,27021,27022

两个分片:

  shard1:-> 三个副本,端口为 27017,27018,27019

  shard2:-> 三个副本,端口为 27024,27025,27026

一个路由:mongos -> 端口为 27023

前置条件:

注意:configsvr 的 data 目录是 /data/configdb 而数据节点的目录是 /data/db

创建数据存储文件的目录

mkdir /usr/local/mongodb/data
cd /usr/local/mongodb/data
mkdir c0 && mkdir c1 && mkdir c2 && mkdir s100 && mkdir s101 && mkdir s102 && mkdir s200 && mkdir s201 && mkdir s202

生成鉴权需要的keyfile,keyfile 内容不能太长,否则启动不了,权限不能太大,否则也是启动不了

openssl rand -base64  > /usr/local/mongodb/keyfile
chmod /usr/local/mongodb/keyfile
chown /usr/local/mongodb/keyfile

副本模式启动 configsvr

第一次启动 时,不要添加 --keyFile /usr/local/mongodb/keyfile 先初始化用户

docker run --name mongo-cs0 --net=host -v /etc/localtime:/etc/localtime:ro -v /usr/local/mongodb/data/cs0:/data/configdb -v /usr/local/mongodb/data/cs0/log:/var/log/mongodb -v /usr/local/mongodb:/usr/local/mongodb -d d22888af0ce0 --directoryperdb --storageEngine=wiredTiger --smallfiles --oplogSize  --replSet cs --configsvr --port  --bind_ip=localhost,192.168.1.9

docker run --name mongo-cs1 --net=host -v /etc/localtime:/etc/localtime:ro -v /usr/local/mongodb/data/cs1:/data/configdb -v /usr/local/mongodb/data/cs1/log:/var/log/mongodb -v /usr/local/mongodb:/usr/local/mongodb -d d22888af0ce0 --directoryperdb --storageEngine=wiredTiger --smallfiles --oplogSize  --replSet cs --configsvr --port  --bind_ip=localhost,192.168.1.9

docker run --name mongo-cs2 --net=host -v /etc/localtime:/etc/localtime:ro -v /usr/local/mongodb/data/cs2:/data/configdb -v /usr/local/mongodb/data/cs2/log:/var/log/mongodb -v /usr/local/mongodb:/usr/local/mongodb -d d22888af0ce0 --directoryperdb --storageEngine=wiredTiger --smallfiles --oplogSize  --replSet cs --configsvr --port  --bind_ip=localhost,192.168.1.9

登陆任意一个节点 初始化配置,以及创建用户 注意,如果初始化配置以后,use db 多几次,会自动切换到primary,需要在primary节点上才可以有创建动作,或者设置slaveok

use admin;

var cnf={_id:"cs",members:[{_id:,host:"192.168.1.9:27020"},{_id:,host:"192.168.1.9:27021"},{_id:,host:"192.168.1.9:27022"}]}

 rs.initiate(cnf)

db.createUser(
{
user: "dba",
pwd: "dba",
roles: [ { role: "root", db: "admin" } ]
}
) use testdb
db.createUser(
  {
    user: "testuser",
    pwd: "testuser",
    roles: [ { role: "readWrite", db: "testdb" } ]
  }
)

启动分片1

第一次启动 时,不要添加 --keyFile /usr/local/mongodb/keyfile 先初始化用户

docker run --name mongo-s100 --net=host -v /etc/localtime:/etc/localtime:ro -v /usr/local/mongodb/data/s100:/data/db -v /usr/local/mongodb/data/s100/log:/var/log/mongodb -d d22888af0ce0 --directoryperdb --storageEngine=wiredTiger --smallfiles --oplogSize  --replSet shard1 --shardsvr --port  --bind_ip=localhost,192.168.1.9

docker run --name mongo-s101 --net=host -v /etc/localtime:/etc/localtime:ro -v /usr/local/mongodb/data/s101:/data/db -v /usr/local/mongodb/data/s101/log:/var/log/mongodb -d d22888af0ce0 --directoryperdb --storageEngine=wiredTiger --smallfiles --oplogSize  --replSet shard1 --shardsvr --port  --bind_ip=localhost,192.168.1.9

docker run --name mongo-s102 --net=host -v /etc/localtime:/etc/localtime:ro -v /usr/local/mongodb/data/s102:/data/db -v /usr/local/mongodb/data/s102/log:/var/log/mongodb -d d22888af0ce0 --directoryperdb --storageEngine=wiredTiger --smallfiles --oplogSize  --replSet shard1 --shardsvr --port  --bind_ip=localhost,192.168.1.9

登陆路任意一个分片1 注意,如果初始化配置以后,use db 多几次,会自动切换到primary,需要在primary节点上才可以有创建动作,或者设置slaveok

use admin;

var cnf={_id:"shard1",members:[{_id:,host:"192.168.1.9:27017"},{_id:,host:"192.168.1.9:27018"}]}

rs.initiate(cnf)
rs.addArb("192.168.1.9:27019")#仲裁节点
db.createUser(
{
user: "dba",
pwd: "dba",
roles: [ { role: "root", db: "admin" } ]
}
) use 目标数据库
db.createUser(
  {
    user: "testuser",
    pwd: "testuser",
    roles: [ { role: "readWrite", db: "testdb" } ]
  }
)

启动分片2

第一次启动 时,不要添加 --keyFile /usr/local/mongodb/keyfile 先初始化用户

docker run --name mongo-s200 --net=host -v /etc/localtime:/etc/localtime:ro -v /usr/local/mongodb/data/s200:/data/db -v /usr/local/mongodb/data/s200/log:/var/log/mongodb -d d22888af0ce0 --directoryperdb --storageEngine=wiredTiger --smallfiles --oplogSize  --replSet shard2 --shardsvr --port  --bind_ip=localhost,192.168.1.9

docker run --name mongo-s201 --net=host -v /etc/localtime:/etc/localtime:ro -v /usr/local/mongodb/data/s201:/data/db -v /usr/local/mongodb/data/s201/log:/var/log/mongodb -d d22888af0ce0 --directoryperdb --storageEngine=wiredTiger --smallfiles --oplogSize  --replSet shard2 --shardsvr --port  --bind_ip=localhost,192.168.1.9

docker run --name mongo-s202 --net=host -v /etc/localtime:/etc/localtime:ro -v /usr/local/mongodb/data/s202:/data/db -v /usr/local/mongodb/data/s202/log:/var/log/mongodb -d d22888af0ce0 --directoryperdb --storageEngine=wiredTiger --smallfiles --oplogSize  --replSet shard2 --shardsvr --port  --bind_ip=localhost,192.168.1.9

登陆任意一个分片2 初始化配置,并创建用户 注意,如果初始化配置以后,use db 多几次,会自动切换到primary,需要在primary节点上才可以有创建动作,或者设置slaveok

use admin;

var cnf={_id:"shard2",members:[{_id:,host:"192.168.1.9:27024"},{_id:,host:"192.168.1.9:27025"}]}
rs.initiate(cnf)
rs.addArb("192.168.1.9:27026") #仲裁节点
db.createUser( { user: "dba", pwd: "dba", roles: [ { role: "root", db: "admin" } ] } ) use 目标数据库 db.createUser(   {     user: "testuser",     pwd: "testuser",     roles: [ { role: "readWrite", db: "testdb" } ]   } )

启动路由

docker run -d --name mongos --net=host -v /etc/localtime:/etc/localtime:ro -v /usr/local/mongodb/data/mongos/log:/var/log/mongodb -d d22888af0ce0 mongos --port  --configdb cs/192.168.1.9:,192.168.1.9:,192.168.1.9: --bind_ip=192.168.1.9

登陆路由,添加分片

mongos> sh.addShard("shard1/192.168.1.9:27017")#只需要添加其中一个副本或者仲裁host即可 可选 192.168.1.9:27018 192.168.1.9:27019
{ "shardAdded" : "shard1", "ok" : }
mongos> sh.addShard("shard2/192.168.1.9:27024")#同上规则
{ "shardAdded" : "shard2", "ok" : }
mongos> sh.enableSharding("testdb") 
mongos> sh.shardCollection("testdb.orderInfo",{"_id":"hashed"}) Use testdb; db.createUser( { user: "testuser", pwd: "testuser", roles: [ { role: "readWrite", db: "testdb" } ] } )

关闭所有节点,重启加上鉴权

docker stop $(docker ps -a -q)
docker rm $(docker ps -a -q)

重启configsvr

docker run --restart=always --name mongo-cs0 --net=host -v /etc/localtime:/etc/localtime:ro -v /usr/local/mongodb/data/cs0:/data/configdb -v /usr/local/mongodb/data/cs0/log:/var/log/mongodb -v /usr/local/mongodb:/usr/local/mongodb -d d22888af0ce0 --keyFile /usr/local/mongodb/keyfile --directoryperdb --storageEngine=wiredTiger --smallfiles --oplogSize  --replSet cs --configsvr --port  --bind_ip=localhost,192.168.1.9

docker run  --restart=always --name mongo-cs1 --net=host -v /etc/localtime:/etc/localtime:ro -v /usr/local/mongodb/data/cs1:/data/configdb -v /usr/local/mongodb/data/cs1/log:/var/log/mongodb -v /usr/local/mongodb:/usr/local/mongodb -d d22888af0ce0 --keyFile /usr/local/mongodb/keyfile --directoryperdb --storageEngine=wiredTiger --smallfiles --oplogSize  --replSet cs --configsvr --port  --bind_ip=localhost,192.168.1.9

docker run  --restart=always --name mongo-cs2 --net=host -v /etc/localtime:/etc/localtime:ro -v /usr/local/mongodb/data/cs2:/data/configdb -v /usr/local/mongodb/data/cs2/log:/var/log/mongodb -v /usr/local/mongodb:/usr/local/mongodb -d d22888af0ce0 --keyFile /usr/local/mongodb/keyfile --directoryperdb --storageEngine=wiredTiger --smallfiles --oplogSize  --replSet cs --configsvr --port  --bind_ip=localhost,192.168.1.9

重启分片1

docker run  --restart=always --name mongo-s100 --net=host -v /etc/localtime:/etc/localtime:ro -v /usr/local/mongodb/data/s100:/data/db -v /usr/local/mongodb/data/s100/log:/var/log/mongodb -v /usr/local/mongodb:/usr/local/mongodb -d d22888af0ce0 --keyFile /usr/local/mongodb/keyfile --directoryperdb --storageEngine=wiredTiger --smallfiles --oplogSize  --replSet shard1 --shardsvr --port  --bind_ip=localhost,192.168.1.9

docker run  --restart=always --name mongo-s101 --net=host -v /etc/localtime:/etc/localtime:ro -v /usr/local/mongodb/data/s101:/data/db -v /usr/local/mongodb/data/s101/log:/var/log/mongodb -v /usr/local/mongodb:/usr/local/mongodb -d d22888af0ce0 --keyFile /usr/local/mongodb/keyfile --directoryperdb --storageEngine=wiredTiger --smallfiles --oplogSize  --replSet shard1 --shardsvr --port  --bind_ip=localhost,192.168.1.9

docker run  --restart=always --name mongo-s102 --net=host -v /etc/localtime:/etc/localtime:ro -v /usr/local/mongodb/data/s102:/data/db -v /usr/local/mongodb/data/s102/log:/var/log/mongodb -v /usr/local/mongodb:/usr/local/mongodb -d d22888af0ce0 --keyFile /usr/local/mongodb/keyfile --directoryperdb --storageEngine=wiredTiger --smallfiles --oplogSize  --replSet shard1 --shardsvr --port  --bind_ip=localhost,192.168.1.9

重启分片2

docker run  --restart=always --name mongo-s200 --net=host -v /etc/localtime:/etc/localtime:ro -v /usr/local/mongodb/data/s200:/data/db -v /usr/local/mongodb/data/s200/log:/var/log/mongodb -v /usr/local/mongodb:/usr/local/mongodb -d d22888af0ce0 --keyFile /usr/local/mongodb/keyfile --directoryperdb --storageEngine=wiredTiger --smallfiles --oplogSize  --replSet shard2 --shardsvr --port  --bind_ip=localhost,192.168.1.9

docker run  --restart=always --name mongo-s201 --net=host -v /etc/localtime:/etc/localtime:ro -v /usr/local/mongodb/data/s201:/data/db -v /usr/local/mongodb/data/s201/log:/var/log/mongodb -v /usr/local/mongodb:/usr/local/mongodb -d d22888af0ce0 --keyFile /usr/local/mongodb/keyfile --directoryperdb --storageEngine=wiredTiger --smallfiles --oplogSize  --replSet shard2 --shardsvr --port  --bind_ip=localhost,192.168.1.9

docker run  --restart=always --name mongo-s202 --net=host -v /etc/localtime:/etc/localtime:ro -v /usr/local/mongodb/data/s202:/data/db -v /usr/local/mongodb/data/s202/log:/var/log/mongodb -v /usr/local/mongodb:/usr/local/mongodb -d d22888af0ce0 --keyFile /usr/local/mongodb/keyfile --directoryperdb --storageEngine=wiredTiger --smallfiles --oplogSize  --replSet shard2 --shardsvr --port  --bind_ip=localhost,192.168.1.9

启动路由

docker run  --restart=always -d --name mongos --net=host -v /etc/localtime:/etc/localtime:ro -v /usr/local/mongodb/data/mongos/log:/var/log/mongodb  -v /usr/local/mongodb:/usr/local/mongodb -d d22888af0ce0 mongos --keyFile /usr/local/mongodb/keyfile --port  --configdb cs/192.168.1.9:,192.168.1.9:,192.168.1.9: --bind_ip=192.168.1.9

现在可以登陆路由进行测试了

以下测试,片键为公司编码以及用户名,复合键片,实现多热点

插入500W 单文档数据,不包含内嵌文档,速度非常快.只用了56秒

完成插入查看数据分布情况

分布不太均衡,等一会再看一次

非常均衡,因为我用了9个公司编码,14个随机用户名插入.但是只有两个分片,所以导致数据会分发倒第一次插入的分片中,导致数据需要频繁自动均衡.建议有条件的,初始化的时候,创建多个分片

Docker mongodb 3.4 分片 一主 一副 一仲 鉴权集群部署.的更多相关文章

  1. mongodb 3.4 分片 一主 一副 一仲 鉴权集群部署.

    Docker方式部署 为了避免过分冗余,并且在主节点挂了,还能顺利自动提升,所以加入仲裁节点 mongodb版本: 环境:一台虚拟机 三个configsvr 副本: 端口为 27020,27021,2 ...

  2. 搭建一个分布式MongoDB鉴权集群

    今天休假在家,测试并搭建了一个replica set shard MongoDB鉴权集群.replica set shard 鉴权集群中文资料比较少,本文是个人笔记,同时也希望对后来者有所帮助.本文仅 ...

  3. MongoDB DBA 实践8-----Linux系统Mongodb分片集群部署

    在Linux系统中,主要是使用命令行进行mongodb的分片集群部署 一.先决条件 mongodb安装成功,明确路径, MongoDB的几个路径: /var/lib/mongodb /var/log/ ...

  4. MongoDB(7):集群部署实践,包含复制集,分片

    注: 刚开始学习MongoDB,写的有点麻烦了,网上教程都是很少的代码就完成了集群的部署, 纯属个人实践,错误之处望指正!有好的建议和资料请联系我QQ:1176479642 集群架构: 2mongos ...

  5. MongoDB分片集群部署方案

    前言 副本集部署是对数据的冗余和增加读请求的处理能力,却不能提高写请求的处理能力:关键问题是随着数据增加,单机硬件配置会成为性能的瓶颈.而分片集群可以很好的解决这一问题,通过水平扩展来提升性能.分片部 ...

  6. Mongodb集群部署ReplicaSet+Sharding -摘自网络

    网上关于三种集群方式的搭建方式很多,都是分开来介绍的.Replica Set (复制集成)主要是做主从库的,但是没法实现负载均衡的效果,真正实现这个的,是Sharding(分片集群),通过数据分布在每 ...

  7. mtools 是由MongoDB 官方工程师实现的一套工具集,可以很快速的日志查询分析、统计功能,此外还支持本地集群部署管理.

    mtools 是由MongoDB 官方工程师实现的一套工具集,可以很快速的日志查询分析.统计功能,此外还支持本地集群部署管理 https://www.cnblogs.com/littleatp/p/9 ...

  8. Clickhouse Docker集群部署

    写在前面 抽空来更新一下大数据的玩意儿了,起初架构选型的时候有考虑Hadoop那一套做数仓,但是Hadoop要求的服务器数量有点高,集群至少6台或以上,所以选择了Clickhouse(后面简称CH). ...

  9. 图解MongoDB集群部署原理(3)

    MongoDB的集群部署方案中有三类角色:实际数据存储结点.配置文件存储结点和路由接入结点. 连接的客户端直接与路由结点相连,从配置结点上查询数据,根据查询结果到实际的存储结点上查询和存储数据.Mon ...

随机推荐

  1. WebService初入

    WebService 1. WebService基本认识 WebService最早是微软提出了一种以XML为载体网络信息传输的规范,现在几乎所有的语言与平台都支持,带有状态机制,不依赖于容器,可以发送 ...

  2. [SF] Symfony 组件 BrowserKit 原理

    直接看下面的注释中针对每一个文件的作用说明. <?php /** * BrowserKit - Make internal requests to your application. * * I ...

  3. VUE环境配置步骤及相关Git Bash命令的使用

    组件式开发中,一定少不了Vue,废话少说,开始进行Vue应用前的关键性配置 备注:(为方便进行配置,提前可以安装Git bash,下载路径——https://git-scm.com/downloads ...

  4. 蓝桥杯练习系统— 算法训练 Beaver's Calculator

    问题描述 从万能词典来的聪明的海狸已经使我们惊讶了一次.他开发了一种新的计算器,他将此命名为"Beaver's Calculator 1.0".它非常特别,并且被计划使用在各种各样 ...

  5. 安装 cgilib 0.5

    下载软件包下载链接:http://pan.baidu.com/s/1gdzOiVT 解包tar zxvf cgilib-0.5.tar.gzcd cgilib-0.5 makecp libcgi.a ...

  6. Springboot security cas源码陶冶-FilterSecurityInterceptor

    前言:用户登录信息校验成功后,都会获得当前用户所拥有的全部权限,所以对访问的路径当前用户有无权限则需要拦截验证一发 Spring security过滤器的执行顺序 首先我们需要验证为啥FilterSe ...

  7. COGS 2479. [HZOI 2016]偏序 [CDQ分治套CDQ分治 四维偏序]

    传送门 给定一个有n个元素的序列,元素编号为1~n,每个元素有三个属性a,b,c,求序列中满足i<j且ai<aj且bi<bj且ci<cj的数对(i,j)的个数. 对于100%的 ...

  8. C#常用代码片段备忘

    以下是从visual studio中整理出来的常用代码片段,以作备忘 快捷键: eh 用途: 类中事件实现函数模板 private void MyMethod(object sender, Event ...

  9. 自兴人工智能------------python入门基础(2)列表和元祖

    一.通用序列操作: 列表中所有序列都可以进行特定的操作,包括索引(indexing).分片(slicing).序列相加(adding).乘法,成员资格,长度,最小值,最大值,下面会一一介绍这些操作法. ...

  10. 前端js代码优化

    今天给大家分享下js代码优化的相关技巧. 1.使用"+"转换为数值     我们平时开发过程中需要将数字字符串创转为number类型,大多数都会用JavaScript parseI ...