Mongodb分布式分片集群安装和理解
来源:互联网 发布:跆拳道教练怎么样 知乎 编辑:程序博客网 时间:2024/05/17 08:54
基础概念理解
mongodb是一种将海量的数据水平扩展的数据库集群系统,数据分表存储在sharding的各个节点上,使用者通过简单的配置就可以很方便地构建一个分布式MongoDB集群。
MongoDB的数据分块称为 chunk。每个 chunk 都是 Collection 中一段连续的数据记录,通常最大尺寸是 200MB(默认64MB),超出则生成新的数据块。Shard Server
Shard Server是实际存储数据的分片,每个Shard可以是一个mongod实例,也可以是一组mongod实例构成的Replica Set。为了实现每个Shard内部的auto-failover,MongoDB官方建议每个Shard为一组Replica Set。关于如何安装及搭建replica set请参考我的另一篇文章 http://gong1208.iteye.com/blog/1558355
Config Server
为了将一个特定的collection存储在多个shard中,需要为该collection指定一个shard key,例如{age: 1} ,shard key可以决定该条记录属于哪个chunk。Config Servers就是用来存储:所有shard节点的配置信息、每个chunk的shard key范围、chunk在各shard的分布情况、该集群中所有DB和collection的sharding配置信息。
Route Process
这是一个前端路由,客户端由此接入,然后询问Config Servers需要到哪个Shard上查询或保存记录,再连接相应的Shard进行操作,最后将结果返回给客户端。客户端只需要将原本发给mongod的查询或更新请求原封不动地发给Routing Process,而不必关心所操作的记录存储在哪个Shard上。Mongod分布式分片集群(sharding cluster)配置
(一) 添加用户
#查看用户列表
cat /etc/passwd|grep -v nologin|grep -vhalt|grep -v shutdown|awk -F":" '{ print$1"|"$3"|"$4 }'|more
#若不存在mongodb用户,则添加用户groupadd mongodb
useradd -g mongodb mongodb
passwd mongodb
输入新密码
(二)安装monodb软件
cd /usr
mkdir mongodb
chown -R mongodb:mongodb mongodb 这里需要把安装文件的权限赋给mongodb
su mongodb 进入mongodb用户
cd mongodb
tar -zxvf mongodb-linux-x86_64-rhel62-3.0.7.tgz 解压文件
mv mongodb-linux-x86_64-rhel62-3.0.7 mongodb_3.0.7 重命名
(三)创建monodb分布式分片集群所需的数据目录
端口
192.168.167.170(Server1)
192.168.167.171Server1)
192.168.167.172Server1)
安装文件
mongodb_3.0.7
mongodb-linux-x86_64-rhel62-3.0.7.tgz
mongodb_3.0.7
mongodb_3.0.7
config server
20000
config/config.log config/data
左同
左同
mongos server
21000
mongos/mongos.log
左同
左同
Shard server 1
27017
Shard11
Shard11.log
Shard12
Shard12.log
Shard13
shard13.log
Shard server 2
27018
Shard21
Shard21.log
Shard22
Shard22.log
Shard23
Shard23.log
Shard server 3
27019
Shard31
Shard31.log
Shard32
Shard32.log
Shard33
Shard33.log
(一)配置config server
#三台机器分别 启动【config server】
/diskd/mongodb/mongodb_3.0.7/bin/mongod--configsvr --dbpath /diskd/mongodb/config/data --port 21000 --logpath /diskd/mongodb/config/config.log--logappend --fork
(二)配置mongos
#三台机器分别 启动【mongos server】
/diskd/mongodb/mongodb_3.0.7/bin/mongos--configdb 192.168.167.170:21000,192.168.167.171:21000,192.168.167.172:21000--port 20000 --logpath /diskd/mongodb/mongos/mongos.log --logappend --fork
注:路由服务器不需要数据目录,但是一定要指明配置服务器的位置。
(三)配置副本集(replica sets)
#在每个机器里分别设置分片1服务器及副本集shard1
【分片1】
#配置分片1(shard1)用到的replicasets,即将三台机器的端口27017对应的mongodb实例,设置成分片(shard server1)的副本集(replica sets)。
Server1:
/diskd/mongodb/mongodb_3.0.7/bin/mongod--shardsvr --replSet shard1--port 27017 --dbpath /diskd/mongodb/shard11 --oplogSize 2048 --logpath /diskd/mongodb/shard11.log--logappend --fork
详解:
--replSet指定了复制集名字,通过该选项可以将不同的实例放在同一个复制集中。上面添加了两个实例,当然可以添加多个实例。启动复制集但还不可用,需要进行初始化。
Server2:
/diskd/mongodb/mongodb_3.0.7/bin/mongod--shardsvr --replSet shard1--port 27017--dbpath /diskd/mongodb/shard12 --oplogSize 2048 --logpath /diskd/mongodb/shard12.log --logappend --fork
Server3:
/diskd/mongodb/mongodb_3.0.7/bin/mongod--shardsvr --replSet shard1--port 27017--dbpath /diskd/mongodb/shard13 --oplogSize 2048 --logpath /diskd/mongodb/shard13.log --logappend --fork
#初始化副本集
/diskd/mongodb/mongodb_3.0.7/bin/mongo--port 27017 //非集群方式登录
(1) 定义副本集配置变量
> config = {_id: 'shard1', members: [
{_id: 0, host:'192.168.167.170:27017'},
{_id: 1, host:'192.168.167.171:27017'},
{_id: 2, host:'192.168.167.172:27017'}]
}
(2) 初始化副本集配置
> rs.initiate(config);
{ "ok" : 1 }
shard1:OTHER> 出现这,则正确
shard1:PRIMARY> quit()
(3) 日志中查看主节点、从节点;
或者三台机器分别登录mongod实例
./mongo –port 27017 查看该机器启动的mongod实例是主节点,还是从节点
(4) #查看集群节点的状态
db.status();
【分片2】配置分片2(shard2)用到的replica sets
Server1:
/diskd/mongodb/mongodb_3.0.7/bin/mongod--shardsvr --replSet shard2 --port27018--dbpath /diskd/mongodb/shard21 --oplogSize 2048 --logpath /diskd/mongodb/shard21.log--logappend --fork
Server2:
/diskd/mongodb/mongodb_3.0.7/bin/mongod--shardsvr --replSet shard2--port27018--dbpath /diskd/mongodb/shard22 --oplogSize 2048 --logpath /diskd/mongodb/shard22.log--logappend --fork
Server3:
/diskd/mongodb/mongodb_3.0.7/bin/mongod--shardsvr --replSet shard2--port27018--dbpath /diskd/mongodb/shard23 --oplogSize 2048 --logpath /diskd/mongodb/shard23.log--logappend --fork
#初始化副本集
/diskd/mongodb/mongodb_3.0.7/bin/mongo--port 27018
> config = {_id: 'shard2', members: [
{_id: 0, host:'192.168.167.170:27018'},
{_id: 1, host:'192.168.167.171:27018'},
{_id: 2, host: '192.168.167.172:27018'}]
}
> rs.initiate(config);
{ "ok" : 1 }
shard2:SECONDARY> quit();
【分片3】配置分片3(shard3)用到的replica sets
Server1:制定shard服务器
/diskd/mongodb/mongodb_3.0.7/bin/mongod--shardsvr --replSet shard3 --port 27019 --dbpath /diskd/mongodb/shard31 --oplogSize 2048 --logpath /diskd/mongodb/shard31.log--logappend --fork
Server2:
/diskd/mongodb/mongodb_3.0.7/bin/mongod--shardsvr --replSet shard3 --port 27019 --dbpath /diskd/mongodb/shard32 --oplogSize 2048 --logpath /diskd/mongodb/shard32.log--logappend --fork
Server3:
/diskd/mongodb/mongodb_3.0.7/bin/mongod--shardsvr --replSet shard2--port27018--dbpath /diskd/mongodb/shard23 --oplogSize 2048 --logpath /diskd/mongodb/shard23.log--logappend --fork
【设置成功分片前,不能进行任务数据库操作,包括类似use admin操作】
初始化副本集
登录mongo use admin
/diskd/mongodb/mongodb_3.0.7/bin/mongo--port 27019
定义副本集配置变量
> config = {_id: 'shard3', members: [
{_id: 0, host:'192.168.167.170:27019'},
{_id: 1, host:'192.168.167.171:27019'},
{_id: 2, host:'192.168.167.172:27019'}]
}
初始化副本集配置
> rs.initiate(config);
{ "ok" : 1 }
日志中查看主节点、从节点
shard3:OTHER>
#查看集群节点的状态
rs.status();
#配置分片集群
连接到其中一个mongos进程,并切换到admin数据库做以下配置
1. 连接到mongs,并切换到admin
/diskd/mongodb/mongodb_3.0.7/bin/mongo192.168.167.170:20000/admin
>db
Admin
2. 串联路由服务器与分配副本集 【通过addshard添加分片。MongoDB会负责将分片集成到集群】
#串联路由服务器与分配副本集1 30G数据
>db.runCommand({addshard:"shard1/192.168.167.170:27017,192.168.167.171:27017,192.168.167.172:27017",name:"s1", maxsize:30720});
#串联路由服务器与分配副本集2
>db.runCommand({addshard:"shard2/192.168.167.170:27018,192.168.167.171:27018,192.168.167.172:27018",name:"s2",maxsize:30720});
#串联路由服务器与分配副本集3
>db.runCommand({addshard:"shard3/192.168.167.170:27019,192.168.167.171:27019,192.168.167.172:27019",name:"s3",maxsize:30720});
注意:在添加第二个shard时,出现error:test database 已经存在的错误,这里用mongo命令连接到第二个replica set,1) use test ; 2) db.dropDatabase();命令把test数据库给删除然后就可加入
3. 可选参数
Name:用于指定每个shard的名字,不指定的话系统将自动分配
maxSize:指定各个shard可使用的最大磁盘空间,单位megabytes
4. Listing shards 查看分片服务器的配置
>db.runCommand( { listshards : 1 } )
如果列出了以上3个你加的shards,表示shards已经配置成功
5. 激活数据库分片
#指定testdb分片生效
db.runCommand( { enablesharding :"statistics"});
#指定数据库里需要分片的集合和片键
db.runCommand( { shardcollection : "statistics.total",key:{date:1,adver_id:1} } )
- Mongodb分布式分片集群安装和理解
- MongoDB 分片集群理解图
- mongodb分布式集群部署,集群分片策略
- mongodb分布式集群部署,集群分片策略
- 安装mongodb副本分片集群
- MongoDB分片>集群组件>分片
- Mongodb 集群分片部署
- MongoDB 分片集群
- 配置MongoDB集群分片
- 配置MongoDB集群分片
- mongodb分片集群设计方案
- 配置MongoDB集群分片
- MongoDB主从/集群/分片
- MongoDB分片集群实战
- MongoDB集群之分片
- mongodb(5)-分片集群
- MongoDB 分片集群搭建
- mongodb集群搭建-分片
- Linux下编译FFmpeg
- Python线程类首先是一个类
- 10012---jQuery--jQuery DOM 操作-捕获
- CI图像处理类的使用
- codeforces 416B Art Union
- Mongodb分布式分片集群安装和理解
- 51nod 1402 最大值 (模拟)
- git remote add Mycat https://github.com/MyCATApache/Mycat-Server.git
- 我的第一次博客
- cookie和session
- 笔试题
- 。。
- 手贱做空
- ulimit -c unlimited