自学内容网 自学内容网

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

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

更多详细内容请参考:《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
mkdir -p /opt/mongodb-shared-cluster/shared1-rs/

原文地址:https://blog.csdn.net/m0_37814112/article/details/142248187

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!