API节点常见问题

其他节点无法连接API节点怎么办?

如果其他节点(EdgeAdmin或者EdgeNode等)无法连接API节点,出现 connection error 类似错误,那么可以从以下几点来诊断问题:

  1. 检查API节点进程是否已经启动,通常可以通过 ps 命令来检查:

    1. ps ax|grep edge-api

    结果应该类似于:

    1. [root@web001 ~]# ps ax|grep edge-api
    2. 3930 ? Sl 65:32 /opt/www/edge-admin/edge-api/bin/edge-api
    3. 76969 pts/0 S+ 0:00 grep --color=auto edge-api

    其中 3930 就是edge-api的进程ID(不是固定的),如果没有这一行,则说明你的API节点没有启动,请执行 edge-api start 启动节点。

  2. 检查启动过程中有无错误,可以通过edge-api安装目录下的 logs/run.log 文件来查看启动日志:

    1. tail -f logs/run.log
  3. 检查端口是否已监听,假设 8001 是你指定的API节点端口:

    1. netstat -an|grep 8001|grep LISTEN

    检查是否能返回内容。

  4. 检查是否有防火墙或者安全策略,可以在别的服务器上通过 telnet 检查是否能够连接API节点端口:

    1. telnet 192.168.1.100 8001

    其中 192.168.1.100 换成你的API节点所在服务器的IP,如果连接不了,通常是防火墙或者安全策略设置问题,请修改防火墙和安全策略设置;对于有些服务商提供的安全策略,不仅仅要设置API节点的入站策略,还要设置边缘节点的出站策略,都需要设置API节点的端口为通过。

  5. 检查磁盘是否已满,虽然几率很小,但是仍然有不少用户因为这个问题导致edge-api无法启动,使用命令查看:

    1. df -h

    检查结果中的 Avail 列是否有为 0 的。

修改API节点端口后,其他节点无法连接怎么办?

如果你修改了API节点端口(监听地址或访问地址),其他的节点(比如管理平台、边缘节点)中的配置文件 api.yaml 中的端口地址也需要手工更改成新的API节点端口。

如果想还原自己的设置,可以通过SQL语句:

  1. use $安装数据库;
  2. UPDATE edgeAPINodes SET http=JSON_SET(http, '$.listen[0].portRange', "8001");

把其中的 $安装数据库 换成你的实际安装用的数据库;8001就是安装时指定的端口。

修改后,需要重启edge-api进程,让配置生效。

出现Error 1461: Can’t create more than max_prepared_stmt_count statements错误怎么办?

出现这种情况,是因为MySQL服务的max_prepared_stmt_count参数值过小,可以通过重启API节点自动设置(在使用的MySQL用户有超级权限的情况下),或者在MySQL配置文件 my.cnf 中设置:

  1. [mysqld]
  2. ...
  3. max_prepared_stmt_count=65535
  4. ...

修改配置后,记得重启MySQL以便让配置生效。

如果你不知道 my.cnf 的位置,可以通过命令:

  1. bin/mysql --verbose --help|grep cnf

来查看MySQL查找的所有配置文件位置。

如果你有多个API节点连接同一个数据库,可能还需要将此值调整的更大一些,数值大概为每个10000 * API节点数量,比如你有10个API节点,那么这个值应该为100000