《Linux运维总结:基于Ubuntu 22.04操作系统+x86_64架构CPU部署二进制mongodb 7.0.14分片集群》

news2024/9/20 8:44:12

总结:整理不易,如果对你有帮助,可否点赞关注一下?

更多详细内容请参考:《Linux运维篇:Linux系统运维指南》


一、简介

1、应用场景
当您遇到如下问题时,可以使用分片集群解决:
a、 存储容量受单机限制,即磁盘资源遭遇瓶颈。
b、 读写能力受单机限制,可能是CPU、内存或者网卡等资源遭遇瓶颈,导致读写能力无法扩展。

2、分片集群组成部分
MongoDB分片集群由以下组件构成:
shard(分片):每个分片都包含分片数据的一个子集, 每个分片都必须作为一个副本集进行部署
mongos(路由):mongos充当查询路由器,在客户端应用程序和分片集群之间提供接口。mongos可以支持对冲读,从而最大限度地降低延迟。
config(配置服务):配置服务器存储集群的元数据和配置设置, 配置服务器必须部署为副本集(CSRS)

3、生产配置
在生产集群中,确保数据是冗余的,并且系统具有高可用性。对于生产分片集群部署,请考虑以下事项:
a、将配置服务器部署为3节点副本集
b、将每个分片部署为3成员副本集
c、部署一个或多个mongos 路由器
如下图所示:
在这里插入图片描述

4、自管理部署的操作清单
说明:以上检查清单和 Development Checklist(开发检查清单)列表提供了部分建议,它们有助于避免在生产 MongoDB 部署中出现问题。


二、部署规划

2.1、环境信息

主机IP 主机名 操作系统 内核版本 Mongodb版本 服务启动用户
192.168.1.111 config.kvxt.com 22.04.4 LTS (Jammy Jellyfish) 5.15.0-113-generic 7.0.14 mongodb
192.168.1.112 shard1.kvxt.com 22.04.4 LTS (Jammy Jellyfish) 5.15.0-113-generic 7.0.14 mongodb
192.168.1.113 shard2.kvxt.com 22.04.4 LTS (Jammy Jellyfish) 5.15.0-113-generic 7.0.14 mongodb
192.168.1.114 mongos.kvxt.com 22.04.4 LTS (Jammy Jellyfish) 5.15.0-113-generic 7.0.14 mongodb

2.2、服务分布

1、集群内部通信安全:keyFile 主要用于确保集群成员(包括 mongos、分片成员和配置服务器)之间的通信安全。所有集群成员都需要访问相同的密钥文件,以验证彼此的身份。
2、mongos作为路由层,其主要职责是接收客户端请求并将这些请求转发到适当的分片或配置服务器。mongos不直接存储数据,也不参与数据的读写操作。
3、mongod 实例(包括分片成员和配置服务器)负责数据的实际存储和管理。因此,它们需要进行身份验证和授权,以确保只有经过认证的用户才能访问数据。

总结:mongos(路由节点)比mongod(配置节点+分片节点)少了authorization:enabled的配置。


主机IP 集群角色 端口信息 实例名称 是否使用KeyFile鉴权文件 是否开启认证方式运行
192.168.1.111 config 17101 config-rs-1
192.168.1.111 config 17102 config-rs-2
192.168.1.111 config 17103 config-rs-3
- - - -
192.168.1.112 shared 17201 shard1-rs-primary
192.168.1.112 shared 17202 shard1-rs-secondary
192.168.1.112 shared 17203 shard1-rs-arbiter
- - - -
192.168.1.113 shared 17301 shard2-rs-primary
192.168.1.113 shared 17302 shard2-rs-secondary
192.168.1.113 shared 17303 shard2-rs-arbiter
- - - -
192.168.1.114 mongos 17401 mongos-route1
192.168.1.114 mongos 17402 mongos-route2

三、安装前准备

注意事项:
1、要避免因 IP 地址变更而更新配置,请使用DNS主机名而非IP地址。在配置副本集成员或分片集群成员时,使用DNS主机名而非IP地址尤为重要。
2、在水平分割网络配置下,请使用主机名而非 IP地址来配置集群。从 MongoDB 5.0开始,仅配置了IP地址的节点将无法通过启动验证,因而不会启动。


3.1、部署建议


3.2、配置主机名

说明:以下操作需根据部署规划在各个节点上执行。

# 1、192.168.1.111主机
hostnamectl set-hostname config.kvxt.com
# 2、192.168.1.112主机
hostnamectl set-hostname shard1.kvxt.com
# 3、192.168.1.113主机
hostnamectl set-hostname shard2.kvxt.com
# 4、192.168.1.114主机
hostnamectl set-hostname mongos.kvxt.com

3.3、配置hosts解析

说明:以下操作需在mongodb分片集群所有主机上执行。

vim /etc/hosts
192.168.1.111 config.kvxt.com	
192.168.1.112 shard1.kvxt.com	
192.168.1.113 shard2.kvxt.com	
192.168.1.114 mongos.kvxt.com	

3.4、系统参数配置

说明:以下操作需在mongodb分片集群所有主机上执行。

1、很多操作系统默认将该值设置为7200 秒(两小时)。对于MongoDB,使用较短的keepalive值(大约为120 秒(两分钟))通常会获得更好的结果。

vim /etc/sysctl.conf
net.ipv4.tcp_keepalive_time = 120

2、如果客户端与服务器之间或分片集群或副本集成员之间出现长时间暂停(暂停时间超过两分钟),随后出现网络超时或套接字错误,请检查受影响系统的tcp_retries2值。默认情况下,大多数 Linux 操作系统将此值设置为15,而 Windows将其设置为5。对于MongoDB,可以使用较低的tcp_retries2 值(大约为 5(12 秒)或更低)体验更好的结果。

vim /etc/sysctl.conf
net.ipv4.tcp_retries2 = 8

3、为您的部署配置充足的文件句柄数 (fs.file-max)、内核进程 ID (PID) 限制 (kernel.pid_max)、每个进程的最大线程数 (kernel.threads-max) 以及每个进程的最大内存映射区域数 (vm.max_map_count)。对于大型系统,建议首先采用以下值:

vim /etc/sysctl.conf
fs.file-max = 98000
kernel.pid_max = 64000
kernel.threads-max = 64000
vm.max_map_count=131060

4、mongos或mongod接受的最大并行连接数(maxIncomingConnections),windows默认为100000,Linux默认为RLIMIT_NOFILE * 0.8,所以需要设置合理的文件描述符大小限制。

vim /etc/security/limits.conf
root soft nofile 65535
root hard nofile 65535
mongodb soft nofile 65535
mongodb hard nofile 65535

3.5、创建启动用户

说明:以下操作需在mongodb分片集群所有主机上执行。

groupadd --gid 1300 mongodb
useradd -u 1300 -g 1300 -d /home/mongodb -s /usr/sbin/nologin -m mongodb

3.6、创建相关目录

说明:以下操作需根据部署规划在各个节点上执行。

1、192.168.1.111主机

mkdir -p /opt/mongodb-shared-cluster/ssl 
mkdir -p /opt/mongodb-shared-cluster/config-rs/{
   config1,config2,config3}/{
   data,conf.d,logs}
chown -R mongodb:mongodb /opt/mongodb-shared-cluster

2、192.168.1.112主机

mkdir -p /opt/mongodb-shared-cluster/ssl -p

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

开关磁阻电机(SRM)系统的matlab性能仿真与分析

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1 SRM的基本结构 4.2 SRM的电磁关系 4.3 SRM的输出力矩 5.完整工程文件 1.课题概述 开关磁阻电机(SRM)系统的matlab性能仿真与分析,对比平均转矩vs相电流,转矩脉动vs相电流&a…

Python OpenCV精讲系列 - 高级图像处理技术(九)

💖💖⚡️⚡️专栏:Python OpenCV精讲⚡️⚡️💖💖 本专栏聚焦于Python结合OpenCV库进行计算机视觉开发的专业教程。通过系统化的课程设计,从基础概念入手,逐步深入到图像处理、特征检测、物体识…

JavaWeb---纯小白笔记01:JavaWeb概述和Tomcat安装

本次将对WEB开发的相关的概念和Tomcat等进行介绍。 Web开发简介: C/S和B/S是两种常用的网络架构模式 区别: C/S:client/server --客户端与服务器之间直接进行通信,对用户,本地电脑要求高 B/S:browser/server--通过…

人工智能-大语言模型-微调技术-LoRA及背后原理简介

1. 《LORA: LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELS》 LORA: 大型语言模型的低秩适应 摘要: 随着大规模预训练模型的发展,全参数微调变得越来越不可行。本文提出了一种名为LoRA(低秩适应)的方法,通过在Transf…

K8S容器实例Pod安装curl-vim-telnet工具

在没有域名的情况下,有时候需要调试接口等需要此工具 安装curl、telnet、vim等 直接使用 apk add curlapk add vimapk add tennet

Angular: ‘ng’ is not recognized as an internal or external command

背景 运行新项目的前端angular2项目时,需要全局安装angular-cli,然后使用ng serve --open命令启动项目。我安装好angular-cli后,在cmd里输入ng命令,死活无法识别。 解决过程 我按照网上的说法,去配置npm环境变量&am…

软考高级:数据库规范化: 1NF、2NF、3NF和 BCNF AI 解读

数据库的规范化是数据库设计中的一个重要过程,旨在减少数据冗余和提高数据一致性。它通过一系列规则(称为范式)来优化数据库表的结构。 常见的范式有1NF、2NF、3NF和BCNF。让我们分别来解释这些范式。 生活化例子 想象你在整理一个家庭成…

吴泳铭:AI最大的想象力不在手机屏幕,而是改变物理世界

刚刚,阿里巴巴集团CEO、阿里云智能集团董事长兼CEO吴泳铭在2024云栖大会上发表主题演讲—— “ 过去22个月,AI发展速度超过任何历史时期,但我们依然还处于AGI变革的早期。生成式AI最大的想象力,绝不是在手机屏幕上做一两个新的超…

【论文阅读】Slim Fly: A Cost Effective Low-Diameter Network Topology 一种经济高效的小直径网络拓扑

文章目录 Slim Fly: A Cost Effective Low-Diameter Network Topology文章总结1. 摘要2. indroduction3. 主要工作 主要思想references Slim Fly: A Cost Effective Low-Diameter Network Topology Slim Fly:一种经济高效的小直径网络拓扑 SC’14 Maciej Besta 苏…

毕业设计选题:基于ssm+vue+uniapp的农产品自主供销小程序

开发语言:Java框架:ssmuniappJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:M…

实战OpenCV之图像阈值处理

基础入门 图像阈值处理是一种二值化技术,它基于预设的阈值,可以将图像中的像素分为两大类:一大类是背景,另一大类是前景或目标对象。这个过程涉及将图像中的每个像素值与阈值进行比较,并根据比较结果决定保留原始值还是…

已解决 Termius双击左键复制时,会自动输入Ctrl+C ^C

已解决 Termius双击左键复制时,会自动输入CtrlC ^C 一、问题现象 使用Termius双击左键复制时,会自动输入CtrlC,如图 二、解决办法 查阅了资料,又说是某翻译软件鼠标取词的问题,有说是输入法问题,众说纷纭…

AI免费UI页面生成

https://v0.dev/chat v0 - UI设计 cursor - 编写代码 参考:https://www.youtube.com/watch?vIyIVvAu1KZ4 界面和claude类似,右侧展示效果和代码 https://pagen.so/

【Python常用模块】_cx_Oracle模块详解

课 程 推 荐我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈入 门 教 程 推 荐 :👉👉 Python零基础入门教程合集 👈👈虚 拟 环 境 搭 建 :👉👉 Python项目虚拟环境(超详细讲解) 👈👈PyQt5 系 列 教 程:👉👉 Python GUI(PyQt5)教程合集 👈👈…

【代码随想录训练营第42期 Day61打卡 - 图论Part11 - Floyd 算法与A * 算法

目录 一、Floyd算法与A * 算法 1、Floyd算法 思想 伪代码 2、 A * 算法 思想 伪代码 二、经典题目 题目一:卡码网 97. 小明逛公园 题目链接 题解:Floyd 算法 题目二:卡码网 127. 骑士的攻击 题目链接 题解:A * 算法&a…

基于java的工费医疗报销管理系统设计与实现

博主介绍:专注于Java vue .net php phython 小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设,从业十五余年开发设计教学工作 ☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不然下次找不到哟 我的博客空间发布了1000毕设题目 方便大家学习使用 感兴趣的…

单细胞BisqueRNA和BayesPrism去卷积分析工具简单比较

曾老师发来了一个工具,BisqueRNA,这个工具也可以用于单细胞/bulk数据的反卷积~ 因此本次就对这两个工具简单测评一下 ~ 生信菜鸟团:https://mp.weixin.qq.com/s/3dZQxDdY6M1WwMMcus5Gkg 笔者也曾经写过一个推文简单的介绍过,有…

C++的初阶模板和STL

C的初阶模板和STL 回顾之前的内存管理,我们还要补充一个概念:内存池 也就是定位new会用到的场景,内存池只会去开辟空间。 申请内存也就是去找堆,一个程序中会有很多地方要去找堆,这样子效率会很低下,为了…

必知的PDF转换软件:看2024大学生如何选择

你翻翻你文件的下载记录,是不是PDF文件占了大多数?很多是为了保证页面版式直接收到打印手填再扫描或者直接提交。但是如果能够直接在电脑上编辑之后直接转发或者打印是不是方便了很多?这次我就介绍几款可以进行PDF转换操作的工具,…

高效开发,从暗藏玄机的文件系统开始

4G-Cat.1模组的文件系统关乎数据传输速度、存储效率,以及数据安全性等等诸多因素,在应用开发中极为重要。 本期,我们来学习合宙Air201的实用示例——文件系统的使用 Air201文件系统的使用 合宙Air201资产定位模组——是一个集成超低功耗4G通…