高可用集群(HAC)
1、高可用集群+keepalive说明
高可用定义:
- 目的:尽可能的提高服务的可用性
- 99%、99.9%、99.99%、99.999%
- 实现原理:心跳检测
- 服务:
- 有状态:
- MySQL
- 无状态:
- apache
- LVS
- 有状态:
Keepalive原理
- 案例环境专为 LVS和HA计一健康查工具
- 支持故障自动切换(Failover)
- 支持节点健康状态检查(Health Checking)
- 官方网站:http://www.keepalived.org/
Keepalive的热备方式
- VRRP(Virtual Router Redundancy Protocol:虚拟路由冗余协议)
- 一主+多备:共用同一个IP地址,但是优先级不同
同一个网段才会进行IP的争夺;
- 一个组里面各台主机会进行IP地址的漂移
2、LVS-DR+keepalive实验
首先搭建一个LVS-DR模式的均衡负载集群
规划:
- LVS-负载调度器:
- 192.168.75.10–LVS-master
- LVS负载调度器都配置LVS-DR模式
- 关闭广播功能;重定向功能
- 关闭网卡守护进程NetworManager
- 添加一个子网卡:eth0:0
- 192.168.75.100(地址漂移使用的)
- 然后拉起来ifup,ifdown eth0:0
- 添加一个集群
- 然后直接添加子节点
- 安装keepalive
- 安装gcc环境
- 准备keepalive源码包–>源码编译安装
- 安装完成后修改配置文件:并不是所有的都要使用,
- LVS负载调度器都配置LVS-DR模式
- 192.168.75.11–LVS-slave
- 关闭网卡守护进程NetworManager
- 配置好集群IP–eth0:0–>这里也是配置100;
- 问题是:同一个局域网里面两个100的ip是不行的
- 因此注释掉本机的一个文件/etc/sysconfig/networ-scripts/ifup-eth–>大概是注释257行
- 192.168.75.10–LVS-master
- 后端服务器:
- 192.168.75.12/13
- 安装httpd服务–>开启并且永久开启
- 编写一个网站
- 然后自己测试一下;
- 添加一个100的接口–>lo:0
- 子网掩码是4个255
- 然后修改一下内核参数
- sysctl -p
- 添加路由记录
- 客户端:
- 网页访问
- 尝试关闭LVS-master
- 然后关闭httpd第一台
- 网页访问
LVS-master负载调度器配置如下
- 先搭建一个LVS-DR
#关闭网卡守护进程-->关闭NetworkManager
[root@node0 ~]# service NetworkManager stop
[root@node0 ~]# chkconfig NetworkManager off#创建一个eth0:0用来充当集群入口接口
[root@node0 ~]# cd /etc/sysconfig/network-scripts/
[root@node0 network-scripts]# cp ifcfg-eth0 ifcfg-eth0:0#修改配置文件-->添加一个ip-->100
[root@node0 network-scripts]# vim ifcfg-eth0:0
DEVICE=eth0:0 #这里需要修改网卡名
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.75.100 #然后修改IP-->一个虚拟的IP
NETMASK=255.255.255.0#然后关闭网卡的重定向功能
[root@node0 ~]# vim /etc/sysctl.conf #在末行添加如下内容
#关闭网卡重定向功能
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.eth0.send_redirects = 0#然后刷新配置
[root@node0 ~]# sysctl -p#到这里可以拉起eth0:0的网卡
[root@node0 ~]# ifup eth0:0#在验证一眼是否拉起来了
[root@node0 ~]# ifconfig eth0:0#加载一下ip_vs模块
[root@node0 ~]# modprobe ip_vs#安装一下lvsadm
[root@node0 ~]# yum -y install ipvsadm#添加一下集群-->12/13是后端服务器
-->-A是添加一个集群
-->-t是指定一个虚拟ip以及端口
-->-s:指定轮询模式为rr
[root@node0 ~]# ipvsadm -A -t 192.168.75.100:80 -s rr#添加集群子节点-->添加的机器是12/13
-->-a:添加子节点
-->-r:指定子节点的真实ip以及端口
-->-g:指定了是DR模式
[root@node0 ~]# ipvsadm -a -t 192.168.75.100:80 -r 192.168.75.12:80 -g
[root@node0 ~]# ipvsadm -a -t 192.168.75.100:80 -r 192.168.75.13:80 -g#最后查看一下集群信息
[root@node0 ~]# ipvsadm -Ln
[root@node0 ~]# ipvsadm -Ln --stats#把这个集群写入配置文件
[root@node0 ~]# service ipvsadm save
配置两台后端服务器
- 安装httpd
- 以及编写各自的发布页面
- 修改内核参数
- 关闭ARP功能
- 给与一个虚拟IP;
- 并且指定一下路由
#两台后端的服务器都是一样的配置,唯一不一样的就是发布的页面不同#关闭一下NetworkManager
[root@node2 ~]# service NetworkManager stop
[root@node2 ~]# chkconfig NetworkManager off#准备一个回环口-->lo:0
[root@node2 ~]# cd /etc/sysconfig/network-scripts/
[root@node2 network-scripts]# cp -a ifcfg-lo ifcfg-lo:0#然后配置一个虚拟ip
[root@node2 network-scripts]# vim ifcfg-lo:0
DEVICE=lo:0
IPADDR=192.168.75.100
NETMASK=255.255.255.255
........
#调整内核参数-->关闭ARP功能
[root@node2 ~]# vim /etc/sysctl.conf
.........
#关闭ARP功能
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2_
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 3
#重新拉取一下配置
[root@node2 ~]# sysctl -p#到这里为止-->可以拉起来lo:0的网卡了
[root@node2 ~]# ifup lo:0#添加一个路由-->#如果有人来访问这个ip就把它丢给lo:0网卡
[root@node2 ~]# route add -host 192.168.75.100 dev lo:0#然后配置开机自启
[root@node2 ~]# echo "route add -host 192.168.75.100 dev lo:0" >> /etc/rc.local #安装apache
[root@node2 ~]# yum -y install httpd#修改发布页面
[root@node2 ~]# vim /var/www/html/index.html
aaaaaaaaaaaaaaaaaaaaaaaa#启动服务-->并且设置开机自启
[root@node2 ~]# service httpd start
[root@node2 ~]# chkconfig httpd on#自己测试一下
[root@node2 ~]# curl localhost
aaaaaaaaaaaaaaaaaaaaaaaa
然后简单地从浏览器上面验证一下LVS-DR
http://192.168.75.100/
- 看到了aaaa和bbb轮询就代表LVS-DR搭建完成
接下来回到LVS-master服务器上面操作
- 就是node0–>ip:10的服务器上面操作
- 安装keepalive
- 并且配置
#首先安装一下必要的依赖
[root@node0 ~]# yum -y install kernel-devel openssl-devel gcc*#准备好keepalive的源码包
[root@node0 ~]# ls keepalived-1.2.13.tar.gz
keepalived-1.2.13.tar.gz#解压源码包
[root@node0 ~]# tar -xf keepalived-1.2.13.tar.gz
[root@node0 ~]# ls#预编译、编译、安装
[root@node0 ~]# cd keepalived-1.2.13
[root@node0 keepalived-1.2.13]# ./configure --prefix=/usr/local/keepalive/ --with-kernel-dir=/usr/src/kernels/2.6.32-358.el6.x86_64/ && make && make install#修改配置文件-->调整好参数#操作前切勿忘记备份
[root@node0 ~]# cp -a /usr/local/keepalive/etc/keepalived/keepalived.conf{,.bak}
[root@node0 ~]# vim /usr/local/keepalive/etc/keepalived/keepalived.conf#配置文件里面有些是不需要的,需要删除;有些是需要添加的,以下是配置文件的解析;#全局配置只留下一个主机名
global_defs {router_id server1 #命名主机名
}#定义一个示例-->这里可以选择默认
vrrp_instance VI_1 {state MASTER #设置服务类型主/从(MASTER/SLAVE)interface eth0 #指定那块网卡用来监听virtual_router_id 51 #设组号, 如果是一组就是相同的ID 号,一个主里面只能有一个主服务器和多个从服务器priority 100 #服务器优先级, 主服务器优先级高advert_int 1 #心跳时间, 检测对方存活authentication { #存活验证密码auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.75.100 #定义一个集群的地址}
virtual_server 192.168.75.100 80 { #设置集群地址 以及端口号delay_loop 6 #健康检查间隔lb_algo rr #使用轮询调度算法lb_kind DR #DR模式的群集protocol TCP #使用的协议real_server 192.168.75.12 80 { #管理的网站节点以及使用端口weight 1 #权重,优先级 在原文件基础上删除修改TCP_CHECK { #状态检查方式connet_port 80 #检查的目标端口connet_timeout 3 #连接超时《秒)nb_get_retry 3 #重试次数delay_before_retry 4 #重试间隔《秒)}}real_server 192.168.75.13 80 { #管理的第二个网站节点以及使用端口weight 1 #权重, 优先级 在原文件基础上删除修改TCP_CHECK { #状态检查方式connet_port 80 #检查的目标端口connet_timeout 3 #连接超时《秒)nb_get_retry 3 #重试次数delay_before_retry 4 #重试间隔《秒)}}
}
#然后把多余的配置文件内容都删除-->然后保存退出#然后启动keepalive
[root@node0 ~]# /usr/local/keepalive/sbin/keepalived
[root@node0 ~]# ps -ef | grep keep
.........#看到了keepalive就证明启动成功了;
接下来就配置LVS-slave服务器
-
IP:192.168.75.11
-
安装keepalive服务–>并且配置好
-
一样要配置ipvsadm
#关闭NetworkManager
[root@node1 ~]# service NetworkManager stop
[root@node1 ~]# chkconfig NetworkManager off#安装一下keepalive的依赖
[root@node1 ~]# yum -y install kernel-devel openssl-devel popt-devel gcc*
.........#准备好源码包
[root@node1 ~]# ls keepalived-1.2.13.tar.gz
keepalived-1.2.13.tar.gz#预编译、编译、安装keepalive
[root@node1 ~]# tar -xf keepalived-1.2.13.tar.gz
[root@node1 ~]# cd keepalived-1.2.13
[root@node1 keepalived-1.2.13]# ./configure --prefix=/usr/local/keepalive/ --with-kernel-dir=/usr/src/kernels/2.6.32-358.el6.x86_64/ && make && make install#准备好配置文件-->之前master做的配置可以给到slave使用#做好备份-->养成良好习惯
[root@node1 ~]# cp -a /usr/local/keepalive/etc/keepalived/keepalived.conf{,.bak}#这一条命令在LVS-master上面执行-->简单理解就是传个已经修改过的文件给到slave
[root@node0 ~]# scp /usr/local/keepalive/etc/keepalived/keepalived.conf root@192.168.75.11:/usr/local/keepalive/etc/keepalived/#修改配置文件
[root@node1 ~]# vim /usr/local/keepalive/etc/keepalived/keepalived.conf#因为之前在master上面已经修改过-->因此只需要修改几个地方就ok
..........8 state SLAVE #改为从服务器11 priority 50 #优先级改为50-->就可以保存退出了#配置虚拟网卡
[root@node1 network-scripts]# cp ifcfg-eth0 ifcfg-eth0:0[root@node1 network-scripts]# vim ifcfg-eth0:0
DEVICE=eth0:0
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.75.100
NETMASK=255.255.255.0#这里注意不要急着启动网卡-->因为相同网段会产生IP冲突#因此要注释掉配置文件的内容-->大概在243行左右-->把这个注释掉就不会报错
[root@node1 network-scripts]# vim ifup-eth
.......
243 # if ! /sbin/arping -q -c 2 -w 3 -D -I ${REALDEVICE} ${ipaddr[$idx]} ; then
244 # net_log $"Error, some other host already uses address ${ipaddr[$idx]}."
245 # exit 1
246 # fi#然后修改一下内核参数# 修改内核参数。 防止相同网络地址广播冲突,如果有多快网卡需要设置多行
[root@node1 ~]# vim /etc/sysctl.conf #在末行添加一下几行
#关闭网卡重定向功能
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.eth0.send_redirects = 0#刷新内核参数
root@node1 ~]# sysctl -p#到这里就可以启动网卡eth0:0网卡了
[root@node1 ~]# ifup eth0:0
[root@node1 ~]# ifconfig eth0:0#然后配置ipvsadm
[root@node1 ~]# yum -y install ipvsadm#查看一下是否加载IP_VS
[root@node1 ~]# modprobe ip_vs#查看一下版本
[root@node1 ~]# cat /proc/net/ip_vs
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port Forward Weight ActiveConn InActConn#添加集群以及集群节点
[root@node1 ~]# ipvsadm -A -t 192.168.75.100:80 -s rr
[root@node1 ~]# ipvsadm -a -t 192.168.75.100:80 -r 192.168.75.12 -g
[root@node1 ~]# ipvsadm -a -t 192.168.75.100:80 -r 192.168.75.13 -g#启动ipvs并且顺势启动keepalive
[root@node1 ~]# service ipvsadm start
[root@node1 ~]# /usr/local/keepalive/sbin/keepalived
浏览器继续验证
- 现在是LVS的主从都已经启动了;
- 浏览器访问:http://192.168.75.100/—>正常
然后现在关闭LVS-master–>直接让他断网
- 验证一下LVS-slave是否能够接盘
- 浏览器访问:http://192.168.75.100/—>正常
#去到LVS-slave查看流量
[root@node1 ~]# ipvsadm -Ln --stats
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Conns InPkts OutPkts InBytes OutBytes-> RemoteAddress:Port
TCP 192.168.75.100:80 37 185 0 25524 0-> 192.168.75.12:80 18 90 0 12391 0-> 192.168.75.13:80 19 95 0 13133 0
然后再关闭一台后端服务器
- 浏览器访问:http://192.168.75.100/—>发现少了aaaa的那台主机
相关文章:
高可用集群(HAC)
1、高可用集群keepalive说明 高可用定义: 目的:尽可能的提高服务的可用性 99%、99.9%、99.99%、99.999% 实现原理:心跳检测服务: 有状态: MySQL 无状态: apacheLVS Keepalive原理 案例环境专为 LVS和…...
python基于django微信小程序的适老化老人健康预警小程序
随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息。为了迎合时代需求,优化管理效率,各种各样的管理系统应运而生,各行各业相继进入信息管理时代, 适老化老人健康预警微信小程序就是信息时代变革中的产物之一。 任何系统都要遵…...
基于微信小程序图书馆管理系统
开发工具:IDEA、微信小程序服务器:Tomcat9.0, jdk1.8项目构建:maven数据库:mysql5.7前端技术:vue、uniapp服务端技术:springbootmybatis-plus本系统分微信小程序和管理后台两部分,项…...
将镭神C32激光雷达的PointXYZ数据转化为PointXYZIR格式 - 附代码
之前遇到过“镭神32线激光雷达ROS下运行fromRosMsg()报错 Failed to find match for field “intensity“ 问题”, 当时确定了是镭神C32雷达缺少相应字段,并记录博客【学习记录】镭神32线激光雷达ROS下运行fromRosMsg()报错 Failed to find match for fi…...
高级前端一面面试题集锦
详细说明 Event loop 众所周知 JS 是门非阻塞单线程语言,因为在最初 JS 就是为了和浏览器交互而诞生的。如果 JS 是门多线程的语言话,我们在多个线程中处理 DOM 就可能会发生问题(一个线程中新加节点,另一个线程中删除节点&#…...
Java基础 -- List集合
Java基础 -- List集合1. Introduction1.1 好处1.2 常用泛型2. 交集,差集等2.1 自身的方法2.2 1.8jdk stream 新特性2.3 Apache的CollectionUtils工具类(推荐)3. 限定泛型范围4. Awakening1. Introduction 1.1 好处 代码复用,多种…...
【Linux】网络编程 - Socket套接字/基于UDP的网络通信
目录 一.套接字 1.什么是套接字/Socket套接字 2.套接字的分类 3.Socket套接字的常见API 二.网络字节序 1.什么是网络字节序 2.网络字节序和主机字节序的转换接口 三.IP地址形式上的转换 四.客户端的套接字不由程序员bind 1.为什么客户端套接字不能由程序员bind 2.OS…...
流程引擎之Camunda简介
背景Camunda 是支持 BPMN(工作流和流程自动化)、CMMN(案例管理) 和 DMN(业务决策管理) java 框架。Camunda 基于Activiti5 保留了 PVM,其开发团队也是从 activiti 中分裂出来的。Camunda 来自拉…...
Mybatis笔记整理
1. 相关文档地址 中文文档 https://mybatis.org/mybatis-3/zh/index.htmlMybatis可以配置成适应多种环境,不过每个SqlSessionFactory实例只能选择一种环境。Mybatis默认事务管理器是JDBC,连接池:POOLEDMaven仓库:下载地址<dependency>…...
【react全家桶】面向组件编程
文章目录02 【面向组件编程】1.组件的使用1.1 函数式组件1.2 类式组件1.3 组合组件1.4 提取组件组件实例的三大属性 state props refs2.state2.1 基本使用2.2 setState()2.3 简化版本2.4 State 的更新可能是异步的2.5 异步更新解决方案2.6 数据是向下流动的3.props3.1 基本使用…...
Django框架之模型视图-使用 PostMan 对请求进行测试
使用 PostMan 对请求进行测试 PostMan 是一款功能强大的网页调试与发送网页 HTTP 请求的 Chrome 插件,可以直接去对我们写出来的路由和视图函数进行调试,作为后端程序员是必须要知道的一个工具。 安装方式1:去 Chrome 商店直接搜索 PostMan…...
(考研湖科大教书匠计算机网络)第五章传输层-第四节:TCP流量控制
获取pdf:密码7281专栏目录首页:【专栏必读】考研湖科大教书匠计算机网络笔记导航 文章目录一:流量控制概述二:流量控制举例三:拓展阅读(可不看)(1)TCP流量控制完整例子&a…...
使用Docker-Compose搭建Redis集群
1. 集群配置3主3从由于仅用于测试,故我这里只用1台服务器进行模拟redis列表2.编写redis.conf在server上创建一个目录用于存放redis集群部署文件。这里我放的路径为/root/redis-cluster 在/opt/docker/redis-cluster目录下创建redis-1,redis-2,redis-3,redis-4,redis…...
华为OD机试 -计算网络信号(Js)
计算网络信号 题目 网络信号经过传递会逐层衰减,且遇到阻隔物无法直接穿透,在此情况下需要计算某个位置的网络信号值。 注意:网络信号可以绕过阻隔物 array[m][n] 的二维数组代表网格地图,array[i][j] = 0代表 i 行 j 列是空旷位置;array[i][j] = x(x 为正整数)代表 i 行 …...
【数据结构】————栈
文章目录前言栈是什么,栈的特点实现栈的基本操作栈的相关操作声明1.创建栈2.对栈进行初始化3.销毁栈4.判断栈是否为空5.压栈操作6.删除栈顶元素7.取出栈顶元素8.计算栈内存放多少个数据总结前言 本文主要讲述特殊的线性表——栈: 栈是什么,栈…...
从零编写linux0.11 - 第十一章 可执行文件
从零编写linux0.11 - 第十一章 可执行文件 编程环境:Ubuntu 20.04、gcc-9.4.0 代码仓库:https://gitee.com/AprilSloan/linux0.11-project linux0.11源码下载(不能直接编译,需进行修改) 本章目标 本章会加载并运行…...
Win10上通过nginx代理配置远程非445端口SMB
引言 家里架了一个SMB文件服务器,想要远程访问,开了445端口,但仅限某些特殊网络可以远程访问,其他网络全部拒绝445端口,因此网上找了很多将Win10的SMB指向别的端口的教程,但所有教程均使用环回网卡解决&am…...
Allegro如何快速清除多余的规则设置操作指导
Allegro如何快速清除多余的规则设置操作指导 在用Allegro做PCB设计的时候,会给PCB设置一些规则,在PCB设计完成之后,可能会有一些没有使用到的规则,如下图 Physical规则中的45OHM的规则是多余的 单独某个规则可以直接在规则管理器中删除,如果比较多可以用下面方法批量删除…...
ROS2 入门应用 引用自定义消息(Python)
ROS2 入门应用 引用自定义消息(Python)1. 查看自定义消息2. 修改话题发布3. 修改话题订阅4. 修改依赖关系5. 编译和运行1. 查看自定义消息 引用在《ROS2 入门应用 创建自定义接口》中自定义的消息Sphere.msg ros2 interface show tutorial_interfaces/…...
SmS-Activate一款好用的短信验证码接收工具
前言 有些国外应用在使用应用上的功能时需要注册账号,由于某种不可抗因素,我们的手机号一般不支持注册,接收不到信息验证码,于是我们可以使用SmS-Activate提供的服务,使用$实现我们的需求(大概一次验证1-5…...
linux arm系统烧录
1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...
深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南
🚀 C extern 关键字深度解析:跨文件编程的终极指南 📅 更新时间:2025年6月5日 🏷️ 标签:C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言🔥一、extern 是什么?&…...
【HTTP三个基础问题】
面试官您好!HTTP是超文本传输协议,是互联网上客户端和服务器之间传输超文本数据(比如文字、图片、音频、视频等)的核心协议,当前互联网应用最广泛的版本是HTTP1.1,它基于经典的C/S模型,也就是客…...
根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:
根据万维钢精英日课6的内容,使用AI(2025)可以参考以下方法: 四个洞见 模型已经比人聪明:以ChatGPT o3为代表的AI非常强大,能运用高级理论解释道理、引用最新学术论文,生成对顶尖科学家都有用的…...
Go 并发编程基础:通道(Channel)的使用
在 Go 中,Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式,用于在多个 Goroutine 之间传递数据,从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...
windows系统MySQL安装文档
概览:本文讨论了MySQL的安装、使用过程中涉及的解压、配置、初始化、注册服务、启动、修改密码、登录、退出以及卸载等相关内容,为学习者提供全面的操作指导。关键要点包括: 解压 :下载完成后解压压缩包,得到MySQL 8.…...
【Linux】自动化构建-Make/Makefile
前言 上文我们讲到了Linux中的编译器gcc/g 【Linux】编译器gcc/g及其库的详细介绍-CSDN博客 本来我们将一个对于编译来说很重要的工具:make/makfile 1.背景 在一个工程中源文件不计其数,其按类型、功能、模块分别放在若干个目录中,mak…...
Elastic 获得 AWS 教育 ISV 合作伙伴资质,进一步增强教育解决方案产品组合
作者:来自 Elastic Udayasimha Theepireddy (Uday), Brian Bergholm, Marianna Jonsdottir 通过搜索 AI 和云创新推动教育领域的数字化转型。 我们非常高兴地宣布,Elastic 已获得 AWS 教育 ISV 合作伙伴资质。这一重要认证表明,Elastic 作为 …...
【Kafka】Kafka从入门到实战:构建高吞吐量分布式消息系统
Kafka从入门到实战:构建高吞吐量分布式消息系统 一、Kafka概述 Apache Kafka是一个分布式流处理平台,最初由LinkedIn开发,后成为Apache顶级项目。它被设计用于高吞吐量、低延迟的消息处理,能够处理来自多个生产者的海量数据,并将这些数据实时传递给消费者。 Kafka核心特…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现指南针功能
指南针功能是许多位置服务应用的基础功能之一。下面我将详细介绍如何在HarmonyOS 5中使用DevEco Studio实现指南针功能。 1. 开发环境准备 确保已安装DevEco Studio 3.1或更高版本确保项目使用的是HarmonyOS 5.0 SDK在项目的module.json5中配置必要的权限 2. 权限配置 在mo…...
