架构师第六周作业
目录
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 提供了基于数字和字符串的枚举。 枚举的定义这里不说了…...
谷歌浏览器插件
项目中有时候会用到插件 sync-cookie-extension1.0.0:开发环境同步测试 cookie 至 localhost,便于本地请求服务携带 cookie 参考地址:https://juejin.cn/post/7139354571712757767 里面有源码下载下来,加在到扩展即可使用FeHelp…...
C++:std::is_convertible
C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...
模型参数、模型存储精度、参数与显存
模型参数量衡量单位 M:百万(Million) B:十亿(Billion) 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的,但是一个参数所表示多少字节不一定,需要看这个参数以什么…...

UDP(Echoserver)
网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法:netstat [选项] 功能:查看网络状态 常用选项: n 拒绝显示别名&#…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)
服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

家政维修平台实战20:权限设计
目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色…...
生成 Git SSH 证书
🔑 1. 生成 SSH 密钥对 在终端(Windows 使用 Git Bash,Mac/Linux 使用 Terminal)执行命令: ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" 参数说明: -t rsa&#x…...
代理篇12|深入理解 Vite中的Proxy接口代理配置
在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...

面向无人机海岸带生态系统监测的语义分割基准数据集
描述:海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而,目前该领域仍面临一个挑战,即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...

华为OD机考-机房布局
import java.util.*;public class DemoTest5 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseSystem.out.println(solve(in.nextLine()));}}priv…...