Allureluoli 二月FEBRUARY

区块链国赛笔记 24|备赛运维补充:Bash 监控、MySQL 与 Docker 推演

这部分区分实际做过的监控脚本练习和赛前的部署题推测。Docker 与数据库题型属于当时的备考推演,不代表最终赛题。

本文由个人备赛旧笔记整理,整理日期为 2026-11-03。命令、输出和测试记录属于当时的实验环境;本文未重新搭建整套环境验证。

阅读前先确认

监控必须在循环内重新采样,数量应按题意精确比较。数据库用户权限按实际业务范围授予;Compose 示例需要匹配生成的节点目录、证书和网络配置。

监控练习:每次循环重新统计

原来的脚本把 command 放在 while 之前,后续永远比较第一次得到的结果;而且“小于 4”无法发现多启动节点的情况。下面按“恰好 4 个进程”改写。

1
2
3
4
5
6
7
8
9
10
#!/usr/bin/env bash
while true; do
count=$(pgrep -xc fisco-bcos || true)
if [ "$count" -eq 4 ]; then
echo "正常:4 个 fisco-bcos 进程"
else
echo "异常:当前 $count 个进程,期望 4 个"
fi
sleep 1
done

端口题要先明确统计口径。下面统计本机 fisco-bcos 进程的 TCP 监听端口,去重后比较 12;需要足够权限才能看到进程归属。容器、不同网络命名空间和仅配置两个端口的版本不适用这一固定目标。

1
2
3
4
5
6
7
8
9
10
#!/usr/bin/env bash
while true; do
count=$(ss -H -lntp | awk '/"fisco-bcos"/ { n=split($4,a,":"); print a[n] }' | sort -u | wc -l)
if [ "$count" -eq 12 ]; then
echo "正常:12 个 TCP 监听端口"
else
echo "异常:当前 $count 个端口,期望 12 个"
fi
sleep 3
done

这两个脚本是整理时的静态修订,没有连接真实节点执行验证。实际练习应测试少一个节点、多一个节点以及端口变更后能否报警。

赛前推测的范围

下面数据库用户与 Docker Compose 是赛前推演。原目录中“抓包取 token”的文件只有标题,没有可整理的步骤,因此没有扩写成教程。

题目推测-需要自行创建新的数据库用户

国赛使用了MYSQL数据

推测其数据库部署的过程中,有创建用户并使用这个用户的题目内容

命令:

1
2
3
4
5
6
7
8
-- 创建用户(用户名:newuser,允许从localhost连接)
CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';

-- 创建用户(允许从任意IP连接)
CREATE USER 'newuser'@'%' IDENTIFIED BY 'password';

-- 创建用户(允许从特定IP段连接)
CREATE USER 'newuser'@'192.168.1.%' IDENTIFIED BY 'password';

理解:

MYSQL 新创建的用户需要调整等级,有一套完整的用户权限管理方案。

MYSQL 对数据库的用户拥有内容高度定制的方法。

权限授予

1
2
3
4
5
6
7
8
9
10
11
-- 授予所有数据库的所有权限(谨慎使用)
GRANT ALL PRIVILEGES ON *.* TO 'username'@'localhost';

-- 授予特定数据库的所有权限
GRANT ALL PRIVILEGES ON mydb.* TO 'username'@'localhost';

-- 授予特定表的权限
GRANT SELECT, INSERT, UPDATE ON mydb.mytable TO 'username'@'localhost';

-- 授予存储过程执行权限
GRANT EXECUTE ON PROCEDURE mydb.myprocedure TO 'username'@'localhost';

题目推测-需要手动编写docker集群化运维脚本

手动编写 docker-compose.yml

题目提到了使用docker 部署 Fisco节点

我推测内容如下

拉好了 Fisco 节点的对象

但是并没有给部署脚本

我们只能自行部署

部署方式

方式1

docker run -it -p xxxx:xxxx -E 变量=? .... fiscoorg/fiscobcos:v3.6.0 /bin/bash app/start.sh

方式2

docker-compose.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
version: '3.8'

services:
# 节点0
node0:
image: fiscoorg/fiscobcos:v3.6.0
container_name: fisco-node0
hostname: node0
volumes:
- ./nodes/127.0.0.1/node0/conf:/fisco-bcos/conf
- ./nodes/127.0.0.1/node0/data:/fisco-bcos/data
- ./nodes/127.0.0.1/node0/log:/fisco-bcos/log
ports:
- "30300:30300"
- "20200:20200"
networks:
fisco-network:
ipv4_address: 172.16.0.10
restart: unless-stopped
command: ["-c", "/fisco-bcos/conf/config.ini"]

# 节点1
node1:
image: fiscoorg/fiscobcos:v3.6.0
container_name: fisco-node1
hostname: node1
volumes:
- ./nodes/127.0.0.1/node1/conf:/fisco-bcos/conf
- ./nodes/127.0.0.1/node1/data:/fisco-bcos/data
- ./nodes/127.0.0.1/node1/log:/fisco-bcos/log
ports:
- "30301:30301"
- "20201:20201"
networks:
fisco-network:
ipv4_address: 172.16.0.11
restart: unless-stopped
command: ["-c", "/fisco-bcos/conf/config.ini"]
depends_on:
- node0

# 节点2
node2:
image: fiscoorg/fiscobcos:v3.6.0
container_name: fisco-node2
hostname: node2
volumes:
- ./nodes/127.0.0.1/node2/conf:/fisco-bcos/conf
- ./nodes/127.0.0.1/node2/data:/fisco-bcos/data
- ./nodes/127.0.0.1/node2/log:/fisco-bcos/log
ports:
- "30302:30302"
- "20202:20202"
networks:
fisco-network:
ipv4_address: 172.16.0.12
restart: unless-stopped
command: ["-c", "/fisco-bcos/conf/config.ini"]
depends_on:
- node0
- node1

# 节点3
node3:
image: fiscoorg/fiscobcos:v3.6.0
container_name: fisco-node3
hostname: node3
volumes:
- ./nodes/127.0.0.1/node3/conf:/fisco-bcos/conf
- ./nodes/127.0.0.1/node3/data:/fisco-bcos/data
- ./nodes/127.0.0.1/node3/log:/fisco-bcos/log
ports:
- "30303:30303"
- "20203:20203"
networks:
fisco-network:
ipv4_address: 172.16.0.13
restart: unless-stopped
command: ["-c", "/fisco-bcos/conf/config.ini"]
depends_on:
- node0
- node1
- node2

networks:
fisco-network:
driver: bridge
ipam:
config:
- subnet: 172.16.0.0/24

复现时的自查

  • 记录自己实际使用的版本、配置和缺失依赖。
  • 对照本篇关键步骤,保存命令或调用结果,并解释结果代表什么。
  • 对失败或与原记录不一致的情况保留错误信息,不把历史输出当成自己的验证结果。

返回系列导读 · 上一篇

评论COMMENTS