MongoDB分片集群部署

本文详细描述了如何在RedHat7环境中部署MongoDB的分片集群,包括configServers、shard1、shard2以及route的配置和初始化过程,以及如何添加shard节点到集群中。
摘要由CSDN通过智能技术生成

MongoDB分片集群部署

MongoDB分片集群介绍:

什么是 MongoDB 分片集群:

  • MongoDB 分片集群(Sharded Cluster)是对数据进行水平扩展的一种方
  • MongoDB 使用 分片集群 来支持大数据集和高吞吐量的业务场景。

为什么要使用分片集群:

副本集遇到的问题:

副本集(ReplicaSet) 帮助我们解决读请求扩展、高可用等问题。随着业务场景进一 步增长,可能会出现以下问题:

  • 存储容量超出单机磁盘容量
  • 活跃数据集超出单机内存容量:很多读请求需要从磁盘读取
  • 写入量超出单机 IOPS 上限

垂直扩容(Scale Up) VS ⽔平扩容(Scale Out):

  • 垂直扩容 : 用更好的服务器,提高 CPU 处理核数、内存数、带宽等
  • 水平扩容 : 将任务分配到多台计算机上

分片集群的基本架构:

  • Mongos
  • 分片集群的访问入口
    • 对请求进行路由、分发、合并
    • 部署多个 Mongos 来保证高可用
  • ConfigServer
  • 存储元信息和集群配置
    • 部署为副本集来保证高可用
  • Shard
  • 存储用户数据,不同 Shard 保存不同用户数据
    • 部署为副本集来保证高可用

服务规划:

由于设备问题,目前我们只采用了3个设备进行部署。3个设备同时部署config Servers,shard1,shard2,route。

该部署使用的Red Hat 7为例

前提工作

所有设备都要进行如下操作。

1.关闭防火墙

systemctl stop firewalld.service
systemctl disable firewalld.service

2.关闭SELinux

setenforce 0                   //临时关闭

vim /etc/selinux/config        //永久关闭

3.解压MongoDB包

注意选择对应的系统版本的MongoDB包,在这里我使用的是Centos7的环境,所以下载的也是rhel70的MongoDB

    tar -zxvf /opt/install/mongodb-linux-x86_64-rhel70-3.4.24.tgz

    mv /opt/install/mongodb-linux-x86_64-rhel70-3.4.24/ /usr/local/mongodb

configServers部署

三台设备都需要部署configServer形成副本集,最后部署完成的结果是:192.168.36.137为主(PRIMARY),138和139为从(SECONDARY),端口都为21000。

1.创建configServers相关目录

mkdir -p /usr/local/mongodb/configServers/{data,log,conf}

2.配置configServers配置文件

vim /usr/local/mongodb/configServers/conf/configServers.conf
dbpath=/usr/local/mongodb/configServers/data
logpath=/usr/local/mongodb/configServers/log/configServers.log
pidfilepath=/usr/local/mongodb/configServers/configServers.pid
logappend=true 
bind_ip=192.168.36.137           #其它设备只需要替换这个成本机IP即可
port=21000
fork=true
replSet=replconf                 #副本集名称
configsvr=true                   #开启config Servers组件

3.启动configServers

cd /usr/local/mongodb/bin
./mongod -f /usr/local/mongodb/configServers/conf/configServers.conf

4.副本集初始化

cd /usr/local/mongodb/bin
./mongo 192.168.36.137:21000
> use admin
> rs.initiate({
_id:"replconf",
members:[
{_id:0,host:"192.168.36.137:21000"},
{_id:1,host:"192.168.36.138:21000"},
{_id:2,host:"192.168.36.139:21000"},]
})

shard1部署

三台设备都需要部署shard1形成副本集,最后部署完成的结果是:192.168.36.137为主(PRIMARY),138为从(SECONDARY),139为仲裁(ARBITER),端口都为22001。

1.创建shard1相关目录

mkdir -p /usr/local/mongodb/shard1/{data,log,conf}

2.配置shard1配置文件

vim /usr/local/mongodb/shard1/conf/shard1.conf
dbpath=/usr/local/mongodb/shard1/data
logpath=/usr/local/mongodb/shard1/log/shard1.log
pidfilepath=/usr/local/mongodb/shard1/shard1.pid
logappend=true 
bind_ip=192.168.36.137           #其它设备只需要替换这个成本机IP即可
port=22001
fork=true
replSet=shard1                   #副本集名称
shardsvr=true                    #开启shard组件

3.启动shard1

cd /usr/local/mongodb/bin
./mongod -f /usr/local/mongodb/shard1/conf/shard1.conf

4.副本集初始化

 cd /usr/local/mongodb/bin

./mongo 192.168.36.137:22001
> use admin
> rs.initiate({
_id:"shard1",
members:[
{_id:0,host:"192.168.36.137:22001","priority":2},
{_id:1,host:"192.168.36.138:22001","priority":1},
{_id:2,host:"192.168.36.139:22001",arbiterOnly:true},]
})
注:shard中的仲裁节点其实也不是必须的,若是不想设置仲裁节点,可以将arbiterOnly选项修改为priority

shard2部署

三台设备都需要部署shard2形成副本集,最后部署完成的结果是:192.168.36.137为仲裁(ARBITER),138为主(PRIMARY),139为从(SECONDARY),端口都为22002。

1.创建shard2相关目录

mkdir -p /usr/local/mongodb/shard2/{data,log,conf}
dbpath=/usr/local/mongodb/shard2/data
logpath=/usr/local/mongodb/shard2/log/shard2.log
pidfilepath=/usr/local/mongodb/shard2/shard2.pid
logappend=true 
bind_ip=192.168.36.137           #其它设备只需要替换这个成本机IP即可
port=22002
fork=true
replSet=shard2                   #副本集名称
shardsvr=true                    #开启shard组件

3.启动shard2

cd /usr/local/mongodb/bin
./mongod -f /usr/local/mongodb/shard2/conf/shard2.conf

4.副本集初始化

 cd /usr/local/mongodb/bin
./mongo 192.168.36.138:22002
> use admin
> rs.initiate({
_id:"shard2",
members:[
{_id:0,host:"192.168.36.137:22002",arbiteOnly:true},
{_id:1,host:"192.168.36.138:22002","priority":2},
{_id:2,host:"192.168.36.139:22002","priority":1},]
})

route部署(也就是mongos)

三台设备同样也都需要部署route,端口都为20000。

1.创建route相关目录

mkdir -p /usr/local/mongodb/route/{log,conf}           #route不需要data目录

2.配置route配置文件

vim /usr/local/mongodb/route/conf/route.conf
logpath=/usr/local/mongodb/route/log/route.log
pidfilepath=/usr/local/mongodb/route/route.pid
logappend=true 
bind_ip=192.168.36.137       #其它设备只需要替换这个成本机IP即可
port=20000
fork=true
configdb=replconf/192.168.36.137:21000,192.168.36.138:21000,192.168.36.139:21000    #这里指定的是我们configServers的地址端口

3.启动route

cd /usr/local/mongodb/bin
./mongos -f /usr/local/mongodb/router/conf/router.conf

4.增加shard节点

cd /usr/local/mongodb/bin
./mongo 192.168.36.137:20000
#下列两种方式任选其一即可
方式一:
> use admin
> db.runCommand({addshard:"shard1/192.168.36.137:22001,192.168.36.138:22001,192.168.36.139:22001"})         //shard是我们第一个设置的share名称和它的各个节点
> db.runCommand({addshard:"shard2/192.168.36.137:22002,192.168.36.138:22002,192.168.36.139:22002"})         //shard是我们第二个设置的share名称和它的各个节点
> sh.status()        //查看集群分片状态                                                                                       > use config
> db.shards.find()                                                                                          //查看当前所有shard节点信息

方式二:              
sh.addShard("shard1/192.168.36.137:22001,192.168.36.138:22001,192.168.36.139:22001");
sh.addShard("shard2/192.168.36.137:22002,192.168.36.138:22002,192.168.36.139:22002");
若后期我们有新的shard节点也是通过该方式进行新增。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值