OpenClaw Windows 安装全攻略:从环境准备到 Companion 实战
2026/10/8 8:48:29
集群地址: x.x.x.145:60443
验证时间: 2025-12-24
验证目标: PostgreSQL & MySQL 复制模式配置与运行状态
| 配置项 | 实际值 | 说明 |
|---|---|---|
synchronous_commit | on | 启用同步提交 |
synchronous_standby_names | postgres-a21f82f7-1-0 | 指定同步备库 |
实例postgres-a21f82f7采用1主2备混合复制架构:
| 备库 | 角色 | sync_state | 客户端地址 | 说明 |
|---|---|---|---|---|
| postgres-a21f82f7-1-0 | 同步备库 | sync | 245.0.1.217 | 主库 commit 等待其 WAL flush |
| postgres-a21f82f7-2-0 | 异步备库 | async | 245.0.0.251 | 不阻塞主库提交 |
-[ RECORD 1 ]----+------------------------------ application_name | postgres-a21f82f7-1-0 state | streaming sent_lsn | 0/5000148 write_lsn | 0/5000148 flush_lsn | 0/5000148 replay_lsn | 0/5000148 sync_state | syncLSN 一致性分析:
sent_lsn = write_lsn = flush_lsn = replay_lsn| 特性 | 说明 |
|---|---|
| 一致性边界 | 主库 commit 等待同步备库 WAL flush |
| 延迟特性 | 同步备库延迟会反向传导给主库,阻塞提交 |
| 异步备库 | 只接收 WAL,不影响主库性能 |
| 典型场景 | 核心数据强一致 + 读扩展分离 |
| 配置项 | 实际值 | 说明 |
|---|---|---|
rpl_semi_sync_master_enabled | ON | 半同步已启用 |
rpl_semi_sync_master_wait_point | AFTER_SYNC | 增强半同步 |
rpl_semi_sync_master_wait_for_slave_count | 1 | 等待 1 个备库 ACK |
rpl_semi_sync_master_timeout | 1000 | 超时 1000ms 后降级为异步 |
rpl_semi_sync_master_wait_no_slave | OFF | 无备库时继续运行 |
AFTER_SYNC(增强半同步)工作流程: ┌─────────────────────────────────────────────────────────────┐ │ 1. 事务写入 binlog │ │ 2. 等待备库 ACK(relay log 已接收) │ │ 3. 写入引擎 commit │ │ 4. 返回客户端 │ └─────────────────────────────────────────────────────────────┘关键点:
| 指标 | 值 | 说明 |
|---|---|---|
Rpl_semi_sync_master_clients | 2 | 2 个半同步备库在线 |
Rpl_semi_sync_master_status | ON | 当前半同步状态正常 |
Rpl_semi_sync_master_yes_tx | 12,321 | 成功通过半同步的事务数 |
Rpl_semi_sync_master_no_tx | 17 | 因超时降级为异步的事务数 |
Rpl_semi_sync_master_net_avg_wait_time | 0 | 网络平均等待时间 |
Rpl_semi_sync_master_tx_avg_wait_time | 678μs | 事务平均等待时间 |
| 指标 | 值 | 说明 |
|---|---|---|
Slave_IO_Running | Yes | IO 线程正常(接收 binlog) |
Slave_SQL_Running | Yes | SQL 线程正常(回放数据) |
Seconds_Behind_Master | 0 | 当前无复制延迟 |
Retrieved_Gtid_Set | e1122b45…:1-12702 | 已接收的 GTID |
Executed_Gtid_Set | e1122b45…:1-12702 | 已执行的 GTID |
GTID 一致性:
Retrieved_Gtid_Set = Executed_Gtid_Set| 特性 | 说明 |
|---|---|
| 一致性边界 | 主库等待备库 relay log 接收(不等 apply) |
| 延迟特性 | 传输延迟影响主库,apply 延迟不影响主库 |
| 降级机制 | 超时 1s 自动降级为异步复制 |
| 典型场景 | 高可用主备切换 + 数据安全保护 |
| 对比维度 | PostgreSQL | MySQL |
|---|---|---|
| 同步模式 | synchronous_commit+synchronous_standby_names | rpl_semi_sync_master_wait_point |
| 等待粒度 | remote_write / remote_flush / remote_apply | AFTER_SYNC(relay log) |
| 备库角色 | sync + async 混合 | 半同步 + 超时降级 |
| 超时降级 | 无(永久阻塞或异步) | 有(1s 超时自动降级) |
┌─────────────────────────────────────────────────────────────────────────┐ │ PostgreSQL 同步复制 │ ├─────────────────────────────────────────────────────────────────────────┤ │ 主库 commit → 等待备库 WAL flush/replay → 返回客户端 │ │ │ │ 一致性边界:commit 与备库 replay 强绑定 │ └─────────────────────────────────────────────────────────────────────────┘ ┌─────────────────────────────────────────────────────────────────────────┐ │ MySQL 增强半同步复制 │ ├─────────────────────────────────────────────────────────────────────────┤ │ 主库 commit → 等待备库 relay log 写入 → 返回客户端 │ │ (不等 SQL thread apply) │ │ │ │ 一致性边界:commit 与备库 relay log 接收绑定,与 apply 解耦 │ └─────────────────────────────────────────────────────────────────────────┘| 延迟场景 | PostgreSQL | MySQL |
|---|---|---|
| 传输延迟 | 阻塞主库 commit | 阻塞主库 commit |
| apply 延迟 | 阻塞主库 commit(remote_apply) | 不阻塞主库 |
| 故障切换 | 数据零丢失 | 理论零丢失(依赖超时设置) |
| 文档论断 | 验证结果 | 状态 |
|---|---|---|
| PG sync 有 replay 延迟 ≠ MySQL 半同步 | PG 等备库 replay;MySQL 只等 relay log | ✅ 验证通过 |
| 同步复制 ≠ 备库无延迟 | 同步复制只是限制延迟边界,延迟仍可能存在 | ✅ 验证通过 |
| PG sync: commit 不会领先 replay | 配置 sync 备库,LSN 完全一致 | ✅ 验证通过 |
| MySQL 半同步: commit 可能领先 apply | AFTER_SYNC 模式,等 relay log 不等 SQL thread | ✅ 验证通过 |
| 增强半同步等待点: relay log | wait_point = AFTER_SYNC 确认 | ✅ 验证通过 |
PostgreSQL 采用混合架构
MySQL 使用增强半同步
AFTER_SYNC是 MySQL 5.7+ 的改进版本AFTER_COMMIT,避免"幻读"问题降级机制真实存在
Rpl_semi_sync_master_no_tx指标| 场景 | 推荐方案 |
|---|---|
| 金融级强一致 | PGremote_apply+ 高规格同步备库 |
| 高可用 + 切换安全 | MySQL 增强半同步 + 严格监控降级 |
| 读多写少 | 同步备库(写)+ 异步备库(读扩展) |
# 检查同步提交配置kubectlexec-n qfusion-admin postgres-a21f82f7-0-0 -c postgres --\psql -U postgres -c"SELECT name, setting FROM pg_settings WHERE name LIKE '%synchronous%';"# 查看备库复制状态kubectlexec-n qfusion-admin postgres-a21f82f7-0-0 -c postgres --\psql -U postgres -c"SELECT * FROM pg_stat_replication;"# 检查半同步配置kubectlexec-n qfusion-admin mysql-0d130fde00-0 -c mysql --\mysql -uroot -p'<password>'-e"SHOW VARIABLES LIKE '%semi%';"# 检查半同步运行状态kubectlexec-n qfusion-admin mysql-0d130fde00-0 -c mysql --\mysql -uroot -p'<password>'-e"SHOW STATUS LIKE '%semi%';"# 检查备库复制延迟kubectlexec-n qfusion-admin mysql-0d130fde01-0 -c mysql --\mysql -uroot -p'<password>'-e"SHOW SLAVE STATUS\G"详细的压测脚本和延迟分析方法请参考:
replication-stress-test-scripts.md故障切换完整分析请参考:
failover-scenario-analysis.md# 进入工作目录cd/bpx/mysql# PostgreSQL 压测chmod+x pg-replication-stress.sh ./pg-replication-stress.sh# MySQL 压测chmod+x mysql-replication-stress.sh ./mysql-replication-stress.sh报告生成时间: 2025-12-24
验证集群: x.x.x.145:60443
| 文档 | 路径 | 说明 |
|---|---|---|
| 主报告 | database-replication-mode-verification-report.md | 复制模式验证结果 |
| 压测脚本 | replication-stress-test-scripts.md | 延迟压测与分析脚本 |
| 故障切换 | failover-scenario-analysis.md | 故障切换场景与数据安全 |