MongoDB分片集群部署

MongoDB使用手册:https://www.runoob.com/mongodb/mongodb-tutorial.html

MongoDB源码包下载地址:https://www.mongodb.com/try#community

MongoDB官网文档:https://docs.mongodb.com/v4.0/sharding/

 


服务规划:

由于设备问题,目前我们只采用了3个设备进行部署。3个设备同时部署config Servers,shard1,shard2,route。可以查看我之前编写的Mongodb分片组件说明进行了解。

 


MongoDB分片集群部署

该部署使用的Red Hat 7为例

前提工作

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

1.关闭防火墙

    systemctl stop firewalld.service

    systemctl disable firewalld.service

2.关闭SELinux

    setenforce 0                   //临时关闭

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

SELINUX=enforcing改为SELINUX=disabled

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

4.关闭THP

    尽管THP的本意是为提升性能,但某些数据库厂商还是建议直接关闭THP(比如说Oracle、MongoDB等),否则可能导致性能下降,内存锁,甚至系统重启等问题

    echo never > /sys/kernel/mm/transparent_hugepage/enabled

    echo never > /sys/kernel/mm/transparent_hugepage/defrag

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.副本集初始化

    #随便使用一台设备,这里我采用的192.168.36.137设备

    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"},]
})
可以稍等一会退出重进mongodb,使用rs.status()命令查看下副本集是否创建成功。

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.副本集初始化

    #随便使用一台设备,这里我采用的192.168.36.137设备

    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
可以稍等一会退出重进mongodb,使用rs.status()命令查看下副本集是否创建成功。

shard2部署

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

1.创建shard2相关目录

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

2.配置shard2配置文件

    vim /usr/local/mongodb/shard2/conf/shard2.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.副本集初始化

    #随便使用一台设备,这里我采用的192.168.36.138设备

    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},]
})
可以稍等一会退出重进mongodb,使用rs.status()命令查看下副本集是否创建成功。

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节点

    #随便使用一台设备,这里我采用的192.168.36.137设备

    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节点也是通过该方式进行新增。

至此,MongoDB分片集群就部署完成了!要想对其进行验证,可以参考我之前编写的MongoDB分片集群使用说明
若要做密码验证,请参考MongoDB设置密码验证
posted @ 2022-02-23 17:23  RFAA  阅读(269)  评论(0编辑  收藏  举报