x射线:解决数据库同步问题

Shai Ben-Zvi
2023-01-22十一10

安装x光第一次,有一个初始的DB同步,下载和存储所有的公共数据,是已知的x射线。
这些数据包括漏洞、许可证和第三方组件的信息。

本文将介绍可能帮助您解决Xray数据库同步常见问题的潜在线索。
数据库同步涉及x射线的2个服务

  1. 服务器——这个服务负责下载和监控DB同步进程。
  2. 持久化——服务器在本地下载了漏洞和组件后,持久化服务负责将它们提取出来并插入到数据库中。

DB同步进程:

  1. 下载更新文件。这些文件将下载到$JFROG_HOME/var/work/server/updates,其中数据将保存在两个文件夹中:组件和漏洞。
  2. 一旦Xray完成下载所有更新文件,它将开始提取每个存档,其中包含大量的json文件,每个包含大量的信息。对于已完成提取的每个存档,Xray将重命名文件并添加'。Completed'后缀- .Completed。
  3. 一旦'。'后缀已完成,x射线将开始执行一个影响分析处理提取的信息(这是在DB同步之后完成的)。
  4. 一旦影响分析完成,x射线将删除'。完成的文件。

注意:在HA的情况下,将随机选择一个节点执行DB同步。

x射线数据库同步是一个数据库IOPS密集型操作。这是因为我们在数据库中写入、更新和删除信息,这就是为什么确保Xray DB满足要求是很重要的x射线系统要求

解决x射线数据库同步不工作的问题

对于这类问题,我们应该检查以下几个线索:

  • 代理或防火墙——当JFrog平台上配置了一个默认的系统代理时,任何作为DB同步的一部分的外发请求都将通过这个代理发送,因此,检查代理是否可以服务文件并且不会阻塞请求是很重要的。以下是需要在代理服务器或防火墙上加入白名单的url:

https://releases.jfrog.io/
https://releases-cdn.jfrog.io
https://jxray.jfrog.io

  • 试用许可证过期- Xray中的试用许可证过期可能会干扰Xray DB同步,请参阅这篇文章检查是否存在这种情况,并获得如何移除它的说明。
  • 过期的JFrog许可证-如果这不是试用许可证,有可能您的JFrog平台正在使用过期的许可证或不包括Xray的许可证。
  • 如果您怀疑是这种情况,我建议使用此方法检查许可信息REST API检查它是否有效,DB同步将无法使用过期的许可证,在xray-server-service.log中可以看到这样的错误,其中JXray服务器无法验证您的许可证:

[2020/10/06 11:25:38 CEST] [error] (m.si-fil.com/xray/internal/jobs.DownloadOnlineUpdates:584) Updates worker id 0 failed to download update from https://jxray.jfrog.io/api/v1/updates/bundles?from=1593080483014&to=1601976328671: failed to access:https://jxray.jfrog.io/api/v1/updates/bundles?From = 159308048304 &to=1601976328671返回状态代码:401

  • 存储-确保Xray有足够的存储空间来下载所有与DB同步相关的文件-建议至少为DB同步保存300gb的空闲空间。
  • 检查x射线服务连接,如果其中一个服务关闭,那么可能不是DB同步问题,而是更广泛的问题,甚至HA节点连接可能无法正常工作。

监视Xray的一种方法是使用UI服务状态页面(在管理选项卡下->监视->服务状态)并检查所有服务是否正常。
另一种方法是使用组合指标还有x光路由器健康检查API。

解决x射线数据库同步慢的问题

  1. 如前所述,DB同步性能主要与数据库IOPS相结合,这就是为什么满足系统需求
  2. 数据库连接-默认情况下,Xray需要如下数量的数据库连接:
  • 对于x射线服务器服务- 65个连接(60个活动连接+ 5个空闲连接)
  • Indexer,持久化和分析每个需要35个连接(30个活动+ 5个空闲)。如果我们把这三个连接结合起来,总共有105个连接。

这意味着单个x射线节点总共需要大约170个DB连接。
对于HA,我们可能需要将上述值与节点数相乘。
作为公式,我们总结如下:总连接数=(节点数)* (maxOpenConnServer + maxOpenConnPersist + maxOpenConnAnalysis + maxOpenConnIndexer) + 50;
3.如果在x射线上已经有了索引的工件(在初始DB同步之前),影响分析可能会减慢DB同步,因此我们可以暂时减少影响分析的工作人员的数量。默认情况下,它是8个工人,我们可以将这些特定的工人类型减少到1或2。这可以用这个来做REST API之后需要重新启动x光。一旦初始的DB同步完成,不要忘记将它放回原始值。

如果数据库同步出现任何其他问题,我们可能希望通过system.yaml将Server和Persist服务的日志级别提高到DEBUG。
例如:服务器:
日志:
应用程序:
水平:调试
看到有关文档获取更多信息。

注意:
如果您正在使用旧版本的Xray,我们建议将Xray升级到3.38.2或更高版本,因为这些版本包含了DB同步进程的主要性能改进。