MongoDB分片集群,centos7.6 MongoDB4.2.1

环境:centos7.6 MongoDB4.2.1

在这里插入图片描述
mongodb官方文档:添加链接描述

设置防火墙:

firewall-cmd --permanent --zone=public --add-port=27000-27018/tcp  添加防火墙端口区间允许通信
firewall-cmd --reload  重启防火墙使生效

1.三台服务器都安装MongoDB,三台服务器执行相同操作

分别在三台服务器home文件夹下新建mongodb文件夹
下载MongoDB
官网地址:添加链接描述
解压到指定文件夹:tar -zxvf mongodb-linux-x86_64-rhel70-4.2.1.tgz -C /home/mongodb

vim编辑profile文件,添加内容

vim /etc/profile

在最下方添加下列代码,设置环境变量

# MONGODB HOME
export MONGODB_HOME=/home/mongodb/mongodb-linux-x86_64-rhel70-4.2.1
export PATH=${PATH}:${MONGODB_HOME}/bin

保存后执行使环境变量生效:

source /etc/profile

2.创建配置信息,分片信息,日志信息文件夹及其文件

创建配置文件夹及文件
mkdir -p /home/mongodb/conf
touch /home/mongodb/conf/config.conf
touch /home/mongodb/conf/mongos.conf
touch /home/mongodb/conf/shard1.conf
touch /home/mongodb/conf/shard2.conf
touch /home/mongodb/conf/shard3.conf
创建日志文件夹及文件
mkdir -p /home/mongodb/log
touch /home/mongodb/log/config.log
touch /home/mongodb/log/mongos.log
touch /home/mongodb/log/shard1.log
touch /home/mongodb/log/shard2.log
touch /home/mongodb/log/shard3.log
创建服务器配置数据目录,分片1、分片2、分片3、数据存储目录。
mkdir -p /home/mongodb/data/config
mkdir -p /home/mongodb/data/shard1
mkdir -p /home/mongodb/data/shard2
mkdir -p /home/mongodb/data/shard3

3.配置服务器

1.三台服务器的conf下的config.conf文件添加配置内容:
dbpath=/home/mongodb/data/config
logpath=/home/mongodb/log/config.log
port=27018
logappend=true
fork=true
maxConns=5000
replSet=configs
configsvr=true
bind_ip=0.0.0.0
2.配置复制集信息

三台服务器执行

mongod -f /home/mongodb/conf/config.conf

出现下列内容表示启动成功:

about to fork child process, waiting until server is ready for connections.
forked process: 3055
child process started successfully, parent exiting

在其中一台服务器连接mongo

mongo --host 192.168.88.131 --port 27018

切换数据库

use admin

初始化复制集

rs.initiate({_id:"configs",members:[{_id:0,host:"192.168.88.131:27018"},{_id:1,host:"192.168.88.132:27018"},{_id:2,host:"192.168.88.133:27018"}]})

成功后如下:

{
        "ok" : 1,
        "operationTime" : Timestamp(1595860208, 1),
        "$gleStats" : {
                "lastOpTime" : Timestamp(1595860208, 1),
                "electionId" : ObjectId("000000000000000000000000")
        },
        "lastCommittedOpTime" : Timestamp(0, 0),
        "$clusterTime" : {
                "clusterTime" : Timestamp(1595860208, 1),
                "signature" : {
                        "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
                        "keyId" : NumberLong(0)
                }
        }
}

rs.status() 命令可查看状态。
完成后,可分别进入查看,此时一台为PRIMARY,另外两台为SECONDARY。

mongo --host 192.168.88.131 --port 27018
mongo --host 192.168.88.132 --port 27018
mongo --host 192.168.88.133 --port 27018

4.分片服务配置

配置shard1.conf,shard2.conf,shard3.conf.
三台服务器的shard1.conf都添加以下内容:

dbpath=/home/mongodb/data/shard1
logpath=/home/mongodb/log/shard1.log
port=27001
replSet=shard1
logappend=true
fork=true
maxConns=5000
storageEngine=mmapv1
shardsvr=true
bind_ip=0.0.0.0

三台服务器的shard2.conf都添加以下内容:

dbpath=/home/mongodb/data/shard2
logpath=/home/mongodb/log/shard2.log
port=27002
replSet=shard2
logappend=true
fork=true
maxConns=5000
storageEngine=mmapv1
shardsvr=true
bind_ip=0.0.0.0

三台服务器的shard3.conf都添加以下内容:

dbpath=/home/mongodb/data/shard3
logpath=/home/mongodb/log/shard3.log
port=27003
replSet=shard3
logappend=true
fork=true
maxConns=5000
storageEngine=mmapv1
shardsvr=true
bind_ip=0.0.0.0

分别启动着三台服务器上的三个配置文件,三台服务器都执行以下三个命令:

mongod -f /home/mongodb/conf/shard1.conf
mongod -f /home/mongodb/conf/shard2.conf
mongod -f /home/mongodb/conf/shard3.conf

出现下列内容表示启动成功:

about to fork child process, waiting until server is ready for connections.
forked process: 3055
child process started successfully, parent exiting
分片设置为复制集

连接192.168.88.131:27001

mongo --host 192.168.88.131 --port 27001

进入admin

use admin

初始化复制集:

rs.initiate({_id:"shard1",members:[{_id:0,host:"192.168.88.131:27001"},{_id:1,host:"192.168.88.132:27001"},{_id:2,host:"192.168.88.133:27001"}]})

成功后如下:

{
        "ok" : 1,
        "operationTime" : Timestamp(1595860972, 1),
        "$clusterTime" : {
                "clusterTime" : Timestamp(1595860972, 1),
                "signature" : {
                        "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
                        "keyId" : NumberLong(0)
                }
        }
}
shard1:SECONDARY> 

连接192.168.88.131:27002

mongo --host 192.168.88.131 --port 27002

进入admin

use admin
rs.initiate({_id:"shard2",members:[{_id:0,host:"192.168.88.131:27002"},{_id:1,host:"192.168.88.132:27002"},{_id:2,host:"192.168.88.133:27002"}]})

成功后如下:

{
        "ok" : 1,
        "operationTime" : Timestamp(1595861001, 1),
        "$clusterTime" : {
                "clusterTime" : Timestamp(1595861001, 1),
                "signature" : {
                        "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
                        "keyId" : NumberLong(0)
                }
        }
}
shard2:SECONDARY> 

连接192.168.88.131:27003

mongo --host 192.168.88.131 --port 27003

进入admin

use admin
rs.initiate({_id:"shard3",members:[{_id:0,host:"192.168.88.131:27003"},{_id:1,host:"192.168.88.132:27003"},{_id:2,host:"192.168.88.133:27003"}]})

成功后如下:

{
        "ok" : 1,
        "operationTime" : Timestamp(1595861033, 1),
        "$clusterTime" : {
                "clusterTime" : Timestamp(1595861033, 1),
                "signature" : {
                        "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
                        "keyId" : NumberLong(0)
                }
        }
}
shard3:SECONDARY>

5.对路由服务进行部署

三台服务器的 mongos.conf 都添加一下内容:

logpath=/home/mongodb/log/mongos.log
logappend = true
port = 27017
fork = true
configdb = configs/192.168.88.131:27018,192.168.88.132:27018,192.168.88.133:27018
maxConns=20000
bind_ip=0.0.0.0

三台服务器都执行:

mongos -f /home/mongodb/conf/mongos.conf

启动分片功能

在其中一台操作即可:

mongo --host 192.168.88.131 --port 27017

进入admin数据库

use admin

执行以下操作,添加分片:

sh.addShard("shard1/192.168.88.131:27001,192.168.88.132:27001,192.168.88.133:27001")
sh.addShard("shard2/192.168.88.131:27002,192.168.88.132:27002,192.168.88.133:27002")
sh.addShard("shard3/192.168.88.131:27003,192.168.88.132:27003,192.168.88.133:27003")

查看状态:

sh.status()

“ok”:1 --------------表示成功!!!

实现分片功能

进入config

use config
db.settings.save({"_id":"chunksize","value":1})
模拟数据插入
use test
for(i=1;i<=1000000;i++){db.users.insert({"id":i,"name":"ppp"+i})}
启用数据库分片
db.runCommand({enableSharding:"test"})
创建索引,对表进行分片

以id创建索引

db.users.createIndex({"id":1}) 

根据"id"对tolldata表进行分片

db.runCommand({shardcollection:"test.users",key:{id:1}}) 

查看分片状态

sh.status()

集群搭建完毕

补充些命令

允许从节点查询
rs.slaveOk()
添加节点
rs.add("ip:port")
删除
rs.remove("ip:port")
查看配置信息
rs.config()
查看状态
rs.status()
查看分片
db.runCommand({listshards:1})
查看分片状态
sh.status()

设置数据库分片分片建需要先进入admin库:use admin
开启数据库分片设置
db.runCommand({enableSharding:"test"})
创建分片键 基于id
db.runCommand({shardcollection:"test.users",key:{id:1}})


  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值