mongodb分片集群搭建

1.本次搭建使用三台centos7主机搭建伪集群,关闭防火墙和selinux服务

2.mongodb架构相当于9个分片节点,3个路由节点,3个配置节点,主机信息如下图所示

主机名称主机ip地址端口服务
A10.1.60.11420001,21001,22001,22002,22003shard1,shard2,shard3,config servers,mongos
B10.1.60.11520001,21001,22001,22002,22003shard1,shard2,shard3,config servers,mongos
C10.1.60.11820001,21001,22001,22002,22003shard1,shard2,shard3,config servers,mongos

3.从官网下载mongodb安装包(我这里下载的是6.0.5版本的tgz包)

Install MongoDB Community Kubernetes Operator | MongoDB

4.创建mongodb目录并将安装包放到目录下解压(以下所有操作没有特殊标明的都要在三台主机上执行)

mkdir /etc/mongodb

tar -zxvf /etc/mongodb/mongodb-linux-x86_64-rhel70-6.0.5.tgz /etc/mongodb/

mv /etc/mongodb/mongodb-linux-x86_64-rhel70-6.0.5 /etc/mongodb/mongodb

ls /etc/mongodb

 5.创建mongodb各项服务所需的目录

cd /etc/mongodb/mongodb

创建存放配置文件的目录

mkdir conf

创建存放config servers服务数据的目录

mkdir -p config/log

mkdir config/data

创建存放分片节点数据的目录(每台主机三个分片副本集节点)

mkdir -p shard1/data

mkdir shard1/log

mkdir -p shard2/data

mkdir shard2/log

mkdir -p shard3/data

mkdir shard3/log

创建存放mongos路由服务数据的目录

mkdir -p mongos/log

6. 创建mongodb各项服务的配置文件

编辑config servers服务配置文件

vi conf/config.conf 

pidfilepath=/etc/mongodb/mongodb/config/config_server.pid  #记录config服务的pid
dbpath=/etc/mongodb/mongodb/config/data/    #存放config服务数据的目录
logpath=/etc/mongodb/mongodb/config/log/config_server.log #记录config服务日志
logappend=true  #以追加写入的形式写入日志
bind_ip=0.0.0.0  #绑定ip地址
port=21001   #config服务使用的端口
fork=true  #后台启动服务
configsvr=true  #configsvr选项设置为true时,当前MongoDB实例将被配置为配置服务器,可以用于存储和管理分片集群的元数据信息,在这种情况下,MongoDB实例将会监听默认端口27019,并使用默认的数据目录/data/configdb存储配置服务器的数据文件
replSet=config_server #副本集名称
maxConns=20000  #最大连接数

编辑shard1服务配置文件

vi conf/shard1.conf

pidfilepath=/etc/mongodb/mongodb/shard1/shard1.pid
dbpath=/etc/mongodb/mongodb/shard1/data
logpath=/etc/mongodb/mongodb/shard1/log/shard1.log
logappend=true
bind_ip=0.0.0.0
port=22001
fork=true
directoryperdb=true #用于指定MongoDB实例是否使用独立的数据目录来存储每个数据库。当directoryperdb选项设置为true时,MongoDB实例将为每个数据库创建一个独立的数据目录,这样可以更好地管理和维护不同数据库之间的数据。如果directoryperdb选项设置为false,则MongoDB实例将使用单个数据目录来存储所有的数据库文件
replSet=shard1  #配置副本集名称
shardsvr=true  #用于指定MongoDB实例是否用作分片集群的分片节点。当shardsvr选项设置为true时,MongoDB实例将被配置为分片集群的分片节点,可以用于存储和管理分片集群的数据。在这种情况下,MongoDB实例将会监听默认端口27018,并使用默认的数据目录/data/db存储数据文件
maxConns=20000

编辑shard2服务配置文件

vi conf/shard2.conf

pidfilepath=/etc/mongodb/mongodb/shard2/shard2.pid
dbpath=/etc/mongodb/mongodb/shard2/data
logpath=/etc/mongodb/mongodb/shard2/log/shard2.log
logappend=true
bind_ip=0.0.0.0
port=22002
fork=true
directoryperdb=true
replSet=shard2
shardsvr=true
maxConns=20000

编辑shard3服务配置文件

vi conf/shard3.conf

pidfilepath=/etc/mongodb/mongodb/shard3/shard3.pid
dbpath=/etc/mongodb/mongodb/shard3/data
logpath=/etc/mongodb/mongodb/shard3/log/shard3.log
logappend=true
bind_ip=0.0.0.0
port=22003
fork=true
directoryperdb=true
replSet=shard3
shardsvr=true
maxConns=20000

编辑mongos服务配置文件

vi conf/mongos.conf

pidfilepath=/etc/mongodb/mongodb/mongos/mongos.pid
logpath=/etc/mongodb/mongodb/mongos/log/mongos.log
logappend=true
bind_ip=0.0.0.0
port=20001
fork=true
configdb=config_server/10.1.60.114:21001,10.1.60.115:21001,10.1.60.118:21001  #配置config服务副本集的所有节点,config_server之前在config配置文件中配置的副本集的名称
maxConns=20000

7.启用mongodb各项服务

cd /etc/mongodb/mongodb/

启动config servers服务

bin/mongod --config conf/config.conf

启动shard服务

bin/mongod --conf conf/shard1.conf

bin/mongod --config conf/shard2.conf

bin/mongod --config conf/shard3.conf

启动mongos服务

bin/mongos --config conf/mongos.conf

 8.安装mongosh服务(mongodb的6.0.5版本没有自带的客户端)

参考:安装mongodb客户端_Apex Predator的博客-CSDN博客

9.初始化各项服务副本集(此步骤在副本集中的任意一个节点主机上配置即可)

以下配置去掉注释后在一行一行的输入到mongodb的命令行中执行 

使用mongosh服务登录config服务初始化config servers服务副本集

mongosh --port 21001

rs.initiate({                          #初始化副本集

   _id:"config_server",       #此处需要填写config配置文件中设置的副本集名称

   members:[                    #副本集成员信息

             {_id:0,host:"10.1.60.114:21001"},

             {_id:1,host:"10.1.60.115:21001"},

             {_id:2,host:"10.1.60.118:21001"}

   ]

});

使用mongosh服务登录shard服务初始化shard服务副本集

mogosh --port 22001

rs.initiate({

   _id:"shard1",          #此处需要填写shard1配置文件中设置的副本集名称

   members:[

             {_id:0,host:"10.1.60.114:22001"},

             {_id:1,host:"10.1.60.115:22001"},

             {_id:2,host:"10.1.60.118:22001",arbiterOnly:true}        #配置此节点为副本集的仲裁节点

   ]

});

mogosh --port 22002

rs.initiate({

   _id:"shard2",          #此处需要填写shard2配置文件中设置的副本集名称

   members:[

             {_id:0,host:"10.1.60.114:22002"},

             {_id:1,host:"10.1.60.115:22002"},

             {_id:2,host:"10.1.60.118:22002",arbiterOnly:true}        #配置此节点为副本集的仲裁节点

   ]

});

mogosh --port 22003

rs.initiate({

   _id:"shard3",          #此处需要填写shard3配置文件中设置的副本集名称

   members:[

             {_id:0,host:"10.1.60.114:22003"},

             {_id:1,host:"10.1.60.115:22003"},

             {_id:2,host:"10.1.60.118:22003",arbiterOnly:true}        #配置此节点为副本集的仲裁节点

   ]

});

 使用mongosh服务登录mongos服务添加分片信息

mogosh --port 20001

注意MongoDB6以后直接在路由中加入分片信息会报错,需要先进行以下配置

use admin               #使用admin库,以下操作需要在admin库下执行

db.adminCommand({

   "setDefaultRWConcern" : 1,

   "defaultWriteConcern" : {

      "w" : 2      #其实设置为2不太严谨,建议使用更高的写关注级别,例如 w: "majority",以确保写操作在大多数节点上都已成功复制。这样可以提高数据的可用性和容错能力,以防止数据丢失或损坏

   }

});

添加分片副本集信息

db.runCommand({'addshard':'shard1/10.1.60.114:22001,10.1.60.115:22001.10.1.60.118:22001'});

db.runCommand({'addshard':'shard2/10.1.60.114:22002,10.1.60.115:22002.10.1.60.118:22002'});

db.runCommand({'addshard':'shard3/10.1.60.114:22003,10.1.60.115:22003.10.1.60.118:22003'});

查看集群状态

sh.status()

 可以看到已经是识别到了分片信息,仲裁节点是不显示的,所以shard副本集里就只显示两个节点

 10.测试mongodb集群分片存储

使用客户端连接mongos服务

mogosh --port 20001

创建测试库

use db

开启测试库分片,需要在admin库下执行命令

use admin

db.runCommand({enablesharding:'sj'})

 创建collection并开启分片

use sj 

db.user.ensureIndex({'id':'hashed'});       #在 user 集合中创建一个基于 id 字段的哈希索引,也可以不用执行创建索引命令

use admin

db.runCommand({shardcollection:'sj.user',key:{'id':'hashed'}})   #将 sj 数据库中的 user 集合分片,并使用 id 字段的哈希值作为分片键

 查看user集合是否开启分片

use sj

db.user.stats().sharded

写入数据测试查看分片情况

use sj

for(i=1;i<=20000;i++)db.user.insert({id:i,name:'linlin',sex:'boy'})

sh.status() 

查看数据分片情况

db.user.getShardDistribution()

11.集群分片主节点故障集群变化分析

当某个分片的主节点发生故障时,集群会自动将一个从节点提升为新的主节点,并将该节点上的数据复制到其他从节点上。分片重平衡机制将确保新的主节点上的数据被均匀地分布到其他分片节点上,从而确保整个集群的性能和可用性

12.分片集群管理命令

 在mongos添加分片(可以为单个实例或复制集)

db.runCommand({addshard:"复制集名称/ip:port,ip:port,ip:port"})

在mongos移除分片

db.runCommand( { removeShard: "复制集名称" } )

在mongos刷新配置信息

db.runCommand("flushRouterConfig"))

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值