开源SDN系统Tungsten Fabric面临数据产生过多问题。
经排查,产生数据多出自analytics组件的Cassandra数据库()。很多分析数据会存储至Cassandra库,并持久化处理。
没有特殊调整的话,目录在
/var/lib/docker/volumes/analytics_database_analytics_cassandra/_data/ContrailAnalyticsCql
两个目录文件很大
其中messagetable增长很慢,但是stattablev4目录增长很快,主要是里面的.db文件增长超快,每天上G的量小意思。
数据增长过快会导致分区硬盘写满,一旦写满,会导致rabbitmq阻塞,进而导致整个TF服务宕机。
处理方法一、清理Cassandra持久化的db文件
# coding=utf-8
import subprocess
import datetime
def execute(cmd, shell=False, cwd=None):
popen_obj = subprocess.Popen(cmd, shell=shell, cwd=cwd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
popen_obj.wait()
ret, err = popen_obj.communicate()
ret = ret.decode("utf-8").strip()
err = err.decode("utf-8").strip()
return ret, err
if __name__ == '__main__':
now = datetime.datetime.now()
cur_month = str(now.month) + "月"
cur_day = str(now.day)
ret, err = execute(['ls', '-lrtS'])
for i in ret.split("\n"):
temp = i.split()
if len(temp) != 9:
continue
size = temp[4]
month = temp[5]
day = temp[6]
name = temp[8]
if int(size) > 10*1024*1024:
if month != cur_month and day != cur_day:
print(str(int(int(size) / 1024 / 1024)) + "MB-" + month + "-" + day + "-" + name+"(moved)")
print (execute(["mv", name, "/home/analytics_database_analytics_cassandra-BAKup/230504"]))
else:
print(str(int(int(size) / 1024 / 1024)) + "MB-" + month + "-" + day + "-" + name)
方法二、直接进analytics的Cassandra删原有数据
因为删除的是分析数据,不涉及系统配置等,不影响TF正常工作。
目前处理办法这两种,欢迎批评指正1