keepalived和lvs高可用集群

news/2024/9/17 7:56:07/ 标签: lvs, 运维, linux

lvs_0">keepavlied和lvs高可用集群搭建

主备模式:

在这里插入图片描述

关闭防火墙和selinux

systemctl stop firewalld
setenforce 0

部署master负载调度服务器 zyj86

安装ipvsadm keepalived

yum install -y keepalived ipvsadm

修改主节点配置

vim /etc/keepalived/keepalived.conf
! Configuration File for keepalivedglobal_defs {notification_email {root@localhost #邮件设置}notification_email_from root@localhost#发邮件的地址smtp_server 127.0.0.1#邮件服务器地址smtp_connect_timeout 30#邮件服务器连接timeoutrouter_id zyjhost86 #每个keepalived主机的唯一标识,建议使用主机名vrrp_skip_check_adv_addr#对所有通告报文都检查,会比较消耗性能,启用此配置后,如果收到的通告报文和上一个报文是同一个路由器,则跳过检查,默认值为全检查#vrrp_strict#严格遵守VRRP协议,启用此项后以下状况将无法启动服务:1.无VIP地址 2.配置了单播邻居 3.在VRRP版本2中有IPv6地址,开启动此项并且没有配置vrrp_iptables时会自动开启iptables防火墙规则,默认导致VIP无法访问,建议不加此项配置。vrrp_garp_interval 0#gratuitous ARP messages 免费ARP报文发送延迟,0表示不延迟vrrp_gna_interval 0 #unsolicited NA messages (不请自来)消息发送延迟
}vrrp_instance VI_1 {state MASTER #当前节点在此虚拟路由器上的初始状态,状态为MASTER或者BACKUPinterface ens160virtual_router_id 51 #每个虚拟路由器惟一标识,范围:0-255,每个虚拟路由器此值必须唯一,否则服务无法启动,同属一个虚拟路由器的多个keepalived节点必须相同,务必要确认在同一网络中此值必须唯一priority 100 #优先级,master优先级一定要大于backup#当前物理节点在此虚拟路由器的优先级,范围:1-254,值越大优先级越高,每个keepalived主机节点此值不同advert_int 1 #master和backup之间通告间隔的秒数(心跳频率)authentication {auth_type PASS #认证信息auth_pass 1111 #认证信息}virtual_ipaddress {192.168.3.188 #虚拟ip地址}
}#虚拟地址 端口
virtual_server 192.168.3.188 80 {delay_loop 6#健康间隔时间6秒lb_algo rr#调度算法轮询lb_kind DR#lvs模式为DR直连路由模式persistence_timeout 50#连接保持时间为50 可以修改为0 轮询较快protocol TCP#采用协议#后端真实服务器节点的ip地址real_server 192.168.3.88 80 {weight 1#节点权重TCP_CHECK {connect_port 80#检查目标端口connect_timeout 3#连接超时 nb_get_retry 3#重试次数delay_before_retry 3#重试间隔时间}#tcp检测后端服务器节点是否正常}real_server 192.168.3.89 80 {weight 1TCP_CHECK {connect_port 80connect_timeout 3nb_get_retry 3delay_before_retry 3}}}
systemctl enable --now keepalived.service

部署backup负载调度服务器 zyj87

安装ipvsadm keepalived

yum install -y keepalived ipvsadm

修改备用节点配置

vim /etc/keepalived/keepalived.conf
! Configuration File for keepalivedglobal_defs {notification_email {root@localhost #邮件设置}notification_email_from root@localhost#发邮件的地址smtp_server 127.0.0.1#邮件服务器地址smtp_connect_timeout 30#邮件服务器连接timeoutrouter_id zyjhost87 #每个keepalived主机的唯一标识,建议使用主机名vrrp_skip_check_adv_addr#对所有通告报文都检查,会比较消耗性能,启用此配置后,如果收到的通告报文和上一个报文是同一个路由器,则跳过检查,默认值为全检查#vrrp_strict#严格遵守VRRP协议,启用此项后以下状况将无法启动服务:1.无VIP地址 2.配置了单播邻居 3.在VRRP版本2中有IPv6地址,开启动此项并且没有配置vrrp_iptables时会自动开启iptables防火墙规则,默认导致VIP无法访问,建议不加此项配置。vrrp_garp_interval 0#gratuitous ARP messages 免费ARP报文发送延迟,0表示不延迟vrrp_gna_interval 0 #unsolicited NA messages (不请自来)消息发送延迟
}vrrp_instance VI_1 {state BACKUP #当前节点在此虚拟路由器上的初始状态,状态为MASTER或者BACKUPinterface ens160virtual_router_id 51 #每个虚拟路由器惟一标识,范围:0-255,每个虚拟路由器此值必须唯一,否则服务无法启动,同属一个虚拟路由器的多个keepalived节点必须相同,务必要确认在同一网络中此值必须唯一priority 99 #优先级,master优先级一定要大于backup#当前物理节点在此虚拟路由器的优先级,范围:1-254,值越大优先级越高,每个keepalived主机节点此值不同advert_int 1 #master和backup之间通告间隔的秒数(心跳频率)authentication {auth_type PASS #认证信息auth_pass 1111 #认证信息}virtual_ipaddress {192.168.3.188 #虚拟ip地址}
}#虚拟地址 端口
virtual_server 192.168.3.188 80 {delay_loop 6#健康间隔时间6秒lb_algo rr#调度算法轮询lb_kind DR#lvs模式为DR直连路由模式persistence_timeout 50#连接保持时间为50 可以修改为0 轮询较快protocol TCP#采用协议#后端真实服务器节点的ip地址real_server 192.168.3.88 80 {weight 1#节点权重TCP_CHECK {connect_port 80#检查目标端口connect_timeout 3#连接超时 nb_get_retry 3#重试次数delay_before_retry 3#重试间隔时间}#tcp检测后端服务器节点是否正常}real_server 192.168.3.89 80 {weight 1TCP_CHECK {connect_port 80connect_timeout 3nb_get_retry 3delay_before_retry 3}}}
systemctl enable --now keepalived.service

keepalived会在ens160网卡上生成一个vip虚拟地址192.168.3.188

[root@zyj86 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000link/ether 00:0c:29:29:83:01 brd ff:ff:ff:ff:ff:ffaltname enp3s0inet 192.168.3.86/24 brd 192.168.3.255 scope global noprefixroute ens160valid_lft forever preferred_lft foreverinet 192.168.3.188/32 scope global ens160valid_lft forever preferred_lft foreverinet6 fe80::20c:29ff:fe29:8301/64 scope link noprefixroute valid_lft forever preferred_lft forever

当主节点(192.168.3.86 zyj86)宕机后vip虚拟地址(192.168.3.188)会飘移到备用节点上即(192.168.3.87 zyj87)主机上。

部署后端服务器zyj88

#配置lo口ip地址
ifconfig lo:1 192.168.3.188/32
echo "ifconfig lo:1 192.168.3.188/32" >> /etc/rc.d/rc.local
chmod +x /etc/rc.d/rc.local#添加系统只响应目的IP为本地IP的ARP请求
#系统不使用原地址来设置ARP请求的源地址,而是物理mac地址上的IP
vim /etc/sysctl.conf
#加入以下配置
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 = 2#刷新配置
sysctl -p

安装web服务器 写入测试页面

yum install httpd -y
echo "zyj88" > /var/www/html/index.html
systemctl enable --now httpd

部署后端服务器zyj89

#配置lo口ip地址
ifconfig lo:1 192.168.3.188/32
echo "ifconfig lo:1 192.168.3.188/32" >> /etc/rc.d/rc.local
chmod +x /etc/rc.d/rc.local#添加系统只响应目的IP为本地IP的ARP请求
#系统不使用原地址来设置ARP请求的源地址,而是物理mac地址上的IP
vim /etc/sysctl.conf
#加入以下配置
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 = 2#刷新配置
sysctl -p

安装web服务器 写入测试页面

yum install httpd -y
echo "zyj89" > /var/www/html/index.html
systemctl enable --now httpd

访问测试:
在这里插入图片描述

互为主备模式:

在这里插入图片描述

关闭防火墙和selinux

systemctl stop firewalld
setenforce 0

部署master/backup负载调度服务器 zyj86

安装ipvsadm keepalived

yum install -y keepalived ipvsadm

修改负载调度服务器 zyj86配置

vim /etc/keepalived/keepalived.conf
! Configuration File for keepalivedglobal_defs {notification_email {root@localhost #邮件设置}notification_email_from root@localhost#发邮件的地址smtp_server 127.0.0.1#邮件服务器地址smtp_connect_timeout 30#邮件服务器连接timeoutrouter_id zyjhost86 #每个keepalived主机的唯一标识,建议使用主机名vrrp_skip_check_adv_addr#对所有通告报文都检查,会比较消耗性能,启用此配置后,如果收到的通告报文和上一个报文是同一个路由器,则跳过检查,默认值为全检查#vrrp_strict#严格遵守VRRP协议,启用此项后以下状况将无法启动服务:1.无VIP地址 2.配置了单播邻居 3.在VRRP版本2中有IPv6地址,开启动此项并且没有配置vrrp_iptables时会自动开启iptables防火墙规则,默认导致VIP无法访问,建议不加此项配置。vrrp_garp_interval 0#gratuitous ARP messages 免费ARP报文发送延迟,0表示不延迟vrrp_gna_interval 0 #unsolicited NA messages (不请自来)消息发送延迟
}vrrp_instance VI_1 {state MASTER #当前节点在此虚拟路由器上的初始状态,状态为MASTER或者BACKUPinterface ens160virtual_router_id 51 #每个虚拟路由器惟一标识,范围:0-255,每个虚拟路由器此值必须唯一,否则服务无法启动,同属一个虚拟路由器的多个keepalived节点必须相同,务必要确认在同一网络中此值必须唯一priority 100 #优先级,master优先级一定要大于backup#当前物理节点在此虚拟路由器的优先级,范围:1-254,值越大优先级越高,每个keepalived主机节点此值不同advert_int 1 #master和backup之间通告间隔的秒数(心跳频率)authentication {auth_type PASS #认证信息auth_pass 1111 #认证信息}virtual_ipaddress {192.168.3.188 #虚拟ip地址}
}#互为主备就再加一组配置
vrrp_instance VI_2 {state BACKUP #当前节点在此虚拟路由器上的初始状态,状态为MASTER或者BACKUPinterface ens160virtual_router_id 40#每个虚拟路由器惟一标识,范围:0-255,每个虚拟路由器此值必须唯一,否则服务无法启动,同属一个虚拟路由器的多个keepalived节点必须相同,务必要确认在同一网络中此值必须唯一priority 90 #优先级,master优先级一定要大于backup#当前物理节点在此虚拟路由器的优先级,范围:1-254,值越大优先级越高,每个keepalived主机节点此值不同advert_int 1 #master和backup之间通告间隔的秒数(心跳频率)authentication {auth_type PASS #认证信息auth_pass 2222 #认证信息}virtual_ipaddress {192.168.3.199 #虚拟ip地址}
}#虚拟地址 端口
virtual_server 192.168.3.188 80 {delay_loop 6#健康间隔时间6秒lb_algo rr#调度算法轮询lb_kind DR#lvs模式为DR直连路由模式persistence_timeout 50#连接保持时间为50 可以修改为0 轮询较快protocol TCP#采用协议#后端真实服务器节点的ip地址real_server 192.168.3.88 80 {weight 1#节点权重TCP_CHECK {connect_port 80#检查目标端口connect_timeout 3#连接超时 nb_get_retry 3#重试次数delay_before_retry 3#重试间隔时间}#tcp检测后端服务器节点是否正常}real_server 192.168.3.89 80 {weight 1TCP_CHECK {connect_port 80connect_timeout 3nb_get_retry 3delay_before_retry 3}}}#互为主备就再加一组配置
#虚拟地址 端口
virtual_server 192.168.3.199 80 {delay_loop 6#健康间隔时间6秒lb_algo rr#调度算法轮询lb_kind DR#lvs模式为DR直连路由模式persistence_timeout 50#连接保持时间为50 可以修改为0 轮询较快protocol TCP#采用协议#后端真实服务器节点的ip地址real_server 192.168.3.88 80 {weight 1#节点权重TCP_CHECK {connect_port 80#检查目标端口connect_timeout 3#连接超时 nb_get_retry 3#重试次数delay_before_retry 3#重试间隔时间}#tcp检测后端服务器节点是否正常}real_server 192.168.3.89 80 {weight 1TCP_CHECK {connect_port 80connect_timeout 3nb_get_retry 3delay_before_retry 3}}}
systemctl enable --now keepalived.service

部署master/backup负载调度服务器 zyj87

安装ipvsadm keepalived

yum install -y keepalived ipvsadm

修改负载调度服务器 zyj87配置

vim /etc/keepalived/keepalived.conf
! Configuration File for keepalivedglobal_defs {notification_email {root@localhost #邮件设置}notification_email_from root@localhost#发邮件的地址smtp_server 127.0.0.1#邮件服务器地址smtp_connect_timeout 30#邮件服务器连接timeoutrouter_id zyjhost86 #每个keepalived主机的唯一标识,建议使用主机名vrrp_skip_check_adv_addr#对所有通告报文都检查,会比较消耗性能,启用此配置后,如果收到的通告报文和上一个报文是同一个路由器,则跳过检查,默认值为全检查#vrrp_strict#严格遵守VRRP协议,启用此项后以下状况将无法启动服务:1.无VIP地址 2.配置了单播邻居 3.在VRRP版本2中有IPv6地址,开启动此项并且没有配置vrrp_iptables时会自动开启iptables防火墙规则,默认导致VIP无法访问,建议不加此项配置。vrrp_garp_interval 0#gratuitous ARP messages 免费ARP报文发送延迟,0表示不延迟vrrp_gna_interval 0 #unsolicited NA messages (不请自来)消息发送延迟
}vrrp_instance VI_1 {state MASTER #当前节点在此虚拟路由器上的初始状态,状态为MASTER或者BACKUPinterface ens160virtual_router_id 51 #每个虚拟路由器惟一标识,范围:0-255,每个虚拟路由器此值必须唯一,否则服务无法启动,同属一个虚拟路由器的多个keepalived节点必须相同,务必要确认在同一网络中此值必须唯一priority 100 #优先级,master优先级一定要大于backup#当前物理节点在此虚拟路由器的优先级,范围:1-254,值越大优先级越高,每个keepalived主机节点此值不同advert_int 1 #master和backup之间通告间隔的秒数(心跳频率)authentication {auth_type PASS #认证信息auth_pass 1111 #认证信息}virtual_ipaddress {192.168.3.188 #虚拟ip地址}
}#互为主备就再加一组配置
vrrp_instance VI_2 {state MASTER #当前节点在此虚拟路由器上的初始状态,状态为MASTER或者BACKUPinterface ens160virtual_router_id 40#每个虚拟路由器惟一标识,范围:0-255,每个虚拟路由器此值必须唯一,否则服务无法启动,同属一个虚拟路由器的多个keepalived节点必须相同,务必要确认在同一网络中此值必须唯一priority 95 #优先级,master优先级一定要大于backup#当前物理节点在此虚拟路由器的优先级,范围:1-254,值越大优先级越高,每个keepalived主机节点此值不同advert_int 1 #master和backup之间通告间隔的秒数(心跳频率)authentication {auth_type PASS #认证信息auth_pass 2222 #认证信息}virtual_ipaddress {192.168.3.199 #虚拟ip地址}
}#虚拟地址 端口
virtual_server 192.168.3.188 80 {delay_loop 6#健康间隔时间6秒lb_algo rr#调度算法轮询lb_kind DR#lvs模式为DR直连路由模式persistence_timeout 50#连接保持时间为50 可以修改为0 轮询较快protocol TCP#采用协议#后端真实服务器节点的ip地址real_server 192.168.3.88 80 {weight 1#节点权重TCP_CHECK {connect_port 80#检查目标端口connect_timeout 3#连接超时 nb_get_retry 3#重试次数delay_before_retry 3#重试间隔时间}#tcp检测后端服务器节点是否正常}real_server 192.168.3.89 80 {weight 1TCP_CHECK {connect_port 80connect_timeout 3nb_get_retry 3delay_before_retry 3}}}#互为主备就再加一组配置
#虚拟地址 端口
virtual_server 192.168.3.199 80 {delay_loop 6#健康间隔时间6秒lb_algo rr#调度算法轮询lb_kind DR#lvs模式为DR直连路由模式persistence_timeout 50#连接保持时间为50 可以修改为0 轮询较快protocol TCP#采用协议#后端真实服务器节点的ip地址real_server 192.168.3.88 80 {weight 1#节点权重TCP_CHECK {connect_port 80#检查目标端口connect_timeout 3#连接超时 nb_get_retry 3#重试次数delay_before_retry 3#重试间隔时间}#tcp检测后端服务器节点是否正常}real_server 192.168.3.89 80 {weight 1TCP_CHECK {connect_port 80connect_timeout 3nb_get_retry 3delay_before_retry 3}}}
systemctl enable --now keepalived.service

部署后端服务器zyj88

#配置lo口ip地址
ifconfig lo:1 192.168.3.188/32
ifconfig lo:2 192.168.3.199/32
echo "ifconfig lo:1 192.168.3.188/32" >> /etc/rc.d/rc.local
echo "ifconfig lo:2 192.168.3.199/32" >> /etc/rc.d/rc.local
chmod +x /etc/rc.d/rc.local#添加系统只响应目的IP为本地IP的ARP请求
#系统不使用原地址来设置ARP请求的源地址,而是物理mac地址上的IP
vim /etc/sysctl.conf
#加入以下配置
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 = 2#刷新配置
sysctl -p

安装web服务器 写入测试页面

yum install httpd -y
echo "zyj88" > /var/www/html/index.html
systemctl enable --now httpd

部署后端服务器zyj89

#配置lo口ip地址
ifconfig lo:1 192.168.3.188/32
ifconfig lo:2 192.168.3.199/32
echo "ifconfig lo:1 192.168.3.188/32" >> /etc/rc.d/rc.local
echo "ifconfig lo:2 192.168.3.199/32" >> /etc/rc.d/rc.local
chmod +x /etc/rc.d/rc.local#添加系统只响应目的IP为本地IP的ARP请求
#系统不使用原地址来设置ARP请求的源地址,而是物理mac地址上的IP
vim /etc/sysctl.conf
#加入以下配置
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 = 2#刷新配置
sysctl -p

安装web服务器 写入测试页面

yum install httpd -y
echo "zyj89" > /var/www/html/index.html
systemctl enable --now httpd

访问测试:

在这里插入图片描述
关闭其中一台调度器再测试

访问测试:
在这里插入图片描述


http://www.ppmy.cn/news/1522769.html

相关文章

C语言小游戏--贪吃蛇实现

C语言小游戏--贪吃蛇实现 1.游戏实现背景2.Win32 API介绍2.1什么是Win32 API2.2控制台程序(Console)2.3控制台屏幕的坐标COORD2.4GetStdHandle2.4.1函数语法2.4.2函数的使用 2.5GetConsoleCursorInfo2.5.1函数语法2.5.2函数的使用 2.6CONSOLE_CURSOR_INFO2.6.1结构体结构2.6.2结…

【RabbitMQ】核心概念

界⾯上的导航栏共分6部分, 这6部分分别是什么意思呢, 我们先看看RabbitMQ的工作流程 1. Producer和Consumer Producer:生产者,是RabbitMQ Server的客户端,向RabbitMQ发送消息 Consumer: 消费者,也是RabbitMQ Server的客户端,从RabbitMQ接收消息 Broker:其实就是RabbitMQSer…

UE4_地形_悬崖拉伸的解决

参考教程 【虚幻5】UE5_UE4_解决悬崖地形贴图拉伸_哔哩哔哩_bilibili 纹理处理 | 虚幻引擎 4.27 文档 | Epic Developer Community (epicgames.com) 主要通过蓝图节点解决&#xff1a;WorldAlignedTexture WorldAlignedTexture&#xff08;全局一致纹理&#xff09;函数用于…

js(vue)如何实现页面截图,向后端传递,生成PDF

利用 htmm12canvas 首先引入 npm install express multer # 或者 yarn add express multer 代码如下&#xff1a; <template><!-- <div style"width:100%;height:100%;overflow-y: scroll"><img :src"svg" style"width: 100%;&…

【H2O2|全栈】关于HTML(3)HTML基础(二)

HTML相关知识 目录 HTML相关知识 前言 准备工作 标签的具体分类&#xff08;二&#xff09; 本文中的标签在什么位置使用&#xff1f; 本期前置知识点 超文本 超文本引用和源属性 图片标签 锚链接 iframe 锚点 预告和回顾 后话 前言 本系列博客将分享HTML相关…

SprinBoot+Vue应急信息管理系统的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 Controller3.2 Service3.3 Dao3.4 application.yml3.5 SpringbootApplication3.5 Vue 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍&#xff1a;CSDN认证博客专家&#xff0c;CSDN平台Java领域优质…

docker ps -a及docker exec -it ubuntu-01 /bin/bash

docker ps -a 命令 在 Docker 中用于列出 Docker 宿主机上所有的容器&#xff0c;包括正在运行的容器和已经停止的容器。这个命令是 Docker 用户常用的命令之一&#xff0c;用于查看和管理容器。 命令解析&#xff1a; docker&#xff1a;这是 Docker 的命令行接口&#xff…

Pytest-@pytest.fixture夹具篇(一)

一、定义 在Python的pytest测试框架中&#xff0c;pytest.fixture是一个&#xff08;不是唯一&#xff09;装饰器&#xff0c;用于定义一个测试夹具。 二、简单实例 使用参数autouserTrue pytest.fixture(autouseTrue) def my_fixture():print("Setup: 准备测试环境&q…

html导航栏logo

设置顶部logo <link rel"shortcut icon" href"图片路径" type"image/x-icon"> 显示效果&#xff1a; 这样设置可以是本地的&#xff0c;也可以是在线的。

【数学建模学习手册】python基本入门使用

本专栏内容为&#xff1a;数学建模原理 记录学习数学建模 &#x1f493;博主csdn个人主页&#xff1a;小小unicorn ⏩专栏分类&#xff1a;数学建模 &#x1f69a;代码仓库&#xff1a;小小unicorn的代码仓库&#x1f69a; &#x1f339;&#x1f339;&#x1f339;关注我带你学…

极米科技:走出舒适圈,推动数据架构现代化升级 | OceanBase 《DB大咖说》

《DB 大咖说》第 13 期&#xff0c;邀请到了极米科技软件与创新产品线高级架构师施刘凡来进行分享。 在小红书平台上&#xff0c;“是否应将家里的电视升级为投影仪&#xff1f;”这一话题激发了上百万篇笔记的分享与推荐&#xff0c;反映出年轻群体对投影仪的偏好。随着手机、…

【Linux】理解Linux中的软链接与硬链接

文章目录 理解Linux中的软链接与硬链接1. 什么是硬链接&#xff1f;示例&#xff1a; 2. 什么是软链接&#xff1f;示例&#xff1a; 3. 软链接与硬链接的对比4. 何时使用软链接与硬链接&#xff1f; 理解Linux中的软链接与硬链接 在Linux文件系统中&#xff0c;软链接&#x…

Android UI绘制流程

UI绘制流程&#xff0c;Activity、Dialog、PopupWindow等 -- android系统的事件分发流程分为很多部分&#xff1a; Native层 –> ViewRootImpl层 –> DecorView层 –> Activity层 –> ViewGroup层 –> View层。 其实Toast窗口和Activity、Dialog、PopupWindow有…

Java 中 `==` 和 `equals()` 的区别详解

在 Java 编程中&#xff0c; 和 equals() 是两种常用于比较变量和对象的方法。尽管它们都可以用来比较&#xff0c;但它们的作用和使用场景是不同的。本文将深入探讨它们之间的区别&#xff0c;并通过示例解释如何正确使用它们。 1. 操作符 什么是 &#xff1f; 是 Java 中的…

24并发设计模式——线程池模式

一、线程池模式介绍 线程池模式&#xff08;Thread Pool Pattern&#xff09;是一种并发设计模式&#xff0c;用于管理和循环使用线程资源以处理大量任务。它旨在提高系统性能和资源利用率&#xff0c;特别是在需要频繁创建和销毁线程的环境中。 1、线程池模式结构图 线程池管…

wmv怎么转换成视频mp4?简单的几种视频格式转换方法

wmv怎么转换成视频mp4&#xff1f;在数字媒体日益普及的今天&#xff0c;我们经常会遇到需要转换视频格式的情况。wmv格式&#xff0c;由微软开发&#xff0c;广泛用于Windows平台上播放视频。尽管wmv格式在Windows系统中表现优异&#xff0c;但其兼容性在其他操作系统或设备上…

为什么我选择这款PR剪辑软件?打工人亲测好用!

现在大家都爱看短视频和Vlog&#xff0c;要是你会剪辑视频&#xff0c;那可就牛了。不管是出去玩拍的视频&#xff0c;还是工作需要&#xff0c;都能派上用场。我就是个爱旅行、爱剪辑的发烧友&#xff0c;今天给你们推荐三款特别好用的视频剪辑软件&#xff0c;尤其是PR剪辑&a…

Android 串口数据分包处理

/* class PacketHandler { private static final byte PACKET_START 0x79; // 假设包的开始标记为0x79 private static final byte PACKET_END 0x0D; // 假设包的结束标记为0x0D private static ByteArrayOutputStream buffer new ByteArrayOutputStream();public static v…

【前端】中断请求的方式

一 使用 Axios 和取消令牌 1.步骤: 初始化取消源,创建CancelToken const source axios.CancelToken.source();传递cancelToken, 发起请求 axios.get(/api/data, {cancelToken: source.token });触发取消请求 source.cancel(操作被取消);判断错误是否由于取消请求操作引起…

Vue.js 组件化开发:父子组件通信与组件注册详解

Vue.js 组件化开发&#xff1a;父子组件通信与组件注册详解 简介&#xff1a; 在 Vue.js 的开发中&#xff0c;组件是构建应用的重要基础。掌握组件的创建与使用&#xff0c;尤其是父子组件的通信和组件的注册与命名&#xff0c;是开发中不可或缺的技能。本文将详细探讨这些内容…