架构师第六周作业
目录
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 提供了基于数字和字符串的枚举。 枚举的定义这里不说了…...

组合求和2
题目描述: Given a collection of candidate numbers (candidates) and a target number (target), find all unique combinations in candidates where the candidate numbers sum to target. Each number in candidates may only be used once in the combinati…...

Apple Maps现在可在Firefox和Mac版Edge浏览器中使用
Apple Maps最初只能在 Windows 版 Safari、Chrome 浏览器和 Edge 浏览器上运行,现在已在其他浏览器上运行,包括 Mac 版 Firefox 和 Edge。经过十多年的等待,Apple Maps于今年 7 月推出了新版地图应用的测试版,但只能在有限的浏览器…...

基于嵌入式Linux的数据库
数据库 数据库是在数据库管理系统和控制之下,存放在存储 介质上的数据集合。 基于嵌入式的数据库 基于嵌入式linux的数据库主要有SQlite, Firebird,Berkeley DB,eXtremeDB Firebird是关系型数据库,功能强大,支持存储过 程&…...

C# 使用LINQ找出一个子字符串在另一个字符串中出现的所有位置
一、实现步骤 遍历主字符串,使用IndexOf方法查找子字符串的位置。如果找到了子字符串,记录其位置,并且从该位置的后面继续查找。重复上述步骤直到遍历完整个字符串。 二、简单代码示例 using System; using System.Collections.Generic; usi…...

YOLOv8添加MobileViTv3模块(代码+free)
目录 一、理由 二、方法 (1)导入MobileViTv3模块 (2)在ultralytics/nn/tasks.py的函数parse_model中修改 (3)在yaml配置文件中写入 (4)开始训练,先把其他梯度关闭&…...

从概念到落地:全面解析DApp项目开发的核心要素与未来趋势
随着区块链技术的迅猛发展,去中心化应用程序(DApp)逐渐成为Web3时代的重要组成部分。DApp通过智能合约和分布式账本技术,提供了无需信任中介的解决方案,这种去中心化的特性使其在金融、游戏、社交等多个领域得到了广泛…...

仓颉编程入门 -- 泛型概述 , 如何定义泛型函数
泛型概述 , 如何定义泛型函数 1 . 泛型的定义 在仓颉编程语言中,泛型机制允许我们定义参数化类型,这些类型在声明时不具体指定其操作的数据类型,而是作为类型形参保留,待使用时通过类型实参来明确。这种灵活性在函数和类型声明中…...

SOC估算方法之(OCV-SOC+安时积分法)
一、引言 此方法主要参考电动汽车用磷酸铁锂电池SOC估算方法这篇论文 总结: 开路电压的测量需要将电池静止相当长的一段时间才能达到平衡状态进行测量。 安时积分法存在初始SOC的估算和累积的误差。 所以上述两种方法都存在一定的缺陷,因此下面主要讲…...

指针(下)
文章目录 指针(下)野指针、空指针野指针空指针 二级指针**main**函数的原型说明 常量指针与指针常量常量指针指针常量常量指针常量 动态内存分配常用函数**malloc****calloc****realloc****free** **void**与**void***的区别扩展:形式参数和实际参数的对应关系 指针…...

C# 浅谈IEnumerable
一、IEnumerable 简介 IEnumerable 是一个接口,它定义了对集合进行迭代所需的方法。IEnumerable 接口主要用于允许开发者使用foreach循环来遍历集合中的元素。这个接口定义了一个名为 GetEnumerator 的方法,该方法返回一个实现了 IEnumerator 接口的对象…...