问题
OpenStack运行一段时间后变慢了。登陆horizon变的很慢,与现有硬件环境差距太大,效果甚不理想。
首先,,查看了下apache2日志没什么报错,感觉是认证的问题。执行了keystone user-list 好几秒才返回结果,问题基本定位是keystone问题。
然后,查看mysql数据库,其cpu利用率一直非常高,进入数据库show processlist看了下发现下面语句执行很长时间执行不完:
> use keystone;
> select id,expires,extra,valid from token;
肯定是token表太大或者没有索引造成,用explain看了下这条sql 一百多万行全文扫描,看了下表内容都是临时认证的token信息,没什么大用直接清空了,然后执行keystone命令很快,清空浏览器缓存后登陆飞快。
关于show processlist具体信息,请参考这里:
http://www.cnblogs.com/JulyZhang/archive/2011/01/28/1947165.html
上面只是暂时处理方法,线上用我觉得最好加索引,定期备份以前的数据到另外一个表。
方法建议
1、采用清除token表的方式解决问题
2、Memcached存放Token(貌似我觉得Redis更好)
详情,请参考该文:http://prajnagarden.com/openstack/2013/12/17/keystone-on-the-way/
openstack命令以及dashboard操作非常慢的原因
1、可能服务器负载太高。
2、可能是keystone数据库里的token表太久未清理,表太大。删除较早的token:
delete from token where not DATE_SUB(CURDATE(),INTERVAL 2 DAY)<=expires;(2天前的token)
有时确实token表太大执行这个语句会超时,可以直接删除token表的全部内容:
truncate table token
小结
注意:如果线上用的不要直接清空token,这样不清浏览器缓存有可能会导致登陆不了。
补充:看了下原来nova和quantum的大多数功能都需要验证token,当token数量太多时,导致在数据库查询token时要花费很多时间,而且有些功能牵涉到多个组件,就要多次查询token。