mongodb分片集群搭建

2023-11-18

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

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

主机名称 主机ip地址 端口 服务
A 10.1.60.114 20001,21001,22001,22002,22003 shard1,shard2,shard3,config servers,mongos
B 10.1.60.115 20001,21001,22001,22002,22003 shard1,shard2,shard3,config servers,mongos
C 10.1.60.118 20001,21001,22001,22002,22003 shard1,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"))

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

mongodb分片集群搭建 的相关文章

随机推荐

  • do while(0)的妙用

    do while 0 的妙用 do while 0 就如同一个花括号 具有独立的作用域 花括号所表示的符合语句是一个整体 do while 语句同样是一个整体 同样可以在if 等条件语句后直接使用 但是后所不同的是 do while 作为循
  • Mac 解决 command not found: mysql

    首先检查下面的目录中是否有mysql命令 cd usr local mysql bin 如果有的话 使用 echo export PATH PATH usr local mysql bin gt gt zshrc 即可解决 参考链接 htt
  • Ubuntu关闭无用服务

    linux的各大发行版 都有些不必要的服务被默认开启了 针对ubuntu 我们可以采用选择性关闭的方法加速起动 提高系统性能 这里我们安装一个软件 sudo apt get install sysv rc conf 然后这样起动 sudo
  • 力扣动态规划专题(一)背包理论基础 基础动规题 动规注意点 步骤及C++实现

    文章目录 动态规划 509 斐波那契数 五步骤 代码 70 爬楼梯 五步骤 代码 746 使用最小花费爬楼梯 五步骤 代码 扩展 62 不同路径 动态规划 数论 63 不同路径 II 五步骤 代码 343 整数拆分 五步骤 代码 96 不同
  • 什么是servlet?servlet有什么用?

    servlet概述 什么是servlet servlet有什么用 servlet是java编写的服务器端的程序 运行在web服务器中 作用 接收用户端发来的请求 调用其他java程序来处理请求 将处理结果 返回到服务器中 servlet的生
  • Weblogic - Socket Muxers in Thread Dumps

    What are these weblogic socket Muxer threads seen in thread dumps Note for a basic primer on taking thread dumps and ana
  • UE4 C++学习笔记之初识时间轴,定时器

    任务 在场景中做一个开关门 角色踩上开关后 门打开 离开开关2s后门自动关闭 第一步 新建一个C Actor类命名为DoorSwitch 并编写相应代码 DoorSwitch h代码如下 Fill out your copyright no
  • Loadrunner自带的网站WebTours打不开

    不少人在打开LR示例页面的时候会显示如下错误 Internal error your request was unsuccessful Cannot create CGI process program not found 解决方法 打开W
  • 汇编——单字符输入输出+字符串输入输出(换行实现)

    单字符输入输出 默认采用ML6 11汇编程序 DATAS SEGMENT CHAR DB CHAR存储输入的字符 CHANGELINE DB 13 10 用来表示换行符 DATAS ENDS STACKS SEGMENT DB 128 DU
  • HK32F030MF4P6 实现PAout(xx)/PAin(xx)

    需要将此代码加进程序中即可 ifdef cplusplus extern C endif typedef struct u16 bit0 1 u16 bit1 1 u16 bit2 1 u16 bit3 1 u16 bit4 1 u16 b
  • 保姆级python入门教程(非常详细),从零基础入门到精通,从看这篇开始!

    一 初聊Python 文末有惊喜福利 1 为什么要学习Python 在学习Python之前 你不要担心自己没基础或 脑子笨 我始终认为 只要你想学并为之努力 就能学好 就能用Python去做很多事情 在这个喧嚣的时代 很多技术或概念会不断兴
  • 华为OD机试 - 找出两个整数数组中同时出现的整数(Java )

    题目描述 现有两个整数数组 需要你找出两个数组中同时出现的整数 并按照如下要求输出 有同时出现的整数时 先按照同时出现次数 整数在两个数组中都出现并目出现次数较少的那个 进行归类 然后按照出现次数从小到大依次按行输出 没有同时出现的整数时
  • 什么是Ntrip?Ntrip协议简介

    文章目录 Ntrip通讯协议1 0 Ntrip是什么 Ntrip系统组成 NtripServer NtripClient 4 1 获取源列表 4 2 获取差分数据 其他资料 Ntrip通讯协议1 0 Ntrip是什么 NTRIP是在互联网上
  • 可能是把Docker的概念讲的最清楚的一篇文章

    编者的话 本文只是对Docker的概念做了较为详细的介绍 并不涉及一些像Docker环境的安装以及Docker的一些常见操作和命令 Docker是世界领先的软件容器平台 所以想要搞懂Docker的概念我们必须先从容器开始说起 如果你想和更多
  • 【Python开发】Flask中的单点登录解决方案

    Flask中的单点登录解决方案 1 SSO 和 CAS 单点登录 Single Sign On SSO 就是通过用户的一次性鉴别登录 当用户在身份认证服务器上登录一次以后 即可获得访问单点登录系统中其他关联系统和应用软件的权限 同时这种实现
  • win10下载与安装mysql详细步骤

    下载mysql 下载地址 https dev mysql com downloads mysql 5 1 html downloads 下载完以后 解压到自己想要安装的目录下 文件如下图所示 配置环境 右击 此电脑 选中 属性 点击 高级系
  • Buuctf Exec

    打开该靶机 发现该页面为一个ping页面 输入127 0 0 1测试 发现和电脑cmd上ping的结果差不多 分析一下ping小技巧 的区别 A B 简单的拼接 A B之间无制约关系 A B A执行成功 然后才会执行B A B A的输出 作
  • SQL语句用法大全

    SQL Structured Query Language 是一个对数据库进行增删改查的语言 不过这玩意儿还是挺难理解的 所以我就写了这篇文章 希望能帮助到您 为了方便阐述 我做了以下表格作为数据表进行演示 ABOUT NAME char
  • java读取含有合并行的excel

    excel格式如下 代码如下 package com example demo excel import org apache poi hssf usermodel HSSFWorkbook import org apache poi ss
  • mongodb分片集群搭建

    1 本次搭建使用三台centos7主机搭建伪集群 关闭防火墙和selinux服务 2 mongodb架构相当于9个分片节点 3个路由节点 3个配置节点 主机信息如下图所示 主机名称 主机ip地址 端口 服务 A 10 1 60 114 20