MongoDB 集群分片搭建

环境要求

本次安装环境使用了三台乌班图虚拟机, 关于为什么搭建分片集群,想必这里不用多介绍了.肯定是因为数据量太大,不是一台机器所能承受的. 关于这些分片的理论知识可以去谷歌,后者 SB度 都可以,只是SB 度都是千篇一律的文章,没有什么含金量..

咱们还是进行实战实战一下如何搭建高可用的mongodb集群:
首先确定各个组件的数量,mongos 3个, config server 3个,数据分3片 shard server 3个,每个shard 有一个副本一个仲裁也就是 3 * 2 = 6 个,总共需要部署15个实例。这些实例可以部署在独立机器也可以部署在一台机器,我们这里资源有限,只准备了 3台机器,在同一台机器只要端口不同就可以,看一下物理部署图:

架构图.png

1、下载 mongodb
https://www.mongodb.com/ 这里下载就不多介绍了, 下载使用的相应版本就 OK 了,这里使用的是乌班图版本,版本号是3.4.2.

2、准备机器,IP分别设置为:172.16.174.145(mdb1),172.16.174.146(mdb2),172.16.174.147(mdb3),并分别创建mongos 、config 、 shard1 、shard2、shard3对应目录

分别在mdb1,mdb2,mdb3 三台机器上执行以下命令:
#建立mongos及日志目录
sudo  mkdir -p /data/mongodb/mongos/log
#建立config server 数据文件存放目录
sudo mkdir -p /data/mongodb/config/data
#建立config server 日志文件存放目录
sudo mkdir -p /data/mongodb/config/log
#建立shard1 数据文件存放目录
sudo mkdir -p /data/mongodb/shard1/data
#建立shard1 日志文件存放目录
sudo mkdir -p /data/mongodb/shard1/log
#建立shard2 数据文件存放目录
sudo mkdir -p /data/mongodb/shard2/data
#建立shard2 日志文件存放目录
sudo mkdir -p /data/mongodb/shard2/log
#建立shard3 数据文件存放目录
sudo mkdir -p /data/mongodb/shard3/data
#建立shard3 日志文件存放目录
sudo mkdir -p /data/mongodb/shard3/log

或者可以使用这条简单的命令创建
mkdir - p /data/mongodb/{filename1,filename2,...}

目录格式

2、规划5个组件对应的端口号,由于一个机器需要同时部署 mongos、config server 、shard1、shard2、shard3,所以需要用端口进行区分。
这个端口可以自由定义,在本文 mongos为 20000, config server 为 21000, shard1为 22001 , shard2为22002, shard3为22003.

3、本文的 mongodb 存放目录是在 /usr/local/server/mongodb 目录中.
当准备工作都做好之后,分别在mdb1,mdb2,mdb3三台机器上执行下面命令

执行成功

然后执行下面命令

sudo /usr/local/server/mongodb/bin/mongo --host  mdb1 --port 21000 , 

(这里可以随便连接一台服务器,我这里就连接第一台了)执行.下面语句

rs.initiate({_id:"cfgReplSet",configsvr:true,
          members:[{_id:0,host:"mdb1:21000"},
                   {_id:1,host:"mdb2:21000"},
                   {_id:2,host:"mdb3:21000"}]})
执行成功

4、在每一台服务器分别启动分片及副本集。(后台运行)在每一台服务器分别以副本集方式启动分片,执行以下命令

 sudo /usr/local/server/mongodb/bin/mongod --shardsvr --replSet shard1ReplSet --port 22001 --dbpath /data/mongodb/shard1/data --logpath /data/mongodb/shard1/log/shard1.log --fork --nojournal
 sudo /usr/local/server/mongodb/bin/mongod --shardsvr --replSet shard2ReplSet --port 22002 --dbpath /data/mongodb/shard2/data --logpath /data/mongodb/shard2/log/shard2.log --fork --nojournal
 sudo /usr/local/server/mongodb/bin/mongod --shardsvr --replSet shard3ReplSet --port 22003 --dbpath /data/mongodb/shard3/data --logpath /data/mongodb/shard3/log/shard3.log --fork --nojournal
执行完毕

执行完毕之后,随便连接一台服务器,,这里连接的是

mdb1  
 首先执行 sudo /usr/local/server/mongodb/bin/mongo --host mdb1 --port 22001  
 rs.initiate({_id:"shard1ReplSet",
          members:[{_id:0,host:"mdb1:22001"},
                   {_id:1,host:"mdb2:22001"},
                   {_id:2,host:"mdb3:22001"}]})
其次执行 sudo /usr/local/server/mongodb/bin/mongo --host mdb1 --port 22002 
 rs.initiate({_id:"shard2ReplSet",
          members:[{_id:0,host:"mdb1:22002"},
                   {_id:1,host:"mdb2:22002"},
                   {_id:2,host:"mdb3:22002"}]})
最后执行 sudo /usr/local/server/mongodb/bin/mongo --host mdb1 --port 22003 
 rs.initiate({_id:"shard3ReplSet",
          members:[{_id:0,host:"mdb1:22003"},
                   {_id:1,host:"mdb2:22003"},
                   {_id:2,host:"mdb3:22003"}]})

下面是执行效果

首先
其次
最后

5、选择一台服务器当做 mongos路由服务

  sudo  /usr/local/server/mongodb/bin/mongos  --configdb cfgReplSet/mdb1:21000,mdb2:21000,mdb3:21000 --port  20000  --logpath  /data/mongodb/mongos/log/mongos.log --fork 

执行效果图

选举路由服务.png

连接路由服务

    /usr/local/server/mongodb/bin/mongo --host mdb1 --port 20000
登录路由服务
 执行以下命令,添加分片到集群
 sh.addShard("shard1ReplSet/mdb1:22001,mdb2:22001,mdb3:22001")
 sh.addShard("shard2ReplSet/mdb1:22002,mdb2:22002,mdb3:22002")
 sh.addShard("shard3ReplSet/mdb1:22003,mdb2:22003,mdb3:22003")
执行成功

下面进行测试,,

通过客户端

从图片中可以看出 分片1的数据非常的巨大,可以说是全部数据都在这里了..
下面我们做下改变

改变之后的.png
改变之后的.png

到这里基本上就已经成功了..是不是很简单呢... 其实摸索之后就感觉非常简单呢. 但是我这却摸索了一下午. 不过也算是有收获吧..小伙伴们赶紧抓紧搭建一下吧.

这里使用的是 java 语言.. springboot 框架

spring.data.mongodb.authentication-database=admin
spring.data.mongodb.database=mdb
spring.data.mongodb.host=172.16.174.147
spring.data.mongodb.port=20000  #这里端口就写路由的端口.
spring.data.mongodb.username=root
spring.data.mongodb.password=root
spring.data.mongodb.write-concern=SAFE
spring.data.mongodb.connections-per-host=10
spring.data.mongodb.threads-allowed-to-block-for-connection-multiplier=5
spring.data.mongodb.connect-timeout=5000
spring.data.mongodb.heartbeat-frequency=2000
spring.data.mongodb.heartbeat-connect-timeout=10000
spring.data.mongodb.heartbeat-socket-timeout=10000
spring.data.mongodb.socket-timeout=0
spring.data.mongodb.max-wait-time=1500
mongodb.socket-keep-alive=true
连接成功.png
保存并查询完毕

完毕了..
这里搭建我遇到了很多未知的问题, 谷歌了很久,看官方文档学习,但还是错误摆出,但是这些并不能磨灭我的意志,最终功夫不负有心人啊..还是让我给搭建成功了...小伙伴们赶紧试试吧.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,602评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,442评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,878评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,306评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,330评论 5 373
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,071评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,382评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,006评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,512评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,965评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,094评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,732评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,283评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,286评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,512评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,536评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,828评论 2 345

推荐阅读更多精彩内容