Keepalived 双机热备

news2024/11/16 20:48:07

本章主要内容:

  • Keepalived 双机热备基础知识
  • 学会构建双机热备系统
  • 学会构建LVS+HA 高可用群集

简介

        在这个高度信息化的IT时代,企业的生产系统,业务运营,销售和支持,以及日常管理等环节越来越依赖于计算机和服务,对于高可用(HA)技术的应用需求不断提高,以便提供持续的,不间断的计算机系统或网络服务。

        本章将学习如何使用 Keepalived 实现双机热备,包括针对IP地址的故障切换,以及在 LVS 高可用群集中的热备应用

1.1 Keepalived 双机热备基础知识

        Keepalived 起初是专门针对LVS 设计的一款强大的辅助工具,主要用来提供故障切换(Failover)和健康检查(Health Checking)功能——判断 LVS 负载调度器,节点服务器的可用性,及时隔离并替换新的服务器,当故障主机恢复后将其重新加入群集

1.1.1Keepalived 概述及安装

        Keepalived 的官方网站位于 http://www.keepalived.org/ 本章将以yum 方式讲解 Keepalived 的安装,配置和使用过程,在非 LVS 群集环境中使用时,Keepalived 也可以作为热备软件使用。

1.Keepalived 的热备方式

        Keepalived 采用 VRRP(Virtual Router Redundancy Protocol,虚拟路由冗余协议)热备份,以软件的方式实现 Linux 服务器的多机热备功能,VRRP 时针对路由器的一种备份解决方案--由多台路由器组成一个热备组,通过共用的虚拟IP 地址对外提供服务:每个热备组内同一时只有一台路由器提供服务,其他路由器处于冗余状态,若当前在线的路由器失效,则其他路由器会自动接替(优先级决定接替顺序)虚拟IP,以继续提供服务 如图所示

        热备组内的每台路由器都可能成为主路由器,虚拟路由器的IP地址(VIP)可以在热备组的路由器之间进行转移,所以也称为漂移IP地址。使用Keepalived 时,漂移地址的实现不需要手动建立虚接口配置文件(如上一章讲解的ens33:0)而是由Keepalived 根据配置文件自动管理。

2.Keepalived 的安装与服务控制
1)安装Keepalived

        在CentOS7 系统中,使用YUM 方式安装 keepalived 会自动安装keepalived 所需的软件包。除此之外,在LVS 群集环境中应用时,也需要用到 ipvsadm 管理工具

[root@Keepalived01 ~]# yum -y install keepalived ipvsadm
2)控制 Keepalived 服务

YUM 安装 keepalived 后,执行以下命令将 keepalived 服务设置为开机启动。

[root@Keepalived01 ~]# systemctl enable keepalived.service 

1.1.2 使用 Keepalived 实现双机热备

        基于 VRRP 的热备方式,Keepalived 可以用作服务器的故障切换,每个热备组可以有多台服务器——当然,最常用的就是双机热备了。在这种双机热备方案中,故障切换主要针对虚拟IP地址的漂移来实现,因此能够适用于各种应用服务器(不管 Web,FTP,Mail,还是SSH,DNS.....)

        本小结将通过一个简单的案例来说明 Keepalived 双机热备的配置方法。其中,主,备服务器的IP地址为 192.168.182.100 和 192.168.182.101,基于漂移地址 192.168.182.200 提供Web服务

        主,备服务器中都需要安装 Keepalived,具体步骤参考1.1.1节,使用YUM方式安装 httpd 提供web服务

1.主服务器的配置

        Keepalived 服务的配置目录位于 /etc/keepalived/ 其中,Keepalived.conf 是主配置文件:另外包括一个子目录 samples/ 提供了许多配置详例作为参考。在Keepalived 的配置文件中,使用 global_defs {....} 区段指定全局参数,使用 vrrp_instance 实例名称 {....} 区段指定VRRP 热备参数,注释文件以 “ !”号开头

[root@Keepalived01 ~]# systemctl stop firewalld
[root@Keepalived01 ~]# cd /etc/keepalived/
[root@Keepalived01 keepalived]# cp keepalived.conf keepalived.conf.bak
[root@Keepalived01 keepalived]# vim keepalived.conf
global_defs {
        router_id Keepalived01    //本路由器(服务器)的名称
}


vrrp_instance VI_1 {    //定义VRRP 热备实例
    state MASTER        //热备状态,MASTER 表示主服务器
    interface ens33        //承载VIP接口的 ID 号,每个热备组保存一致
    virtual_router_id 1    //虚拟路由器的ID号,每个热备组保持一致
    priority 100        //优先级,数值越大优先级越高
    advert_int 1        //通告间隔秒数(心跳频率)
    authentication {        //认证信息,每个热备组保持一致
        auth_type PASS    //认证类型
        auth_pass 1111    //密码字串
    }
    virtual_ipaddress {
        192.168.182.200        //指定漂移地址(VIP)可以多有个
    }
}

        确认上述配置无误,然后启动Keepalived 服务,实际状态为 master 的主服务器将为 ens33 接口自动添加 VIP 地址,通过 ip 命令可以查看(注意:ifconfig 命令看不到)

[root@Keepalived01 keepalived]# systemctl start keepalived.service     //启动服务
[root@Keepalived01 keepalived]# ip addr show dev ens33 
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:e8:c0:2b brd ff:ff:ff:ff:ff:ff
    inet 192.168.182.100/24 brd 192.168.182.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet 192.168.182.200/32 scope global ens33    //自动设置的VIP地址
       valid_lft forever preferred_lft forever
    inet6 fe80::8898:d4ee:8e2f:474b/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
[root@Keepalived01 keepalived]# 
2.备份服务器的配置

        在同一个keepalived热备组内所有的服务器的keepalived配置文件基本相同,包括虚拟路由器的id号认证信息、漂移地址、心跳帧率等,不同之处主要在于路由器名称、热备状态、优先级、

  • 路由器名称(router_id)建议为每个参与热备份服务器指定不同的名称
  • 热备状态(state)至少应有一台主服务器,将状态设为 MASTER;可以有多台备用的服务器,将状态设置为 BACKUP
  • 优先级(priority)数值越大取得VIP 控制权的优先级越高,因此主服务器的优先级应该设为最高;其他备用服务器的优先级可以依次减递,但不要相同,以免争夺 VIP 控制权时发生冲突

        配置备用服务器(可以有多台)时,可以参考主服务器的 keepalived.conf 配置文件内容,只要修改路由器名称,热备状态,优先级就可以了

[root@Keepalived02 ~]# systemctl stop firewalld.service 
[root@Keepalived02 ~]# cd /etc/keepalived/
[root@Keepalived02 keepalived]# cp keepalived.conf keepalived.conf.bak
[root@Keepalived02 keepalived]# vim keepalived.conf
global_defs {
        router_id keepalived02    //本路由器(服务器)名称
}

vrrp_instance VI_1 {
    state BACKUP        //备份状态为BACKUP
    interface ens33
    virtual_router_id 1
    priority 99    //优先级,数值低于主服务器
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.182.200
    }
}

        确认配置无误,一样需要启动 Keepalived 服务,此时主服务器任然在线,VIP地址实际上任然由主服务器控制,其他服务器处于备用状态,因此在备用服务器中将不会有 ens33 添加VIP 地址

[root@Keepalived02 keepalived]# systemctl start keepalived.service 
[root@Keepalived02 keepalived]# ip addr show dev ens33 
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:10:f2:b6 brd ff:ff:ff:ff:ff:ff
    inet 192.168.182.101/24 brd 192.168.182.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::47b8:3cc0:3783:e45f/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
[root@Keepalived02 keepalived]# 
3.测试双机热备功能

        Keepalived 的日志消息保存在 /var/log/messages 文件中,在测试主,备故障自动切换功能时,可以跟踪此日志文件来观察备份状态的变化。以针对连通性和 Web 服务的测试为例,主要操作如下所述。

1)测试连通性

        在客户机中执行 ping -t 192.168.182.200 命令,能够正常,持续ping通,根据以下操作继续观察测试结果

(1)停止启用主服务器的Keepalived 服务器,发现ping测试只中断了 1 或 2 个包即恢复正常,说明已有其他服务器接替 VIP地址,并及时响应客户机请求。可以看到主服务器没用ens33这个VIP控制权了

[root@Keepalived01 keepalived]# systemctl stop keepalived.service 
[root@Keepalived01 keepalived]# ip addr show dev ens33 
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:e8:c0:2b brd ff:ff:ff:ff:ff:ff
    inet 192.168.182.100/24 brd 192.168.182.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::8898:d4ee:8e2f:474b/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
[root@Keepalived01 keepalived]#

 

 可以看到备用服务器已经夺取VIP控制权

[root@Keepalived02 keepalived]# ip addr show dev ens33 
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:10:f2:b6 brd ff:ff:ff:ff:ff:ff
    inet 192.168.182.101/24 brd 192.168.182.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet 192.168.182.200/32 scope global ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::47b8:3cc0:3783:e45f/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
[root@Keepalived02 keepalived]# 

(2)重新启动主服务器的 Keepalived 服务,发现 ping 测试只中断了 1 或 2 个包即恢复正常,说明主服务器已恢复正常,并夺回 VIP 地址的控制权

再次使用 ip addr show dev ens33 查看主,备服务器可以看到VIP已经重新被主服务器夺回控制权 

2)Web 访问测试

在客户机中访问 http://192.168.182.200 ,将看到由主服务器 192.168.182.100 提供的网页文档

(1)停止启用主服务器的 Keepalived 服务,再次访问上述 Web 服务,将看到由备用服务器192.168.182.101 提供的网页文档,说明 VIP 地址以切换至备用服务器

(2)在重启启用主服务器的 Keepalived 服务,再次访问上述 Web 服务,将看到重新由主服务器192.168.182.100 提供的晚饭也文档,说明主服务器已重新夺取VIP 地址

3)查看日志记录

        在执行主,备服务器故障切换的过程中,分别观察各自的 /var/log/messages 日志文件,可以看到MASTER,SLAVE 状态迁移记录

(1)主服务器中 Keepalived 服务状态先变为 stop 移除 VIP 地址,恢复后重新变更为 MASTER

[root@Keepalived01 keepalived]# less /var/log/messages

        通过上述测试过程,可以发现双机热备已经正常,客户机只要通过 VIP 地址就可以访问服务器所提供的 Web 等应用,其中任何一台服务器失效,另一台将会立即接替服务,从而实现调高可用性。实际应用时,注意主,备服务器所提供的 Web 服务内容要保存一致

1.2 LVS+Keepalived 高可用群集

        Keepalived 的设计目标时构建高可用的 LVS 负载均衡群集,可以调用 ipvsadm 工具来创建虚拟服务器,管理服务器池,而不仅仅用作双机热备,使用,Keepalived 构建 LVS 群集更加简单易用,主要优势体现在:对 LVS 负载调度器实现热备切换,提高可用性:对服务器池中的节点进行健康检查,自动移除失效节点,恢复后再重新加入

        在基于LVS+Keepalived 群集结构中,至少包括两台热备的负载均衡调度器,三台以上的节点服务器。本节将以 DR 模式的 LVS 群集为基础,增加一台从负调度器,使用 Keepalived 来实现主,从调度器的热备,从而构建兼有负载均衡,糕可用两种能力的 LVS 网站群集平台,如图

        使用 Keepalived 构建 LVS 群集时,也需要用到 ipvsadm 管理工具,但大部分工作会由 Keepalived 自动完成,不需要手动执行 ipvsadm (除了查看和监控群集以为)

1.配置主调度器

1)配置全局。热备配置

首先为主,从调度器实现热备功能,漂移地址使用LVS 群集的 VIP地址

[root@Keepalived01 ~]# vim /etc/keepalived/keepalived.conf
[root@Keepalived01 ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
	router_id Keepalived01
}


vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 1
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.182.200
    }
}

[root@Keepalived01 ~]# 
2)Web 服务器池配置

        在Keepalived 的热备配置基础上添加 virtual_server VIP 端口 {.....} 区段来配置虚拟服务器主要包括对负载调度算法,群集工作模式,健康检查间隔,真实服务器地址等参数的设置

[root@Keepalived01 ~]# vim /etc/keepalived/keepalived.conf
virtual_server 192.168.182.200 80 {        //虚拟服务器地址(VIP)端口
    delay_loop 15    //健康检查的时间间隔(秒)
    lb_algo rr    //轮询rr调度算法
    lb_kind DR        //直接路由DR群集工作模式
    persistence_timeout 60    //连接保持时间(秒) 若启用请去掉!号
    protocol TCP    //应用服务器采用的是TCP协议
    
    real_server 192.168.182.102 80 {        //第一个Web节点的地址,端口
        weight 1    //节点的权重
           TCP_CHECK{        //检查健康方式
            connect_port 80    //检查的目标端口
            connect_timeout 3    //连接超时(秒)
            nb_get_retry 3        //重试次数
            delay_before_retry 4    //重试间隔(秒)
        }   
    }       
            
   real_server 192.168.182.103 80 {    //第二个Web节点的地址,端口
        weight 1
           TCP_CHECK{
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 4
        }
    }
}

3)重启Keepalived fuwu
[root@Keepalived01 ~]# systemctl restart keepalived.service 

2.配置从调度器

        从调度器的配置与主调度器基本相同,也包括全局配置,热备配置,服务器池配置,只需要调整 router_id state priority 参数即可,其余内容完全相同。配置完成以后重启 Keepalived 服务

[root@Keepalived02 ~]# vim /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {
        router_id keepalived02
}

vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 1
    priority 99
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.182.200
    persistence_timeout 60
    protocol TCP

    real_server 192.168.182.102 80 {
        weight 1
           TCP_CHECK{
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 4
        }
    }

   real_server 192.168.182.103 80 {
        weight 1
           TCP_CHECK{
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 4
        }
    }
}

[root@Keepalived02 ~]# systemctl restart keepalived.service

3.主/从服务器的参数配置

1)主服务器
[root@Keepalived01 ~]# vim /etc/sysctl.conf 
[root@Keepalived01 ~]# cat /etc/sysctl.conf | grep net
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0

[root@Keepalived01 ~]# sysctl -p
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0

[root@Keepalived01 ~]# systemctl restart keepalived.service 
 2)从服务器
[root@Keepalived02 ~]# cat /etc/sysctl.conf | grep net
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0

[root@Keepalived02 ~]# sysctl -p
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0

[root@Keepalived02 ~]# systemctl restart keepalived.service

4.Web 服务池参数配置

[root@node01 ~]# vim /etc/sysctl.conf 
[root@node01 ~]# cat /etc/sysctl.conf | grep net
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

[root@node01 ~]# sysctl -p
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

[root@node01 ~]# cd /etc/sysconfig/network-scripts/
[root@node01 network-scripts]# cp ifcfg-lo ifcfg-lo:0
[root@node01 network-scripts]# vim ifcfg-lo:0
[root@node01 network-scripts]# vim ifcfg-lo:0
[root@node01 network-scripts]# cat ifcfg-lo:0
DEVICE=lo:0
IPADDR=192.168.182.200
NETMASK=255.255.255.255
ONBOOT=yes
[root@node01 network-scripts]# ifup ifcfg-lo:0
[root@node01 network-scripts]# ifconfig lo:0
lo:0: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 192.168.182.200  netmask 255.255.255.255
        loop  txqueuelen 1000  (Local Loopback)

[root@node01 network-scripts]# 

5.配置NFS共享存储

1)安装 nfs-utils,rpcbind 软件包

        提供 RPC 支持的服务为 rpcbind,提供 NFS 共享的服务为 nfs,完成安装以后建议调整这两个服务的自启动状态,以便每次开机后自动启用。手动加载 NFS 共享服务时,应该先启动 rpcbind,再启动 nfs。

[root@NFS ~]# yum -y install nfs-utils rpcbind
[root@NFS ~]# systemctl enable nfs
[root@NFS ~]# systemctl enable rpcbind
2)设置共享目录

        NFS 的配置文件为/etc/exports,文件内容默认为空(无任何共享)。在 exports 文件中设置共享资源时,记录格式为“目录位置客户机地址(权限选项)”。例如,若要将文件夹/opt/wwwroot 共享给 192.168.182.0/24 网段使用,允许读写操作,具体配置如下所示
 

[root@NFS ~]#  mkdir /aaa
[root@NFS ~]# vim /etc/exports
[root@NFS ~]# cat /etc/exports
/aaa 192.168.182.0/24(rw,sync,no_root_squash)
3)启动NFS 服务程序
[root@NFS ~]# systemctl start rpcbind
[root@NFS ~]# systemctl start nfs
[root@NFS ~]# netstat -anpt | grep rpc
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      67104/rpcbind       
tcp        0      0 0.0.0.0:20048           0.0.0.0:*               LISTEN      67238/rpc.mountd    
tcp        0      0 0.0.0.0:33982           0.0.0.0:*               LISTEN      67235/rpc.statd     
tcp6       0      0 :::50091                :::*                    LISTEN      67235/rpc.statd     
tcp6       0      0 :::111                  :::*                    LISTEN      67104/rpcbind       
tcp6       0      0 :::20048                :::*                    LISTEN      67238/rpc.mountd    
[root@NFS ~]# 
4)查看本机发布的NFS 共享目录
[root@NFS ~]# showmount -e
Export list for NFS:
/aaa 192.168.182.0/24
[root@NFS ~]# 

6.在客户机中访问 NFS 共享存储

        NFS 协议的目标是提供一种网络文件系统,因此对 NFS 共享的访问也使用 mount 命令来进行挂载,对应的文件系统类型为 nfs。既可以手动挂载,也可以加入/etc/fstab 配置文件来实现开机自动挂载。考虑到群集系统中的网络稳定性,NFS 服务器与客户机之间最好使用专有网络进行连接。


1)Web池安装 rpcbind 软件包,并启动 rpcbind 服务

        若要正常访问 NFS 共享资源,客户机中也需要安装 rpcbind 软件包,并启动 rpcbind 系统服务。另外,为了使用 showmount 查询工具,建议将 nfs-utils 软件包也一并装上

[root@node01 ~]# yum -y install rpcbind nfs-utils
[root@node01 ~]# systemctl enable rpcbind
[root@node01 ~]# systemctl start rpcbind

       如果已经安装了 nfs-utils 软件包,则客户机也可以使用 showmount 查看 NFS 服务器端共享了哪些目录,查询格式为“showmount -e 服务器地址

[root@node01 ~]# showmount -e 192.168.182.105
Export list for 192.168.182.105:
/aaa 192.168.182.0/24
[root@node01 ~]# 

1.3 Web池安装 httpd 创建测试网页

1)Web池安装httpd,创建测试网页的命令如下
[root@node01 ~]# yum -y install httpd
[root@node01 ~]# mount 192.168.182.105:/aaa /var/www/html/
[root@node01 ~]# vim /var/www/html/index.html
[root@node01 ~]# cat /var/www/html/index.html 
<h1>Hello Word</h1>
[root@node01 ~]#

[root@node02 ~]# mount 192.168.182.105:/aaa /var/www/html/
2)Web池启动httpd 服务程序
[root@node01 ~]# systemctl enable httpd
[root@node01 ~]# systemctl start httpd
3)Web服务器池配置 fstab 自动挂载

        修改/etc/fstab 配置文件,加入 NFS 共享目录的挂载设置。注意将文件系统类型设为 nfs,挂载参数建议添加_netdev(设备需要网络)。若添加 soft、intr 参数可以实现软挂载,允许在网络中断时放弃挂载。这样,客户机就可以在每次开机后自动挂载 NFS 共享资源了。
 

[root@node01 ~]# vim /etc/fstab 
[root@node01 ~]# cat /etc/fstab | grep nfs
192.168.182.105:/aaa /var/www/html nfs   defaults,netdev 0 0
[root@node01 ~]# 

 

1.4 测试 LVS+Keepalived 高可用群集

        在客户机的浏览器中,能够通过LVS+Keepalived 群集的 VIP 地址(192.168.182.200)正常访问Web 页面内容。当主,从调度器任何一个失效时,Web站点任然何以访问(可能需要刷新或者重新打开浏览器)只需服务器池有两台及以上的真实服务器可用,就可以实现访问量的负载均衡。

        通过主,从调度器的 /var/log/messages 日志文件,可以追踪故障切换过程,若要查看负载分配情况,可以执行 ipvsadm-ln     或 ipvsadm -lnc 等操作。最终可以验证 LVS+Keepalived 高可用负载均衡群集的健壮性

[root@Keepalived01 ~]# ipvsadm -lnc
IPVS connection entries
pro expire state       source             virtual            destination
TCP 00:28  NONE        192.168.182.1:0    192.168.182.200:80 192.168.182.102:80
TCP 00:52  FIN_WAIT    192.168.182.1:59054 192.168.182.200:80 192.168.182.102:80
TCP 01:21  FIN_WAIT    192.168.182.1:59194 192.168.182.200:80 192.168.182.102:80
TCP 00:50  FIN_WAIT    192.168.182.1:59193 192.168.182.200:80 192.168.182.102:80
[root@Keepalived01 ~]#

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1390743.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

uboot工作原理介绍

uboot其实和电脑的BIOS是一个原理&#xff0c;它主要做两件事: &#xff08;1&#xff09;初始化硬件&#xff1b; &#xff08;2&#xff09;将系统文件&#xff08;或者说是内核&#xff09;从flash中读出来加载到DDR里面执行。 给大家解释下面几个问题&#xff1a; 为什么…

IDEA 中搭建 Spring Boot Maven 多模块项目 (父SpringBoot+子Maven)

第1步&#xff1a;新建一个SpringBoot 项目 作为 父工程 [Ref] 新建一个SpringBoot项目 删除无用的 .mvn 目录、 src 目录、 mvnw 及 mvnw.cmd 文件&#xff0c;最终只留 .gitignore 和 pom.xml 第2步&#xff1a;创建 子maven模块 第3步&#xff1a;整理 父 pom 文件 ① …

数据结构--排序

参考【算法】排序算法之希尔排序 - 知乎 (zhihu.com)https://zhuanlan.zhihu.com/p/122632213 1. 排序的定义 2. 插入排序 2.1 直接插入排序 在插入第i&#xff08;i>1)个记录时&#xff0c;前面的i-1个记录已经排好序 void insertSort(int r[],int n) {for(int i2;i<…

华为设备vlan下配置MSTP,STP选举

核心代码,不同实例&#xff0c;承载不同流量&#xff0c;为每个实例设置一个根网桥达到分流的效果 stp region-config //进入stp区域的设置 region-name R1 //区域命名为R1 instance 1 vlan 10 …

运维知识点-Sqlite

Sqlite 引入 依赖 引入 依赖 <dependency><groupId>org.xerial</groupId><artifactId>sqlite-jdbc</artifactId><version>3.36.0.3</version></dependency>import javafx.scene.control.Alert; import java.sql.*;public clas…

快乐学Python,数据分析之使用爬虫获取网页内容

在上一篇文章中&#xff0c;我们了解了爬虫的原理以及要实现爬虫的三个主要步骤&#xff1a;下载网页-分析网页-保存数据。 下面&#xff0c;我们就来看一下&#xff1a;如何使用Python下载网页。 1、网页是什么&#xff1f; 浏览器画网页的流程&#xff0c;是浏览器将用户输…

2023 安洵杯-PWN-【seccomp】

文章目录 检查设置注意事项 源码main函数sub_40143E(a1,a2,a3)sub_40119E()沙箱规则sub_40136E() 思路注意exp无chmod版本有chmod版本 检查 设置 在当前文件夹下或者其他地方建个flag文件&#xff0c;内容自己随意定&#x1f604; 注意事项 记得将动态链接器和动态库的文件…

MongoDB-数据库文档操作(2)

任务描述 文档数据在 MongoDB 中的查询和删除。 相关知识 本文将教你掌握&#xff1a; 查询文档命令&#xff1b;删除文档命令。 查询文档 我们先插入文档到集合 stu1 &#xff1a; document([{ name:张小华, sex:男, age:20, phone:12356986594, hobbies:[打篮球,踢足球…

2023国赛 陕西省省级二等奖得主 数学建模学习资源推荐

美国最为权威的数学建模参考书Mathematical Modeling 在前言部分对数学建模有一个比较通俗易懂的解释&#xff1a; Mathematical modeling is the link between mathematics and the rest of the world. You ask a question. You think a bit, and then you refine the questi…

W25Q64讲解及历程

W25Qxx系列是一种低成本、小型化、使用简单的非易失性存储器&#xff08;ROM&#xff09;&#xff0c; ROM的特点就是掉电不丢失也就是非易失性存储器&#xff0c;和RAM掉电丢失不同&#xff1b; 常应用于数据存储、字库存储、固件程序存储等场景&#xff1b; 存储介质&…

x-cmd pkg | mermaid - 流程图、时序图等图表绘制工具

简介 mermaid-cli 是由 Mermaid 官方提供的命令行工具&#xff0c;用于将 Mermaid 语法的文本转换为 SVG / PNG / PDF。 Mermaid 是一个基于 JavaScript 的图表绘制工具&#xff0c;它使用简单的文本描述语法&#xff0c;就可以绘制出流程图、时序图、甘特图等多种图表。 首次…

跟着cherno手搓游戏引擎【6】ImGui和ImGui事件

导入ImGui&#xff1a; 下载链接&#xff1a; GitHub - TheCherno/imgui: Dear ImGui: Bloat-free Immediate Mode Graphical User interface for C with minimal dependencies 新建文件夹&#xff0c;把下载好的文件放入对应路径&#xff1a; SRC下的premake5.lua文件&#…

48 WAF绕过-权限控制之代码混淆及行为造轮子

目录 Safedog代码层手写及脚本绕过BT Aliyun代码层手写及脚本绕过safedog&#xff0c;BT&#xff0c;Aliyun-基于覆盖加密变异下编码解码绕过-代码层Safedog&#xff0c;BT&#xff0c;Aliyun-基于冰蝎新型控制器绕过全面测试-行为层Safedog,BT,Aliyun-基于手写新型控制器绕过全…

kotlin运行

1.使用android studio 由于我本身是做android的&#xff0c;android studio本身有内置kotlin的插件。但若只是想跑kotlin的程序&#xff0c;并不像和android程序绑在一起&#xff0c;可以创建一个kt文件&#xff0c;在里面写一个main函数&#xff0c;就可以直接运行kotlin程序…

如何隐藏服务器真实IP地址,隐藏服务器IP有什么好处

首先我们介绍了隐藏服务器IP的概念及工作模式&#xff0c;接着阐述了其对于DDoS攻击的防护作用。然后介绍了如何利用隐藏服务器IP增加系统性能和稳定性。接着我们讲述了如何隐藏服务器IP防止黑客攻击&#xff0c;最后总结了隐藏服务器IP在保护服务器和用户数据方面发挥的作用。…

10分钟读完一篇 AI 论文!​

已经2024年了&#xff0c;该出现一个写论文解读的AI Agent了。 大家肯定也在经常刷论文吧。 但真正尝试过用GPT去刷论文、写论文解读的小伙伴&#xff0c;一定深有体验——费劲。其他agents也没有能搞定的&#xff0c;今天我发现了一个超级厉害的写论文解读的agent &#xff…

计算机网络期末复习(基础概念+三套卷子练习)

文章目录 第一章&#xff1a;计算机网络概念计算机网络的概念计算机网络体系结构 第二章&#xff1a;物理层物理层的基本概念物理层的基本通信技术 练题专题练习码分多址地址聚合 1.0选择填空大题练习 2.0选择填空大题练习 3.0选择填空大题练习 第一章&#xff1a;计算机网络概…

【驱动】TI AM437x(内核调试-06):网卡(PHY和MAC)、七层OSI

1、网络基础知识 1.1 七层OSI 第一层:物理层。 1)需求: 两个电脑之间如何进行通信? 具体就是一台发比特流,另一台能够收到。于是就有了物理层:主要是定义设备标准,如网线的额接口类型、管线的接口类型、各种传输介质的传输速率等。它的主要作用是传输比特流,就是从1/0…

C++多线程学习[三]:成员函数作为线程入口

一、成员函数作为线程入口 #include<iostream> #include<thread> #include<string>using namespace std;class Mythread { public:string str;void Test(){cout << str << endl;} }; int main() {Mythread test;test.str "Test";thr…

tidb Cloud 连接spring boot 项目

一、 免费试用tidbitcloud TiDB Cloud Documentation | PingCAP Docs 1.github账号登录 2.创建集群 3.点击对应集群cludter0 导入数据 导入 本地导入只支持csv文件&#xff0c;其他导入需要AWZ账号使用S3云存储 二、连接spingboot项目 选择java&#xff0c;复制下面的jd…