笔记14:MongoDB分片集群Shard Cluster搭建
Posted Lossdate
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了笔记14:MongoDB分片集群Shard Cluster搭建相关的知识,希望对你有一定的参考价值。
一、简介
分片(sharding)是MongoDB用来将大型集合水平分割到不同服务器(或者复制集)上所采用的方法。
不需要功能强大的大型计算机就可以存储更多的数据,处理更大的负载。
分片集群由以下3个服务组成:
- Shards Server: 每个shard由一个或多个mongod进程组成,用于存储数据。
- Router Server:
数据库集群的请求入口,所有请求都通过Router(mongos)进行协调,不需要在应用程
序添加一个路由选择器,Router(mongos)就是一个请求分发中心它负责把应用程序的请求转发到对应的 Shard服务器上。 - Config Server: 配置服务器。存储所有数据库元信息(路由、分片)的配置。
二、配置 并启动config节点集群
-
解压并重命名MongoDB
tar -zxvf mongodb-linux-x86_64-rhel70-4.4.5.tgz mv mongodb-linux-x86_64-rhel70-4.4.5 shard_cluster
-
进入并创建目录
cd shard_cluster/ mkdir config
-
进入config创建log目录
cd config mkdir config1 logs
-
创建配置服务器配置config-17017.conf
vi config-17017.conf
# 数据库文件位置 dbpath=config/config1 #日志文件位置 logpath=config/logs/config1.log # 以追加方式写入日志 logappend=true # 是否以守护进程方式运行 fork = true bind_ip=0.0.0.0 port = 17017 # 表示是一个配置服务器 configsvr=true #配置服务器副本集名称 replSet=configsvr
-
启动
cd ../ ./bin/mongod -f config/config-17017.conf
-
配置集群其它两个节点
cd config/ mkdir config2 mkdir config3 cp config-17017.conf config-17018.conf cp config-17017.conf config-17019.conf
# 数据库文件位置 dbpath=config/config2 #日志文件位置 logpath=config/logs/config2.log # 以追加方式写入日志 logappend=true # 是否以守护进程方式运行 fork = true bind_ip=0.0.0.0 port = 17018 # 表示是一个配置服务器 configsvr=true #配置服务器副本集名称 replSet=configsvr
# 数据库文件位置 dbpath=config/config3 #日志文件位置 logpath=config/logs/config3.log # 以追加方式写入日志 logappend=true # 是否以守护进程方式运行 fork = true bind_ip=0.0.0.0 port = 17019 # 表示是一个配置服务器 configsvr=true #配置服务器副本集名称 replSet=configsvr
-
启动配置服务
cd ../ ./bin/mongod -f config/config-17018.conf ./bin/mongod -f config/config-17019.conf
-
进入任意节点的mongo shell 并添加配置节点集群,这里要注意 use admin
./bin/mongo --port 17017 use admin var cfg ="_id":"configsvr", "members":[ "_id":1,"host":"192.168.200.103:17017", "_id":2,"host":"192.168.200.103:17018", "_id":3,"host":"192.168.200.103:17019" ] ; rs.initiate(cfg) #查看状态 rs.status()
三、配置shard1集群
shard1集群搭建37017到37019
-
新建目录
cd shard_cluster/ mkdir shard cd shard mkdir shard1 shard2 cd shard1 mkdir shard1-37017 shard1-37018 shard1-37019
-
创建配置文件
vi shard1-37017.conf
dbpath=shard/shard1/shard1-37017 bind_ip=0.0.0.0 port=37017 fork=true logpath=shard/shard1/shard1-37017.log replSet=shard1 shardsvr=true
vi shard1-37018.conf
dbpath=shard/shard1/shard1-37018 bind_ip=0.0.0.0 port=37018 fork=true logpath=shard/shard1/shard1-37018.log replSet=shard1 shardsvr=true
vi shard1-37019.conf
dbpath=shard/shard1/shard1-37019 bind_ip=0.0.0.0 port=37019 fork=true logpath=shard/shard1/shard1-37019.log replSet=shard1 shardsvr=true
-
启动
./bin/mongod -f shard/shard1/shard1-37017.conf ./bin/mongod -f shard/shard1/shard1-37018.conf ./bin/mongod -f shard/shard1/shard1-37019.conf
-
进行集群配置
./bin/mongo --port 37017 var cfg ="_id":"shard1", "protocolVersion" : 1, "members":[ "_id":1,"host":"192.168.200.103:37017", "_id":2,"host":"192.168.200.103:37018", "_id":3,"host":"192.168.200.103:37019" ] ; rs.initiate(cfg) rs.status()
四、配置shard2集群
shard2集群搭建47017到47019
配置和shard1大致
-
创建配置文件
cd shard/shard2 mkdir shard2-47017 shard2-47018 shard2-47019 mkdir logs vi shard2-47017.conf
dbpath=shard/shard2/shard2-47017 bind_ip=0.0.0.0 port=47017 fork=true logpath=shard/shard2/logs/shard2-47017.log replSet=shard2 shardsvr=true
vi shard2-47018.conf
dbpath=shard/shard2/shard2-47018 bind_ip=0.0.0.0 port=47018 fork=true logpath=shard/shard2/logs/shard2-47018.log replSet=shard2 shardsvr=true
vi shard2-47019.conf
dbpath=shard/shard2/shard2-47019 bind_ip=0.0.0.0 port=47019 fork=true logpath=shard/shard2/logs/shard2-47019.log replSet=shard2 shardsvr=true
-
启动
cd ../../ ./bin/mongod -f shard/shard2/shard2-47017.conf ./bin/mongod -f shard/shard2/shard2-47018.conf ./bin/mongod -f shard/shard2/shard2-47019.conf
-
进行集群配置
./bin/mongo --port 47017 var cfg ="_id":"shard2", "protocolVersion" : 1, "members":[ "_id":1,"host":"192.168.200.103:47017", "_id":2,"host":"192.168.200.103:47018", "_id":3,"host":"192.168.200.103:47019" ] ; rs.initiate(cfg) rs.status()
五、配置和启动路由节点
-
新建目录
cd shard_cluster/ mkdir route/logs -p
-
进入route目录,新建配置文件
cd route vi route-27017.conf
port=27017 bind_ip=0.0.0.0 fork=true logpath=route/logs/route.log configdb=configsvr/192.168.200.103:17017,192.168.200.103:17018,192.168.200.103:17019
-
启动路由
cd ../ ./bin/mongos -f route/route-27017.conf
-
进入mongos
./bin/mongo --port 27017
-
查看分片节点状态
sh.status()
-
向路由中添加分片集群shard1和shard2
sh.addShard("shard1/192.168.200.103:37017,192.168.200.103:37018,192.168.200.103:37019"); sh.addShard("shard2/192.168.200.103:47017,192.168.200.103:47018,192.168.200.103:47019"); sh.status()
-
开启数据库和集合分片(指定片键)
为数据库开启分片功能sh.enableSharding("lossdate_test")
为指定集合开启分片功能
sh.shardCollection(“lossdate_test.lossdate_test_datas”,“片键字段名如 name”:索引说明)sh.shardCollection("lossdate_test.lossdate_test_datas","name":"hashed")
-
向集合中插入数据测试
use lossdate_test;
通过切换到shard1和shard2查看是否同步
show dbs
最后通过路由循环向集合中添加数for(var i = 1; i <= 1000; i ++) db.lossdate_test_datas.insert( "name":"test" + i, salary:(Math.random()*20000).toFixed(2) );
六、验证
分别进入shard1和shard2进行查询验证分片
use lossdate_test
db.lossdate_test_datas.find()
shard1:
shard2:
七、安全认证
-
创建用户
开启安全认证之前, 进入路由
在admin创建管理员和在lossdate_test下创建普通用户#创建管理员 use admin db.createUser( user:"root", pwd:"123456", roles:[role:"root",db:"admin"] ) #创建普通用户 use lossdate_test db.createUser( user:"lossdate", pwd:"123456", roles:[role:"readWrite",db:"lossdate_test"] )
-
关闭所有的 配置节点 分片节点 和 路由节点
#安装psmisc yum install psmisc 命令 快速关闭多个进程 killall mongod killall mongo killall mongos
-
生成 密钥文件 并 修改权限
cd /usr/local/mongodb/shard_cluster/ mkdir data/mongodb -p openssl rand -base64 756 > data/mongodb/testKeyFile.file chmod 600 data/mongodb/testKeyFile.file
-
配置节点集群和分片节点集群,开启安全认证和指定密钥文件
在分别在config、shard1和shard2集群的配置文件中加上:auth=true keyFile=data/mongodb/testKeyFile.file
例:config-17017.conf config-17018.conf config-17019.conf
vi config/config-17017.conf ...
vi shard/shard1/shard1-37017.conf ...
vi shard/shard2/shard2-47017.conf ...
-
在路由配置文件中配置密钥文件
vi route/route-27017.conf
keyFile=data/mongodb/testKeyFile.file
-
启动所有的 配置节点、分片节点 和 路由节点 使用路由进行权限验证
编写一个shell脚本批量启动vi startup.sh
./bin/mongod -f config/config-17017.conf ./bin/mongod -f config/config-17018.conf ./bin/mongod -f config/config-17019.conf ./bin/mongod -f shard/shard1/shard1-37017.conf ./bin/mongod -f shard/shard1/shard1-37018.conf ./bin/mongod -f shard/shard1/shard1-37019.conf ./bin/mongod -f shard/shard2/shard2-47017.conf ./bin/mongod -f shard/shard2/shard2-47018.conf ./bin/mongod -f shard/shard2/shard2-47019.conf ./bin/mongos -f route/route-27017.conf
接着为startup.sh添加执行权限chmod +x startup.sh
最后执行脚本
./startup.sh
-
验证
进入路由节点./bin/mongo --port 27017
执行show dbs,不生效
接着验证管理员use admin db.auth("root","123456")
再执行show dbs,生效
退出,继续验证普通用户exit ./bin/mongo --port 27017 use lossdate_test db.auth("lossdate","123456")
-
Spring boot 连接安全认证的分片集群
配置:spring.data.mongodb.username=账号 spring.data.mongodb.password=密码 #spring.data.mongodb.uri=mongodb://账号:密码@IP:端口/数据库名
这里账号不要用root,容易出现授权失败
以上是关于笔记14:MongoDB分片集群Shard Cluster搭建的主要内容,如果未能解决你的问题,请参考以下文章
Elasticsearch学习笔记核心概念和分片shard机制