Zabbix HA高可用集群部署

Zabbix HA高可用集群介绍

关键基础设施通常需要高可用性 (HA),因为这些基础设施几乎不会造成停机。因此,对于任何可能失败的服务,都必须有一个故障转移选项,以便在当前服务失败时接管。

Zabbix 提供了易于设置的本机高可用性解决方案,并且不需要任何先前的 HA 专业知识。本机 Zabbix HA 可能有助于针对 Zabbix 服务器的软件/硬件故障提供额外的保护层,或者减少因维护而导致的停机时间。

在 Zabbix 高可用性模式中,多个 Zabbix 服务器作为集群中的节点运行。当集群中的一台 Zabbix 服务器处于活动状态时,其他服务器处于待命状态,准备在必要时接管。

在这里插入图片描述

通过 Zabbix 6.0 LTS 中添加的原生 Zabbix Server HA 集群功能,现在可以快速配置和部署多节点 Zabbix Server HA 集群,而无需使用任何外部工具

对于 Zabbix 组件,单点故障是我们的 Zabbix 服务器。尽管 Zabbix 本身非常稳定,但您仍然可能会遇到由于操作系统级别问题或更琐碎的问题(例如磁盘空间不足)而发生崩溃的情况。如果您的 Zabbix 服务器出现故障,所有数据收集、问题检测和警报都会停止。这就是为什么这个特定的 Zabbix 组件具有某种形式的高可用性和冗余性非常重要。

Zabbix 6.0 LTS 本机高可用性解决方案易于设置,所有必需的步骤都记录在 Zabbix 文档中。原生解决方案不需要任何额外的专业知识,并将继续由 Zabbix 官方支持、更新和改进。原生高可用性解决方案不需要任何新的软件组件 - 高可用性解决方案将有关 Zabbix 服务器节点状态的信息存储在 Zabbix 数据库后端中。

部署环境规划

Zabbix HA最少需要2个Zabbix Server节点即可实现HA集群高可用及故障转移。在同一个Zabbix HA集群中,只有一个实例或节点处于active(活动)状态,standby(备用)节点不进行数据收集、处理或其他任务,并且不监听端口,并保持一个最少的数据库连接。

整体部署架构如下图所示:
在这里插入图片描述

节点规划如下:

节点名称节点IP节点OS
zabbix-web01192.168.72.18Ubuntu22.04
zabbix-web02192.168.72.19Ubuntu22.04
zabbix-server01192.168.72.31Ubuntu22.04
zabbix-server02192.168.72.32Ubuntu22.04
zabbix-proxy01192.168.72.53Ubuntu22.04
zabbix-proxy02192.168.72.54Ubuntu22.04
zabbix-agent01192.168.72.55Ubuntu22.04
zabbix-agent02192.168.72.56Ubuntu22.04
mysql-router01192.168.72.41Ubuntu22.04
mysql-router02192.168.72.42Ubuntu22.04
mysql-innodb01192.168.72.50Ubuntu22.04
mysql-innodb02192.168.72.51Ubuntu22.04
mysql-innodb03192.168.72.52Ubuntu22.04
lb01192.168.72.33Ubuntu22.04
lb02192.168.72.34Ubuntu22.04
zabbix-web-vip192.168.72.100N/A
mysql-db-vip192.168.72.200N/A

数据库集群部署

部署详情请参考:MySQL InnoDB Cluster 高可用集群部署。

确认zabbix与mysql版本兼容性:

https://www.zabbix.com/documentation/current/en/manual/installation/requirements

推荐的高可用部署选项:

  • 推荐部署Mysql innodb cluster集群。如果MySQL(或Percona)用作Zabbix后端数据库,InnoDB 引擎是必需的。
  • 或者pgpool2加3台pg数据库做读写分离。

MySQL InnoDB Cluster 为 Zabbix 监控系统提供了一个强大、可靠且易于管理的高可用数据库解决方案。它能够很好地处理 Zabbix 的写入密集型工作负载,同时提供自动故障转移和负载均衡功能,非常适合需要高可用性的监控环境。

负载局衡器部分配置调整

两台负载均衡器配置如下,增加zabbix web 负载均衡配置,分别为zabbix-web以及mysql-db使用不同的VIP地址。

以下操作在所有lb节点执行。

配置主机名

hostnamectl set-hostname lb01
hostnamectl set-hostname lb02

安装haproxy和keepalived

apt install -y haproxy keepalived

创建haproxy配置文件,两个节点配置相同

root@lb01:~# cat /etc/haproxy/haproxy.cfg
# HAProxy Configuration for lb01
global
    log /dev/log local0
    log /dev/log local1 notice
    chroot /var/lib/haproxy
    stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners
    stats timeout 30s
    user haproxy
    group haproxy
    daemon
    
defaults
    log global
    mode tcp
    option tcplog
    option dontlognull
    timeout connect 5000
    timeout client 50000
    timeout server 50000

frontend web_front
    bind *:8080
    default_backend web_back

backend web_back
    balance roundrobin
    server web01 192.168.72.18:8080 check
    server web02 192.168.72.19:8080 check

frontend db_rw_front
    bind *:6446
    default_backend db_rw_back

backend db_rw_back
    balance roundrobin
    server router01 192.168.72.41:6446 check
    server router02 192.168.72.42:6446 check

frontend db_ro_front
    bind *:6447
    default_backend db_ro_back

backend db_ro_back
    balance roundrobin
    server router01 192.168.72.41:6447 check
    server router02 192.168.72.42:6447 check

创建keepalived配置文件,两个节点配置相同

root@lb01:~# cat /etc/keepalived/keepalived.conf 
# Keepalived Configuration for lb01
global_defs {
    router_id 51
    script_user root
    enable_script_security
}

vrrp_script check_haproxy {
    script "/usr/bin/killall -0 haproxy"
    interval 2
    fall 2       # require 2 failures for KO
    rise 2       # require 2 successes for OK
}

vrrp_instance web_vip {
    state BACKUP
    interface ens33
    virtual_router_id 51
    priority 100
    nopreempt
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass secret123
    }
    virtual_ipaddress {
        192.168.72.100
    }
    track_script {
        check_haproxy
    }
}

vrrp_instance db_vip {
    state BACKUP
    interface ens33
    virtual_router_id 52
    priority 100
    nopreempt
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass secret456
    }
    virtual_ipaddress {
        192.168.72.200
    }
    track_script {
        check_haproxy
    }
}

启动服务

systemctl restart keepalived.service
systemctl restart haproxy.service

验证通过VIP连接mysql集群的读写和只读端口。

mysql -h192.168.72.200 -P 6446 -u app -p'App@123456'
mysql -h192.168.72.200 -P 6447 -u app -p'App@123456'

记录mysql数据库的连接信息,zabbix-server、zabbix-web以及zabbix-proxy需要分别创建独立的库存储数据。

zabbix-server部署

以下操作在所有zabbix-server节点执行,基于外部mysql数据库进行部署。

官方文档:https://www.zabbix.com/cn/download

选择相应平台获取安装命令,这里以Zabbix 7.0 + Ubuntu + MySQL + Nginx为例。
在这里插入图片描述

分别在每个节点配置主机名

hostnamectl set-hostname zabbix-server01
hostnamectl set-hostname zabbix-server02

安装软件源

wget https://repo.zabbix.com/zabbix/7.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_7.0-1+ubuntu22.04_all.deb
dpkg -i zabbix-release_7.0-1+ubuntu22.04_all.deb
apt update

安装Zabbix server和zabbix agent

apt install -y zabbix-server-mysql zabbix-sql-scripts zabbix-agent

查看安装版本

root@zabbix-server01:~# zabbix_server -V
zabbix_server (Zabbix) 7.0.0

root@zabbix-server01:~# zabbix_agentd -V
zabbix_agentd (daemon) (Zabbix) 7.0.0

在mysql-innodb01数据库服务器上执行

连接数据库

root@mysql-innodb01:~# mysql -uroot -p

创建初始数据库,在数据库主机上运行以下代码。

mysql> create database zabbix character set utf8mb4 collate utf8mb4_bin;
mysql> create user 'zabbix'@'%' identified by 'Zbx@123456';
mysql> grant all privileges on zabbix.* to 'zabbix'@'%';
mysql> set global log_bin_trust_function_creators = 1;
mysql> quit;

在zabbix-server01节点执行

测试远程连接数据库

mysql -h 192.168.72.200 -P 6446 -u zabbix -p'Zbx@123456' -Dzabbix

导入初始架构和数据,系统将提示您输入新创建的密码。

zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | \
mysql --default-character-set=utf8mb4 -uzabbix -P 6446 -p'Zbx@123456' -h192.168.72.200 -Dzabbix

导入数据库架构后禁用log_bin_trust_function_creators选项。

root@innodb01:~# mysql -uroot -p

mysql> set global log_bin_trust_function_creators = 0;
mysql> quit;

在zabbix-server服务器上执行,为Zabbix server配置数据库,编辑配置文件 /etc/zabbix/zabbix_server.conf

zabbix-server01配置

root@zabbix-server01:~# nano /etc/zabbix/zabbix_server.conf
DBHost=192.168.72.200
DBName=zabbix
DBUser=zabbix
DBPassword=Zbx@123456
DBPort=6446
HANodeName=zabbix-server01
NodeAddress=192.168.72.31:10051

zabbix-server02配置

root@zabbix-server02:~# nano /etc/zabbix/zabbix_server.conf
DBHost=192.168.72.200
DBName=zabbix
DBUser=zabbix
DBPassword=Zbx@123456
DBPort=6446
HANodeName=zabbix-server02
NodeAddress=192.168.72.32:10051

启动Zabbix server和agent进程,并为它们设置开机自启:

systemctl restart zabbix-server zabbix-agent
systemctl enable zabbix-server zabbix-agent

安装zabbix-web

以下操作在所有zabbix-web节点执行。

分别在每个节点配置主机名

hostnamectl set-hostname zabbix-web01
hostnamectl set-hostname zabbix-web02

安装软件源

wget https://repo.zabbix.com/zabbix/7.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_7.0-1+ubuntu22.04_all.deb
dpkg -i zabbix-release_7.0-1+ubuntu22.04_all.deb
apt update

部署zabbix-web前端

apt install -y zabbix-frontend-php zabbix-nginx-conf

为Zabbix前端配置PHP,编辑配置文件 /etc/zabbix/nginx.conf 去除以下行的注释。

zabbix-web01节点配置

root@zabbix-web01:~# nano /etc/zabbix/nginx.conf 
server {
        listen          8080;
        server_name     192.168.72.18;

zabbix-web02节点配置

root@zabbix-web02:~# nano /etc/zabbix/nginx.conf 
server {
        listen          8080;
        server_name     192.168.72.19;

安装中文语言包

sudo apt install -y zabbix-frontend-php language-pack-zh-hans

启动Zabbix web相关进程,并为它们设置开机自启:

systemctl restart nginx php8.1-fpm
systemctl enable nginx php8.1-fpm

打开Zabbix UI网页,开始初始化zabbix

http://192.168.72.18:8080

配置数据库连接信息
在这里插入图片描述

zabbix-web02节点配置相同,两个节点配置完成后,测试访问。

通过负载均衡VIP地址192.168.72.100访问zabbix页面,查看HA状态
在这里插入图片描述
刷新页面,查看左上角web指向的zabbix-server发生变化,说明负载均衡已生效
在这里插入图片描述

安装zabbix-proxy

配置主机名

hostnamectl set-hostname zabbix-proxy01
hostnamectl set-hostname zabbix-proxy02

添加Zabbix repository仓库

wget https://repo.zabbix.com/zabbix/7.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_7.0-1+ubuntu22.04_all.deb
dpkg -i zabbix-release_7.0-1+ubuntu22.04_all.deb
apt update

安装Zabbix proxy

apt install -y zabbix-proxy-mysql zabbix-sql-scripts

创建初始数据库,在mysql-innodb01数据库主机上运行以下代码。

针对zabbix-proxy01配置

连接到mysql-innodb01节点,为zabbix-proxy01节点创建专用数据库zabbix_proxy01_db以及用户zabbix_proxy01

root@mysql-innodb01:~# mysql -uroot -p
password
mysql> create database zabbix_proxy01_db character set utf8mb4 collate utf8mb4_bin;
mysql> create user zabbix_proxy01@'%' identified by 'Zbx@123456';
mysql> grant all privileges on zabbix_proxy01_db.* to zabbix_proxy01@'%';
mysql> set global log_bin_trust_function_creators = 1;
mysql> quit;

导入初始架构和数据,系统将提示您输入新创建的密码。

cat /usr/share/zabbix-sql-scripts/mysql/proxy.sql | \
mysql --default-character-set=utf8mb4 -uzabbix_proxy01 -P 6446 -p'Zbx@123456' -h192.168.72.200 -Dzabbix_proxy01_db

导入database schema后禁用 log_bin_trust_function_creators option

# mysql -uroot -p
password
mysql> set global log_bin_trust_function_creators = 0;
mysql> quit;

编辑配置文件 /etc/zabbix/zabbix_proxy.conf

root@zabbix-proxy01:~# nano /etc/zabbix/zabbix_proxy.conf
ProxyMode=0
Server=192.168.72.31;192.168.72.32
Hostname=zabbix-proxy01
DBHost=192.168.72.200
DBName=zabbix_proxy01_db
DBUser=zabbix_proxy01
DBPassword=Zbx@123456
DBPort=6446

启动zabbix-proxy服务

systemctl restart zabbix-proxy
systemctl enable zabbix-proxy

针对zabbix-proxy02配置

连接到mysql-innodb01节点,为zabbix-proxy02节点创建专用数据库zabbix_proxy02_db以及用户zabbix_proxy02

root@mysql-innodb01:~# mysql -uroot -p
password
mysql> create database zabbix_proxy02_db character set utf8mb4 collate utf8mb4_bin;
mysql> create user zabbix_proxy02@'%' identified by 'Zbx@123456';
mysql> grant all privileges on zabbix_proxy02_db.* to zabbix_proxy02@'%';
mysql> set global log_bin_trust_function_creators = 1;
mysql> quit;

导入初始架构和数据,系统将提示您输入新创建的密码。

cat /usr/share/zabbix-sql-scripts/mysql/proxy.sql | \
mysql --default-character-set=utf8mb4 -uzabbix_proxy02 -P 6446 -p'Zbx@123456' -h192.168.72.200 -Dzabbix_proxy02_db

导入database schema后禁用 log_bin_trust_function_creators option

# mysql -uroot -p
password
mysql> set global log_bin_trust_function_creators = 0;
mysql> quit;

编辑配置文件 /etc/zabbix/zabbix_proxy.conf

root@zabbix-proxy01:~# nano /etc/zabbix/zabbix_proxy.conf
ProxyMode=0
Server=192.168.72.31;192.168.72.32
Hostname=zabbix-proxy02
DBHost=192.168.72.200
DBName=zabbix_proxy02_db
DBUser=zabbix_proxy02
DBPassword=Zbx@123456
DBPort=6446

启动zabbix-proxy服务

systemctl restart zabbix-proxy
systemctl enable zabbix-proxy

安装zabbix-agent

配置主机名

hostnamectl set-hostname zabbix-agent01
hostnamectl set-hostname zabbix-agent02

添加Zabbix repository仓库

wget https://repo.zabbix.com/zabbix/7.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_7.0-1+ubuntu22.04_all.deb
dpkg -i zabbix-release_7.0-1+ubuntu22.04_all.deb
apt update

安装zabbix agent

apt install -y zabbix-agent

修改 Zabbix Agent01 配置文件

root@zabbix-agent01:~# nano /etc/zabbix/zabbix_agentd.conf
Server=192.168.72.53,192.168.72.54
ServerActive=192.168.72.53;192.168.72.54
Hostname=zabbix-agent01

修改 Zabbix Agent02 配置文件

root@zabbix-agent02:~# nano /etc/zabbix/zabbix_agentd.conf
Server=192.168.72.53,192.168.72.54
ServerActive=192.168.72.53;192.168.72.54
Hostname=zabbix-agent02

启动Zabbix代理进程并使其在系统启动时启动。

systemctl restart zabbix-agent
systemctl enable zabbix-agent

添加zabbix proxy

连接到zabbix web控制台。

创建zabbix group。

添加zabbix-proxy01
在这里插入图片描述

添加zabbix-proxy02
在这里插入图片描述

确认状态为Online
在这里插入图片描述

添加zabbix host

添加zabbix agent01
在这里插入图片描述
添加zabbix-agent02
在这里插入图片描述

确认可用性为ZBX
在这里插入图片描述

查看最新的监控数据
在这里插入图片描述

至此,zabbix高可用集群部署完成。

参考:
https://blog.zabbix.com/build-zabbix-server-ha-cluster-in-10-minutes-by-kaspars-mednis-zabbix-summit-online-2021/18155/

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

c#学习日志用CLI(命令行窗口)创建c#工程

创建Helloworld.Proj和Program.cs两个文件然后运行即可,一种方法是用记事本创建,写入代码,这种比较费劲,主要代码如下 Program.cs中代码如下 System.Console.WriteLine("Hello World!!"); Helloworld.Proj中的代码如…

提升写作效率:探索AI在现代办公自动化中的应用

工欲善其事,必先利其器。 随着AI技术与各个行业或细分场景的深度融合,日常工作可使用的AI工具呈现出井喷式发展的趋势,AI工具的类别也从最初的AI文本生成、AI绘画工具,逐渐扩展到AI思维导图工具、AI流程图工具、AI生成PPT工具、AI…

DELL:利用大语言模型(LLM)生成评论与解释,革新虚假信息检测

ACL 2024 DELL: Generating Reactions and Explanations for LLM-Based Misinformation Detection https://arxiv.org/abs/2402.10426https://arxiv.org/abs/2402.10426 1.概述 大型语言模型(LLM)虽在诸多领域显示出色性能,但在直接应用于新闻真实性鉴别时,面临两大核心挑…

嵌入式Linux系统编程 — 5.6 Linux系统申请堆内存

目录 1 内存概念 1.1 什么是堆内存 1.2 内存分布 2 malloc、free在堆上分配与释放内存 2.1 malloc函数 2.2 free函数 2.3 示例程序 注意事项: 3 calloc分配内存 3.1 calloc函数介绍 3.2 示例程序 4 分配对齐内存 4.1 函数介绍 4.2 示例程序 1 内存概念…

【QT】输入类控件

目录 Line Edit 核心属性 核心信号 正则表达式 示例:使用正则表达式验证输入框内容 示例:切换输入框密码模式下的显示状态 Text Edit 核心属性 核心信号 示例:获取多行输入框的内容同步显示到label 示例:获取文本的选…

Navcat Premium17破解安装及数据库连接教程

一、前言 Navicat Premium 是一套数据库开发工具,是一个可多重连接数据库的管理工具。Navicat Premium让你从单一应用程序中同时连接 MySQL、MariaDB、MongoDB、SQL Server、Oracle、PostgreSQL 和 SQLite 数据库。目前17已经支持了很久都没有支持的Redis数据库了。…

【办公软件使用分享—Word篇】实用技巧 一学就会 沈阳电脑办公软件基础培训

在平时的工作学习中,Word真真是让很多人头疼的一件事,今天给大家分享20个案例,感受下Word真正的力量! 1.插入自动目录 没有目录的文档不是一份合格的文档,很多人认为在Word里插入目录是一件很麻烦的事,其…

[leetcode]max-consecutive-ones 最大连续1的个数

. - 力扣&#xff08;LeetCode&#xff09; class Solution { public:int findMaxConsecutiveOnes(vector<int>& nums) {int maxCount 0, count 0;int n nums.size();for (int i 0; i < n; i) {if (nums[i] 1) {count;maxCount max(maxCount, count);} else…

4面体空间含支链4点结构种类与占比

在30个点的4面体内取4个点&#xff0c;要求这4个点可以是直链或支链&#xff0c; 共有188个结构符合要求&#xff0c;36个直链结构每个有4个。 这种支链结构每个有10个 这种支链结构每个有1个 旋转对称关系为 A B C D 0 120 240 0 120 240 0 120 240 0 120 240…

Steam商店报错、进不去 Steam105错误代码的处理方法

逛Steam商店现在已然成为大部分游戏玩家每日必做的事情之一&#xff0c;玩家们在商店浏览、购买并享受各种类型的游戏和应用&#xff0c;找到适合自己的一款&#xff0c;最近steam夏促活动正在进行&#xff0c;很多玩家都前往Steam商店查看各种低价游戏&#xff0c;但是很多玩家…

第2章-Python编程基础

#本章目标 1&#xff0c;了解什么是计算机程序 2&#xff0c;了解什么是编程语言 3&#xff0c;了解编程语言的分类 4&#xff0c;了解静态语言与脚本语言的区别 5&#xff0c;掌握IPO程序编写方法 6&#xff0c;熟练应用输出函数print与输入函数input 7&#xff0c;掌握Python…

泛型的使用(<T>)

文章目录 前言一、泛型是什么&#xff1f;二、泛型的使用 1.定义泛型类2.泛型的常规用法总结 前言 强制类型转换存在一定隐患&#xff0c;如数据丢失、内存溢出、运行时错误、程序逻辑错误等。所以提供了泛型机制&#xff0c;使程序员可以定义安全的数据类型进行操作。通俗的理…

【postgresql】 基础知识学习

PostgreSQL是一个高度可扩展的开源对象关系型数据库管理系统&#xff08;ORDBMS&#xff09;&#xff0c;它以其强大的功能、灵活性和可靠性而闻名。 官网地址&#xff1a;https://www.postgresql.org/ 中文社区&#xff1a;文档目录/Document Index: 世界上功能最强大的开源…

GP37-S-N、GP37-S-E、GP37-S-R比例电磁铁驱动放大器

比例阀用电磁铁EP45-C、EP37-E、EP45-G、EP45-N、GP37-3-A、GP37-S-N、GP37-S-E、GP37-S-R在直流12V/24V的电液比例控制系统中与BEUEC比例控制放大器配套使用&#xff0c;共同作用于比例阀的控制。电磁铁输出力通过负载弹簧转换成位移&#xff0c;实现电流-力-位移线性转换&…

嵌入式问题分析思路

BUG解决总体思路: 1.1 定位bug范围及性质 要有效解决问题&#xff0c;首先要缩小范围&#xff0c;集中关注最近的代码变化。这有助于迅速定位可能引入问题的部分&#xff0c;避免无谓的时间浪费。检查最近的代码提交记录和修改日志&#xff0c;找出可能影响现有功能的变更。然…

减肥期间三餐饮食搭配

减肥期间三餐饮食搭配 早起洗漱后早餐前:一杯温水大口喝下,清洁肠道!!! 减肥期间早餐搭配 早餐9点前完成✅ ❤必须喝(纯牛奶、无糖豆浆、无糖酸奶、黑咖啡都可以,四选一) ❤必须吃1~2个鸡蛋 (蒸,煮,煎,炒都可以) ❤必须吃主食 (红薯、玉米、南瓜、紫薯、山药…

基于单片机的 LED 照明灯智能调光系统设计

摘  要&#xff1a; 社会经济的不断发展&#xff0c;推动了智能化生活的进程&#xff0c;智能调光技术开始广泛应用在生活中&#xff0c;人们也逐渐提高了灯光亮灯率等的要求。基于此&#xff0c;笔者主要设计了基于单片机的 LED 照明灯智能调光系统&#xff0c;希望能够为相关…

小程序的运行机制、更新机制、生命周期介绍保姆级教程全解

一、小程序运行机制 1. 小程序冷启动 小程序启动可以分为两种情况&#xff0c;一种是冷启动&#xff0c;一种是热启动- 冷启动&#xff1a;如果用户首次打开&#xff0c;或小程序销毁后被用户再次打开&#xff0c;此时小程序需要重新加载启动- 热启动&#xff1a;如果用户已经打…

植物大战僵尸杂交版手机下载与安装全攻略

植物大战僵尸杂交版是一款深受玩家喜爱的策略冒险游戏&#xff0c;以其丰富的植物种类、多样的关卡设计和趣味的玩法著称。本文将为您提供详细的下载与安装教程&#xff0c;帮助您快速上手&#xff0c;享受游戏带来的乐趣。 游戏简介 植物大战僵尸杂交版在传统玩法的基础上&a…

使用React复刻ThreeJS官网示例——keyframes动画

最近在看three.js相关的东西&#xff0c;想着学习一下threejs给的examples。源码是用html结合js写的&#xff0c;恰好最近也在学习react&#xff0c;就用react框架学习一下。 本文参考的是threeJs给的第一个示例 three.js examples (threejs.org) 一、下载threeJS源码 通常我们…