当前位置: 首页 > news >正文

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 环境及组件软件

  1. 服务器环境:
    node1:192.168.71.183
    node2:192.168.71.253
    漂移Vip:192.168.71.254(即我们访问服务的ip)
  2. 服务:apache
  3. 系统版本: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 配置双机互信&#xff0c;SSH密钥登录​​2.4 同步时间&#xff08;以主节点时间为准&#xff09;2.5 配置域名解析3 安装软件3.1 安装…...

蓝桥杯每日一题:不同路径数(dfs深度优先)

给定一个 nm的二维矩阵&#xff0c;其中的每个元素都是一个 [1,9] 之间的正整数。 从矩阵中的任意位置出发&#xff0c;每次可以沿上下左右四个方向前进一步&#xff0c;走过的位置可以重复走。 走了 k 次后&#xff0c;经过的元素会构成一个 (k1) 位数。 请求出一共可以走出…...

NCRE计算机等级考试Python真题(十)

第十套试题1、数据库系统的核心是___________。A.数据库管理系统B.数据模型C.软件工具D.数据库正确答案&#xff1a; A2、下列叙述中正确的是___________。A.线性表链式存储结构的存储空间可以是连续的&#xff0c;也可以是不连续的B.线性表链式存储结构与顺序存储结构的存储空…...

【蓝桥杯嵌入式】点亮LED灯,流水灯的原理图解析与代码实现——STM32

&#x1f38a;【蓝桥杯嵌入式】专题正在持续更新中&#xff0c;原理图解析✨&#xff0c;各模块分析✨以及历年真题讲解✨都在这儿哦&#xff0c;欢迎大家前往订阅本专题&#xff0c;获取更多详细信息哦&#x1f38f;&#x1f38f;&#x1f38f; &#x1fa94;本系列专栏 - 蓝…...

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 …...

硬件工程师常见问题与答疑

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

【Java】Java进阶学习笔记(一)—— 面向对象(封装)

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

jsp拆迁管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

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

CCNP350-401学习笔记(易错题合集)

CCNP350-401学习笔记&#xff08;1-50题&#xff09;_殊彦_sy的博客-CSDN博客CCNP350-401学习笔记&#xff08;2023.2.17&#xff09;https://blog.csdn.net/shuyan1115/article/details/129088574?spm1001.2014.3001.5502CCNP350-401学习笔记&#xff08;51-100题&#xff09…...

喀秋莎Camtasia2023最新版本电脑录屏剪辑软件

录屏软件的鼻祖是techSmith 的喀秋莎&#xff08;Techsmith Camtasia Studio&#xff09;&#xff0c;视频编辑软件Camtasia 2023发布&#xff0c;十大新功能放出!作为一个自媒体人&#xff0c;每天都要录制编辑视频&#xff0c;选择一个好的视频编辑工具就是大家首先面临的一个…...

「考研算法」

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

Android Framework-操作系统基础

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

美国最新调查显示 50% 企业已在用 ChatGPT,其中 48% 已让其代替员工,你怎么看?

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

[Java·算法·中等]LeetCode17. 电话号码的字母组合

每天一题&#xff0c;防止痴呆题目示例分析思路1题解1分析思路2题解2题目 给定一个仅包含数字 2-9 的字符串&#xff0c;返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下&#xff08;与电话按键相同&#xff09;。注意 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调优经验总结

最近一段时间很忙&#xff0c;忙到每天10点多11点下班还是感觉有很多事没有做完&#xff0c;不过倒也没有什么太过低落的情绪&#xff0c;有时候只安静的看一个视频&#xff0c;简单看点文字&#xff0c;或者平静的坐着&#xff0c;并没有太多想法。短时间的工作压力是可以接受…...

等保合规知识常见问题解答

Q1&#xff1a;什么是等级保护&#xff1f; 答&#xff1a;等级保护是指对国家重要信息、法人和其他组织及公民的专有信息以及公开信息和存储、传输、处理这些信息的信息系统分等级实行安全保护&#xff0c;对信息系统中使用的信息安全产品实行按等级管理&#xff0c;对信息系统…...

分享5款Windows同类软件中的翘楚

今天要给大家推荐的是5款软件&#xff0c;每个都是同类软件中的个中翘楚&#xff0c;请大家给我高调地使用起来&#xff0c;不用替我藏着掖着。1.沙盒工具——Sandboxie Sandboxie是一个电脑必备的沙盘工具&#xff0c;对于从网上下载的软件安装包、文件、视频、图片等等一切不…...

记--springboot-工具类中使用@Component、@Resource与@Value失效

写一个工具类 需要使用Resource注入RedisTemplate 使用Value获取application.properties配置文件中配置 并使用Component将该工具类交个spring管理 调试的时候RedisTemplate以及所有的变量全是是null 看了网上的各种解决方式五花八门 有的说出现问题的原因&#xff1a;Compon…...

手写一个react,看透react运行机制

适合人群 本文适合0.5~3年的react开发人员的进阶。 讲讲废话&#xff1a; react的源码&#xff0c;的确是比vue的难度要深一些&#xff0c;本文也是针对初中级&#xff0c;本意让博友们了解整个react的执行过程。 写源码之前的必备知识点 JSX 首先我们需要了解什么是JSX。…...

JS判断输入值是否为正整数,判断变量是否为数字

这篇文章将讨论如何确定一个变量是否代表 JavaScript 中的有效数字。 1.JS中的test是原来是JS中检测字符串中是否存在的一种模式&#xff0c;JS输入值是否为判断正整数代码&#xff1a; <script type”text/javascript”> function test() { var num document.getElem…...

Android开发八股文,Android也有自己的八股文了

前言别的行业都有自己的八股文&#xff0c;凭什么Android没有。2023春招即将来临&#xff0c;很多同学会问 Android开发的面试题有必要背吗&#xff1f;我的回答是&#xff1a;很有必要。你可以讨厌这种模式&#xff0c;但你一定要去背&#xff0c;因为不背你就进不了大厂。国内…...

你需要同款“Unreal项目自动化编译、打包和部署”方案吗?

在过往几期的UWA Pipeline最佳实践案例中&#xff0c;我们分享了如何通过Pipeline实现性能优化、性能管理、游戏内容验收和云真机系统的应用&#xff08;实现批量真机设备的自动化测试&#xff0c;以及针对特效性能优化的方式&#xff09;&#xff0c;其实这些高效的方法并不局…...

电子技术——CMOS-AB类输出阶

电子技术——CMOS-AB类输出阶 本节我们研究CMOS-AB类输出阶。 经典配置 下图展示了一个经典的CMOS-AB类输出阶&#xff1a; 这个很像BJT二极管偏置版本的AB类输出阶&#xff0c;在这里二极管偏置变成了 Q1Q_1Q1​ 和 Q2Q_2Q2​ 偏置。不想BJT的情况&#xff0c;这里 QNQ_NQN​…...

2023王道考研数据结构笔记第二章线性表

第二章 线性表 2.1 线性表的定义 2.1.1 线性表的基本概念 线性表是具有相同数据类型的n(n>0)个数据元素的有限序列&#xff0c;其中n为表长&#xff0c;当n0时线性表是一个空表。若用L命名线性表&#xff0c;则其一般表示为&#xff1a; L(a1,a2,...,ai,ai1,...,an)L(a_1…...

[chapter 11][NR Physical Layer][Layer Mapping]

前言&#xff1a;这里参考Curious Being系列 &#xff0c;简单介绍一下NR 5G 物理层核心技术层映射.我们主要讲了一下what is layer Mapping, why need layer Mapping, how layer Mapping 参考文档&#xff1a;3GPP 38.211- 6.3.1.3 Layer mapping《5G NR Physical Layer | Cha…...

什么是工业物联网(IIoT)?

什么是工业物联网(IIoT)?工业物联网(IIoT) 被定义为一组设备和应用&#xff0c;允许大企业创建从核心到边缘的端到端连接环境。其还包括传统的物理基础设施&#xff0c;如集装箱和物流卡车&#xff0c;以收集数据&#xff0c;对事件做出反应&#xff0c;并在智能设备的帮助下做…...

「TCG 规范解读」PC 平台相关规范(4)

可信计算组织&#xff08;Ttrusted Computing Group,TCG&#xff09;是一个非盈利的工业标准组织&#xff0c;它的宗旨是加强在相异计算机平台上的计算环境的安全性。TCG于2003年春成立&#xff0c;并采纳了由可信计算平台联盟&#xff08;the Trusted Computing Platform Alli…...

CSS背景属性之颜色渐变

颜色渐变 颜色渐变其实在网页设计中并不是特别常见&#xff0c; 但也不可避免的会出现导航栏是渐变色这种情况或者别的不是单一颜色的情况&#xff0c; 例如&#xff1a;这样的设计解决方案并不是只可以使用颜色渐变&#xff0c;我们可以使用两个div拼接&#xff0c;将文字放…...

IPv4地址细讲

文章目录一、IPv4地址简介二、IPv4地址的表示方法点分十进制记法三、IP地址的分类四、特殊IPv4地址&#xff1a;全 “0” 和全 “1”五、常用的三类IP地址使用范围六、五类IP地址的范围一、IPv4地址简介 IPv4地址分5类&#xff0c;每一类地址都由固定长度的字段组成&#xff1…...

商品列表html模板/珠海seo关键词排名

UDP时间更新服务程序 http://qzher.com/?p647 网络编程,最好采用两台电脑, 或者一台电脑,再开个虚拟机,虚拟机采用网络桥接模式 特点: 发消息方一直向指定IP发送报时消息 收方一上线就能得到发来的即时消息 (未上线的消息全被抛弃) 若收方上线期间, 发消息方关闭, 收方也一直…...

基于html做电商网站论文/北京百度推广官网首页

&#x1f320; 『精品学习专栏导航帖』 &#x1f433;最适合入门的100个深度学习实战项目&#x1f433;&#x1f419;【PyTorch深度学习项目实战100例目录】项目详解 数据集 完整源码&#x1f419;&#x1f436;【机器学习入门项目10例目录】项目详解 数据集 完整源码&…...

wordpress 评论go跳转/百度官方电话号码

最近跑老外的程序[1] 又出问题了&#xff1a;??? Error: File: computeScores.m Line: 17 Column: 28Unbalanced or unexpected parenthesis or bracket.我用的是Matlab R2009a&#xff0c;识别出了程序里的几处语法错误&#xff1a;img gray2rgb(img); %always have 3 cha…...

慈善网站建设方案/百度软文推广公司

在File类中&#xff0c;需要导入命名空间&#xff1a;using System.IO,不需要实例化&#xff0c;直接使用即可。 基本操作&#xff1a;盘存、复制、移动、删除。 基本方法&#xff1a;File.Exist()、File.Copy()、File.Move()、File.Delete() File.Create(path)----在指定路径…...

哪个网站名片做的号/网站seo方案

随机生成姓名 public function getChar($num2) // $num为生成汉字的数量{$first array(赵,钱,孙,李,周,吴,郑,王,冯,陈,褚,卫,蒋,沈,韩,杨,朱,秦,尤,许,何,吕,施,张,孔,曹,严,华,金,魏,陶,姜,戚,谢,邹,喻,柏,水,窦,章,云,苏,潘,葛,奚,范,彭,郎,鲁,韦,昌,马,苗,凤,花,方,任,袁…...

网上做任务网站/买卖网站

随着人脸识别技术的逐渐成熟及普及&#xff0c;在各个领域行业的场景落地应用&#xff0c;如刷脸支付、刷脸门禁、刷脸解锁…逐渐在改变着人们的生活工作&#xff0c;推动行业转型升级。 以办公场所为例&#xff0c;人脸识别产品在办公场景应用的范围越来越广泛&#xff0c;为…...