Apache Ignite独立模式启动失败:长路径名致目录创建失败
Apache Ignite独立模式启动失败:页面存储目录路径过长问题解决
问题场景
将Apache Ignite配置为独立模式的写穿透缓存,启动时抛出异常,经排查是Ignite自动生成的页面存储工作目录路径过长,超出Linux系统的路径长度限制,导致无法创建目录。
异常信息
Got exception while starting (will rollback startup routine). class org.apache.ignite.IgniteCheckedException: Failed to start processor: GridProcessorAdapter [] at org.apache.ignite.internal.IgniteKernal.startProcessor(IgniteKernal.java:1787) at org.apache.ignite.internal.IgniteKernal.start(IgniteKernal.java:1066) at org.apache.ignite.internal.IgnitionEx$IgniteNamedInstance.start0(IgnitionEx.java:1757) at org.apache.ignite.internal.IgnitionEx$IgniteNamedInstance.start(IgnitionEx.java:1679) at org.apache.ignite.internal.IgnitionEx.start0(IgnitionEx.java:1121) at org.apache.ignite.internal.IgnitionEx.startConfigurations(IgnitionEx.java:1015) at org.apache.ignite.internal.IgnitionEx.start(IgnitionEx.java:921) at org.apache.ignite.internal.IgnitionEx.start(IgnitionEx.java:840) at org.apache.ignite.internal.IgnitionEx.start(IgnitionEx.java:710) at org.apache.ignite.internal.IgnitionEx.start(IgnitionEx.java:679) at org.apache.ignite.Ignition.start(Ignition.java:353) at org.apache.ignite.startup.cmdline.CommandLineStartup.main(CommandLineStartup.java:365) Caused by: class org.apache.ignite.IgniteCheckedException: Failed to create page store work directory: /home/user/apache-ignite/work/db/0_0_0_0_0_0_0_1_lo_10_0_0_100_10_0_0_203_10_99_0_5_127_0_0_1_198_18_0_1_198_18_0_129_198_18_0_65_198_18_2_1_2604_3d09_679_2b00_0_0_0_1dc7_wlp0s20f3_2604_3d09_679_2b00_8332_15b9_3cd0_484_wlp0s20f3_2604_3d09_679_2b00_ae91_a1ff_fe7e_63ba_enxac91a17e63ba_2604_3d09_679_2b00_d986_6638_3c47_cd7c_wlp0s20f3_2604_3d09_679_2b00_e8bf_ac63_b39_630e_enxac91a17e63ba_47501 at org.apache.ignite.internal.util.IgniteUtils.ensureDirectory(IgniteUtils.java:9971) at org.apache.ignite.internal.processors.cache.GridLocalConfigManager.<init>(GridLocalConfigManager.java:127) at org.apache.ignite.internal.processors.cache.GridCacheProcessor.start(GridCacheProcessor.java:618) at org.apache.ignite.internal.IgniteKernal.startProcessor(IgniteKernal.java:1784) ... 11 more
解决方案
1. 自定义节点名称(推荐)
Ignite默认会将节点所有网卡的IP地址拼接成节点名称,导致生成的目录路径过长。手动指定简短的节点名称即可避免:
- XML配置方式:
<bean class="org.apache.ignite.configuration.IgniteConfiguration"> <!-- 指定短节点名 --> <property name="nodeName" value="ignite-node-01"/> <!-- 其他配置 --> </bean>
- Java代码配置方式:
IgniteConfiguration cfg = new IgniteConfiguration(); cfg.setNodeName("ignite-node-01"); // 其他配置 Ignition.start(cfg);
2. 自定义页面存储目录
直接指定一个路径更短的目录作为页面存储目录,绕过自动生成的长路径:
- XML配置方式:
<bean class="org.apache.ignite.configuration.IgniteConfiguration"> <property name="dataStorageConfiguration"> <bean class="org.apache.ignite.configuration.DataStorageConfiguration"> <!-- 指定自定义页面存储路径 --> <property name="pageStorePath" value="/home/user/ignite-db"/> </bean> </property> <!-- 其他配置 --> </bean>
- Java代码配置方式:
DataStorageConfiguration storageCfg = new DataStorageConfiguration(); storageCfg.setPageStorePath("/home/user/ignite-db"); IgniteConfiguration cfg = new IgniteConfiguration(); cfg.setDataStorageConfiguration(storageCfg); // 其他配置 Ignition.start(cfg);
3. 调整Linux系统路径长度限制(不推荐)
若必须使用默认路径,可临时调整系统路径长度限制,但存在系统级风险,需谨慎操作:
# 临时生效,重启后失效 sysctl -w fs.nr_open=1000000 echo 1000000 > /proc/sys/fs/nr_open
若需永久生效,可编辑/etc/sysctl.conf添加配置后执行sysctl -p。
内容的提问来源于stack exchange,提问作者Majid Bahrevar
相关产品推荐
相关产品推荐

