数据同步

多服务器间封禁数据的同步机制

概述

NDPR 提供多种数据同步方式,确保所有连接的服务器都能获取最新的封禁信息。

同步方式

1. 实时同步(推荐)

通过 API 实时同步封禁数据:

Python
import requests import time API_URL = "http://localhost:5030" TOKEN = "your_server_token" def sync_bans(): """同步封禁数据""" # 获取封禁列表 response = requests.get(f"{API_URL}/bans/download", params={"token": TOKEN}) if response.status_code == 200: download_url = response.json()['url'] # 下载并应用封禁数据 # ... print("同步成功") # 通知下载完成,清理临时文件 requests.post(f"{API_URL}/bans/download/done", json={"token": TOKEN}) # 定时同步 while True: sync_bans() time.sleep(60) # 每分钟同步一次

2. v1 协议同步

使用 v1 兼容接口:

Bash
curl http://localhost:5020/bans

响应包含所有封禁数据:

JSON
{ "action": "list", "player_count": 15, "ip_count": 10, "active_players": [...], "active_ips": [...] }

3. 定时拉取同步

Python
import requests import schedule import time def job(): response = requests.get("http://localhost:5020/bans") bans_data = response.json() # 处理封禁数据... schedule.every(5).minutes.do(job) while True: schedule.run_pending() time.sleep(1)

数据格式

玩家封禁数据

JSON
{ "username": "player123", "ip": "192.168.1.1", "cause": "违规操作", "timestamp": "2024-01-01 12:00:00" }

IP 封禁数据

JSON
{ "ip": "192.168.1.1", "cause": "恶意攻击", "players": ["player1", "player2"], "timestamp": "2024-01-01 12:00:00" }

同步配置

本地同步脚本示例

Python
#!/usr/bin/env python3 import requests import json import os NDPR_API = "http://your-ndpr-server:5030" TOKEN = "your_token" LOCAL_BANS_FILE = "bans.json" def download_bans(): """下载封禁数据""" resp = requests.get(f"{NDPR_API}/bans/download", params={"token": TOKEN}) if resp.status_code == 200: url = resp.json()['url'] # 下载文件... return True return False def apply_bans(): """应用封禁到本地服务器""" # 根据服务端类型实现 pass def main(): if download_bans(): apply_bans() requests.post(f"{NDPR_API}/bans/download/done", json={"token": TOKEN}) if __name__ == "__main__": main()

最佳实践

<div class="custom-block tip">

<div class="custom-block-title">建议</div>

1. 生产环境使用实时同步<br>

2. 同步频率建议 1-5 分钟<br>

3. 同步失败时记录日志并告警<br>

4. 定期备份本地封禁数据

</div>

故障排除

同步失败

  • 检查网络连接
  • 验证 Token 权限
  • 查看 API 服务日志
  • 数据不一致

  • 检查同步间隔设置
  • 确认所有服务器使用相同 Token
  • 手动触发同步
  • 下一步

  • MCDR 配置 - MCDR 插件同步
  • 故障排除 - 常见问题解决