2018年09月15日 11:11:42 Calon Mo 阅读数 3994前端
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处连接和本声明。linux
本文连接:http://www.javashuo.com/article/p-bmqjcvkr-cs.htmlmongodb
搭建以前先了解一下MongoDB分片群集主要有以下三个组件:数据库
系统环境vim
Centos7.五、MongoDB4.0.二、关闭防火墙。bash
IP | 路由服务端口 | 配置服务端口 | 分片1端口 | 分片2端口 | 分片3端口 |
10.211.55.3 | 27017 | 27018 | 27001 | 27002 | 27003 |
10.211.55.4 | 27017 | 27018 | 27001 | 27002 | 27003 |
10.211.55.5 | 27017 | 27018 | 27001 | 27002 | 27003 |
三台机器的配置服务(27018)造成复制集,分片一、二、3也在各机器都部署一个实例,它们之间造成复制集,客户端直接链接3个路由服务与之交互,配置服务和分片服务对客户端是透明的。服务器
服务器的安装及配置(3台服务器执行相同操做)app
一、下载解压MongoDB分布式
到MongoDB官网下载:https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.0.2.tgzspa
解压到/home/mongodb,设置环境变量:
export PATH=$PATH:/home/mongodb/bin
保存后执行:
srouce /etc/profile
二、建立路由、配置、分片等的相关目录与文件
启动配置文件存放的文件夹:mkdir -p /home/mongodb/conf
配置服务数据存放目录:mkdir -p /home/mongodb/data/config
分片1服务数据存放目录:mkdir -p /home/mongodb/data/shard1
分片2服务数据存放目录:mkdir -p /home/mongodb/data/shard2
分片3服务数据存放目录:mkdir -p /home/mongodb/data/shard3
配置服务日志存放文件:mkdir -p /home/mongodb/log/config.log
路由服务日志存放文件:mkdir -p /home/mongodb/log/mongos.log
分片1服务日志存放文件:mkdir -p /home/mongodb/log/shard1.log
分片2服务日志存放文件:mkdir -p /home/mongodb/log/shard2.log
分片3服务日志存放文件:mkdir -p /home/mongodb/log/shard3.log
配置服务器部署(3台服务器执行相同操做)
一、在/home/mongodb/conf目录建立config.conf:
dbpath=/home/mongodb/data/config
logpath=/home/mongodb/log/config.log
port=27018
logappend=true
fork=true
maxConns=5000
#复制集名称
replSet=configs
#置参数为true
configsvr=true
#容许任意机器链接
bind_ip=0.0.0.0
二、配置复制集
分别启动三台服务器的配置服务:
mongod -f /home/mongodb/conf/config.conf
链接mongo,只需在任意一台机器执行便可:
mongo --host 10.211.55.3 --port 27018
切换数据库:
use admin
初始化复制集:
rs.initiate({_id:"configs",members:[{_id:0,host:"10.211.55.3:27018"},{_id:1,host:"10.211.55.4:27018"}, {_id:2,host:"10.211.55.5:27018"}]})
其中_id:"configs"的configs是上面config.conf配置文件里的复制集名称,把三台服务器的配置服务组成复制集。
查看状态:
rs.status()
等几十秒左右,执行上面的命令查看状态,三台机器的配置服务就已造成复制集,其中1台为PRIMARY,其余2台为SECONDARY。
分片服务部署(3台服务器执行相同操做)
一、在/home/mongodb/conf目录建立shard1.conf、shard2.conf、shard3.conf,内容以下:
dbpath=/home/mongodb/data/shard1 #其余2个分片对应修改成shard二、shard3文件夹
logpath=/home/mongodb/log/shard1.log #其余2个分片对应修改成shard2.log、shard3.log
port=27001 #其余2个分片对应修改成2700二、27003
logappend=true
fork=true
maxConns=5000
storageEngine=mmapv1
shardsvr=true
replSet=shard1 #其余2个分片对应修改成shard二、shard3
bind_ip=0.0.0.0
端口分别是2700一、2700二、27003,分别对应shard1.conf、shard2.conf、shard3.conf。
还有数据存放目录、日志文件这几个地方都须要对应修改。
在3台机器的相同端口造成一个分片的复制集,因为3台机器都须要这3个文件,因此根据这9个配置文件分别启动分片服务:
mongod -f /home/mongodb/conf/shard{1/2/3}.conf
二、将分片配置为复制集
链接mongo,只需在任意一台机器执行便可:
mongo --host 10.211.55.3 --port 27001 //这里以shard1为例,其余两个分片则再需对应链接到2700二、27003的端口进行操做便可
切换数据库:
use admin
初始化复制集:
rs.initiate({_id:"shard1",members:[{_id:0,host:"10.211.55.3:27001"},{_id:1,host:"10.211.55.4:27001"},{_id:2,host:"10.211.55.5:27001"}]})
以上是基于分片1来操做,同理,其余2个分片也要连到各自的端口来执行一遍上述的操做,让3个分片各自造成1主2从的复制集,注意端口及仲裁节点的问题便可,操做完成后3个分片都启动完成,并完成复制集模式。
路由服务部署(3台服务器执行相同操做)
一、在/home/mongodb/conf目录建立mongos.conf,内容以下:
logpath=/home/mongodb/log/mongos.log
logappend = true
port = 27017
fork = true
configdb = configs/10.211.55.3:27018,10.211.55.4:27018,10.211.55.5:27018
maxConns=20000
bind_ip=0.0.0.0
二、启动mongos
分别在三台服务器启动:
mongos -f /home/mongodb/conf/mongos.conf
三、启动分片功能
链接mongo:
mongo --host 10.211.55.3 --port 27017
切换数据库:
use admin
添加分片,只需在一台机器执行便可:
sh.addShard("shard1/10.211.55.3:27001,10.211.55.4:27001,10.211.55.5:27001")
sh.addShard("shard2/10.211.55.3:27002,10.211.55.4:27002,10.211.55.5:27002")
sh.addShard("shard3/10.211.55.3:27003,10.211.55.4:27003,10.211.55.5:27003")
查看集群状态:
sh.status()
四、实现分片功能
设置分片chunk大小
use config
db.setting.save({"_id":"chunksize","value":1}) # 设置块大小为1M是方便实验,否则须要插入海量数据
五、模拟写入数据
use calon
for(i=1;i<=50000;i++){db.user.insert({"id":i,"name":"jack"+i})} #模拟往calon数据库的user表写入5万数据
七、启用数据库分片
sh.enableSharding("calon")
八、建立索引,对表进行分片
db.user.createIndex({"id":1}) # 以"id"做为索引
sh.shardCollection("calon.user",{"id":1}) # 根据"id"对user表进行分片
sh.status() # 查看分片状况
到此,MongoDB分布式集群就搭建完毕。
vim /etc/rc.d/rc.local
#!/bin/bash
export PATH=$PATH:/data/mongodb/bin
mongod -f /data/mongodb/conf/config.conf
mongod -f /data/mongodb/conf/shard1.conf
mongod -f /data/mongodb/conf/shard2.conf
mongod -f /data/mongodb/conf/shard3.conf
mongos -f /data/mongodb/conf/mongos.conf
设置开机自动启动
vim /data/mongodb/conf/config.conf
dbpath=/data/mongodb/data/config
logpath=/data/mongodb/log/config.log/config.log
port=27018
logappend=true
fork=true
maxConns=5000
#复制集名称
replSet=configs
#置参数为true
configsvr=true
#容许任意机器链接
bind_ip=0.0.0.0
auth = true
keyFile=/data/mongodb/testKeyFile.file
setParameter=enableLocalhostAuthBypass=1
vim /data/mongodb/conf/shard1.conf
dbpath=/data/mongodb/data/shard1 #其余2个分片对应修改成shard二、shard3文件夹
logpath=/data/mongodb/log/shard1.log #其余2个分片对应修改成shard2.log、shard3.log
port=27001 #其余2个分片对应修改成2700二、27003
logappend=true
fork=true
maxConns=5000
storageEngine=mmapv1
shardsvr=true
replSet=shard1 #其余2个分片对应修改成shard二、shard3
bind_ip=0.0.0.0
auth = true
keyFile=/data/mongodb/testKeyFile.file
vim /data/mongodb/conf/shard2.conf
dbpath=/data/mongodb/data/shard2 #其余2个分片对应修改成shard二、shard3文件夹
logpath=/data/mongodb/log/shard2.log #其余2个分片对应修改成shard2.log、shard3.log
port=27002 #其余2个分片对应修改成2700二、27003
logappend=true
fork=true
maxConns=5000
storageEngine=mmapv1
shardsvr=true
replSet=shard2 #其余2个分片对应修改成shard二、shard3
bind_ip=0.0.0.0
auth = true
keyFile=/data/mongodb/testKeyFile.file
vim /data/mongodb/conf/shard3.conf
dbpath=/data/mongodb/data/shard3 #其余2个分片对应修改成shard二、shard3文件夹
logpath=/data/mongodb/log/shard3.log #其余2个分片对应修改成shard2.log、shard3.log
port=27003 #其余2个分片对应修改成2700二、27003
logappend=true
fork=true
maxConns=5000
storageEngine=mmapv1
shardsvr=true
replSet=shard3 #其余2个分片对应修改成shard二、shard3
bind_ip=0.0.0.0
#auth = true
keyFile=/data/mongodb/testKeyFile.file
vim /data/mongodb/conf/mongos.conf
logpath=/data/mongodb/log/mongos.log
logappend = true
port = 27017
fork = true
keyFile=/data/mongodb/testKeyFile.file
configdb = configs/192.168.1.228:27018,192.168.30.229:27018,192.168.30.204:27018,192.168.30.227:27018
maxConns=20000