

在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 -hFilesystem 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% /data13cm_processes 252G 34M 252G 1% /run/cloudera-scm-agent/processtmpfs 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 index0 snapshot_metadata3.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.nvm4.0K index/_vqf6.si4.0K index/_vqw4.cfe5.0G index/_vqw4.cfs4.0K index/_vqw4.si4.0K index/_wcfe.cfe5.0G index/_wcfe.cfs4.0K index/_wcfe.si0 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_auditsError: can't delete configuration
查看最新的solr jaas.conf文件信息,8581-solr-SOLR_SERVER一行
[root@dn08 conf]# ls -lrt /var/run/cloudera-scm-agent/processtotal 0...drwxr-x--x 3 root root 220 Feb 7 02:54 10093-host-inspectordrwxr-x--x 6 kudu kudu 420 Feb 14 02:47 10225-KUDU-kudu-KUDU_TSERVER-7517310a47b84873982699b9f8a0f11c-RoleDiagnosticsdrwxr-x--x 3 root root 220 Feb 14 02:47 10197-host-inspectordrwxr-x--x 4 root root 240 Feb 14 02:47 10147-collect-host-statisticsdrwxr-x--x 7 impala impala 420 Feb 16 04:09 8703-impala-IMPALADdrwxr-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_SERVERtotal 60-rw------- 1 solr solr 1474 Nov 24 19:45 solr.keytab-rw------- 1 root root 5936 Nov 24 19:45 supervisor.confdrwxr-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.jsondrwxr-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.propertiesdrwxr-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_auditsUploading 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=315204https://community.cloudera.com/t5/Customer/ERROR-Time-to-live-configuration-for-Ranger-Audits-not/ta-p/315204https://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。





