部署monggodb副本集分片集群

        分片技术,可以满足MongoDB数据量大量增长的需求。当MongoDB存储海量的数据时,一台机器可能不足以存储数据,也可能不足以提供可接受的读写吞吐量。这时,我们就可以通过在多台机器上分割数据,使得数据库系统能存储和处理更多的数据。

上图中主要有如下所述三个主要组件:

Shard:用于存储实际的数据块,实际生产环境中一个shard server角色可由几台机器组个一个replica set承担,防止主机单点故障

Config Server:mongod实例,存储了整个 ClusterMetadata,其中包括 chunk信息。

Query Routers:前端路由,客户端由此接入,且让整个集群看上去像单一数据库,前端应用可以透明使用。

部署monggodb三节点分片集群

首先修改主机名

192.168.197.136    hostnamectl set-hostname monggodb-1

192.168.197.137    hostnamectl set-hostname monggodb-2

192.168.197.138   hostnamectl set-hostname monggodb-3

安装monggodb(三个节点都做)

wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-5.0.18.tgz --no-check-certificate

tar -zxvf mongodb-linux-x86_64-rhel70-5.0.18.tgz  解压安装包

mv mongodb-linux-x86_64-rhel70-5.0.18 /data/mongodb  移动到指定目录

配置环境变量

vim /etc/profile    最底部添加

MONGODB_HOME=/data/mongodb

export PATH=$PATH:$MONGODB_HOME/bin

source /etc/profile

创建数据库目录

mkdir /data/mongodb/{data,data-2,log}   数据存储目录,日志存储目录

部署config server(三台机器都操作)

mkdir /data/mongodb/config

启动config serve

mongod --bind_ip localhost,192.168.197.136 --configsvr --replSet config --dbpath /data/mongodb/config/ --logpath /data/mongodb/log/config.log --fork --port 27000

mongod --bind_ip localhost,192.168.197.137 --configsvr --replSet config --dbpath /data/mongodb/config/ --logpath /data/mongodb/log/config.log --fork --port 27000

mongod --bind_ip localhost,192.168.197.138 --configsvr --replSet config --dbpath /data/mongodb/config/ --logpath /data/mongodb/log/config.log --fork --port 27000

mongo --host 192.168.197.136 --port 27000   登录到136创建config的副本集

rs.initiate( { _id: "config", configsvr: true, members: [ { _id : 0, host : "192.168.197.136:27000" }, { _id : 1, host : "192.168.197.137:27000" }, { _id : 2, host : "192.168.197.138:27000" } ] } )

创建完成后查看一下副本集状态    rs.status()

可以看到stateStr状态栏有1个 PRIMARY角色 和 2个 SECONDARY角色集群创建正常,如果是三个SECONDARY角色可以退出mongo重新登录在查看一下。

启动分片集群实例(三个节点都操作)

136节点操作

mongod --bind_ip localhost,192.168.197.136 --shardsvr --replSet mongodb --dbpath /data/mongodb/data/ --logpath /data/mongodb/log/mongod.log --fork  --port 27027

mongod --bind_ip localhost,192.168.197.136 --shardsvr --replSet mongodb-2 --dbpath /data/mongodb/data-2/ --logpath /data/mongodb/log/mongod-2.log --fork  --port 27028

137节点操作

mongod --bind_ip localhost,192.168.197.137 --shardsvr --replSet mongodb --dbpath /data/mongodb/data/ --logpath /data/mongodb/log/mongod.log --fork  --port 27027

mongod --bind_ip localhost,192.168.197.137 --shardsvr --replSet mongodb-2 --dbpath /data/mongodb/data-2/ --logpath /data/mongodb/log/mongod-2.log --fork  --port 27028

138节点操作

mongod --bind_ip localhost,192.168.197.138 --shardsvr --replSet mongodb --dbpath /data/mongodb/data/ --logpath /data/mongodb/log/mongod.log --fork  --port 27027

mongod --bind_ip localhost,192.168.197.138 --shardsvr --replSet mongodb-2 --dbpath /data/mongodb/data-2/ --logpath /data/mongodb/log/mongod-2.log --fork  --port 27028

mongo --host 192.168.197.136 --port 27027   登录到136创建mongodb的副本集1

rs.initiate( { _id: "mongodb", members: [ { _id : 0, host : "192.168.197.136:27027" }, { _id : 1, host : "192.168.197.137:27027" }, { _id : 2, host : "192.168.197.138:27027" } ] } )

创建完成后查看一下副本集状态    rs.status()

可以看到1个 PRIMARY角色 和 2个 SECONDARY角色集群创建正常,如果是三个SECONDARY角色可以退出mongo重新登录在查看一下。

mongo --host 192.168.197.136 --port 27028   登录到136创建mongodb-2的副本集

rs.initiate( { _id: "mongodb-2", members: [ { _id : 0, host : "192.168.197.136:27028" }, { _id : 1, host : "192.168.197.137:27028" }, { _id : 2, host : "192.168.197.138:27028" } ] } )

创建完成后查看一下副本集状态    rs.status()

看到1个 PRIMARY角色 和 2个 SECONDARY角色集群创建正常,如果是三个SECONDARY角色可以退出mongo重新登录在查看一下。

为分片集群启动mongos(在136节点操作

mkdir mongos   创建数据存储目录

vim /data/mongodb/mongos/mongod.conf  创建monggodb的配置文件添加一些参数

net:

  port: 27017 #monggodb使用的端口

  bindIp: 0.0.0.0 #支持任意ipv4地址访问

  ipv6: true #开启ipv6

启动 mongos 指定之前部署的 config 副本集

mongos --configdb config/192.168.197.136:27000,192.168.197.137:27000,192.168.197.138:27000 --config /data/mongodb/mongos/mongod.conf  --logpath /data/mongodb/log/mongos.log --fork --port 27017

连接分片集群  mongo --host 192.168.197.136 --port 27017

将分片添加到集群

sh.addShard( "mongodb/192.168.197.136:27027,192.168.197.137:27027,192.168.197.138:27027")

sh.addShard( "mongodb-2/192.168.197.136:27028,192.168.197.138:27028,192.168.197.138:27028")

如果有多个分片可以重复此步骤

use test

sh.enableSharding("test")    给test库启动分片

sh.shardCollection("test.userid", {_id: "hashed" } )   根据"_id"字段做 hash 分片 

sh.status();     查看分片详情

database._id 表示开启分片的库。

database.primary 表示主 shard。

database.partitioned 表示这个库是否开启分片,true 表示开启。

collections 中表示分片的表。

collections.shardKey 表示分片健。

collections.balancing 为 true 表示平衡。

collections.chunks 数据分布情况。

use test      测试插入数据

for (var i=1; i<=10; i++ ) db.userid.save({userid:i,username:'a'});

插入完数据库来到136的两个主节点查看一下数据是否已经分片存储

mongo --host 192.168.197.136 --port 27027

mongo --host 192.168.197.136 --port 27028

可以看到输入的数据分别存储到了两个分片当中,到这里我们的分片集群就做好了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值