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

8. Nginx 配合 + Keepalived 搭建高可用集群

8. Nginx 配合 + Keepalived 搭建高可用集群

文章目录

  • 8. Nginx 配合 + Keepalived 搭建高可用集群
  • 1. Keepalived + Nginx 高可用集群(主从模式)
  • 2. 具体搭建步骤
  • 3. 自动检测 Nginx 异常, 终止 keepalived
  • 4. 配置文件 keepalived.conf 详解
  • 5. 最后:

1. Keepalived + Nginx 高可用集群(主从模式)

集群架构图:

在这里插入图片描述

  1. 准备两台 nginx 服务器, 一台做主服务器, 一台做备份服务器
  2. 两台 Nginx 服务器的 IP 地址, 可以自己配置,
  3. 安装 keepalived , 保证主从之间的通讯
  4. 对外提供统一的访问 IP(虚拟 IP-VIP)

2. 具体搭建步骤

  1. 搭建高可用集群基础环境

准备两台 Linux 服务器 192.168.198.166 和 192.168.198.167

可以克隆来完成,也可以直接拷贝一份虚拟机。

在两台 Linux 服务器 安装并配置好,Nginx

安装配置 Nginx 步骤前面讲过 如果你克隆的 Linux, 本身就有安装好了 Nginx, 直接使 ,
用即可.

验证安装是否成功, 在 windows 可以通过 IP 访问到 Nginx, 具体的操作步骤和注意事 项, 前面也都是说过了

因为我们是拷贝了一份 Linux , 而新的 Linux 的 Ip 已经变化了 所以需要克隆的 Linux ,
的 nginx.conf 文件中的 IP 地址 做相应的修改

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  1. 将两个 Linux 虚拟机当中的 Tomcat 都启动起来,测试是否可以访问
  • 启动 192.168.76.166 IP 地址的两个 Tomcat ,测试访问。

在这里插入图片描述

在这里插入图片描述

启动 192.168.76.166 的 Nginx

在这里插入图片描述

浏览器输入:http://192.168.76.166/search/cal.jsp

在这里插入图片描述


  • 启动 192.168.76.167 IP 地址的两个 Tomcat ,测试访问。

在这里插入图片描述

启动 192.168.76.167 IP 地址 下的 Nginx

在这里插入图片描述

浏览器输入:http://192.168.76.167/search/cal.jsp

在这里插入图片描述



  1. 在 两台 Linux 的虚拟机当中安装 keepalived

载 keepalived-2.0.20.tar.gz 源码安装包, https://keepalived.org/download.html

在这里插入图片描述

  1. 上传到两台 Linux /root 目录下

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  1. 在 Linux 两个虚拟机当中 root 目录下,创建 keepalived 目录
mkdir /root/keepalived

在这里插入图片描述
20250226192006182.png&pos_id=img-LJgXREho-1740878883268)

  1. 两个 Linxu 虚拟机当中,将keepalived-2.0.20.tar.gz 解压文件到指定目录: tar -zxvf keepalived-2.0.20.tar.gz -C ./keepalived
[root@localhost ~]# tar -zxvf keepalived-2.0.20.tar.gz -C ./keepalived

在这里插入图片描述

  1. 两个 Linxu 虚拟机当中,进入到 /root/keepalived/keepalived-2.0.20 目录当中
cd /root/keepalived/keepalived-2.0.20

在这里插入图片描述

  1. 两个 Linux 虚拟机当中执行: ./configure --sysconf=/etc --prefix=/usr/local 命令。 在:/root/keepalived/keepalived-2.0.20下执行。
 ./configure --sysconf=/etc --prefix=/usr/local # 说明: 将配置文件放在  /etc 目录下,  安装路径在  /usr/local
[root@localhost keepalived-2.0.20]#  ./configure --sysconf=/etc --prefix=/usr/local

在这里插入图片描述

  1. 在两个 Linux 虚拟机当中的执行该指令,make && make install 编译。

在这里插入图片描述

[root@localhost keepalived-2.0.20]# make && make install

在这里插入图片描述

  1. 如果成功, 就会安装好 keepalived

说明: keepalived 的配置目录在 /etc/keepalived/keepalived.conf

keepalived 的启动指令在 /usr/local/sbin/keepalived

说明安装成功了

在这里插入图片描述

在这里插入图片描述

说明:两个 Linux 虚拟机都安装成功了 keepalived 。

  1. 在 keepalived 当中配置,完成高可用集群配置
  1. 将其中一台 Linux( 这里我们将 192.168.76.166 指定为Master(主) vi /etc/keepalived/keepalived.conf
[root@localhost keepalived]# pwd
/etc/keepalived
[root@localhost keepalived]# vim keepalived.conf 

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  3 global_defs {
  4    notification_email {
  5      acassen@firewall.loc
  6      failover@firewall.loc
  7      sysadmin@firewall.loc
  8    }
  9    notification_email_from Alexandre.Cassen@firewall.loc
 10    smtp_server 192.168.200.1
 11    smtp_connect_timeout 30
 12    router_id rainbowsea100
 13    vrrp_skip_check_adv_addr
 14    #vrrp_strict
 15    vrrp_garp_interval 0
 16    vrrp_gna_interval 0
 17 }
 18 

在这里插入图片描述

机器名尽量不要有下划线,不然容易报错。

在这里插入图片描述

在这里插入图片描述

 19 vrrp_instance VI_1 {
 20     state MASTER
 21     interface ens33
 22     virtual_router_id 51
 23     priority 100
 24     advert_int 1
 25     authentication {
 26         auth_type PASS
 27         auth_pass 1111
 28     }
 29     virtual_ipaddress {
 30         192.168.76.18
 31         #192.168.200.16
 32         #192.168.200.17
 33        #192.168.200.18
 34     }
 35 }
 36 

  1. 启动这台作为主的 Linux 的 keepalived 指令: /usr/local/sbin/keepalived,就是执行该路径下的这个 keepalived 命令
[root@localhost keepalived]# /usr/local/sbin/keepalived 

在这里插入图片描述

  1. 观察这台 linux 的 ens33 是否已经绑定 192.168.200.18 ,我们在 /etc/keepalived/keepalived.conf 配置文件当中的virtual_ipaddress {192.168.76.18 } 属性。
[root@localhost keepalived]# ip a

在这里插入图片描述

  1. 将其中一 台虚拟 Linux主机( 这里我们将 192.168.76.167) 指 定 为 Backup( 备 份 服 务 器 ) : vi /etc/keepalived/keepalived.conf

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  3 global_defs {
  4    notification_email {
  5      acassen@firewall.loc
  6      failover@firewall.loc
  7      sysadmin@firewall.loc
  8    }
  9    notification_email_from Alexandre.Cassen@firewall.loc
 10    smtp_server 192.168.200.1
 11    smtp_connect_timeout 30
 12    router_id rainbwosea600
 13    vrrp_skip_check_adv_addr
 14    #vrrp_strict
 15    vrrp_garp_interval 0
 16    vrrp_gna_interval 0
 17 }

在这里插入图片描述

在这里插入图片描述

 19 vrrp_instance VI_1 {
 20     state BACKUP
 21     interface ens33
 22     virtual_router_id 51
 23     priority 80
 24     advert_int 1
 25     authentication {
 26         auth_type PASS
 27         auth_pass 1111
 28     }
 29     virtual_ipaddress {
 30         192.168.76.18
 31        #192.168.200.16
 32        #192.168.200.17
 33        #192.168.200.18
 34     }
 35 }

  1. 启动这台作为主的 Linux 的 keepalived 指令: /usr/local/sbin/keepalived,就是执行该路径下的这个 keepalived 命令
[root@localhost keepalived]# /usr/local/sbin/keepalived 

在这里插入图片描述

  1. 观察这台 linux 的 ens33 是否已经绑定 192.168.200.18 ,我们在 /etc/keepalived/keepalived.conf 配置文件当中的virtual_ipaddress {192.168.76.18 } 属性。
[root@localhost keepalived]# ip a

在这里插入图片描述

  1. 测试 Windows 是否可以 ping 我们的keepalived 配置的/etc/keepalived/keepalived.conf 配置文件当中的virtual_ipaddress {192.168.76.18 } 属性。

在这里插入图片描述

同时测试两台 Linux 虚拟机是否可以 ping 同我们的的keepalived 配置的/etc/keepalived/keepalived.conf 配置文件当中的virtual_ipaddress {192.168.76.18 } 属性。

[root@localhost keepalived]# ping 192.168.76.18

在这里插入图片描述

如果无法 ping 通,keepalived 启动后无法 ping 通 VIP,提示 ping: sendmsg: Operation not permitted

解决方法,如果不是配置上出错了,则大家可以移步至:✏️✏️✏️ https://blog.csdn.net/xjuniao/article/details/101793935 尝试解决

nginx+keepalived 配置说明和需要避开的坑https://blog.csdn.net/qq_42921396/article/details/123074780

  1. 测试:

首先: 首先保证 windows 可以连通 192.168.76.18 这个虚拟 IP

在这里插入图片描述

访问 nginx 如图。浏览器输入我们这个 keepalived 配置的公共对外的 192.168.76.18 的。

http://192.168.76.18/search/cal.jsp

在这里插入图片描述

大家可以看到, 因为 192.168.76.166 是 Master 他的优先级高 所以访问的就是 ,

192.168.76.166 的 Nginx, 同时仍然是支持负载均衡的。

停止 192.168.76.166 的 keepalived (Master) 服务, 或者直接关闭 192.168.76.166 主机, 再 次 访 问 http://192.168.76.166/search/cal.jsp , 这时虚拟 IP绑定发生漂 移绑定到 ,192.168.76.167 Backup 服务 访问效果如图:

这里我们直接关闭 192.168.76.166 Master 的 keepalived 来测试

[root@localhost keepalived]# killall keepalived # 关闭 keepalived  服务

在这里插入图片描述

浏览器访问:http://192.168.76.18/search/cal.jsp

在这里插入图片描述

再次测试,我们将:192.168.76.166 的作为 Master 的 keepalived 服务重新启动后,浏览器访问:http://192.168.76.18/search/cal.jsp

[root@localhost keepalived]# /usr/local/sbin/keepalived 
[root@localhost keepalived]# ps -aux | grep keepalived

在这里插入图片描述

在这里插入图片描述


3. 自动检测 Nginx 异常, 终止 keepalived

这里我们演示 keepalived 服务不关闭,但是我们关闭 Nginx 服务,浏览器访问:http://192.168.76.18/search/cal.jsp 会存在一个报错。

[root@localhost nginx]# ./sbin/nginx -s stop # 关闭 Nginx 服务
[root@localhost nginx]# ps -aux | grep nginx
root      12644  0.0  0.0 112812   980 pts/0    S+   05:13   0:00 grep --color=auto nginx
[root@localhost nginx]# 

在这里插入图片描述

在这里插入图片描述

报错:因为:keepalived 无法\自动检测 Nginx 异常。这里我们的 Nginx 已经被关闭了。但是 keepalived 还想通过 Nginx 反向代理访问Tomcat 就报错。

解决方法:

我们可以编写一个 shell 脚本 ,让 keepalived 可以自动检测 Nginx 是否失效了。

  1. 编写 shell 脚本: vi /etc/keepalived/rsnginx.sh
[root@localhost keepalived]# vim /etc/keepalived/rsnginx.sh
#!/bin/bash
num=`ps -C nginx --no-header | wc -l`
if [ $num -eq 0 ];then
 killall keepalived
fi

在这里插入图片描述

简单说明: 下面的脚本就是去统计 ps -C nginx --no-header 的行数, 如果为 0 , 说明 nginx 已经异常终止了, 就执行 killall keepalived

  1. 修改我们编写的 shell 脚本的修改/etc/keepalived/rsnginx.sh 权限

在这里插入图片描述

root@localhost keepalived]# chmod 755 rsnginx.sh

在这里插入图片描述

  1. 修改 192.168.76.166 主 Master 配置文件 指令 : vim /etc/keepalived/keepalived.conf
[root@localhost keepalived]# vim /etc/keepalived/keepalived.conf

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

 18 vrrp_script rsnginx{
 19  script "/etc/keepalived/rsnginx.sh"
 20  interval 2
 21  weight -20
 22 
 23 }
 24 
 25 vrrp_instance VI_1 {
 26     state MASTER
 27     interface ens33
 28     virtual_router_id 51
 29     priority 100
 30     advert_int 1
 31     authentication {
 32         auth_type PASS
 33         auth_pass 1111
 34     }
 35     virtual_ipaddress {
 36         192.168.76.18
 37         #192.168.200.16
 38         #192.168.200.17
 39        #192.168.200.18
 40 
 41     }
 42     track_script{
 43      rsnginx
 44     }
 45 }

  1. 重新启动 192.168.76.166 Master 的 keepalived(重启读取配置) , 再重新启动 Nginx 这时因为 Master 的优先级高,会争 夺到 VIP 优先绑定

注意:先启动 keepalived,再启动 Nginx 。

[root@localhost keepalived]# /usr/local/sbin/keepalived 
[root@localhost keepalived]# ps -aux | grep keepalived

在这里插入图片描述

[root@localhost sbin]# /usr/local/nginx/sbin/nginx 
[root@localhost sbin]# ps -aux | grep nginx

在这里插入图片描述

  1. 测试:

浏览器访问:http://192.168.76.18/search/cal.jsp

在这里插入图片描述

再次演示:我们关闭 Nginx 服务,但是 keepalived 服务不关闭浏览器访问:http://192.168.76.18/search/cal.jsp 就不会报错了。

[root@localhost sbin]# /usr/local/nginx/sbin/nginx -s stop
[root@localhost sbin]# ps -aux | grep nginx
root      12945  0.0  0.0 112812   980 pts/0    S+   05:37   0:00 grep --color=auto nginx

在这里插入图片描述

在这里插入图片描述

注意观察 keepalived 也终止了

在这里插入图片描述

注意事项:

  1. keepalived vrrp_script 脚本不执行解决办法

-打开日志观察

tail -f /var/log/messages

-重启 keepalived

systemctl restart keepalived.service

曾经出现过文件找不到 可以修改执行脚本文件名,不要有_ 就 OK

如果配置有定时检查 Nginx 异常的脚本, 需要先启动 nginx ,在启动 keepalived ,否则 keepalived 一起动就被 killall 了

提醒: 小伙伴们配置时,会遇到各种各样问题,有针对性解决即可

4. 配置文件 keepalived.conf 详解

#这里只注释要修改的地方
global_defs {
notification_email {
test@foxmail.com        #接收通知的邮件地址
}
notification_email_from Alexandre.Cassen@firewall.loc      #发送邮件的邮箱 smtp_server 192.168.200.1        #smtp server  地址
smtp_connect_timeout 30 
router_id Node132   # #Node132 为主机标识
vrrp_skip_check_adv_addr
#vrrp_strict  # #这里需要注释,避免虚拟 ip 无法 ping 通
vrrp_garp_interval 0 
vrrp_gna_interval 0
}
vrrp_instance VI_1 { 
state MASTER  # #主节点 MASTER  备用节点为 BACKUP
interface ens33                          #网卡名称
virtual_router_id 51 #VRRP 组名,两个节点的设置必须一样,指明属于同一 VRRP 组
priority 100  # 主节点的优先级(1-254 之间),备用节点必须比主节点优先级低
advert_int 1 # 组播信息发送间隔,两个节点设置必须一样
authentication { #设置验证信息,两个节点必须一致
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {  #指定虚拟 IP, 两个节点设置必须一样 
  192.168.200.16
}

}

主服务器

/etc/keepalived/keepalived.conf 文件中

cat >/etc/keepalived/keepalived.conf <<EOF
! Configuration File for keepalived

global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL # 机器标识,在一个网络中应该唯一,通常可设为hostname。故障发生时,邮件通知会用到
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

# 优先级不会不断的提高或者降低
# 可以编写多个检测脚本并为每个检测脚本设置不同的weight(在配置中列出就行)
vrrp_script nginx_check {
    # 脚本两种写法
    # 1、通过脚本执行的返回结果,改变优先级,keepalived继续发送通告消息,backup比较优先级再决定
    # script "/usr/bin/killall -0 nginx"
    # 2、脚本里面检测到异常,直接关闭keepalived进程,backup机器接收不到advertisement会抢占IP
    script "/etc/keepalived/nginx-check.sh"
    interval 5 # 脚本执行间隔5s
    # 如果脚本执行结果为0,并且weight配置的值大于0,则优先级相应的增加
    # 如果脚本执行结果非0,并且weight配置的值小于0,则优先级相应的减少
    # 其他情况,原本配置的优先级不变,即配置文件中priority对应的值
    weight -5
    fall 3 # 检测失败3次就定义为down状态
    rise 2 # 检测失败后,检测成功超过2次就定义为up状态,但不修改优先级
}

vrrp_instance VI_1 {
    state MASTER #指定初始状态,就是说在配置好后,这台服务器的初始状态就是这里指定的,但这里指定的不算,还是得要通过竞选通过优先级来确定。如果这里设置为MASTER,但如若他的优先级不及另外一台,那么这台在发送通告时,会发送自己的优先级,另外一台发现优先级不如自己的高,那么他会就回抢占为MASTER.
    interface ens33 #支持MULTICAST多播的网卡名 ip a 获取
    virtual_router_id 51 # 虚拟路由ID标识,一组的keepalived配置中主备都是设置一致, 相同的VRID为一个组,它将决定多播的MAC地址
    priority 100 # 1-254 设置本节点的优先级,优先级高的为MASTER,所以MASTER必须大于BACKUP
    advert_int 2 # 检查间隔,默认为1秒。这就是VRRP的定时器,MASTER每隔这样一个时间间隔,就会发送一个advertisement报文以通知组内其他路由器自己工作正常
    mcast_src_ip 192.168.62.127 # 发送多播数据包时的源IP地址,这里注意了,这里实际上就是在那个地址上发送VRRP通告,这个非常重要,一定要选择稳定的网卡端口来发送,这里相当于heartbeat的心跳端口,如果没有设置那么就用默认的绑定的网卡的IP,也就是interface指定的IP地址

#     # 如果两节点的上联交换机禁用了组播,则采用vrrp单播通告的方式
#     # 本机ip
#     unicast_src_ip 192.168.124.14
#     unicast_peer {
#         # 其他机器ip
#         192.168.124.13
#     }

    # 当它异常恢复后,即使它 prio 更高也不会抢占,这样可以避免正常情况下做无谓的切换
    nopreempt

    # 认证方式,主从需要一致否则无法通信导致脑裂
    authentication {
        auth_type PASS # 密码认证
        auth_pass 1111 # 密码最多8位
    }

    track_script {
        nginx_check # 引用VRRP脚本,即在 vrrp_script 部分指定的名字。定期运行该脚本改变优先级,并最终引发主从切换
    }

    # 虚拟IP地址,它随着state的变化而增加删除,当state为MASTER的时候就添加,当state为backup的时候删除
    # 这里主要是由优先级来决定的,和state设置的值没有多大关系
    # 如果有多个虚拟IP 换行填写多个
    virtual_ipaddress {
        192.168.62.125 #虚拟IP, 主从应该填写一致
        192.168.62.126 #虚拟IP, 主从应该填写一致
    }

    notify /etc/keepalived/notify-nginx.sh
}
EOF

备服务器:

cat >/etc/keepalived/keepalived.conf <<EOF
! Configuration File for keepalived

global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL # 机器标识,在一个网络中应该唯一,通常可设为hostname。故障发生时,邮件通知会用到
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

# 优先级不会不断的提高或者降低
# 可以编写多个检测脚本并为每个检测脚本设置不同的weight(在配置中列出就行)
vrrp_script nginx_check {
    # 脚本两种写法
    # 1、通过脚本执行的返回结果,改变优先级,keepalived继续发送通告消息,backup比较优先级再决定
    # script "/usr/bin/killall -0 nginx"
    # 2、脚本里面检测到异常,直接关闭keepalived进程,backup机器接收不到advertisement会抢占IP
    script "/etc/keepalived/nginx-check.sh"
    interval 5 # 脚本执行间隔5s
    # 如果脚本执行结果为0,并且weight配置的值大于0,则优先级相应的增加
    # 如果脚本执行结果非0,并且weight配置的值小于0,则优先级相应的减少
    # 其他情况,原本配置的优先级不变,即配置文件中priority对应的值
    weight -5
    fall 3 # 检测失败3次就定义为down状态
    rise 2 # 检测失败后,检测成功超过2次就定义为up状态,但不修改优先级
}

vrrp_instance VI_1 {
    state BACKUP #指定初始状态,就是说在配置好后,这台服务器的初始状态就是这里指定的,但这里指定的不算,还是得要通过竞选通过优先级来确定。如果这里设置为MASTER,但如若他的优先级不及另外一台,那么这台在发送通告时,会发送自己的优先级,另外一台发现优先级不如自己的高,那么他会就回抢占为MASTER.
    interface ens33 #支持MULTICAST多播的网卡名 ip a 获取
    virtual_router_id 51 # 虚拟路由ID标识,一组的keepalived配置中主备都是设置一致, 相同的VRID为一个组,它将决定多播的MAC地址
    priority 98 # 1-254 设置本节点的优先级,优先级高的为MASTER,所以MASTER必须大于BACKUP
    advert_int 2 # 检查间隔,默认为1秒。这就是VRRP的定时器,MASTER每隔这样一个时间间隔,就会发送一个advertisement报文以通知组内其他路由器自己工作正常
    mcast_src_ip 192.168.62.128 # 发送多播数据包时的源IP地址,这里注意了,这里实际上就是在那个地址上发送VRRP通告,这个非常重要,一定要选择稳定的网卡端口来发送,这里相当于heartbeat的心跳端口,如果没有设置那么就用默认的绑定的网卡的IP,也就是interface指定的IP地址

#     # 如果两节点的上联交换机禁用了组播,则采用vrrp单播通告的方式
#     # 本机ip
#     unicast_src_ip 192.168.124.14
#     unicast_peer {
#         # 其他机器ip
#         192.168.124.13
#     }

    # 当它异常恢复后,即使它 prio 更高也不会抢占,这样可以避免正常情况下做无谓的切换
    nopreempt

    # 认证方式,主从需要一致否则无法通信导致脑裂
    authentication {
        auth_type PASS # 密码认证
        auth_pass 1111 # 密码最多8位
    }

    track_script {
        nginx_check # 引用VRRP脚本,即在 vrrp_script 部分指定的名字。定期运行该脚本改变优先级,并最终引发主从切换
    }

    # 虚拟IP地址,它随着state的变化而增加删除,当state为MASTER的时候就添加,当state为backup的时候删除
    # 这里主要是由优先级来决定的,和state设置的值没有多大关系
    # 如果有多个虚拟IP 换行填写多个
    virtual_ipaddress {
        192.168.62.125 #虚拟IP, 主从应该填写一致
        192.168.62.126 #虚拟IP, 主从应该填写一致
    }

    notify /etc/keepalived/notify-nginx.sh
}
EOF

更多关于 配置文件 keepalived.conf 的内容可以移步至:✏️✏️✏️ https://www.cnblogs.com/KSPT/p/HA-Keepalived-01-Keepalived.html

[root@localhost linux]# ifconfig ens33 192.168.76.130
 # 修改 IP 地址,注意要是在 root 用户下。

5. 最后:

“在这个最后的篇章中,我要表达我对每一位读者的感激之情。你们的关注和回复是我创作的动力源泉,我从你们身上吸取了无尽的灵感与勇气。我会将你们的鼓励留在心底,继续在其他的领域奋斗。感谢你们,我们总会在某个时刻再次相遇。”

在这里插入图片描述


http://www.kler.cn/a/569362.html

相关文章:

  • P2P 下载科普:原理与应用
  • JavaScript 进阶A(作用域、闭包、变量和函数提升、函数相关只是、数组解构、对象解构、构造函数
  • 2025年2月最新SCI-鹰鱼优化算法HawkFish Optimization Algorithm-附Matlab免费代码
  • 合合信息在视觉内容安全领域的创新与应用-应对伪造挑战的前沿进展
  • 游戏分组王者荣耀
  • DeepSeek-R1 论文笔记:通过强化学习提升大语言模型的推理能力
  • 【Zinx】Day1:初始 Zinx 框架
  • Pandas使用教程 - Pandas 与 Web API 交互
  • 什么是 MGX:MetaGPT
  • C++11特性(笔记一)
  • C++:vector的push_back时间复杂度分析
  • Qt的坐标
  • 手机打电话时如何识别对方按下的DTMF按键的字符-安卓AI电话机器人
  • Java中用Map<String,Object>存储层次结构
  • 力扣1584. 连接所有点的最小费用
  • 使用Docker Compose部署 MySQL8
  • Win32 C++ 电源计划操作
  • Java+Vue+uniapp微信小程序校园自助打印系统(程序+论文+讲解+安装+调试+售后)
  • 阿里管理三板斧课程和管理工具包(视频精讲+工具文档).zip
  • vue3+ts+uniapp+unibest 微信小程序(第二篇)—— 图文详解自定义背景图页面布局、普通页面布局、分页表单页面布局