CHAPTER 2 Web HA集群部署 - Heartbeat
Web HA集群部署 - Heartbeat
- 1. Heartbeat 概述
- 1.1 Heartbeat主要组成部分
- 2. 环境依赖
- 2.1 环境及组件软件
- 2.2 关闭firewalld & selinux
- 2.3 配置双机互信,SSH密钥登录
- 2.4 同步时间(以主节点时间为准)
- 2.5 配置域名解析
- 3 安装软件
- 3.1 安装基础环境包
- 3.2 创建用户和组
- 3.3 组件软件下载
- 3.4 安装gule
- 3.5 安装Resource Agents
- 3.6 安装HeartBeat
- 3.7 配置网卡支持插件文件
- 4 配置heartbeat
- 4.1 配置ha.cf配置文件
- 4.2 配置authkeys配置文件
- 4.3 配置haresources配置文件
- 4.4 从节点上准备配置文件
- 4.5 安装httpd服务
- 4.6 启动heartbeat服务
- 5 验证
- 5.1 关闭主节点
- 5.2 使用自带的脚本切换主备节点
- 6 总结
1. Heartbeat 概述
Heartbeat 项目是 Linux-HA 工程的一个组成部分,它实现了一个高可用集群系统。通过Heartbeat我们可以实现双机热备
,以实现服务的持续性。
1.1 Heartbeat主要组成部分
Heartbeat最核心的功能是心跳监测部分和资源接管部分.心跳监测可以通过网络链路和串口进行,而且支持冗余链路,它们之间相互发送报文来告诉对方自己当前的状态,如果在指定的时间内未收到对方发送的报文,那么就认为对方失效,这时需启动资源接管模块来接管运行在对方主机上的资源或者服务.Heartbea是基于主机名来切换节点,通过字符串加密来认证两台主机连接,与keepalived不同是它可以基于脚本资源切换,文件共享,是通过tcp协议对资源切换.
2. 环境依赖
2.1 环境及组件软件
- 服务器环境:
node1:192.168.71.183
node2:192.168.71.253
漂移Vip:192.168.71.254(即我们访问服务的ip) - 服务:apache
- 系统版本:CentOS Linux release 7.9.2009 (Core)
具体的实施工作在本章第三小节
2.2 关闭firewalld & selinux
关闭firewalld & selinux
[root@heartbeat-master ~]# systemctl stop firewalld
[root@heartbeat-master ~]# setenforce 0 #此为临时关闭
setenforce: SELinux is disabled
[root@heartbeat-master ~]# sed -i s#SELINUX=enforcing#SELINUX=disabled# /etc/sysconfig/selinux #此为永久关闭,下次重启机器后生效
2.3 配置双机互信,SSH密钥登录
主从节点均要配置双机互信
[root@node2 ~]# ssh-keygen -q -t rsa -N '' -f ~/.ssh/id_rsa
[root@node2 ~]# ssh-copy-id root@192.168.71.183
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@192.168.71.183's password:Number of key(s) added: 1Now try logging into the machine, with: "ssh 'root@192.168.71.183'"
and check to make sure that only the key(s) you wanted were added.[root@node2 ~]# ssh root@192.168.71.183
Last login: Wed Mar 1 03:50:06 2023 from 192.168.20.252
[root@node1 ~]# exit
2.4 同步时间(以主节点时间为准)
所有节点安装ntp
,可以选择任何一台机器当ntp时间服务器,其他的节点当时间服务器的客户端,同步服务器时间
这里我们选择node1作为时间服务器
① 所有节点安装ntp服务
[root@node1 ~]# yum install -y ntp
② node1服务器配置/etc/ntp.conf
#server 0.centos.pool.ntp.org iburst #注释内容
#server 1.centos.pool.ntp.org iburst #注释内容
#server 2.centos.pool.ntp.org iburst #注释内容
#server 3.centos.pool.ntp.org iburst #注释内容
server 127.127.1.0 #新增内容
fudge 127.127.1.0 stratum 10 #新增内容
③ node1服务器启动ntpd服务
[root@node1 ~]# systemctl start ntpd
[root@node1 ~]# systemctl status ntpd
[root@node1 ~]# systemctl enable ntpd
Created symlink from /etc/systemd/system/multi-user.target.wants/ntpd.service to /usr/lib/systemd/system/ntpd.service.
④ 其他节点
[root@node2 ~]# ntpdate 192.168.71.1831 Mar 04:08:35 ntpdate[16984]: step time server 192.168.71.183 offset -9.393691 sec
[root@node2 ~]# date
Wed Mar 1 04:08:40 EST 2023
2.5 配置域名解析
所有节点配置域名解析
[root@node2 ~]# tail -2 /etc/hosts
192.168.71.183 node1
192.168.71.253 node2
192.168.71.254 apache.org
[root@node2 ~]# ping node2
PING node2 (192.168.71.253) 56(84) bytes of data.
64 bytes from node2 (192.168.71.253): icmp_seq=1 ttl=64 time=0.029 ms
64 bytes from node2 (192.168.71.253): icmp_seq=2 ttl=64 time=0.031 ms
3 安装软件
本节的安装及配置的内容,在所有节点
都需要操作
3.1 安装基础环境包
yum install gcc gcc-c++ autoconf automake libtool glib2-devel libxml2-devel bzip2 bzip2-devel e2fsprogs-devel libxslt-devel libtool-ltdl-devel asciidoc -y
3.2 创建用户和组
[root@node2 ha]# groupadd haclient
[root@node2 ha]# useradd -g haclient hacluster
[root@node2 ha]# tail -1 /etc/passwd
hacluster:x:1017:1017::/home/hacluster:/bin/bash
[root@node2 ha]# tail -1 /etc/group
haclient:x:1017:
3.3 组件软件下载
官网下载地址 http://www.linux-ha.org/wiki/Downloads
Heartbeat 3.0.6
Cluster Glue 1.0.12
Resource Agents
[root@node2 ~]# wget -O Heartbeat_3.0.6.tar.bz2 http://hg.linux-ha.org/heartbeat-STABLE_3_0/archive/958e11be8686.tar.bz2
--2023-03-01 04:20:57-- http://hg.linux-ha.org/heartbeat-STABLE_3_0/archive/958e11be8686.tar.bz2
Resolving hg.linux-ha.org (hg.linux-ha.org)... 78.142.182.100
Connecting to hg.linux-ha.org (hg.linux-ha.org)|78.142.182.100|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 551953 (539K) [application/x-bzip2]
Saving to: ‘Heartbeat_3.0.6.tar.bz2’100%[================================================================================================>] 551,953 233KB/s in 2.3s2023-03-01 04:21:04 (233 KB/s) - ‘Heartbeat_3.0.6.tar.bz2’ saved [551953/551953][root@node2 ~]# wget http://hg.linux-ha.org/glue/archive/0a7add1d9996.tar.bz2
[root@node2 ~]# wget https://github.com/ClusterLabs/resource-agents/archive/v3.9.6.tar.gz
[root@node1 ha]# ll
total 2492
-rw-r--r-- 1 root root 451432 Oct 22 2015 0a7add1d9996.tar.bz2
-rw-r--r-- 1 root root 551953 Feb 28 10:54 Heartbeat_3.0.6.tar.bz2
-rw-r--r-- 1 root root 617790 Mar 1 04:41 v3.9.6.tar.gz
3.4 安装gule
[root@node1 ~]# tar xf 0a7add1d9996.tar.bz2
[root@node1 ~]# cd Reusable-Cluster-Components-glue--0a7add1d9996/
[root@node1 Reusable-Cluster-Components-glue--0a7add1d9996]#./autogen.sh
[root@node1 Reusable-Cluster-Components-glue--0a7add1d9996]#./configure --prefix=/usr/local/heartbeat --with-daemon-user=hacluster --with-daemon-group=haclient --enable-fatal-warnings=no LIBS='/lib64/libuuid.so.1'
[root@node1 Reusable-Cluster-Components-glue--0a7add1d9996]# make && make install
3.5 安装Resource Agents
[root@node1 ~]# tar xf v3.9.6.tar.gz
[root@node1 ~]# cd resource-agents-3.9.6/
[root@node1 resource-agents-3.9.6]# ./autogen.sh
[root@node1 resource-agents-3.9.6]# ./configure --prefix=/usr/local/heartbeat --with-daemon-user=hacluster --with-daemon-group=haclient --enable-fatal-warnings=no LIBS='/lib64/libuuid.so.1'
[root@node1 resource-agents-3.9.6]# make && make install
3.6 安装HeartBeat
[root@node1 ~]# tar xf Heartbeat_3.0.6.tar.bz2
[root@node1 ~]# cd Heartbeat-3-0-958e11be8686/
[root@node1 Heartbeat-3-0-958e11be8686]# ./bootstrap
[root@node1 Heartbeat-3-0-958e11be8686]# export CFLAGS="$CFLAGS -I/usr/local/heartbeat/include -L/usr/local/heartbeat/lib"
[root@node1 Heartbeat-3-0-958e11be8686]# ./configure --prefix=/usr/local/heartbeat --with-daemon-user=hacluster --with-daemon-group=haclient --enable-fatal-warnings=no LIBS='/lib64/libuuid.so.1'
[root@node1 Heartbeat-3-0-958e11be8686]# make && make install
3.7 配置网卡支持插件文件
[root@node1 ha]# mkdir -pv /usr/local/heartbeat/usr/lib/ocf/lib/heartbeat/
mkdir: created directory ‘/usr/local/heartbeat/usr’
mkdir: created directory ‘/usr/local/heartbeat/usr/lib’
mkdir: created directory ‘/usr/local/heartbeat/usr/lib/ocf’
mkdir: created directory ‘/usr/local/heartbeat/usr/lib/ocf/lib’
mkdir: created directory ‘/usr/local/heartbeat/usr/lib/ocf/lib/heartbeat/’
[root@node1 ha]# cp /usr/lib/ocf/lib/heartbeat/ocf-* /usr/local/heartbeat/usr/lib/ocf/lib/heartbeat/#注意:一般启动时会报错因为 ping和ucast这些配置都需要插件支持 需要将lib64下面的插件软连接到lib目录 才不会抛出异常[root@node1 ha]# ln -svf /usr/local/heartbeat/lib64/heartbeat/plugins/RAExec/* /usr/local/heartbeat/lib/heartbeat/plugins/RAExec/
‘/usr/local/heartbeat/lib/heartbeat/plugins/RAExec/*’ -> ‘/usr/local/heartbeat/lib64/heartbeat/plugins/RAExec/*’
[root@node1 ha]# ln -svf /usr/local/heartbeat/lib64/heartbeat/plugins/* /usr/local/heartbeat/lib/heartbeat/plugins/
‘/usr/local/heartbeat/lib/heartbeat/plugins/HBauth’ -> ‘/usr/local/heartbeat/lib64/heartbeat/plugins/HBauth’
‘/usr/local/heartbeat/lib/heartbeat/plugins/HBcomm’ -> ‘/usr/local/heartbeat/lib64/heartbeat/plugins/HBcomm’
‘/usr/local/heartbeat/lib/heartbeat/plugins/quorum’ -> ‘/usr/local/heartbeat/lib64/heartbeat/plugins/quorum’
4 配置heartbeat
在主节点
上配置
#拷贝三个模版配置文件到 /usr/local/heartbeat/etc/ha.d
目录下
[root@node1 ha]# cd Heartbeat-3-0-958e11be8686/
[root@node1 Heartbeat-3-0-958e11be8686]# cp doc/{ha.cf,haresources,authkeys} /usr/local/heartbeat/etc/ha.d/
4.1 配置ha.cf配置文件
该配置文件是心跳的核心配置
[root@heartbeat-master ~]# vim /usr/local/heartbeat/etc/ha.d/ha.cfdebugfile /var/log/ha-debug #表示调试的日志文件 一般测试建议开启
logfile /var/log/ha-log #表示系统的的日志文件路径
logfacility local0 #表示使用系统日志与上面只能开启一个
keepalive 2 #主备之间的心跳间隔时间单位:s
deadtime 30 #表示如果连接对方30s还无法连接,表示节点死亡需要考虑vip转移
warntime 10 #表示10s时间未收到心跳时发出警告日志
initdead 120 #有时机器启动后需要一段时间网卡才能正常工作 需要预留一定的时间后,再开始判断心跳检测
udpport 694 #多播的udp端口
#baud 19200 #串行端口的波特率
#serial /dev/ttyS0 # Linux #串口的接口名
#serial /dev/cuaa0 # FreeBSD
#serial /dev/cuad0 # FreeBSD 6.x
#serial /dev/cua/a # Solaris
#bcast eth0 # Linux #传播心跳的广播网卡信息
#bcast eth1 eth2 # Linux
#bcast le0 # Solaris
#bcast le1 le2 # Solaris
#mcast eth0 225.0.0.1 694 1 0 #多播传送心跳的网卡 多播组 端口 跃点数 是否回环内传送
ucast ens33 192.168.71.253 #设置单播心跳,设置对方的ip地址,此处使用单播
auto_failback on #表示如果主机停止后,从机接管设置为on当主机从新启动后,主机立即接管vip off从机不会释放vip给主机
node node1 #配置主从的节点信息,要与uname -n保持一致
node node2
#############################################
#使用ping模式 有时当主机挂掉或者heartbeat挂掉后vip才会转移 有时出现某个进程挂掉 切换需要使用脚本
#ping模式用于测试 如果网卡ping不同 某个主机 就认为当前断网 需要转移vip
#respawn root /usr/local/heartbeat/libexec/heartbeat/ipfail 表示当ping不通时 自动调用 ipfail这个脚本
#apiauth ipfail gid=haclient uid=hacluster 表示有权限操作ipfail脚本的组和用户
############################################
ping 192.168.71.254
#ping组的所有主机
#ping_group group1 10.10.10.254 10.10.10.253
#respawn userid /path/name/to/run
#指定与heartbeat一同启动和关闭的进程,该进程被自动监视,遇到故障则重新启动。最常用的进程是ipfail,该进程用于检测和处理网络故障,需要配合ping语句指定的ping node来检测网络连接。如果你的系统是64bit,请注意该文件的路径。
#respawn hacluster /usr/local/heartbeat/libexec/heartbeat/ipfail
#apiauth ipfail gid=haclient uid=hacluster
4.2 配置authkeys配置文件
该文件表示发送心跳时 机器用于验证的key的hash算法,节点之间必须配置成一致的密码
[root@node1 ha]# cat /usr/local/heartbeat/etc/ha.d/authkeys
...
#
auth 2 #表示使用id为2的验证 下边需要定义一个2的验证算法
#1 crc
2 sha1 1a2b3c #id为2的验证加密为sha1,并添加密码
#3 md5 Hello!
[root@node1 ha]# chmod 600 /usr/local/heartbeat/etc/ha.d/authkeys #更改权限为600
4.3 配置haresources配置文件
该文件表示资源的管理,如果是主机,当主机启动后自动加载该文件中配置的所有启动资源,资源脚本默认在haresources同级目录下的resource.d目录下
指定节点主机名,和VIP地址,以双冒号分隔资源,此处以apache为例进行配置
[root@node1 ha]# tail -1 /usr/local/heartbeat/etc/ha.d/haresources
node1 192.168.71.254 apache::/etc/httpd/conf/httpd.conf
4.4 从节点上准备配置文件
拷贝三个配置好的文件到node2上,只需修改ha.cf配置文件中的单播地址为对方地址即可(ucast ens33 192.168.71.183)。
[root@node2 ha.d]# scp root@192.168.71.183:/usr/local/heartbeat/etc/ha.d/authkeys .
authkeys 100% 647 608.9KB/s 00:00
[root@node2 ha.d]# scp root@192.168.71.183:/usr/local/heartbeat/etc/ha.d/ha.cf .
ha.cf 100% 10KB 787.7KB/s 00:00
[root@node2 ha.d]# scp root@192.168.71.183:/usr/local/heartbeat/etc/ha.d/haresources .
haresources 100% 5955 4.1MB/s 00:00
[root@node2 ha.d]# ll
total 40
-rw------- 1 root root 647 Mar 1 08:26 authkeys
-rw-r--r-- 1 root root 10496 Mar 1 08:27 ha.cf
-rwxr-xr-x 1 root root 745 Mar 1 05:29 harc
-rw-r--r-- 1 root root 5955 Mar 1 08:27 haresources
drwxr-xr-x 2 root root 101 Mar 1 05:29 rc.d
-rw-r--r-- 1 root root 692 Mar 1 05:29 README.config
drwxr-xr-x 2 root root 4096 Mar 1 05:29 resource.d
-rw-r--r-- 1 root root 2112 Mar 1 05:28 shellfuncs
[root@node2 ha.d]# grep ucast ha.cf
# of nodes listed {"node ...} one of {serial, bcast, mcast, or ucast},
# What UDP port to use for bcast/ucast communication?
# ucast [dev] [peer-ip-addr]
ucast ens33 192.168.71.183
4.5 安装httpd服务
在每个节点上安装httpd服务并测试,以主节点为例
[root@node1 ~]# yum install httpd
[root@node1 ~]# echo "Welcome to svr 183." >>/var/www/html/index.html
[root@node1 ~]# systemctl start httpd
[root@node1 ~]# curl 127.0.0.1:88
Welcome to svr 183.
此处笔者服务器由于端口冲突,修改为88
测试httpd服务正常后关闭httpd服务并关闭自启动
[root@node1 ~]# systemctl stop httpd
[root@node1 ~]# systemctl disable httpd
4.6 启动heartbeat服务
启动每个节点上heartbeat服务
[root@node2 ha.d]# systemctl enable heartbeat
Created symlink from /etc/systemd/system/multi-user.target.wants/heartbeat.service to /usr/lib/systemd/system/heartbeat.service.
[root@node2 ha.d]# systemctl start heartbeat
[root@node2 ha.d]# systemctl status heartbeat
● heartbeat.service - Heartbeat High Availability Cluster Communication and MembershipLoaded: loaded (/usr/lib/systemd/system/heartbeat.service; enabled; vendor preset: disabled)Active: active (running) since Wed 2023-03-01 08:51:29 EST; 11s agoMain PID: 39209 (heartbeat)...
5 验证
我们访问192.168.71.254:88
5.1 关闭主节点
关闭主节点后,刷新网页,可以看到服务是由从节点提供的
当我们再次开启主节点服务器,服务又会回到主节点提供
对于我们访问的漂移ip,会因为主节点的上下线,在主从节点间自动
切换
[root@node1 ~]# ip a
...
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 1000link/ether 00:0c:29:79:08:6b brd ff:ff:ff:ff:ff:ffinet 192.168.71.183/24 brd 192.168.71.255 scope global noprefixroute dynamic ens33valid_lft 86347sec preferred_lft 86347secinet 192.168.71.254/24 brd 192.168.71.255 scope global secondary ens33:1valid_lft forever preferred_lft foreverinet6 fe80::3872:4f8b:dbfc:1aa2/64 scope link noprefixroutevalid_lft forever preferred_lft forever
...
5.2 使用自带的脚本切换主备节点
主节点
[root@node1 ~]# /usr/local/heartbeat/share/heartbeat/hb_standby
Going standby [all].
[root@node1 ~]# ip a
...
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 1000link/ether 00:0c:29:79:08:6b brd ff:ff:ff:ff:ff:ffinet 192.168.71.183/24 brd 192.168.71.255 scope global noprefixroute dynamic ens33valid_lft 86137sec preferred_lft 86137secinet6 fe80::3872:4f8b:dbfc:1aa2/64 scope link noprefixroutevalid_lft forever preferred_lft forever
...
从节点
[root@node2 ~]# ip a
...
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 1000link/ether 00:0c:29:09:d2:72 brd ff:ff:ff:ff:ff:ffinet 192.168.71.253/24 brd 192.168.71.255 scope global noprefixroute ens33valid_lft forever preferred_lft foreverinet 192.168.71.254/24 brd 192.168.71.255 scope global secondary ens33:1valid_lft forever preferred_lft foreverinet6 fe80::20c:29ff:fe09:d272/64 scope linkvalid_lft forever preferred_lft forever
...
6 总结
整个集群通过vip提供对外服务,当主节点出现异常的时候,能够自动在从节点启动并提供服务,实现了高可用性。
我们可以部署zabbix进行监控服务器和服务的状况,并通过其他手段进行通知运维人员
相关文章:

CHAPTER 2 Web HA集群部署 - Heartbeat
Web HA集群部署 - Heartbeat1. Heartbeat 概述1.1 Heartbeat主要组成部分2. 环境依赖2.1 环境及组件软件2.2 关闭firewalld & selinux2.3 配置双机互信,SSH密钥登录2.4 同步时间(以主节点时间为准)2.5 配置域名解析3 安装软件3.1 安装…...

蓝桥杯每日一题:不同路径数(dfs深度优先)
给定一个 nm的二维矩阵,其中的每个元素都是一个 [1,9] 之间的正整数。 从矩阵中的任意位置出发,每次可以沿上下左右四个方向前进一步,走过的位置可以重复走。 走了 k 次后,经过的元素会构成一个 (k1) 位数。 请求出一共可以走出…...

NCRE计算机等级考试Python真题(十)
第十套试题1、数据库系统的核心是___________。A.数据库管理系统B.数据模型C.软件工具D.数据库正确答案: A2、下列叙述中正确的是___________。A.线性表链式存储结构的存储空间可以是连续的,也可以是不连续的B.线性表链式存储结构与顺序存储结构的存储空…...

【蓝桥杯嵌入式】点亮LED灯,流水灯的原理图解析与代码实现——STM32
🎊【蓝桥杯嵌入式】专题正在持续更新中,原理图解析✨,各模块分析✨以及历年真题讲解✨都在这儿哦,欢迎大家前往订阅本专题,获取更多详细信息哦🎏🎏🎏 🪔本系列专栏 - 蓝…...

RK3288-android8-es7210-阵列麦克风
ES7210驱动包 应需求调试一个ES7210的阵列麦克风 首先移植 From 234647c69a57c32198c65836e7fc521dc22e444b Mon Sep 17 00:00:00 2001 From: LuoXiaoTan <lxt@rock-chips.com> Date: Tue, 10 Jul 2018 18:08:50 -0700 Subject: [PATCH] ASoC: codecs: add es7210 adc …...

硬件工程师常见问题与答疑
在工作中,尤其是做了很多年的,有些问题可能不知道,又不好意思问,怕别人说你连这个都不知道?很尴尬,而且百度又搜不到,本博主收集了很多答疑,希望里面有对你有用的,或者是…...

【Java】Java进阶学习笔记(一)—— 面向对象(封装)
【Java】Java进阶学习笔记(一)—— 面向对象(封装)一、类中成分1、类中成分2、this关键字this() 访问构造器方法3、static关键字1. 成员变量的区分2. 成员方法的区分3. 成员变量访问语法的区分二、封装1、封装的定义封装的好处2、…...

jsp拆迁管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目
一、源码特点 JSP 拆迁管理系统是一套完善的java web信息管理系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql5.0&…...

CCNP350-401学习笔记(易错题合集)
CCNP350-401学习笔记(1-50题)_殊彦_sy的博客-CSDN博客CCNP350-401学习笔记(2023.2.17)https://blog.csdn.net/shuyan1115/article/details/129088574?spm1001.2014.3001.5502CCNP350-401学习笔记(51-100题)…...

喀秋莎Camtasia2023最新版本电脑录屏剪辑软件
录屏软件的鼻祖是techSmith 的喀秋莎(Techsmith Camtasia Studio),视频编辑软件Camtasia 2023发布,十大新功能放出!作为一个自媒体人,每天都要录制编辑视频,选择一个好的视频编辑工具就是大家首先面临的一个…...

「考研算法」
考研算法 前言 本系列文章涉及的算法内容,针对的是哈尔滨工业大学854科目。在本文中通过具体的算法题进行讲解相应算法。 今天涉及的算法主要有线性筛,十大排序中快速排序和归并排序。 后续会有动态规划的相关算法以及尝试模型的总结,如果…...

Android Framework-操作系统基础
最近在看《深入理解Android内核设计思想(第2版)》,个人感觉很不错,内容很多,现将书里个人认为比较重要的内容摘录一下,方便后期随时翻看。 计算机体系结构 硬件是软件的基石,所有的软件功能最…...

美国最新调查显示 50% 企业已在用 ChatGPT,其中 48% 已让其代替员工,你怎么看?
美国企业开始使用ChatGPT,我认为这不是什么新闻。 如果美国的企业现在还不使用ChatGPT,那才是个大新闻。 据新闻源显示,已经使用chatGPT的企业中,48%已经让其代替员工工作。 ChatGPT的具体职责包括:客服、代码编写、招…...

[Java·算法·中等]LeetCode17. 电话号码的字母组合
每天一题,防止痴呆题目示例分析思路1题解1分析思路2题解2题目 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。…...
C#7/C#8/C#9 与dotnetSDK 以及dotnet framework对应关系
语言版本 对应的.net framework版本 对应的.net sdk版本 推荐使用的vs studio C#7.3 3.5、 4.0、 4.5 、4.5.1、 4.5.2 、4.6 、4.6.1、 4.6.2 4.7.1、 4.7.2 .netcore 2.0、.netcore2.1、 .netcore2.2 C#8.0 / F#4.7 不支持 .netcore 3.0、.netcore 3.1 C# 9.0 …...
jvm调优经验总结
最近一段时间很忙,忙到每天10点多11点下班还是感觉有很多事没有做完,不过倒也没有什么太过低落的情绪,有时候只安静的看一个视频,简单看点文字,或者平静的坐着,并没有太多想法。短时间的工作压力是可以接受…...
等保合规知识常见问题解答
Q1:什么是等级保护? 答:等级保护是指对国家重要信息、法人和其他组织及公民的专有信息以及公开信息和存储、传输、处理这些信息的信息系统分等级实行安全保护,对信息系统中使用的信息安全产品实行按等级管理,对信息系统…...

分享5款Windows同类软件中的翘楚
今天要给大家推荐的是5款软件,每个都是同类软件中的个中翘楚,请大家给我高调地使用起来,不用替我藏着掖着。1.沙盒工具——Sandboxie Sandboxie是一个电脑必备的沙盘工具,对于从网上下载的软件安装包、文件、视频、图片等等一切不…...
记--springboot-工具类中使用@Component、@Resource与@Value失效
写一个工具类 需要使用Resource注入RedisTemplate 使用Value获取application.properties配置文件中配置 并使用Component将该工具类交个spring管理 调试的时候RedisTemplate以及所有的变量全是是null 看了网上的各种解决方式五花八门 有的说出现问题的原因:Compon…...

手写一个react,看透react运行机制
适合人群 本文适合0.5~3年的react开发人员的进阶。 讲讲废话: react的源码,的确是比vue的难度要深一些,本文也是针对初中级,本意让博友们了解整个react的执行过程。 写源码之前的必备知识点 JSX 首先我们需要了解什么是JSX。…...
Robots.txt 文件
什么是robots.txt? robots.txt 是一个位于网站根目录下的文本文件(如:https://example.com/robots.txt),它用于指导网络爬虫(如搜索引擎的蜘蛛程序)如何抓取该网站的内容。这个文件遵循 Robots…...
【python异步多线程】异步多线程爬虫代码示例
claude生成的python多线程、异步代码示例,模拟20个网页的爬取,每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程:允许程序同时执行多个任务,提高IO密集型任务(如网络请求)的效率…...

UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)
UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中,UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化…...
【HTTP三个基础问题】
面试官您好!HTTP是超文本传输协议,是互联网上客户端和服务器之间传输超文本数据(比如文字、图片、音频、视频等)的核心协议,当前互联网应用最广泛的版本是HTTP1.1,它基于经典的C/S模型,也就是客…...
今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存
文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...

10-Oracle 23 ai Vector Search 概述和参数
一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI,使用客户端或是内部自己搭建集成大模型的终端,加速与大型语言模型(LLM)的结合,同时使用检索增强生成(Retrieval Augmented Generation &#…...
代码随想录刷题day30
1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...

uniapp手机号一键登录保姆级教程(包含前端和后端)
目录 前置条件创建uniapp项目并关联uniClound云空间开启一键登录模块并开通一键登录服务编写云函数并上传部署获取手机号流程(第一种) 前端直接调用云函数获取手机号(第三种)后台调用云函数获取手机号 错误码常见问题 前置条件 手机安装有sim卡手机开启…...
NPOI操作EXCEL文件 ——CAD C# 二次开发
缺点:dll.版本容易加载错误。CAD加载插件时,没有加载所有类库。插件运行过程中用到某个类库,会从CAD的安装目录找,找不到就报错了。 【方案2】让CAD在加载过程中把类库加载到内存 【方案3】是发现缺少了哪个库,就用插件程序加载进…...
django blank 与 null的区别
1.blank blank控制表单验证时是否允许字段为空 2.null null控制数据库层面是否为空 但是,要注意以下几点: Django的表单验证与null无关:null参数控制的是数据库层面字段是否可以为NULL,而blank参数控制的是Django表单验证时字…...