常见问题

常见问题#

  1. 如果在安装部署时出现了问题,可查阅本节获得修复方法,如仍未解决,需要联系开发者协助。


    首先请按照配置项确认配置无误:

    1. 集群间免密配置:oushu 用户可以免密访问所有部署节点

    2. 所有部署节点操作系统配置:sysctl.conf 配置内容正确,且已经生效

    3. 所有部署节点操作系统配置:hosts 文件配置正确,并与 OushuDB/Magma 配置文件中使用的地址一致

    4. 所有数据库节点数据库配置文件:文件内格式正确,属性名称正确,属性值正确,topology.yaml 文件内容合规

    5. 所有Magma节点配置文件:文件内格式正确,属性名称正确,属性值正确,topology.yaml 文件内容合规

    6. 存储引擎配置:数据库配置了正确的访问地址与端口,并且配置了对应的权限认证(kerberos)

    7. 文件权限配置:数据库文件路径、配置路径、日志生成路径配置了正确权限与属主

    8. 其他的配置: 现有环境无历史版本数据库的控制数据残留、进程残留、文件残留。


    OushuDB 初始化的工作流程如下:
    1. 节点1执行初始化命令

    2. 初始化命令发送到所有master执行初始化操作

    3. 某个 master 节点与 Magma 通信初始化 OushuDB 元数据

    4. 数据库 master 节点初始化本地控制文件、参数与路径

    5. 数据库 master 节点启动

    6. 初始化命令发送到所有 segment 节点执行初始化操作

    7. 数据库 segment 节点初始化本地文件与参数

    8. 数据库 segment 节点启动

    上述流程出现异常则会导致数据库初始化失败。


    OushuDB 日志路径下一般有这些文件夹:admin, master, segment, vsc_catalog, vsc_default

    admin 文件夹下包含了 OushuDB 与 Magma 启动、停止、创建、参数更新、重启的日志,其命名规则为[oushudb|magma]_[create|start|stop|init]_time.log,例如 oushudb_init_20221227.log

    master 文件夹下包含了 OushuDB main 节点运行时产生的日志文件。

    segment 文件夹下包含了 OushuDB segment 节点运行时产生的日志文件。

    vsc_catalog 文件夹下包含了 Magma 元数据集群节点运行时产生的日志文件。

    vsc_default 文件夹下包含了 Magma 创建的数据存储集群 vsc_default 节点运行时产生的日志文件。


    可以通过如下步骤检查收集错误日志:

    1. 检查初始化脚本的屏幕的运行输出,一些显而易见的错误或错误节点的名称会直接输出到屏幕上

    2. 登录对应的节点,检查其日志生成路径下 admin 文件夹内的日志,排查初始化、启动、重启、停止时异常,文件名称一般为:oushudb\_[init|start|restart|stop]_time.log

    3. 检查日志生成路径下 master 文件夹内的日志,排查执行时异常

    4. 检查日志生成路径下 vsc_catalog 文件夹内的日志,排查 Magma 元数据集群执行异常,Magma在发生异常时会生成标记为fatal的文件,例如:fatal-2022-12-27_140834.log

    5. 检查日志生成路径下 segment 文件夹内的日志,检查 segment 启动时日常

    通过上述的日志收集,我们至少能够明确初始化失败的流程位置与大致原因。


    OushuDB初始化工作是 All or Nothing 的,因此如果在某次初始化失败后,需要将残留的数据(包括Magma)全部清理,方才可以继续尝试初始化。需要清理的内容有如下部分:

    1. Magma 元数据集群所有节点的数据文件与日志文件

    2. OushuDB 集群所有节点的数据文件与日志文件

    3. 存储引擎中已经创建完成的数据库目录,例如 hdfs 中的/oushudb/default_filespace

    清理完成后,依照初始化Magma,初始化OushuDB的顺序重新初始化。


    一些常见的错误与输出以及可能的原因与解决方法:

    1. catalog has not yet been initialized waiting for retry xxx

      error1_catalog_has_not_yet_been_initialized!

      这是 Master 在 Magma 上创建元数据的过程,会等待数分钟,时间过长说明出现了问题。

      检查magma status,发现Magma 异常,检查FATAL_xxx.log 日志,发现Magma 错误:[Too many open files]

      error1_too_many_open_files

      检查发现 HDFS 与 Magma 占用了太多打开文件数,最终通过增大操作系统打开文件数解决问题。

      步骤:检查初始化脚本输出-> 检查初始化日志->检查 magma status -> 检查 magma fatal log -> 检查操作系统配置

    2. 共享内存无法创建

      OushuDB 如果配置在内存资源比较受限的机器上,例如内存只有几个GB,需要调整OushuDB 配置项max_jump_hash_map_num, 默认大小为512,可调整为8以便适应较小的系统内存

    3. lock file “”postmaster.pid”” already exists”,, Is another postmaster (PID xxx) running in …?

      这是因为环境存在没有清除的文件导致的,有些锁文件或者标志文件被进程认为有正在运行的服务。 清理环境包括:清除进程、数据目录、日志目录、tmp文件下的lock锁文件(.s.PGSQL.5432.lock, .s.PGSQL.40000.lock)。

  2. 命令行部署OushuDB,注册到Skylab之后,使用工作簿报错

    原因:命令行部署,缺少一个函数:has_table_privilege,通过可视化部署不存在这个问题,在部署的过程中会自动创建该函数。

    解决方案: 用PSQL命令行连接刚刚部署的OushuDB,在每一个数据库(包括template1数据库)下执行如下SQL,创建这个函数。

create or replace function has_table_privilege(name,oid,char,oid,oid,aclitem[],text) returns bool as '$libdir/hornet', 'has_table_privilege_internal' language c stable;
  1. 如果集群由49xx系列升级到50xx,软件用户角色改变,需要主动删除 /tmp 目录下的锁文件:.s.PGSQL.5432.lock, .s.PGSQL.40000.lock