当前位置: 首页 > news >正文

mongodb分片

环境准备
 
系统系统 centos 7.4
三台服务器:
node1(192.168.80.100)
node2(192.168.80.101)
node3(192.168.80.102)
安装包:yum安装

服务器规划

服务器node1(192.168.80.100)服务器node2(192.168.80.101)服务器node3(192.168.80.102)
mongosmongosmongos
config serverconfig serverconfig server
shard server1 主节点shard server1 副节点shard server1 仲裁
shard server2 仲裁shard server2 主节点shard server2 副节点
shard server3 副节点shard server3 仲裁shard server3 主节点
每一台mongodb服务器端口分配:
mongos:20000
config:21000
shard1:27001
shard2:27002
shard3:27003
1、关闭防火墙和SElinux
systemctl    stop  firewalld
setenforce   0
2、配置MongoDB的yum源:
[mongodb-org-4.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.0/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.0.asc
3、安装MongoDB:
yum  install -y mongodb-org
4、路径规划并创建(三台服务器都要操作)
分别在每台机器建立conf、mongos、config、shard1、shard2、shard3目录,因为mongos不存储数据,只需要建立日志文件目录即可,日志文件创建完成之后还需要给予权限。

mkdir -p /data/mongodb/logs/    #日志文件路径
 
mkdir /etc/mongodb/    #配置文件路径
 
mkdir /data/mongodb/config/    #config  server数据存储路径
 
mkdir /data/mongodb/shard{1,2,3}   #shard  server数据存储路径
 
touch /data/mongodb/logs/shard{1,2,3}.log   #shard  server日志文件
 
touch /data/mongodb/logs/mongos.log   #mongos日志文件
 
touch /data/mongodb/logs/config.log    #config  server日志文件
 
chmod 777 /data/mongodb/logs/*.log   #授权所有日志文件都可以写入

ll /data/mongodb/logs/

mongodb分片

5、config    server配置服务器
mongodb3.4以后要求配置服务器也创建副本集,不然集群搭建不成功。
(1)、添加配置文件
cp  -p   /etc/mongod.conf   /etc/mongodb/config.conf
 
vi   /etc/mongodb/config.conf
修改后内容如下:
systemLog:
  destination: file
  logAppend: true
  path: /data/mongodb/logs/config.log

storage:
  dbPath: /data/mongodb/config/
  journal:
    enabled: true
 
processManagement:
  fork: true
  pidFilePath: /data/mongodb/logs/config.pid
  timeZoneInfo: /usr/share/zoneinfo
 
net:
  port: 21000
  bindIp: 0.0.0.0
  maxIncomingConnections: 20000
 
replication:
  replSetName: configs
 
sharding:
  clusterRole: configsvr
(2)将配置完的配置文件发送到其它服务器上
scp /etc/mongodb/config.conf root@192.168.80.101:/etc/mongodb/
scp /etc/mongodb/config.conf root@192.168.80.102:/etc/mongodb/

mongodb分片

(3)三台服务器启动config实例:
mongod -f /etc/mongodb/config.conf

mongodb分片

(4)、配置复制集(任意一台操作即可,建议三台服务器都进入数据库,方便查看角色变更)
mongo 127.0.0.1:21000
 
config={_id:"configs",members:[
{_id:0,host:"192.168.80.100:21000"},
{_id:1,host:"192.168.80.101:21000"},
{_id:2,host:"192.168.80.102:21000"}]}    #创建复制集
 
rs.initiate(config)      #初始化复制集
 
config  server服务到此完成。

mongodb分片
mongodb分片

7、部署shard1分片服务器
(1)、创建配置文件
cp  -p   /etc/mongod.conf   /etc/mongodb/shard1.conf
 
vi   /etc/mongodb/shard1.conf
修改后的内容如下:
systemLog:
  destination: file
  logAppend: true
  path: /data/mongodb/logs/shard1.log
storage:
  dbPath: /data/mongodb/shard1/
  journal:
    enabled: true
 
processManagement:
  fork: true
  pidFilePath: /data/mongodb/logs/shard1.pid
  timeZoneInfo: /usr/share/zoneinfo
 
net:
  port: 27001
  bindIp: 0.0.0.0
  maxIncomingConnections: 20000
 
replication:
  replSetName: shard1
 
sharding:
  clusterRole: shardsvr
(2)将配置完的配置文件发送到其它服务器上
scp /etc/mongodb/shard1.conf root@192.168.80.101:/etc/mongodb/
scp /etc/mongodb/shard1.conf root@192.168.80.102:/etc/mongodb/

mongodb分片
 

(3)启动实例shard1(三台都操作)
mongod -f /etc/mongodb/shard1.conf

mongodb分片

(4)登陆任意一台非仲裁节点服务器,初始化副本集
mongo 127.0.0.1:27001
#使用admin数据库
use admin

#定义副本集配置,第三个节点的 "arbiterOnly":true 代表其为仲裁节点。
config = {
       _id : "shard1",
       members : [
            {_id : 1, host : "192.168.80.100:27001" , priority:100},
            {_id : 2, host : "192.168.80.101:27001" , priority:90},
            {_id : 3, host : "192.168.80.102:27001" , arbiterOnly: true }
        ]
    }
 
注:不是在任一台服务器上创建都能成功的,如果选择在预先设置为仲裁节点的服务器上创建复制集会报错
 
#初始化副本集配置
rs.initiate(config)

mongodb分片
mongodb分片
mongodb分片

8、设置第二个分片副本集

添加配置文件
cp  -p   /etc/mongod.conf   /etc/mongodb/shard2.conf

vi /etc/mongodb/shard2.conf

# 配置文件内容

systemLog:
  destination: file
  logAppend: true
  path: /data/mongodb/logs/shard2.log
storage:
  dbPath: /data/mongodb/shard2/
  journal:
    enabled: true

processManagement:
  fork: true
  pidFilePath: /data/mongodb/logs/shard2.pid
  timeZoneInfo: /usr/share/zoneinfo

net:
  port: 27002
  bindIp: 0.0.0.0
  maxIncomingConnections: 20000

replication:
  replSetName: shard2

sharding:
  clusterRole: shardsvr
(2)将配置完的配置文件发送到其它服务器上
scp /etc/mongodb/shard2.conf root@192.168.80.101:/etc/mongodb/
scp /etc/mongodb/shard2.conf root@192.168.80.102:/etc/mongodb/

mongodb分片

(3)启动实例shard2(三台都操作)
mongod -f /etc/mongodb/shard2.conf
(4)
登陆任意一台非仲裁节点服务器,初始化副本集在80.102上作这条命令不然不会成功的
mongo 127.0.0.1:27002
#使用admin数据库
use admin
#定义副本集配置,第一个节点的 "arbiterOnly":true 代表其为仲裁节点。
config = {
       _id : "shard2",
       members : [
            {_id : 1, host : "192.168.80.100:27002" , arbiterOnly: true },
            {_id : 2, host : "192.168.80.101:27002" , priority:2},
            {_id : 3, host : "192.168.80.102:27002" , priority:1}
        ]
    }
#初始化副本集配置
rs.initiate(config)

mongodb分片
mongodb分片
mongodb分片

9、设置第三个分片副本集
添加配置文件
cp  -p   /etc/mongodb/shard2.conf   /etc/mongodb/shard3.conf
vi /etc/mongodb/shard3.conf
 :% s/2/3/g    //把当前文件下的2换成3
 记得把端口上的2改回来
## 配置文件内容
 
systemLog:
  destination: file
  logAppend: true
  path: /data/mongodb/logs/shard3.log
storage:
  dbPath:  /data/mongodb/shard3/
  journal:
    enabled: true
 
processManagement:
  fork: true
  pidFilePath: /data/monodb/logs/shard3.pid
  timeZoneInfo: /usr/share/zoneinfo
 
net:
  port: 27003
  bindIp: 0.0.0.0
  maxIncomingConnections: 20000
 
replication:
  replSetName: shard3
 
sharding:
  clusterRole: shardsvr

mongodb分片

将配置完的配置文件发送到其它服务器上
scp /etc/mongodb/shard3.conf root@192.168.80.101:/etc/mongodb/
scp /etc/mongodb/shard3.conf root@192.168.80.102:/etc/mongodb/

mongodb分片

(3)启动实例shard3(三台都操作)
mongod -f /etc/mongodb/shard3.conf

mongodb分片

(4)
登陆任意一台非仲裁节点服务器,初始化副本集
mongo 127.0.0.1:27003
#使用admin数据库
use admin
#定义副本集配置,第二个节点的 "arbiterOnly":true 代表其为仲裁节点。
config = {
       _id : "shard3",
       members : [
            {_id : 1, host : "192.168.80.100:27003" , priority:1},
            {_id : 2, host : "192.168.80.101:27003" , arbiterOnly: true},
            {_id : 3, host : "192.168.80.102:27003" , priority:2}
        ]
    }
#初始化副本集配置
rs.initiate(config)

mongodb分片
mongodb分片

10、配置路由服务器 mongos
先启动配置服务器和分片服务器,后启动路由实例启动路由实例:(三台机器)

(1)创建配置文件
cp  -p   /etc/mongodb/shard2.conf   /etc/mongodb/mongos.conf
vi /etc/mongodb/mongos.conf
## 配置文件内容

systemLog:
  destination: file
  logAppend: true
  path: /data/mongodb/logs/mongos.log

processManagement:
  fork: true
  pidFilePath: /data/mongodb/logs/mongos.pid
  timeZoneInfo: /usr/share/zoneinfo

net:
  port: 20000
  bindIp: 0.0.0.0
  maxIncomingConnections=20000

sharding:
  configDB: configs/192.168.80.100:21000, 192.168.80.101:21000, 192.168.80.102:21000

#注意监听的配置服务器,只能有1个或者3个 csReplSet为配置服务器的副本集名字

mongodb分片
mongodb分片

(2)将配置文件发送到其他服务器
scp /etc/mongodb/mongos.conf root@192.168.80.100:/etc/mongodb/
scp /etc/mongodb/mongos.conf root@192.168.80.101:/etc/mongodb/

mongodb分片

(3)启动mongos实例
mongos -f /etc/mongodb/mongos.conf

mongodb分片

(4)启用分片
目前搭建了mongodb配置服务器、路由服务器,各个分片服务器,不过应用程序连接到mongos路由服务器并不能使用分片机制,还需要在程序里设置分片配置,让分片生效。
登陆任意一台mongos
mongo 127.0.0.1:20000
#使用admin数据库
use  admin
#串联路由服务器与分配副本集
sh.addShard("shard1/192.168.80.100:27001,192.168.80.101:27001,192.168.80.102:27001")
sh.addShard("shard2/192.168.80.100:27002,192.168.80.101:27002,192.168.80.102:27002")
#查看集群状态
mongos> sh.status()

mongodb分片

11、测试服务器分片功能
目前配置服务、路由服务、分片服务、副本集服务都已经串联起来了,但我们的目的是希望插入数据,数据能够自动分片。连接在mongos上,准备让指定的数据库、指定的集合分片生效。
mongo 127.0.0.1:20000
(1)设置分片chunk大小
mongos> use config
mongos> db.settings.save({"_id":"chunksize","value":1})   
//设置块大小为1M是方便实验,不然就需要插入海量数据才能分片
(2)模拟写入数据
use python
show   collections
 for(i=1;i<=50000;i++){db.user.insert({"id":i,"name":"jack"+i})}
//在python库的user表中循环写入五万条数据

mongodb分片

db.user.find()     //查看内容

mongodb分片

(3)启用数据分片
sh.enableSharding("python")
//数据库分片就有针对性,可以自定义需要分片的库或者表,毕竟也不是所有数据都是需要分片操作的

mongodb分片

(4)为表创建的索引
创建索引的规则是不能一致性太高,要具有唯一性,例如序号,比如性别这一类重复性太高的就不适合做索引
mongos> db.user.createIndex({"id":1})   //以”id“为索引

mongodb分片

(5)启用表分片
mongos> sh.shardCollection("python.user",{"id":1})

mongodb分片

(6)查看分片情况
mongos> sh.status()

mongodb分片
mongodb分片

(7)手动添加分片服务器,查看分片情况是否发生变化
use admin
sh.addShard("shard3/192.168.80.100:27003,192.168.80.101:27003,192.168.80.102:27003")

mongodb分片
 

sh.status()
服务器又对数据进行重新分片,当你再次移除一个分片服务器,此时又会对数据再次进行分片处理,MongoDB对数据的处理非常灵活

mongodb分片
mongodb分片

小结:
config server    复制集configs     分片:configsvr
 
存储节点:
shard1     复制集:shard1  ,分片:shardsvr
shard2       复制集:shard2  ,分片:shardsvr
shard3       复制集:shard3,分片:shardsvr
 
mongos,路由选择功能
不可以存放数据,只能去连接各种节点

转载于:https://blog.51cto.com/14158297/2348999

相关文章:

  • 某些编程语言更容易出错?研究人员提出质疑
  • 通过npm或yarn自动生成vue组件
  • EOS是什么
  • 互联网大厂Java面试题:使用无界队列的线程池会导致内存飙升吗?
  • App Store 隐私政策网址(URL)
  • 企业级java springboot b2bc商城系统开源源码二次开发(十六)用restTemplate消费服务...
  • GraphQL 官方自述文档(翻译)
  • 网页视频流m3u8/ts视频下载
  • OS开发基础——多线程的简单应用
  • 阿里云ACE认证学习知识点梳理
  • 二、flask配置与应用-flask
  • Linux下的计算器(bc、expr、dc、echo、awk)知多少?
  • CH2601 电路维修(双端队列bfs)建图恶心
  • 新书推荐|Windows黑客编程技术详解
  • 大主子表关联的性能优化方法
  • 【跃迁之路】【669天】程序员高效学习方法论探索系列(实验阶段426-2018.12.13)...
  • CAP 一致性协议及应用解析
  • Github访问慢解决办法
  • Java超时控制的实现
  • JS+CSS实现数字滚动
  • JS实现简单的MVC模式开发小游戏
  • JS专题之继承
  • REST架构的思考
  • SSH 免密登录
  • 百度地图API标注+时间轴组件
  • 从重复到重用
  • 聊聊flink的BlobWriter
  • 体验javascript之美-第五课 匿名函数自执行和闭包是一回事儿吗?
  • 跳前端坑前,先看看这个!!
  • 吴恩达Deep Learning课程练习题参考答案——R语言版
  • 小程序开发之路(一)
  • 延迟脚本的方式
  • d²y/dx²; 偏导数问题 请问f1 f2是什么意思
  • PostgreSQL之连接数修改
  • ​渐进式Web应用PWA的未来
  • # Swust 12th acm 邀请赛# [ A ] A+B problem [题解]
  • #数学建模# 线性规划问题的Matlab求解
  • #预处理和函数的对比以及条件编译
  • (1) caustics\
  • (17)Hive ——MR任务的map与reduce个数由什么决定?
  • (c语言版)滑动窗口 给定一个字符串,只包含字母和数字,按要求找出字符串中的最长(连续)子串的长度
  • (个人笔记质量不佳)SQL 左连接、右连接、内连接的区别
  • (企业 / 公司项目)前端使用pingyin-pro将汉字转成拼音
  • (四)linux文件内容查看
  • (算法)Travel Information Center
  • (一)UDP基本编程步骤
  • (转) Face-Resources
  • .FileZilla的使用和主动模式被动模式介绍
  • .NET Core 实现 Redis 批量查询指定格式的Key
  • .NET MVC、 WebAPI、 WebService【ws】、NVVM、WCF、Remoting
  • .net2005怎么读string形的xml,不是xml文件。
  • .netcore 获取appsettings
  • .netcore 如何获取系统中所有session_ASP.NET Core如何解决分布式Session一致性问题
  • /etc/fstab 只读无法修改的解决办法
  • @Bean注解详解