架构师第六周作业
目录
1.部署3节点mongodb复制集。
1.1 安装mongodb
1.2 部署复制集
2.部署3节点Kafka集群
1.部署3节点mongodb复制集。
1.1 安装mongodb
MongoDB安装包下载
下载地址:https://www.mongodb.com/try/download/community
版本根据需求选择,Mongodb6.0及以上的版本没有mongo命令
#部署环境apt update && apt install libcurl3 openssl# 创建所需用户和组useradd mongod# 创建 mongodb 所需目录结构mkdir -p /mongodb/{conf,data,log}# 创建 YAML 格式的配置文件 , 早期 3.0 版本以前是普通文本格式cat > /mongodb/conf/mongo.conf <<EOF# 日志相关systemLog:destination: filepath: "/mongodb/log/mongodb.log" # 日志位置logAppend: true # 追加日志# 数据存储有关storage:dbPath: "/mongodb/data/" # 数据路径的位置# 进程控制processManagement:fork : true # 后台守护进程# 网络配置有关net:port: 27017 # 端口号 , 默认不配置端口号,是 27017bindIp: 0 .0.0.0 # 监听地址自 MongoDB 3.6 版本后默认监听在 localhost# 安全验证有关配置#security:#authorization: enabled # 是否打开用户名密码验证 , 默认此项为关掉EOFcat /mongodb/conf/mongo.confsystemLog:destination: filepath: "/mongodb/log/mongodb.log"logAppend: truestorage:dbPath: "/mongodb/data/"processManagement:fork: truenet:port: 27017bindIp: 0 .0.0.0replication:replSetName: huangrepl #指定复制集名称,所有复制集成员此名称要一致chown -R mongod.mongod /mongodb/tar xf mongodb-linux-x86_64-ubuntu2004-5.0.3.tgz -C /usr/localln -s /usr/local/mongodb-linux-x86_64-rhel70-3.6.23-8-gc2609ed/ /usr/local/mongodb#service配置文件[Unit]
Description=mongodb
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
User=mongod
Group=mongod
ExecStart= /usr/local/mongodb/bin/mongod --config /mongodb/conf/mongo.conf
ExecReload=/bin/kill -s HUP \$MAINPID
ExecStop=usr/local/bin/mongod --config /mongodb/conf/mongo.conf --shutdown
PrivateTmp=true
# file size
LimitFSIZE=infinity
# cpu time
LimitCPU=infinity
# virtual memory size
LimitAS=infinity
# open files
LimitNOFILE=64000
# processes/threads
LimitNPROC=64000
# locked memory
LimitMEMLOCK=infinity
# total threads (user+kernel)
TasksMax=infinity
TasksAccounting=false
[Install]
WantedBy=multi-user.target
#启动服务
systemctl daemon-reload
systemctl enable --now mongod
1.2 部署复制集
# mongo管理工具下载
apt install mongodb-clients
或者安装mongosh
wget https://downloads.mongodb.com/compass/mongosh-1.6.0-linux-x64.tgz
#在主机上指定复制集成员信息
mongo
> config ={ _id: 'huangrepl', members: [{_id: 0, host: '10.0.0.100:27017'},{_id: 1, host: '10.0.0.200:27017'},{_id: 3, host: '10.0.0.201:27017'}]}
#json格式显示变量内容
> printjson(config)
{
"_id" : "huangrepl",
"members" : [
{
"_id" : 0,
"host" : "10.0.0.100:27017"
},
{
"_id" : 1,
"host" : "10.0.0.200:27017"
},
{
"_id" : 3,
"host" : "10.0.0.201:27017"
}
]
}
#初始化并启动复制集
> rs.initiate(config)
{ "ok" : 1 }
huangrepl:PRIMARY>#查看复制集信息
huangrepl:PRIMARY>
huangrepl:PRIMARY> rs.status()
{
"set" : "huangrepl",
"date" : ISODate("2024-08-12T06:35:54.276Z"),
"myState" : 1,
"term" : NumberLong(1),
"syncSourceHost" : "",
"syncSourceId" : -1,
"heartbeatIntervalMillis" : NumberLong(2000),
"majorityVoteCount" : 2,
"writeMajorityCount" : 2,
"votingMembersCount" : 3,
"writableVotingMembersCount" : 3...................
"members" : [
{
"_id" : 0,
"name" : "10.0.0.100:27017", #
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 896,
"optime" : {
"ts" : Timestamp(1723444549, 1),
"t" : NumberLong(1)
},
"optimeDate" : ISODate("2024-08-12T06:35:49Z"),
"syncSourceHost" : "",
"syncSourceId" : -1,
"infoMessage" : "",
"electionTime" : Timestamp(1723444499, 1),
"electionDate" : ISODate("2024-08-12T06:34:59Z"),
"configVersion" : 1,
"configTerm" : 1,
"self" : true,
"lastHeartbeatMessage" : ""
},
{
"_id" : 1,
"name" : "10.0.0.200:27017",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 64,
"optime" : {
"ts" : Timestamp(1723444549, 1),
"t" : NumberLong(1)
},
"optimeDurable" : {
"ts" : Timestamp(1723444549, 1),
"t" : NumberLong(1)
},
"optimeDate" : ISODate("2024-08-12T06:35:49Z"),
"optimeDurableDate" : ISODate("2024-08-12T06:35:49Z"),
"lastHeartbeat" : ISODate("2024-08-12T06:35:53.853Z"),
"lastHeartbeatRecv" : ISODate("2024-08-12T06:35:53.357Z"),
"pingMs" : NumberLong(0),
"lastHeartbeatMessage" : "",
"syncSourceHost" : "10.0.0.100:27017",
"syncSourceId" : 0,
"infoMessage" : "",
"configVersion" : 1,
"configTerm" : 1
},
{
"_id" : 3,
"name" : "10.0.0.201:27017",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 64,
"optime" : {
"ts" : Timestamp(1723444549, 1),
"t" : NumberLong(1)
},
"optimeDurable" : {
"ts" : Timestamp(1723444549, 1),
"t" : NumberLong(1)
},
"optimeDate" : ISODate("2024-08-12T06:35:49Z"),
"optimeDurableDate" : ISODate("2024-08-12T06:35:49Z"),
"lastHeartbeat" : ISODate("2024-08-12T06:35:53.853Z"),
"lastHeartbeatRecv" : ISODate("2024-08-12T06:35:53.357Z"),
"pingMs" : NumberLong(0),
"lastHeartbeatMessage" : "",
"syncSourceHost" : "10.0.0.100:27017",
"syncSourceId" : 0,
"infoMessage" : "",
"configVersion" : 1,
"configTerm" : 1
2.部署3节点Kafka集群
安装kafka
# 在三个 Ubuntu20.04 节点提前部署 zookeeper 和 kafka 三个节点复用node1:10.0.0.100node2:10.0.0.200node3:10.0.0.201# 注意 : 生产中 zookeeper 和 kafka 一般是分开独立部署的 ,kafka 安装前需要安装 java 环境
#部署java环境apt install openjdk-8-jdk -y
#下载二进制包wget -P /usr/local/src https://mirrors.tuna.tsinghua.edu.cn/apache/kafka/3.5.0/kafka_2.13-3.5.0.tgz
tar kafka_2.13-3.5.0.tgz -C /usr/local
ln -s /usr/local/kafka_2.13-3.5.0 /usr/local/kafka
#修改环境变量
echo PATH=/usr/local/kafka/bin:'$PATH' >/etc/profile.d/kafka.sh
. /etc/profile.d/kafka.sh
#生成配置文件
vim /usr/local/kafka/conf/server.properties
# broker 的 id ,值为整数,且必须唯一,在一个集群中不能重复broker .id = 1############################# Socket ServerSettings ####################### kafka 监听端口,默认 9092listeners = PLAINTEXT://10.0.0.101:9092# 处理网络请求的线程数量,默认为 3 个num.network .threads = 3# 执行磁盘 IO 操作的线程数量,默认为 8 个num.io .threads = 8# socket 服务发送数据的缓冲区大小,默认 100KBsocket.send.buffer .bytes = 102400# socket 服务接受数据的缓冲区大小,默认 100KBsocket.receive.buffer .bytes = 102400# socket 服务所能接受的一个请求的最大大小,默认为 100Msocket.request.max .bytes = 104857600############################# Log Basics#################################### kafka 存储消息数据的目录log .dirs = ../data# 每个 topic 默认的 partitionnum .partitions = 1# 设置副本数量为 3, 当 Leader 的 Replication 故障,会进行故障自动转移。default.replication .factor = 3# 在启动时恢复数据和关闭时刷新数据时每个数据目录的线程数量num.recovery.threads.per.data .dir = 1############################# Log FlushPolicy ############################## 消息刷新到磁盘中的消息条数阈值log.flush.interval .messages = 10000# 消息刷新到磁盘中的最大时间间隔 ,1slog.flush.interval .ms = 1000############################# Log RetentionPolicy ########################## 日志保留小时数,超时会自动删除,默认为 7 天log.retention .hours = 168# 日志保留大小,超出大小会自动删除,默认为 1G#log.retention.bytes=1073741824# 日志分片策略,单个日志文件的大小最大为 1G ,超出后则创建一个新的日志文件log.segment .bytes = 1073741824# 每隔多长时间检测数据是否达到删除条件 ,300slog.retention.check.interval .ms = 300000############################# Zookeeper ##################################### Zookeeper 连接信息,如果是 zookeeper 集群,则以逗号隔开zookeeper .connect = 10 .0.0.100:2181,10.0.0.200:2181,10.0.0.201:2181# 连接 zookeeper 的超时时间 ,6szookeeper.connection.timeout .ms = 6000# 是否允许删除 topic ,默认为 false , topic 只会标记为 marked for deletiondelete.topic .enable = true#创建数据目录mkdir /usr/local/kafka/data#创建service服务文件cat > /lib/systemd/system/kafka.service <<EOF
[Unit]
Description=Apache kafka
After=network.target
[Service]
Type=simple
#Environment=JAVA_HOME=/data/server/java
#PIDFile=/usr/local/kafka/kafka.pid
ExecStart=/usr/local/kafka/bin/kafka-server-start.sh /usr/local/kafka/config/server.properties
ExecStop=/bin/kill -TERM \${MAINPID}
Restart=always
RestartSec=20
[Install]
WantedBy=multi-user.target
#启动服务
systemctl daemon-reload
systemctl enable --now kafka.service
kafka-server-start.sh -daemon /usr/local/kafka/config/server.properties#验证
kafka-topics.sh --create --topic huang --bootstrap-server 10.0.0.100:9092 -partitions 3 --replication-factor 2
在其他节点上查询可以得到:
ls /usr/local/kafka/data/cleaner-offset-checkpoint huang-2 meta.properties replication-offset-checkpoint
huang-0 log-start-offset-checkpoint recovery-point-offset-checkpoint
相关文章:
架构师第六周作业
目录 1.部署3节点mongodb复制集。 1.1 安装mongodb 1.2 部署复制集 2.部署3节点Kafka集群 1.部署3节点mongodb复制集。 1.1 安装mongodb MongoDB安装包下载 下载地址:https://www.mongodb.com/try/download/community 版本根据需求选择,Mongodb6.…...
解密Java中介者模式:代码实例带你深入理解
1. 引言:中介者模式的重要性 在软件设计的世界里,模块间的相互依赖往往会导致系统的复杂性和维护难度的增加。中介者模式(Mediator Pattern)作为一种行为设计模式,它的出现就是为了解决这一问题。通过引入一个中介者对…...
19c做好这件事,大幅提升Data Pump工作效率
老司机遇到的新问题 expdp是Oracle 10g引入的数据导出工具,能够提供并行、压缩及元数据导出等更多的功能,在后续的版本中逐渐替代了传统的数据导出工具exp,是数据库开发运维常用的工具之一。在我的印象中,这个工具除了诸如大量的…...
6种常用的AR跟踪方法
增强现实 (AR) 是一项令人着迷的技术,可将虚拟内容与现实世界无缝集成。实现这种无缝集成的关键组件之一是跟踪。各种类型的跟踪用于确定 AR 内容在环境中的准确位置和方向。本文介绍 AR 最常见的6种跟踪方法。 NSDT工具推荐: Three.js AI纹理开发包 - Y…...
HBO引爆血腥浪漫,尺度全开必看的影视剧推荐
一直以来我们的僵尸题材电影风靡全国,同时西方也创作出吸血鬼题材、丧尸题材的影视剧也是层出不穷,那今天我们就来探讨下吸血鬼题材的影视剧。 吸血鬼题材的影视剧,一直以来都是观众的宠儿。从光鲜亮丽的《暮光之城》到狗血多角恋的《吸血鬼日…...
【kubernetes】pod控制器详解
一、pod控制器概述 1、Pod控制器作用 Pod控制器,是用于实现管理pod的中间层,确保pod资源符合预期的状态,pod的资源出现故障时,会尝试进行重启,当根据重启策略无效,则会重新新建pod的资源。 2、pod控制器…...
Zookeeper学习、Tomcat
怎样使用Zookeeper实现服务发现? 典型回答 服务发现是ZK的重要用途之一,当我们想要基于zk实现服务发现时,一般可以参考以下步骤:1. 向Zookeeper注册服务 服务提供者需要在Zookeeper上创建一个临时节点来注册自己的服务。节点的名…...
软件测试基础知识与面试题最强总结(2024版)
🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 一、什么是软件? 软件是计算机系统中的程序和相关文件或文档的总称。 二、什么是软件测试? 说法一:使用人工或自动的手段来运…...
ESP32播放网络音频文件
要使用ESP32播放网络上的音频文件,你可以通过以下步骤实现。ESP32可以使用Wi-Fi连接到互联网,下载音频文件并通过I2S接口输出音频数据。以下是一个示例,展示如何使用ESP32从URL获取音频文件并播放。 ESP32开发板。I2S DAC(如MAX9…...
端到端 AWS 定量分析:使用 AWS 和 AWSCLI 自动运行脚本
使用 AWSCLI 启动、运行和关闭 AWS 服务器 添加图片注释,不超过 140 字(可选) 欢迎来到雲闪世界。我们开发了两个 Python 脚本;一个用于为我们获取数据,另一个用于使用 sklearn 的决策树分类器处理数据。然后…...
数据结构与算法 - B树
一、概述 1. 历史 B树(B-Tree)结构是一种高效存储和查询数据的方法,它的历史可以追溯到1970年代早期。B树的发明人Rudolf Bayer和Edward M. McCreight分别发表了一篇论文介绍了B树。这篇论文是1972年发表于《ACM Transactions on Database Systems》中的ÿ…...
Java二十三种设计模式-观察者模式(15/23)
观察者模式:实现对象间的松耦合通知机制 引言 在当今的软件开发领域,设计模式已成为创建可维护、可扩展和可重用代码的基石。在众多设计模式中,观察者模式以其独特的能力,实现对象间的松耦合通信而脱颖而出。本文将深入探讨观察…...
opencv-python图像增强二:图像去雾(暗通道去雾)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一、简介:二、暗通道去雾方案简述:三、算法实现步骤3.1最小值滤波3.2 引导滤波3.3 计算图像全局光强 四:整体代码实现五…...
自研Vue3低代码海报制作平台第一步:基础拖拽组件开发
学习来源:稀土掘金 - 幽月之格大佬的技术专栏可拖拽、缩放、旋转组件 - 著作:可拖拽、缩放、旋转组件实现细节 非常感谢大佬!受益匪浅! 前面我们学习了很多vue3的知识,是时候把它们用起来做一个有意思的平台…...
QT 的 QSettings 读写 INI 文件的示例
在Qt中,QSettings 类提供了一种便捷的方式来存储和访问应用程序的设置,这些设置可以存储在多种格式的文件中,包括INI、Windows注册表(仅Windows平台)、XML和JSON等。以下是一些使用 QSettings 读写INI文件的示例。 写…...
【零基础学习CAPL语法】——testStep:测试结果输出函数
文章目录 1.函数介绍2.在报告中体现 1.函数介绍 testStep——测试结果输出函数 2.在报告中体现 //testStep() void PrintTxMsg() {testStep("Tx","[%x] [%.2x %.2x %.2x %.2x %.2x %.2x %.2x %.2x]",Diag_Req.id,Diag_Req.byte(0),Diag_Req.byte(1),Di…...
8.5.数据库基础技术-规范化
函数依赖 函数依赖:给定一个X,能唯一确定一个Y,就称X决定(确定)Y,或者说Y依赖于X。 例如:YX*X函数,此时X能确定Y的值,但是Y无法确定X的值,比如x2,y4,但是y4无法确定x2。函数依赖又可扩展以下两…...
于博士Cadence视频教程学习笔记备忘
标签:PCB教程 PCB设计步骤 cadence教程 Allegro教程 以下是我学习该视频教程的笔记,记录下备忘,欢迎大家在此基础上完善,能回传我一份是最好了,先谢过。 备注: 1、未掌握即未进行操作 2、操作软件是15.…...
8.3.数据库基础技术-关系代数
并:结果是两张表中所有记录数合并,相同记录只显示一次。交:结果是两张表中相同的记录。差:S1-S2,结果是S1表中有而S2表中没有的那些记录。 笛卡尔积:S1XS2,产生的结果包括S1和S2的所有属性列,并且S1中每条记…...
【Vue3】vue模板中如何使用enum枚举类型
简言 有的时候,我们想在vue模板中直接使用枚举类型的值,来做一些判断。 ts枚举 枚举允许开发人员定义一组命名常量。使用枚举可以更容易地记录意图,或创建一组不同的情况。TypeScript 提供了基于数字和字符串的枚举。 枚举的定义这里不说了…...
Linux 文件类型,目录与路径,文件与目录管理
文件类型 后面的字符表示文件类型标志 普通文件:-(纯文本文件,二进制文件,数据格式文件) 如文本文件、图片、程序文件等。 目录文件:d(directory) 用来存放其他文件或子目录。 设备…...
golang循环变量捕获问题
在 Go 语言中,当在循环中启动协程(goroutine)时,如果在协程闭包中直接引用循环变量,可能会遇到一个常见的陷阱 - 循环变量捕获问题。让我详细解释一下: 问题背景 看这个代码片段: fo…...
模型参数、模型存储精度、参数与显存
模型参数量衡量单位 M:百万(Million) B:十亿(Billion) 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的,但是一个参数所表示多少字节不一定,需要看这个参数以什么…...
AI Agent与Agentic AI:原理、应用、挑战与未来展望
文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例:使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例:使用OpenAI GPT-3进…...
java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别
UnsatisfiedLinkError 在对接硬件设备中,我们会遇到使用 java 调用 dll文件 的情况,此时大概率出现UnsatisfiedLinkError链接错误,原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用,结果 dll 未实现 JNI 协…...
Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)
目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...
条件运算符
C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...
HTML 列表、表格、表单
1 列表标签 作用:布局内容排列整齐的区域 列表分类:无序列表、有序列表、定义列表。 例如: 1.1 无序列表 标签:ul 嵌套 li,ul是无序列表,li是列表条目。 注意事项: ul 标签里面只能包裹 li…...
【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)
🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...
深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南
🚀 C extern 关键字深度解析:跨文件编程的终极指南 📅 更新时间:2025年6月5日 🏷️ 标签:C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言🔥一、extern 是什么?&…...
