GSP1116
概览
出于安全、合规、性能或隐私方面的考虑,您可能需要自行托管区块链节点。而一个去中心化、具备弹性且可持续的网络,是任何区块链协议至关重要的基石。Web3 开发者可以使用 Google Cloud 的 Blockchain Node Engine,这是一种用于 Web3 开发的全托管式节点托管解决方案。各机构还可以在 Google Cloud 中配置和管理自己的节点。作为 Web3 基础设施领域值得信赖的合作伙伴,Google Cloud 提供安全、可靠且可伸缩的节点托管基础设施。如需详细了解如何在 Google Cloud 上托管节点,请参阅博文全新推出 Blockchain Node Engine:适用于 Web3 开发的全托管式节点托管解决方案。
如需详细了解将自管理区块链节点部署到云端时需要考虑的技术因素和架构决策,请参阅博文适用于 Web3 的 Google Cloud。
在本实验中,您将创建一个虚拟机 (VM) 来部署以太坊远程过程调用 (RPC) 节点。以太坊 RPC 节点能够从网络接收区块链更新并处理 RPC API 请求。您将使用 e2-standard-4 机器类型,这种类型包含一个 20 GB 的启动磁盘、4 个虚拟 CPU (vCPU) 和 16 GB RAM。为了确保有足够的空间来存储区块链数据,您需要为该实例挂接一个 200 GB 的 SSD 磁盘。您将使用 Ubuntu 20.04 并部署两项服务:执行层 Geth 和共识层 Lighthouse。这两项服务协同工作,共同构成一个以太坊 RPC 节点。
目标
在本实验中,您将学习如何执行以下任务:
- 创建一个带有永久性磁盘的 Compute Engine 实例。
- 配置一个静态 IP 地址和一些网络防火墙规则。
- 安排定期备份。
- 部署以太坊的执行层 Geth。
- 部署以太坊的共识层 Lighthouse。
- 进行以太坊 RPC 调用。
- 配置 Cloud Logging。
- 配置 Cloud Monitoring。
- 配置拨测。
设置和要求
点击“开始实验”按钮前的注意事项
请阅读以下说明。实验是计时的,并且您无法暂停实验。计时器在您点击开始实验后即开始计时,显示 Google Cloud 资源可供您使用多长时间。
此实操实验可让您在真实的云环境中开展实验活动,免受模拟或演示环境的局限。为此,我们会向您提供新的临时凭据,您可以在该实验的规定时间内通过此凭据登录和访问 Google Cloud。
为完成此实验,您需要:
- 能够使用标准的互联网浏览器(建议使用 Chrome 浏览器)。
注意:请使用无痕模式(推荐)或无痕浏览器窗口运行此实验。这可以避免您的个人账号与学生账号之间发生冲突,这种冲突可能导致您的个人账号产生额外费用。
注意:请仅使用学生账号完成本实验。如果您使用其他 Google Cloud 账号,则可能会向该账号收取费用。
如何开始实验并登录 Google Cloud 控制台
-
点击开始实验按钮。如果该实验需要付费,系统会打开一个对话框供您选择支付方式。右侧是实验设置和访问权限面板,其中包含以下内容:
-
打开 Google Cloud 控制台按钮
- 您在本实验中必须使用的临时凭证(用户名和密码)
- 帮助您逐步完成该实验所需的其他信息(如果需要)
请注意,实验计时器位于页面顶部附近,将显示剩余时间。
-
点击打开 Google Cloud 控制台(如果您使用的是 Chrome 浏览器,请右键点击并选择在无痕式窗口中打开链接)。
该实验会启动资源并打开另一个标签页,显示“登录”页面。
提示:可以将这些标签页分别放在不同的窗口中,并排显示。
注意:如果您看见选择账号对话框,请点击使用其他账号。
-
如有必要,请复制下方的用户名,然后将其粘贴到登录对话框中。
{{{user_0.username | "<用户名>"}}}
您也可以在实验设置和访问权限面板中找到“用户名”。
-
点击下一步。
-
复制下面的密码,然后将其粘贴到欢迎对话框中。
{{{user_0.password | "<密码>"}}}
您也可以在实验设置和访问权限面板中找到“密码”。
-
点击下一步。
重要提示:您必须使用实验提供的凭证。请勿使用您的 Google Cloud 账号凭证。
注意:在本实验中使用您自己的 Google Cloud 账号可能会产生额外费用。
-
依次点击进入后续页面:
- 接受条款及条件。
- 由于这是临时账号,请勿添加账号恢复选项或双重身份验证。
- 请勿注册免费试用。
片刻之后,系统会在此标签页中打开 Google Cloud 控制台。
注意:如需访问 Google Cloud 产品和服务,请点击导航菜单,或在搜索字段中输入服务或产品的名称。
在本实验中,您将使用以下工具:
- Ubuntu 24.04
- Geth
- Lighthouse
- Curl
- gcloud
任务 1. 为虚拟机创建基础设施
您将创建公共静态 IP 地址、防火墙规则、服务账号、快照时间表,以及使用该新 IP 地址的虚拟机。以太坊将部署在这些基础设施上。
创建公共静态 IP 地址
在本部分中,您将设置用于虚拟机的公共 IP 地址。
- 在 Cloud 控制台中,依次前往导航菜单 (
) > VPC 网络 > IP 地址。
- 点击 IP 地址卡片上的预留外部 IP 地址,以创建静态 IP 地址。
- 使用以下值配置静态地址:
| 属性 |
值(输入或选择) |
| 名称 |
eth-mainnet-rpc-ip |
| 网络服务层级 |
高级 |
| IP 版本 |
IPv4 |
| 类型 |
区域级 |
| 区域 |
|
| 附加目标 |
无 |
- 点击预留。
创建防火墙规则
创建防火墙规则,以便虚拟机能够通过指定端口进行通信。
Geth 使用 TCP 和 UDP 协议在端口 30303 上进行点对点通信。Lighthouse 使用 TCP 和 UDP 协议在端口 9000 上进行点对点通信。Geth RPC 则使用 TCP 协议和端口 8545。
- 在 Cloud 控制台中,依次前往导航菜单 (
) > VPC 网络 > 防火墙。
- 点击操作栏中的创建防火墙规则,以创建防火墙规则。
- 使用以下值配置防火墙:
| 属性 |
值(输入或选择) |
| 名称 |
eth-rpc-node-fw |
| 日志 |
关闭 |
| 网络 |
默认 |
| 优先级 |
1000 |
| 流量方向 |
入站 |
| 对匹配项执行的操作 |
允许 |
| 目标 |
指定的目标标记 |
| 目标标记 |
eth-rpc-node(输入值后按 Enter 键) |
| 来源过滤条件 |
IPv4 范围 |
| 来源 IPv4 范围 |
0.0.0.0/0(输入值后按 Enter 键) |
| 指定的协议和端口: |
TCP:30303、9000、8545;UDP:30303、9000 |
- 点击创建。
创建服务账号
为虚拟机创建一个服务账号,供其在运行中使用。
- 在 Cloud 控制台中,依次前往导航菜单 (
) > IAM 和管理 > 服务账号。
- 点击操作栏中的创建服务账号,以创建服务账号。
- 使用以下值配置服务账号:
| 属性 |
值(输入或选择) |
| 服务账号名称 |
eth-rpc-node-sa |
| 服务账号 ID |
eth-rpc-node-sa |
- 点击创建并继续。
- 添加以下角色:
| 属性 |
值(输入或选择) |
| 角色 |
Compute OS Login、Service Controller、Logs Writer、Monitoring Metric Writer、Cloud Trace Agent、Compute Network User
|
- 点击继续。
- 点击完成。
创建快照时间表
在本部分中,您将为虚拟机的挂接磁盘设置快照时间表,该磁盘用于存储区块链数据。此操作将备份区块链数据。
- 在 Cloud 控制台中,依次前往导航菜单 (
) > Compute Engine > 快照。
- 点击创建快照时间表,以创建快照时间表。
- 使用以下值配置快照时间表:
| 属性 |
值(输入或选择) |
| 名称 |
eth-mainnet-rpc-node-disk-snapshot |
| 区域 |
|
| 单区域 |
|
| 时间表选项 |
时间表频率:每天,开始时间 (UTC):下午 6:00 - 晚上 7:00,多久后自动删除快照:7
|
| 删除规则 |
保留快照 |
- 点击创建。
创建虚拟机
在本部分中,您将设置用于以太坊部署的虚拟机。
-
在 Cloud 控制台中,依次前往导航菜单 (
) > Compute Engine > 虚拟机实例。
-
点击创建实例,以创建虚拟机。
-
在机器配置中,
为以下字段输入值:
| 属性 |
值(输入或选择) |
| 名称 |
eth-mainnet-rpc-node |
| 区域 |
|
| 可用区 |
|
| 系列 |
E2 |
| 机器类型 |
e2-standard-4 |
-
点击操作系统和存储空间
点击更改,然后选择以下值:
| 属性 |
值(输入或选择) |
| 操作系统 |
Ubuntu |
| 版本 |
Ubuntu 24.04 LTS (x86/64) |
| 启动磁盘类型 |
SSD 永久性磁盘 |
| 大小 |
50 GB |
点击选择。
在额外磁盘中,点击添加新磁盘
| 属性 |
值(输入或选择) |
| 名称 |
eth-mainnet-rpc-node-disk |
| 磁盘来源类型 |
空白磁盘 |
| 磁盘类型 |
SSD 永久性磁盘 |
| 大小 |
200 GB(若安装规模更大,也可使用 2,000 GB) |
点击保存。
-
点击数据保护
对于“快照时间表”,选择 eth-mainnet-rpc-node-disk-snapshot
-
点击网络
| 属性 |
值(输入或选择) |
| 网络标记 |
eth-rpc-node(输入值后按 Enter 键 - 与防火墙设置一致) |
-
点击安全
点击检查我的进度以验证是否完成了以下目标:
为虚拟机创建基础设施
任务 2. 在虚拟机上进行设置和安装
现在,通过 SSH 连接到虚拟机并运行命令来安装软件。
通过 SSH 连接到 VM
- 在 Cloud 控制台中,依次前往导航菜单 (
) > Compute Engine > 虚拟机实例。
- 在 eth-mainnet-rpc-node 所在的行中,点击 SSH 以打开 SSH 窗口。
- 如果系统提示允许通过浏览器中的 SSH 功能连接到虚拟机,请点击授权。
在虚拟机上创建交换文件
为了给进程提供额外的 RAM,您需要创建一个交换文件。这是为了增加虚拟机在需要时可以使用的 RAM 容量。
- 执行以下命令,创建 40 GB 的交换文件:
sudo dd if=/dev/zero of=/swapfile bs=1MiB count=40KiB
请注意,第一个命令需要一些时间才能执行完毕。
- 更新交换文件的权限:
sudo chmod 0600 /swapfile
- 将该文件指定为交换分区:
sudo mkswap /swapfile
- 将该交换文件配置添加到 /etc/fstab,以便系统在重启时能够识别装载的磁盘:
echo "/swapfile swap swap defaults 0 0" | sudo tee -a /etc/fstab
- 启用该交换文件:
sudo swapon -a
- 确认系统已成功识别该交换空间:
free -g
您应该会看到一条与以下内容类似的消息:
输出:
total used free shared buff/cache available
Mem: 15 0 0 0 15 15
Swap: 24 0 24
将挂接的磁盘装载到虚拟机上
在设置虚拟机期间,您创建了一个挂接磁盘。虚拟机不会自动识别此磁盘。它需要先经过格式化和“装载”才能使用。
- 查看挂接的磁盘。您应该会看到一个 sdb 条目,其大小为 200 GB:
sudo lsblk
- 格式化挂接的磁盘:
sudo mkfs.ext4 -m 0 -E lazy_itable_init=0,lazy_journal_init=0,discard /dev/sdb
- 创建文件夹并装载该挂接磁盘:
sudo mkdir -p /mnt/disks/chaindata-disk
sudo mount -o discard,defaults /dev/sdb /mnt/disks/chaindata-disk
- 更新文件夹的权限,以便进程可以对其进行读写:
sudo chmod a+w /mnt/disks/chaindata-disk
- 检索已装载磁盘的 ID,以确认该硬盘已成功装载:
sudo blkid /dev/sdb
您应该会看到一条与以下输出框中内容类似的消息:
输出:
/dev/sdb: UUID="7fa9c421-0054-4555-b0ca-b470a97a3d84" TYPE="ext4"
- 检索已装载磁盘的 ID,并将其附加到 /etc/fstab 文件。此文件可确保在虚拟机重启后,该磁盘仍处于装载状态。
export DISK_UUID=$(findmnt -n -o UUID /dev/sdb)
echo "UUID=$DISK_UUID /mnt/disks/chaindata-disk ext4 discard,defaults,nofail 0 2" | sudo tee -a /etc/fstab
- 运行 df 命令,确认磁盘已装载、格式化并分配了正确的大小:
df -h
您应该会看到一条与以下内容类似的消息,其中会显示新装载的卷及大小:
输出:
/dev/sdb 196G 28K 196G 1% /mnt/disks/chaindata-disk
如果您以后需要调整磁盘大小,请按照这些说明操作。
点击检查我的进度以验证是否完成了以下目标:
在虚拟机上创建交换文件,并将挂接的磁盘装载到虚拟机上
在虚拟机上创建用户
创建一个用户来运行这些进程。
- 执行以下命令,创建名为 ethereum 的用户:
sudo useradd -m ethereum
sudo usermod -aG sudo ethereum
sudo usermod -aG google-sudoers ethereum
- 切换到用户 ethereum:
sudo su ethereum
- 启动 bash 命令行:
bash
- 切换到用户 ethereum 的主文件夹:
cd ~
安装以太坊软件
- 更新操作系统:
sudo apt update -y
sudo apt-get update -y
- 安装常用软件:
sudo apt install -y dstat jq software-properties-common
- 安装 Google Cloud Ops Agent:
curl -sSO https://dl.google.com/cloudagents/add-google-cloud-ops-agent-repo.sh
sudo bash add-google-cloud-ops-agent-repo.sh --also-install
- 移除下载的脚本文件:
rm add-google-cloud-ops-agent-repo.sh
- 创建文件夹,用以存储 Geth 和 Lighthouse 客户端的日志和链数据:
mkdir /mnt/disks/chaindata-disk/ethereum/
mkdir /mnt/disks/chaindata-disk/ethereum/geth
mkdir /mnt/disks/chaindata-disk/ethereum/geth/chaindata
mkdir /mnt/disks/chaindata-disk/ethereum/geth/logs
mkdir /mnt/disks/chaindata-disk/ethereum/lighthouse
mkdir /mnt/disks/chaindata-disk/ethereum/lighthouse/chaindata
mkdir /mnt/disks/chaindata-disk/ethereum/lighthouse/logs
- 通过软件包管理系统安装 Geth:
sudo add-apt-repository -y ppa:ethereum/ethereum
sudo apt-get -y install ethereum
- 确认 Geth 已安装且为最新版本:
geth version
您应该会看到一条与以下内容类似的消息:
输出:
Geth
Version: 1.14.11-stable
Git Commit: ea9e62ca3db5c33aa7438ebf39c189afd53c6bf8
Architecture: amd64
Go Version: go1.23.1
Operating System: linux
GOPATH=
GOROOT=
- 下载 Lighthouse 客户端。以下脚本将从 GitHub 下载最新版本。
# Fetch the latest release information from GitHub API
RELEASE_URL="https://api.github.com/repos/sigp/lighthouse/releases/latest"
LATEST_VERSION=$(curl -s $RELEASE_URL | jq -r '.tag_name')
# Download the latest release using curl
DOWNLOAD_URL=$(curl -s $RELEASE_URL | jq -r '.assets[] | select(.name | endswith("x86_64-unknown-linux-gnu.tar.gz")) | .browser_download_url')
curl -L "$DOWNLOAD_URL" -o "lighthouse-${LATEST_VERSION}-x86_64-unknown-linux-gnu.tar.gz"
- 解压缩 lighthouse tar 文件并将其移除:
# Extract the tar file
tar -xvf "lighthouse-${LATEST_VERSION}-x86_64-unknown-linux-gnu.tar.gz"
# Remove the tar file
rm "lighthouse-${LATEST_VERSION}-x86_64-unknown-linux-gnu.tar.gz"
- 将 lighthouse 二进制文件移至 /usr/bin 文件夹并更新权限:
sudo mv lighthouse /usr/bin
- 确认 Lighthouse 已安装且为最新版本:
lighthouse --version
您应该会看到一条与以下内容类似的消息,请注意版本号可能会不同:
输出:
Lighthouse v5.3.0-d6ba8c3
BLS library: blst-portable
BLS hardware acceleration: true
SHA256 hardware acceleration: false
Allocator: jemalloc
Profile: maxperf
Specs: mainnet (true), minimal (false), gnosis (true)
- 创建共享 JWT 密钥。此 JWT 密钥用作一种安全机制,用于限制哪些用户可以调用执行客户端的 RPC 端点。
cd ~
mkdir ~/.secret
openssl rand -hex 32 > ~/.secret/jwtsecret
chmod 440 ~/.secret/jwtsecret
点击检查我的进度以验证是否完成了以下目标:
在虚拟机上创建用户,并安装以太坊软件
任务 3. 启动以太坊执行和共识客户端
以太坊有两个客户端:执行层 Geth 和共识层 Lighthouse。它们并行运行,协同工作。随后,Geth 会建立一个 authrpc 端点和端口,供 Lighthouse 调用。此端点受保存在本地的通用安全令牌保护。Lighthouse 使用执行端点和安全令牌连接到 Geth。
如需了解 Geth 如何连接到共识客户端,请参阅《连接到共识客户端》文档。如需详细了解 Lighthouse 如何连接到执行客户端,请参阅《合并迁移 - Lighthouse Book》文档。
启动 Geth
以下操作会启动 Geth 执行客户端。
- 首先,在 gcloud 中进行身份验证。在 SSH 会话中,运行以下命令:
gcloud auth login
在看到提示“Do you want to continue (Y/n)?”(是否继续 (Y/N))时,按 Enter 键。
-
点击新标签页中显示的链接。
-
点击您当前正在使用的用户名 (),然后点击“允许”。
-
在看到提示 Enter the following verification code in gcloud CLI on the machine you want to log into(在想要登录的机器上的 gcloud CLI 中输入以下验证码)时,点击“复制”按钮并返回到 SSH 会话,然后将验证码粘贴到 Enter authorization code:(输入授权码:)提示处。
-
设置外部 IP 地址环境变量:
export CHAIN=eth
export NETWORK=mainnet
export EXT_IP_ADDRESS_NAME=$CHAIN-$NETWORK-rpc-ip
export EXT_IP_ADDRESS=$(gcloud compute addresses list --filter=$EXT_IP_ADDRESS_NAME --format="value(address_range())")
- 运行以下命令,将 Geth 作为后台进程启动。在本实验中,您将使用“snap”同步模式,这是一种轻节点。若要作为全节点进行同步,请将同步模式设置为“full”。您可以在命令行中直接运行以下命令,也可以先将其保存为 .sh 文件后再运行。您还可以将其配置为使用 systemd 以服务形式运行。
nohup geth --datadir "/mnt/disks/chaindata-disk/ethereum/geth/chaindata" \
--http.corsdomain "*" \
--http \
--http.addr 0.0.0.0 \
--http.port 8545 \
--http.corsdomain "*" \
--http.api admin,debug,web3,eth,txpool,net \
--http.vhosts "*" \
--gcmode full \
--cache 2048 \
--mainnet \
--metrics \
--metrics.addr 127.0.0.1 \
--syncmode snap \
--authrpc.vhosts="localhost" \
--authrpc.port 8551 \
--authrpc.jwtsecret=/home/ethereum/.secret/jwtsecret \
--txpool.accountslots 32 \
--txpool.globalslots 8192 \
--txpool.accountqueue 128 \
--txpool.globalqueue 2048 \
--nat extip:$EXT_IP_ADDRESS \
&> "/mnt/disks/chaindata-disk/ethereum/geth/logs/geth.log" &
点击检查我的进度以验证是否完成了以下目标:
将 Geth 作为后台进程启动,并使用“snap”同步模式
- 运行以下命令,查看进程 ID:
ps -A | grep geth
- 检查日志,确认进程是否已正确启动:
tail -f /mnt/disks/chaindata-disk/ethereum/geth/logs/geth.log
您应该会看到一条与以下输出框中内容类似的消息。在与共识客户端完成配对之前,Geth 客户端不会继续运行。
输出:
Looking for peers peercount=1 tried=27 static=0
Post-merge network, but no beacon client seen. Please launch one to follow the chain!
- 按 Ctrl+C,以退出日志监控。
启动 Lighthouse
现在,您将启动 Lighthouse 共识客户端。
- 运行以下命令,将 Lighthouse 作为后台进程启动。您可以在命令行中直接运行以下命令,也可以先将其保存为 .sh 文件后再运行。您还可以将其配置为使用 systemd 以服务形式运行。
nohup lighthouse bn \
--network mainnet \
--http \
--metrics \
--datadir /mnt/disks/chaindata-disk/ethereum/lighthouse/chaindata \
--execution-jwt /home/ethereum/.secret/jwtsecret \
--execution-endpoint http://localhost:8551 \
--checkpoint-sync-url https://sync-mainnet.beaconcha.in \
&> "/mnt/disks/chaindata-disk/ethereum/lighthouse/logs/lighthouse.log" &
- 运行以下命令,查看进程 ID:
ps -A | grep lighthouse
- 检查日志文件,确认进程是否已正确启动。结果可能需要几分钟时间才会显示:
tail -f /mnt/disks/chaindata-disk/ethereum/lighthouse/logs/lighthouse.log
您应该会看到一条与以下内容类似的消息:
输出:
INFO Syncing
INFO Synced
INFO New block received
-
按 Ctrl+C,以退出日志监控。
-
再次检查 Geth 日志,确认日志是否正确生成。
tail -f /mnt/disks/chaindata-disk/ethereum/geth/logs/geth.log
您应该会看到一条与以下输出框中内容类似的消息。
输出:
Syncing beacon headers
验证节点是否已与区块链同步
确定节点是否仍在同步。节点需要一些时间才能完成同步。(请注意,您无需等待节点同步完成即可完成实验。输出应显示同步状态 JSON,而不是 false。)可以通过以下两种方法查看同步状态:Geth 和 RPC 调用。
- 运行以下 Geth 命令,检查节点是否仍在同步。输出为“false”表示它已与网络完全同步,但在本实验期间,它可能仍处于同步状态。
geth attach /mnt/disks/chaindata-disk/ethereum/geth/chaindata/geth.ipc
- 在 Geth 控制台中执行以下命令:
eth.syncing
您应该会看到与以下内容类似的结果:
输出:
#If not synced:
{
currentBlock: 5186007,
healedBytecodeBytes: 0,
healedBytecodes: 0,
healedTrienodeBytes: 0,
healedTrienodes: 0,
healingBytecode: 0,
healingTrienodes: 0,
highestBlock: 16193909,
startingBlock: 0,
syncedAccountBytes: 2338698797,
syncedAccounts: 9417189,
syncedBytecodeBytes: 302598044,
syncedBytecodes: 58012,
syncedStorage: 42832820,
syncedStorageBytes: 9263550660
}
#If synced:
false
- 输入 exit,以退出 Geth 控制台。
- 运行以下 curl 命令,检查节点是否仍在同步。命令行工具“jq”将设置 curl 命令的 json 输出格式。输出为“false”表示它已与网络同步。
curl -H "Content-Type: application/json" -X POST --data '{"jsonrpc":"2.0","method":"eth_syncing","id":67}' http://localhost:8545 | jq
输出:
#If not synced:
{
"jsonrpc": "2.0",
"id": 67,
"result": {
"currentBlock": "0x4d70e9",
"healedBytecodeBytes": "0x0",
"healedBytecodes": "0x0",
"healedTrienodeBytes": "0x0",
"healedTrienodes": "0x0",
"healingBytecode": "0x0",
"healingTrienodes": "0x0",
"highestBlock": "0xf71975",
"startingBlock": "0x0",
"syncedAccountBytes": "0x8b65b62d",
"syncedAccounts": "0x8fb1e5",
"syncedBytecodeBytes": "0x1209479c",
"syncedBytecodes": "0xe29c",
"syncedStorage": "0x28d93b4",
"syncedStorageBytes": "0x2282690c4"
}
}
#If synced:
{"jsonrpc":"2.0","id":67,"result":false}
- 运行以下 curl 命令,检查是否可以通过外部 IP 地址访问该节点:
curl -H "Content-Type: application/json" -X POST --data '{"jsonrpc":"2.0","method":"eth_syncing","id":67}' http://$EXT_IP_ADDRESS:8545 | jq
输出:
#If not synced:
{
"jsonrpc": "2.0",
"id": 67,
"result": {
"currentBlock": "0x4d70e9",
"healedBytecodeBytes": "0x0",
"healedBytecodes": "0x0",
"healedTrienodeBytes": "0x0",
"healedTrienodes": "0x0",
"healingBytecode": "0x0",
"healingTrienodes": "0x0",
"highestBlock": "0xf71975",
"startingBlock": "0x0",
"syncedAccountBytes": "0x8b65b62d",
"syncedAccounts": "0x8fb1e5",
"syncedBytecodeBytes": "0x1209479c",
"syncedBytecodes": "0xe29c",
"syncedStorage": "0x28d93b4",
"syncedStorageBytes": "0x2282690c4"
}
}
#If synced:
{"jsonrpc":"2.0","id":67,"result":false}
任务 4. 配置 Cloud 运维
Google Cloud 提供多种运维服务,可用于管理您的以太坊节点。本部分将介绍如何配置 Cloud Logging、托管式 Prometheus、Cloud Monitoring 和 Cloud 提醒。
配置 Cloud Logging
默认情况下,Geth 和 Lighthouse 会将日志记录到其声明的日志文件中。您需要将日志数据导入 Cloud Logging。Cloud Logging 具有强大的搜索功能,可以针对特定日志消息创建提醒。
- 修改 Cloud Ops 配置文件的权限,以便您可以对其进行更新:
sudo chmod 666 /etc/google-cloud-ops-agent/config.yaml
- 配置 Cloud Ops Agent,以将日志数据发送到 Cloud Logging。更新文件“/etc/google-cloud-ops-agent/config.yaml”,以包含此 Ops Agent 配置。此配置文件定义了要导入到 Cloud Logging 的 Geth 和 Lighthouse 日志文件:
sudo cat << EOF >> /etc/google-cloud-ops-agent/config.yaml
logging:
receivers:
syslog:
type: files
include_paths:
- /var/log/messages
- /var/log/syslog
ethGethLog:
type: files
include_paths: ["/mnt/disks/chaindata-disk/ethereum/geth/logs/geth.log"]
record_log_file_path: true
ethLighthouseLog:
type: files
include_paths: ["/mnt/disks/chaindata-disk/ethereum/lighthouse/logs/lighthouse.log"]
record_log_file_path: true
journalLog:
type: systemd_journald
service:
pipelines:
logging_pipeline:
receivers:
- syslog
- journalLog
- ethGethLog
- ethLighthouseLog
EOF
- 保存后,运行以下命令以重启 Ops Agent 并应用更改:
sudo systemctl stop google-cloud-ops-agent
sudo systemctl start google-cloud-ops-agent
sudo systemctl status google-cloud-ops-agent
- 按 Ctrl+C,退出状态界面。
- 如果状态中存在错误,请使用以下命令查看更多详细信息:
sudo journalctl -xe | grep "google_cloud_ops_agent_engine"
- 检查 Cloud Logging,确认控制台中显示了日志消息。在 Cloud 控制台中,前往导航菜单 (
),点击查看所有产品,然后在可观测性下点击 Logging。在左侧菜单中,点击 Logs Explorer。您应该会看到与以下内容类似的消息:
配置托管式 Prometheus
由于我们在启动 geth 和 lighthouse 客户端时使用了 --metrics 标志,因此这两个客户端都会通过 HTTP 端口输出指标。这些指标可以存储在 Prometheus 等时序数据库中,并用于为富含分析洞见的 grafana 信息中心提供数据。通常情况下,您需要在虚拟机上安装 Prometheus,但只需对 Cloud Ops Agent 进行简单的配置,即可捕获指标并将其存储在 Google Cloud 的托管式 Prometheus 服务中。
- 在虚拟机的命令行中运行以下命令,确认 Geth 指标端点处于活跃状态。
curl http://localhost:6060/debug/metrics/prometheus
输出:
......
# TYPE vflux_server_clientEvent_deactivated gauge
vflux_server_clientEvent_deactivated 0
# TYPE vflux_server_clientEvent_disconnected gauge
vflux_server_clientEvent_disconnected 0
# TYPE vflux_server_inactive_count gauge
vflux_server_inactive_count 0
- 在虚拟机的命令行中运行以下命令,确认 Lighthouse 指标端点处于活跃状态。
curl http://localhost:5054/metrics
输出:
......
gossipsub_heartbeat_duration_bucket{le="300.0"} 5679573
gossipsub_heartbeat_duration_bucket{le="350.0"} 5679573
gossipsub_heartbeat_duration_bucket{le="400.0"} 5679573
gossipsub_heartbeat_duration_bucket{le="450.0"} 5679573
gossipsub_heartbeat_duration_bucket{le="+Inf"} 5679573
......
- 配置 Cloud Ops Agent,以将指标数据发送到托管式 Prometheus。更新文件“/etc/google-cloud-ops-agent/config.yaml”,以包含此 Ops Agent 配置。此配置文件定义了要导入到托管式 Prometheus 的 Geth 和 Lighthouse 指标端点:
sudo cat << EOF >> /etc/google-cloud-ops-agent/config.yaml
metrics:
receivers:
prometheus:
type: prometheus
config:
scrape_configs:
- job_name: 'geth_exporter'
scrape_interval: 10s
metrics_path: /debug/metrics/prometheus
static_configs:
- targets: ['localhost:6060']
- job_name: 'lighthouse_exporter'
scrape_interval: 10s
metrics_path: /metrics
static_configs:
- targets: ['localhost:5054']
service:
pipelines:
prometheus_pipeline:
receivers:
- prometheus
EOF
- 保存后,运行以下命令以重启 Ops Agent 并应用更改:
sudo systemctl stop google-cloud-ops-agent
sudo systemctl start google-cloud-ops-agent
sudo systemctl status google-cloud-ops-agent
- 按 Ctrl+C,退出状态界面。
- 如果状态中存在错误,请使用以下命令查看更多详细信息:
sudo journalctl -xe | grep "google_cloud_ops_agent_engine"
-
检查 Cloud Logging,确认控制台中显示了指标。在 Cloud 控制台中,前往导航菜单 (
),点击查看所有产品,然后在可观测性下点击 Monitoring。在左侧菜单中,点击 Metrics Explorer。
-
选择 <> PromQL 选项。在查询框中,输入 Lighthouse 指标 gossipsub_heartbeat_duration_bucket。点击运行查询。您应该会看到与以下内容类似的结果:
您也可以对 Geth 指标(例如 rpc_duration_eth_blockNumber_success_count)执行相同操作,以确认是否显示 Geth 指标。
查看 Cloud Monitoring
您的虚拟机应该已经启用了 Cloud Monitoring。
- 在 Cloud 控制台中,依次前往导航菜单 (
) > Compute Engine > 虚拟机实例。
- 点击虚拟机 eth-mainnet-rpc-node。
- 点击可观测性标签页。
- 所有部分都应显示反映虚拟机各项指标的图表。
- 点击不同的子菜单和时间范围,以查看直接从虚拟机捕获的不同类型的指标。
配置通知渠道
配置用于发送提醒的通知渠道:
- 在 Cloud 控制台中,前往导航菜单 (
),点击查看所有产品,然后在可观测性下点击 Monitoring。在左侧菜单中,点击提醒。
- 点击修改通知渠道。
- 在邮件下方,点击新增。
- 输入应接收通知的人员的邮箱和显示名称。
- 点击保存。
配置指标提醒
配置基于虚拟机指标的提醒:
- 在左侧菜单的检测部分下,点击提醒。
- 点击创建政策。
- 点击选择指标。
- 依次点击虚拟机实例 > 磁盘 > 磁盘利用率,然后点击应用。
- 添加过滤条件:
| 属性 |
值(输入或选择) |
| 设备 |
/dev/sdb |
| 状态 |
已使用 |
- 点击下一步。
- 输入阈值:90%
- 点击下一步,选择以下值:
| 属性 |
值 (输入或选择) |
| 使用通知渠道 |
选择 |
| 通知渠道 |
选择之前创建的通知渠道 |
| 突发事件关闭时通知 |
选中 |
| 突发事件自动关闭时长 |
2 天 |
| 文档 |
检查虚拟机的磁盘可用空间 |
| 名称 |
虚拟机 - 磁盘空间提醒 - 90% 利用率 |
- 点击下一步。
- 点击创建政策。
配置拨测
为 HTTP 端点配置拨测:
- 在左侧菜单的检测部分下,点击拨测。
- 点击创建拨测。
- 使用以下值配置拨测:
| 属性 |
值 (输入或选择) |
| 协议 |
HTTP |
| 资源类型 |
网址 |
| 主机名 |
[实例的外部 IP] |
| 路径 |
/ |
| 展开更多目标选项 |
|
| 请求方法 |
GET |
| 端口 |
8545 |
| 点击“继续” |
接受默认设置 |
| 点击“继续” |
接受默认设置 |
| 选择通知渠道 |
选择之前创建的通知渠道 |
| 标题 |
eth-mainnet-rpc-node-uptime-check |
- 点击测试(应显示成功消息“200 OK”)。
- 点击创建。
点击检查我的进度以验证是否完成了以下目标:
配置 Cloud 运维
恭喜!
在本实验中,您创建了一个带有永久性磁盘的 Compute Engine 实例,配置了一个静态 IP 地址和一些网络防火墙规则,安排了备份,部署了 Geth 和 Lighthouse 以太坊客户端,通过以太坊 RPC 调用测试了设置,还配置了 Cloud Logging、Cloud Monitoring 和拨测。
后续步骤/了解详情
查看以下资源,继续您的以太坊之旅:
Google Cloud 培训和认证
…可帮助您充分利用 Google Cloud 技术。我们的课程会讲解各项技能与最佳实践,可帮助您迅速上手使用并继续学习更深入的知识。我们提供从基础到高级的全方位培训,并有点播、直播和虚拟三种方式选择,让您可以按照自己的日程安排学习时间。各项认证可以帮助您核实并证明您在 Google Cloud 技术方面的技能与专业知识。
上次更新手册的时间:2026 年 7 月 27 日
上次测试实验的时间:2026 年 7 月 27 日
版权所有 2026 Google LLC 保留所有权利。Google 和 Google 徽标是 Google LLC 的商标。其他所有公司名和产品名可能是其各自相关公司的商标。