ClickHouse ReplicatedReplacingMergeTree物化视图执行OPTIMIZE报Code 999错误
错误原因
- 核心原因是当前执行OPTIMIZE操作的节点,拼接出来的ZooKeeper副本注册路径不存在,从报错信息可以定位2个直接诱因:
- 节点宏配置错误:建表时使用了
{layer}、{shard}、{replica}三个宏变量拼接ZK路径,当前故障节点的配置文件中,要么layer+shard的配置错误拼出了不存在的分片标识01-02,要么replica宏配置错误,把当前节点的副本名配成了其他节点的主机名risk-olap6.dg.163.org(当前执行节点主机名为risk-luck2.dg.163.org),导致最终拼接的ZK路径和实际注册的路径不一致。 - ZooKeeper注册信息丢失:该节点的物化视图副本之前的ZK注册节点被误删,或者节点重建时没有完成ZK注册,导致ZK上不存在对应副本的路径信息,其余节点的ZK注册正常所以操作可以正常执行。
- 节点宏配置错误:建表时使用了
修复方案
- 先核对故障节点的宏配置
登录故障节点执行select * from system.macros,检查layer、shard、replica三个参数的值是否和集群规划一致:
replica的值必须和当前节点的主机名完全匹配,不能配置为其他节点的主机名layer+shard拼接后的分片标识必须和该节点所属分片的集群配置一致
如果配置错误,修改配置文件(config.xml/metrika.xml)中的macros段后重启ClickHouse服务,再尝试执行OPTIMIZE操作。
- 宏配置正确时重建副本
如果确认宏配置无误,说明ZK上的副本注册信息丢失,按以下步骤重建该节点的物化视图副本:
- 先在故障节点删除异常的物化视图:
DROP TABLE risk_detect_test.risk_doubtful_user_daily_device_view_lyp; - 使用zkCli工具删除ZK上可能存在的残留路径:
rmr /clickhouse/tables/test/[正确的分片标识]/risk_doubtful_user_daily_device_view_lyp/replicas/[当前节点主机名] - 在该节点重新执行该物化视图的建表语句,等待副本数据同步完成后,即可正常执行OPTIMIZE操作。
内容的提问来源于stack exchange,提问作者Yanpeng
相关产品推荐
相关产品推荐

