暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

0136.C solr-infra目录占用空间较大处理_TTL异常处理

rundba 2022-02-22
2272

在CDP中开启了ranger,审计信息默认存放在文件系统上,也可使用数据库存储审计信息。默认使用Infra-Solr作为ranger audit的全文信息检索,保留90天数据,但在CDP 7.1.1 ~ CDP 7.1.6中,虽然ranger Audits配置了Time-to-live,但Infra-solr的 Retention policy不起作用,下文通过手动设置参数解决该问题。

0. ENV

CentOS 7.6;

CDP 7.1.6。


1. 问题现象

当前CDP集群使用了多台主机,其中datanode08(下文简称dn08)主机系统磁盘占用较大,根目录使用199G,其中/var/lib/solr-infra/ranger_audits_shard1_replica_n1/data/index目录占用空间155G,和其它主机对比,空间明显占用较高。


1) 根目录占用199G

[root@dn08 data]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 442G 199G 244G 45% /
...
/dev/sdc 3.7T 84G 3.6T 3% /data2
/dev/sdn 3.7T 83G 3.6T 3% /data13
cm_processes 252G 34M 252G 1% /run/cloudera-scm-agent/process
tmpfs 51G 0 51G 0% /run/user/0


2) solr-infra目录占用空间较大

[root@dn08 data]# pwd
/var/lib/solr-infra/ranger_audits_shard1_replica_n1/data


3) data目录下index占用155G

[root@dn08 data]# du -sh *
155G index
0 snapshot_metadata
3.8M tlog


4) index目录文件概况

[root@dn08 data]# ls -lrt index/
total 162106372
...
-rw-r--r-- 1 solr solr 159 Feb 11 13:16 _1c1m9.fdx
-rw-r--r-- 1 solr solr 9322 Feb 11 13:16 _1c1m7_Lucene84_0.pos
-rw-r--r-- 1 solr solr 12636 Feb 11 13:16 _1c1ma_Lucene84_0.doc
-rw-r--r-- 1 solr solr 2884 Feb 11 13:16 _1c1ma.fnm
-rw-r--r-- 1 solr solr 2884 Feb 11 13:16 _1c1m9.fnm
-rw-r--r-- 1 solr solr 102678 Feb 11 13:16 _1c1m9.fdt
-rw-r--r-- 1 solr solr 363 Feb 11 13:16 _1c1m8.cfe
-rw-r--r-- 1 solr solr 139 Feb 11 13:16 _1c1m7.nvm
-rw-r--r-- 1 solr solr 559 Feb 11 13:16 _1c1ma.si
...


5) index目录文件大小概况

[root@dn08 data]# du -sh index/*
...
4.0K index/_vqf6.nvm
4.0K index/_vqf6.si
4.0K index/_vqw4.cfe
5.0G index/_vqw4.cfs
4.0K index/_vqw4.si
4.0K index/_wcfe.cfe
5.0G index/_wcfe.cfs
4.0K index/_wcfe.si
0 index/write.lock
...


2. 问题原因

根据上述排查,solr-infra目录占用系统空间较大,这个目录是用来存ranger_audits这个Solr collection的数据的:

/var/lib/solr-infra/ranger_audits_shard1_replica_n1/data。

这个目录大说明ranger_aduits在Solr里的数据比较多,这个collection默认存储90天的审计数据。当在solrconfig.xml ranger_audits config中设置的 updateRequestProcessorChain中的处理器顺序不正确时,会出现此问题。

该问题是由链中请求处理器的顺序引起的,TTL 默认逻辑放置在实际执行更新的runUpdateProcessorFactory之后。


3. 解决方法

该问题已在 7.1.7、7.2.11.0中修复,在不考虑升级CDP版本时,采用如下方法手动修改处理顺序。


1)  下载Ranger配置

通过在主机上运行以下命令,将 Ranger 审核配置下载到 Solr Server 或 Solr 网关主机:

# solrctl instancedir --get ranger_audits /tmp/ranger_audits


2) 在文本编辑器中打开以下文件

# vim /tmp/ranger_audits/conf/solrconfig.xml


3)编辑此文件中的updateRequestProcessorChain部分以更改处理器元素顺序:

在updateRequestProcessorChain段,移动1045-1047行内容到1057-1059行

移动前:

<updateRequestProcessorChain name="add-unknown-fields-to-the-schema" default="${update.autoCreateFields:true}" 
processor="uuid,remove-blank,field-name-mutating,parse-boolean,parse- long,parse-double,parse-date,add-schema-fields">
<processor class="solr.LogUpdateProcessorFactory"/> #1045行
<processor class="solr.DistributedUpdateProcessorFactory"/> #1046行
<processor class="solr.RunUpdateProcessorFactory"/> #1047行
<processor class="solr.DefaultValueUpdateProcessorFactory">
<str name="fieldName">_ttl_</str>
<str name="value">+90DAYS</str>
</processor>
<processor class="solr.processor.DocExpirationUpdateProcessorFactory">
<int name="autoDeletePeriodSeconds">86400</int>
<str name="ttlFieldName">_ttl_</str>
<str name="expirationFieldName">_expire_at_</str>
</processor>
<processor class="solr.FirstFieldValueUpdateProcessorFactory">
<str name="fieldName">_expire_at_</str>
</processor>
</updateRequestProcessorChain>


移动后:

<updateRequestProcessorChain name="add-unknown-fields-to-the-schema" default="${update.autoCreateFields:true}" 
processor="uuid,remove-blank,field-name-mutating,parse-boolean,parse- long,parse-double,parse-date,add-schema-fields">
<processor class="solr.DefaultValueUpdateProcessorFactory">
<str name="fieldName">_ttl_</str>
<str name="value">+90DAYS </str>
</processor>
<processor class="solr.processor.DocExpirationUpdateProcessorFactory">
<int name="autoDeletePeriodSeconds">86400</int>
<str name="ttlFieldName">_ttl_</str>
<str name= “过期字段名”>_expire_at_</str>
</processor>
<processor class="solr.FirstFieldValueUpdateProcessorFactory">
<str name="fieldName">_expire_at_</str>
</processor>
<processor class="solr.LogUpdateProcessorFactory"/> #1057行
<processor class="solr.DistributedUpdateProcessorFactory"/> #1058行
<processor class="solr.RunUpdateProcessorFactory"/> #1059行
</updateRequestProcessorChain>





我的环境参考,将原来在1045-1047行移动到1057到1059行

1044            processor="uuid,remove-blank,field-name-mutating,parse-boolean,parse-long,parse-double,parse-date,add-schema-fields">
1045 <processor class="solr.DefaultValueUpdateProcessorFactory">
1046 <str name="fieldName">_ttl_</str>
1047 <str name="value">+90DAYS</str>
1048 </processor>
1049 <processor class="solr.processor.DocExpirationUpdateProcessorFactory">
1050 <int name="autoDeletePeriodSeconds">86400</int>
1051 <str name="ttlFieldName">_ttl_</str>
1052 <str name="expirationFieldName">_expire_at_</str>
1053 </processor>
1054 <processor class="solr.FirstFieldValueUpdateProcessorFactory">
1055 <str name="fieldName">_expire_at_</str>
1056 </processor>
1057 <processor class="solr.LogUpdateProcessorFactory"/>
1058 <processor class="solr.DistributedUpdateProcessorFactory"/>
1059 <processor class="solr.RunUpdateProcessorFactory"/>


4.  上传新配置

通过在主机上运行以下命令上传新配置:

# solrctl --jaas [***solr-jaas.conf***] instancedir --update ranger_audits /tmp/ranger_audits


如:  

上传,失败后按如下操作近一步处理:

[root@dn08 conf]# solrctl instancedir --update ranger_audits /tmp/ranger_audits
Error: can't delete configuration


查看最新的solr jaas.conf文件信息,8581-solr-SOLR_SERVER一行

[root@dn08 conf]# ls -lrt /var/run/cloudera-scm-agent/process
total 0
...
drwxr-x--x 3 root root 220 Feb 7 02:54 10093-host-inspector
drwxr-x--x 6 kudu kudu 420 Feb 14 02:47 10225-KUDU-kudu-KUDU_TSERVER-7517310a47b84873982699b9f8a0f11c-RoleDiagnostics
drwxr-x--x 3 root root 220 Feb 14 02:47 10197-host-inspector
drwxr-x--x 4 root root 240 Feb 14 02:47 10147-collect-host-statistics
drwxr-x--x 7 impala impala 420 Feb 16 04:09 8703-impala-IMPALAD
drwxr-x--x 5 solr solr 340 Feb 16 14:15 8581-solr-SOLR_SERVER #这行为较新配置


查看8581中的solr文件jaas.conf

[root@dn08 conf]# ls -lrt /var/run/cloudera-scm-agent/process/8581-solr-SOLR_SERVER
total 60
-rw------- 1 solr solr 1474 Nov 24 19:45 solr.keytab
-rw------- 1 root root 5936 Nov 24 19:45 supervisor.conf
drwxr-x--x 2 solr solr 80 Nov 24 19:45 logs
-rw------- 1 root root 6070 Nov 24 19:45 proc.json
-rw------- 1 root root 8242 Nov 24 19:45 config.zip
-rw------- 1 solr solr 0 Nov 24 19:45 exit_code
-rw-r----- 1 solr solr 329 Nov 24 19:45 cloudera-monitor.properties
-rw-r----- 1 solr solr 250 Nov 24 19:45 jaas.conf
-rw-r----- 1 solr solr 3969 Nov 24 19:45 log4j2.properties
-rw-r----- 1 solr solr 1661 Nov 24 19:45 redaction-rules.json
drwxr-x--x 2 solr solr 180 Nov 24 19:45 hadoop-conf
-rw-r----- 1 solr solr 344 Nov 24 19:45 cloudera-stack-monitor.properties
drwxr-xr-x 2 solr solr 40 Nov 24 19:45 temp
-rw------- 1 root root 1470 Feb 16 14:16 krb5cc_cm_agent_solr
-rw------- 1 root root 549 Feb 16 14:18 supervisor_status


以8581中的jaas.conf更新solr配置--成功

[root@dn08 conf]# solrctl --jaas /var/run/cloudera-scm-agent/process/8581-solr-SOLR_SERVER/jaas.conf instancedir --update ranger_audits /tmp/ranger_audits
Uploading configs from /tmp/ranger_audits/conf to yw-namenode02.aikosolar.net:2181,yw-namenode01.aikosolar.net:2181,yw-cm.aikosolar.net:2181/solr-infra. This may take up to a minute.


5. 重新加载 Ranger_audits集合

使用 Solr 凭据重新加载 Ranger_audits 集合,以便该集合可以通过运行以下命令获取修改后的配置:

# solrctl collection --reload ranger_audits

如:

[root@dn08 conf]# solrctl collection --reload ranger_audits 


6. 手动删除旧文件

配置更改和收藏重新加载后新添加的文档将被自动删除,旧存在的文档需要通过命令手动删除。


以solr账户在本机kerberos验证登录后,手动删除7天以前的数据。

# curl -v --negotiate -u : "http://dn08.rundba.com:8993/solr/ranger_audits/update?commit=true" -H "Content-Type: text/xml" --data-binary "<delete><query>evtTime:[* TO NOW-7DAYS]</query></delete>"


其中:

  • dn08.rundba.com为solr_host主机名或IP地址;

  • 如果需要更改时间可以修改NOW-7DAYS部分;

  • 默认端口为8993,使用https加密后端口为8995。


官方参考中使用8886端口,参考:

# curl -v --negotiate -u : "http://<solr_host>:8886/solr/ranger_audits/update?commit=true" -H "Content-Type: text/xml" --data-binary "<delete> <query>evtTime:[* TO NOW-14DAYS]</query></delete>"

上述命令用于删除超过 14 天的数据。


7. 数据存储天数调整

另外,我们也可以更改这个collection的TTL来减少数据的过期时间。根据之前提到,默认是90天,可以改到更合理的日期,也可使用其它形式,如:+2WEEKS,+4HOURS。

方法同调整上述参数,下载并修改solrconfig.xml配置文件,将+90DAYS更改为自己计划的天数,然后重新上传配置,重新加载solr配置,不许重启服务。


8. 小结

因solr参数配置问题,导致solr占用空间较大,文中采用调整参数顺序,清理过期数据进行处理。

后续将对solr进行优化,根据机器数量对solr进行分区,将数据均匀分布到不同主机上,使数据均匀分布,并进行冗余,避免单点压力过大。


注:solr也在ORACLE中大量使用,在ORACLE database、ORACLE bigdata中,进行text方式搜索,如:oracle.pg.text.solr包。


9. 参考

https://my.cloudera.com/knowledge/ERROR-Time-to-live-configuration-for-Ranger-Audits-not-Working?id=315204
https://community.cloudera.com/t5/Customer/ERROR-Time-to-live-configuration-for-Ranger-Audits-not/ta-p/315204
https://lucene.apache.org/solr/5_3_0/solr-core/org/apache/solr/update/processor/DocExpirationUpdateP...
https://cwiki.apache.org/confluence/display/solr/Update+Request+Processors




- 完 -


旨在交流,不

::rundba

wx: landnow


 




                             长按二维码                                   


欢迎加入>>国产DB学习交流群


       

   请注明:来自rundba,加入国产DB学习交流群                

             


文章转载自rundba,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论