mongodb 分片集群部署

文章目录

  • mongodb 分片部署
    • 二进制安装
    • 三台config 配置
    • shard 分片安装
      • shard1 安装
      • shard2 安装
      • shard3 安装
      • mongos 安装
      • 数据库、集合启用分片
      • 创建集群认证文件
      • 创建集群用户
      • 部署常见问题

mongodb 分片部署

二进制安装

mkdir -p /data/mongodb
tar xvf mongodb-linux-x86_64-rhel70-3.6.17.tgz
mv mongodb-linux-x86_64-rhel70-3.6.17/* /data/mongodb
#设置环境变量
echo export PATH='$'PATH:/data/mongodb/bin >> .bash_profile
source .bash_profile

三台config 配置

#三台配置一致
mkdir -p /data/mongodb/config
mkdir -p /data/mongodb/config/logs/
mkdir -p /data/mongodb/config/pid/
mkdir -p /etc/mongodb/

cat > //etc/mongodb/config.conf <<EOF
dbpath=/data/mongodb/config
logpath=/data/mongodb/config/logs/config.log
pidfilepath=/data/mongodb/config/pid/config.pid
logappend=true
bind_ip=0.0.0.0
port=27100
fork=true
configsvr=true
replSet=configs
EOF

#三台启动config
mongod -f /etc/mongodb/config.conf

config 初始化,任意一台执行

mongo --port 27100
use admin
config = {
        _id : "configs",
         members : [
             {_id : 0, host : "192.168.221.173:27100" },
             {_id : 1, host : "192.168.221.174:27100" },
             {_id : 2, host : "192.168.221.175:27100" }
         ]
}
rs.initiate(config)

shard 分片安装

shard1 安装

3台服务器添加配置
configdb为config服务地址,192.168.221.173、192.168.221.174、192.168.221.175分别替换为3台机器的IP地址,/data根据实际情况修改为数据盘路径。

3台服务器分别添加配置文件

#三台配置一致
mkdir -p /data/mongodb/shard1/data
mkdir -p /data/mongodb/shard1/logs/ 
mkdir -p /data/mongodb/shard1/pid/ 

cat > /etc/mongodb/shard1.conf <<EOF
dbpath=/data/mongodb/shard1/data
logpath=/data/mongodb/shard1/logs/shard1.log
pidfilepath=/data/mongodb/shard1/pid/shard1.pid
directoryperdb=true
logappend=true
replSet=shard1
bind_ip=0.0.0.0
port=27001
fork=true
shardsvr=true
EOF
#3台服务器分别启动服务
mongod -f /etc/mongodb/shard1.conf

shard1 初始化

连接任意一台非“arbiterOnly: true”节点shard1,192.168.221.173、192.168.221.174、192.168.221.175分别替换为3台机器的IP地址(建议节点1执行)

mongo --port 27001
use admin
config = {
      _id : "shard1",
       members : [
           {_id : 0, host : "192.168.221.173:27001" },
           {_id : 1, host : "192.168.221.174:27001" },
           {_id : 2, host : "192.168.221.175:27001", arbiterOnly: true  }
       ]
  }
rs.initiate(config);

shard2 安装

3台服务器分别添加配置文件

mkdir -p /data/mongodb/shard2/data
mkdir -p /data/mongodb/shard2/logs/
mkdir -p /data/mongodb/shard2/pid/
cat > /etc/mongodb/shard2.conf <<EOF
dbpath=/data/mongodb/shard2/data
logpath=/data/mongodb/shard2/logs/shard2.log
pidfilepath=/data/mongodb/shard2/pid/shard2.pid
directoryperdb=true
logappend=true
replSet=shard2
bind_ip=0.0.0.0
port=27002
fork=true
shardsvr=true
EOF
#3台服务器分别启动服务
mongod -f /etc/mongodb/shard2.conf

shard2初始化,

连接任意一台非“arbiterOnly: true”节点shard2,192.168.221.173、192.168.221.174、192.168.221.175分别替换为3台机器的IP地址(建议节点1执行)

mongo --port 27002
use admin
config = {
      _id : "shard2",
       members : [
           {_id : 0, host : "192.168.221.173:27002" },
           {_id : 1, host : "192.168.221.174:27002", arbiterOnly: true  },
           {_id : 2, host : "192.168.221.175:27002" }
       ]
  }
rs.initiate(config);

shard3 安装

3台服务器分别添加配置文件

mkdir -p /data/mongodb/shard3/data/
mkdir -p /data/mongodb/shard3/logs/
mkdir -p /data/mongodb/shard3/pid/

cat > /etc/mongodb/shard3.conf <<EOF
dbpath=/data/mongodb/shard3/data
logpath=/data/mongodb/shard3/logs/shard3.log
pidfilepath=/data/mongodb/shard3/pid/shard3.pid
directoryperdb=true
logappend=true
replSet=shard3
bind_ip=0.0.0.0
port=27003
fork=true
shardsvr=true
EOF
#3台服务器分别启动服务
mongod -f /etc/mongodb/shard3.conf

shard3 初始化,

连接任意一台非“arbiterOnly: true”节点shard3,192.168.221.173、192.168.221.174、192.168.221.175分别替换为3台机器的IP地址(建议节点1执行)

mongo --port 27003
use admin
config = {
      _id : "shard3",
       members : [
           {_id : 0, host : "192.168.221.173:27003" },
           {_id : 1, host : "192.168.221.174:27003" },
           {_id : 2, host : "192.168.221.175:27003", arbiterOnly: true   }
       ]
  }
rs.initiate(config);

mongos 安装

3台服务器分别添加配置文件

mkdir -p /data/mongodb/mongos/pid/
mkdir -p /data/mongodb/mongos/logs/

cat > /etc/mongodb/mongos.conf <<EOF
#configdb为config服务地址
configdb=configs/192.168.221.173:27100,192.168.221.174:27100,192.168.221.175:27100
pidfilepath=/data/mongodb/mongos/pid/mongos.pid
logpath=/data/mongodb/mongos/logs/mongos.log
bind_ip=0.0.0.0
port=30000
logappend=true
fork=true
EOF

#3台服务器启动mongos
mongos -f /etc/mongodb/mongos.conf

配置分片

任意一台服务器连接,192.168.221.173、192.168.221.174、192.168.221.175分别替换为3台机器的IP地址

mongo --port 30000
use admin
#添加shard
sh.addShard("shard1/192.168.221.173:27001,192.168.221.174:27001,192.168.221.175:27001")
sh.addShard("shard2/192.168.221.173:27002,192.168.221.174:27002,192.168.221.175:27002")
sh.addShard("shard3/192.168.221.173:27003,192.168.221.174:27003,192.168.221.175:27003")
#查看分片状态:
sh.status()

在这里插入图片描述

这是一个MongoDB的分片状态信息。让我来解释一下每个部分的含义:

1. sharding version:这是分片的版本信息。当前的版本是6,最小兼容版本是5。
2. shards:这里列出了所有的分片信息。每个分片有一个唯一的"_id",以及它的"host"(主机)和"state"(状态)。这些信息指示了每个分片所在的主机和它们的状态。
3. active mongoses:这里显示了当前活动的mongos进程的数量和版本号。mongos是MongoDB的路由进程,用于处理客户端请求并将它们路由到正确的分片。
4. autosplit:这个字段指示是否启用了自动分片功能。在这个例子中,自动分片是启用的。
5. balancer:这个字段显示了均衡器(balancer)的状态。它指示均衡器是否启用,以及它是否正在运行。还显示了最近5次均衡尝试中失败的次数。
6. databases:这里列出了所有的数据库信息。每个数据库有一个"_id"和它的"primary"(主节点),还指示了该数据库是否进行了分片。

数据库、集合启用分片

mongo --port 30000
use admin
#这条命令表示启用分片功能,针对的数据库为 "rabbitpre_app"。
db.runCommand({enablesharding:"rabbitpre_app"});

#这条命令表示对 "rabbitpre_app" 数据库中的 "t_page_component" 集合进行分片,使用 "appId" 作为散列键(hashed),实际数据分布会根据 appId 的散列值进行分片。
db.runCommand( {shardcollection : "rabbitpre_app.t_page_component",key : { "appId" : "hashed" }} )
#
use rabbitpre_app
#这条命令表示获取 "rabbitpre_app" 数据库中 "t_page_component" 集合的统计信息,例如集合的大小、索引大小、数据条数等。
db.t_page_component.stats();

创建集群认证文件

创建集群认证文件(三台执行)

openssl rand -base64 512 > keyfile.file
#将keyfile.file拷贝到3台服务的/etc/mongodb目录,并设置权限
chmod 600 /etc/mongodb/keyfile.file

在shard、config添加如下配置(三台):

$ cat >> /etc/mongodb/shard1.conf <<EOF
auth=true
keyFile=/etc/mongodb/keyfile.file
EOF

$ cat >> /etc/mongodb/shard2.conf <<EOF
auth=true
keyFile=/etc/mongodb/keyfile.file
EOF

$ cat >> /etc/mongodb/shard3.conf <<EOF
auth=true
keyFile=/etc/mongodb/keyfile.file
EOF

$ cat >> /etc/mongodb/config.conf <<EOF
auth=true
keyFile=/etc/mongodb/keyfile.file
EOF

在mongos添加如下配置(三台)

echo "keyFile=/etc/mongodb/keyfile.file" >> /etc/mongodb/mongos.conf

创建集群用户

#创建用户,更新用户,密码设置为符合安全要求的密码
>db.createUser({ user: 'admin', pwd:'密码', roles:[{role:"root",db:"admin"}]})
>db.createUser({user:'rwuser',pwd:'密码', roles:[{role:"readWriteAnyDatabase",db:"admin"}]})
> db.updateUser('rwuser',{pwd:'密码',roles:[{role:'readWrite',db:'admin'}]})
#Roles角色说明:
read:允许用户读取指定数据库
readWrite:允许用户读写指定数据库
dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户
clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限
readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
root:只在admin数据库中可用。超级账号,超级权限

部署常见问题

Error initializing sharding state, sleeping for 2 seconds and trying again :: caused by :: NetworkInterfaceExceededTimeLimit: Error loading clusterID :: caused by :: Operation timed out

查看防火墙是否关闭
关闭防火墙,问题解决

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/97695.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python编程——深入了解不可变的元组

作者&#xff1a;Insist-- 个人主页&#xff1a;insist--个人主页 本文专栏&#xff1a;Python专栏 专栏介绍&#xff1a;本专栏为免费专栏&#xff0c;并且会持续更新python基础知识&#xff0c;欢迎各位订阅关注。 目录 一、元组是什么 二、元组的定义 1、相同类型组成元组…

[C++]构造与毁灭:深入探讨C++中四种构造函数与析构函数

个人主页&#xff1a;北海 &#x1f390;CSDN新晋作者 &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏✨收录专栏&#xff1a;C/C&#x1f91d;希望作者的文章能对你有所帮助&#xff0c;有不足的地方请在评论区留言指正&#xff0c;大家一起学习交流&#xff01;&#x1f9…

05架构管理之持续集成-DevOps的理解与实现

专栏说明&#xff1a;针对于企业的架构管理岗位&#xff0c;分享架构管理岗位的职责&#xff0c;工作内容&#xff0c;指导架构师如何完成架构管理工作&#xff0c;完成架构师到架构管理者的转变。计划以10篇博客阐述清楚架构管理工作&#xff0c;专栏名称&#xff1a;架构管理…

分享一个vue-slot插槽使用场景

需求再现 <el-table-column align"center" label"状态" prop"mitStatus" show-overflow-tooltip />在这里&#xff0c;我想对于状态进行一个三目判断&#xff0c;如果为0那就是进行中&#xff0c;否则就是已完成&#xff0c;期初我是这样写…

项目-IM

zk 启动类实现CommandLineRunner接口&#xff0c;重写run()方法 单聊 群聊 离线消息

Android OTA 相关工具(六) 使用 lpmake 打包生成 super.img

我在 《Android 动态分区详解(二) 核心模块和相关工具介绍》 介绍过 lpmake 工具&#xff0c;这款工具用于将多个分区镜像打包生成一个 Android 专用的动态分区镜像&#xff0c;一般称为 super.img。Android 编译时&#xff0c;系统会自动调用 lpmake 并传入相关参数来生成 sup…

uniapp实现:点击拨打电话,弹出电话号码列表,可以选择其中一个进行拨打

一、实现效果&#xff1a; 二、代码实现&#xff1a; 在uni-app中&#xff0c;使用uni.showActionSheet方法实现点击拨打电话的功能&#xff0c;并弹出相关的电话列表供用户选择。 当用户选择了其中一个电话后&#xff0c;会触发success回调函数&#xff0c;并通过res.tapInde…

ELK日志收集系统

目录 一、概述 二、组件 一、logstash 一、工作过程 二、INPUT 三、FILETER 四、OUTPUTS 二、elasticsearch 三、kibana 三、架构类型 一、ELK 二、ELKK 三、ELFK 四、ELFKK 五、EFK 四、配置ELK日志收集系统集群实验的步骤文档 五、配置ELK日志收集系统集群 …

0201hdfs集群部署-hadoop-大数据学习

文章目录 1 前言2 集群规划3 hadoop安装包上传与安装3.1 上传解压 4 hadoop配置5 从节点同步和环境变量配置6 创建用户7 集群启动8 问题集8.1 Invalid URI for NameNode address (check fs.defaultFS): file:/// has no authority. 结语 1 前言 下面我们配置下单namenode节点h…

地下管线三维自动建模软件MagicPipe3D V3.0发布

2023年9月1日经纬管网建模系统MagicPipe3D V3.0正式发布&#xff0c;该版本经过众多用户应用和反馈&#xff0c;在三维地下管网建模效果、效率、适配性方面均有显著提升&#xff01;MagicPipe3D本地离线参数化构建地下管网模型&#xff08;包括管道、接头、附属设施等&#xff…

GPT能否辅助数学学习

GPT4.0的数学能力怎么样&#xff1f;我们使用镜像站进行实验&#xff0c;通过不同水平的数学看看GPT4.0的数学能力得到进步没有。镜像站的地址我们放在了最后&#xff0c;各位读者也可以自行去测试。 笔者在ChatGPT镜像站进行测试&#xff0c;我们的实验是让GPT4.0自行出数学题…

[javaWeb]Socket网络编程

网络编程&#xff1a;写一个应用程序,让这个程序可以使用网络通信。这里就需要调用传输层提供的 api。 Socket套接字 传输层提供协议&#xff0c;主要是两个: UDP和TCP 提供了两套不同的 api&#xff0c;这api也叫做socket api。 UDP和 TCP 特点对比&#xff1a; UDP: 无连…

【Redis从头学-13】Redis哨兵模式解析以及搭建指南

&#x1f9d1;‍&#x1f4bb;作者名称&#xff1a;DaenCode &#x1f3a4;作者简介&#xff1a;啥技术都喜欢捣鼓捣鼓&#xff0c;喜欢分享技术、经验、生活。 &#x1f60e;人生感悟&#xff1a;尝尽人生百味&#xff0c;方知世间冷暖。 &#x1f4d6;所属专栏&#xff1a;Re…

安防监控/视频汇聚平台EasyCVR调用rtsp地址返回的IP不正确是什么原因?

安防监控/云存储/磁盘阵列存储/视频汇聚平台EasyCVR可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有GB28181、RTSP/Onvif、RTMP等&#xff0c;以及厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等&#xff0c;能对外分发RTSP、RT…

QML Book 学习基础4(状态和转换)

目录 states&#xff08;状态&#xff09; Transition&#xff08;过渡&#xff09; states&#xff08;状态&#xff09; 用户界面的某些部分可以用状态来描述。状态定义一组属性更改&#xff0c;并且可以由特定条件触发。 QML 中定义状态&#xff0c;该元素需要绑定到任何项…

JavaScript中的事件委托(event delegation)

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ JavaScript事件委托⭐ 事件冒泡&#xff08;Event Bubbling&#xff09;⭐ 事件委托的优点⭐ 如何使用事件委托⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启…

RuntimeError: scatter_cpu_(): Expected self.dtype to be equal to src.dtype

1. 问题描述 如下图&#xff0c;输入scatter_时报错&#xff01; 2. 报错原因 查阅资料发现是因为要填充的value与要被填充的tensor类型不同&#xff01;如下图 3. 解决办法 将其转换成一样的类型即可&#xff0c;如下图&#xff0c;测试没有报错&#xff1a;

深度学习怎么学?

推荐这本小白看的《深度学习&#xff1a;从基础到实践&#xff08;上下册&#xff09;》。 深度学习&#xff1a;从基础到实践&#xff08;上下册&#xff09; 深入浅出的讲述了深度学习的基本概念与理论知识&#xff0c;不涉及复杂的数学内容&#xff0c;零基础小白也能轻松掌…

为什么删除Windows 11上的Bloatware可以帮助加快你的电脑速度

如果你感觉你的电脑迟钝&#xff0c;彻底清除软件会有所帮助&#xff0c;而且这个过程对Windows用户来说越来越容易。 微软正在使删除以前难以删除的其他预装Windows应用程序成为可能。专家表示&#xff0c;这项新功能可能会改变用户的游戏规则。 科技公司Infatica的主管Vlad…