千家信息网

怎么提高keystone的效率

发表于:2025-02-23 作者:千家信息网编辑
千家信息网最后更新 2025年02月23日,本篇内容介绍了"怎么提高keystone的效率"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!写在前面
千家信息网最后更新 2025年02月23日怎么提高keystone的效率

本篇内容介绍了"怎么提高keystone的效率"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

写在前面……

最近在测试OpenStack Havana RDO版本的时候,发现过一段时间后,整个平台会变动的越来越慢。刚刚开始还没什么动力去trouble shooting,毕竟就一demo的环境。昨天居然给让我无法访问,这就不能忍了,得看看是什么臭虫在捣鬼。

keystne Token的问题

无意中发现在Nova API调用的过程当中,在向keystone获取Token的时间会异常的长。而当我刚刚安装完keystone的时候,整个速度还是很不错的。查阅了相关的资料,发现Token这块在数据库永久存放,而且增长速度还是很快,对keystone的数据库的表分析如下:

切换到MySQL自带管理库information_schema

mysql> use information_schema;Reading table information for completion of table and column namesYou can turn off this feature to get a quicker startup with -ADatabase changed

查看Token的大小:

mysql> select data_length,index_length from tables where table_schema='keystone'-> and table_name='token';+-------------+--------------+| data_length | index_length |+-------------+--------------+|   916455424 |     17924096 |+-------------+--------------+1 row in set (0.01 sec)

用比较直观的方式查看:

mysql> select concat(round(sum(data_length/1024/1024),2),'MB') as data_length_MB,-> concat(round(sum(index_length/1024/1024),2),'MB') as index_length_MB-> from tables where-> table_schema='keystone'-> and table_name='token';+----------------+-----------------+| data_length_MB | index_length_MB |+----------------+-----------------+| 874.00MB       | 17.09MB         |+----------------+-----------------+1 row in set (0.01 sec)

大概两周的时间,居然有近1G的数据,当然,1G对于数据库来说也是小case,但如果是一年,这个数据量也是不容忽视的。

在看一下keystone对于token的配置keystone.conf,主要有几部分:

[token]# Provides token persistence.driver = keystone.token.backends.sql.Token# driver = keystone.token.backends.memcache.Token# Controls the token construction, validation, and revocation operations.# Core providers are keystone.token.providers.[pki|uuid].Provider# provider =# Amount of time a token should remain valid (in seconds)expiration = 86400

从上述的配置可以token默认存放在数据库中,默认过期时间为为一天。当然,在launchpad上有很多朋友提到用脚本清除数据库即可。

采用清除token表的方式解决问题

这边的话,也借鉴了一下他们的经验去解决这个问题,下面是清除token表的脚本。

#!/bin/bashmysql_user=mysql_password=mysql_host=#这里大家可以考虑一下清除数据的时间的问题,为啥是2天mysql -u${mysql_user} -p${mysql_password} -h${mysql_host} -e 'USE keystone ; DELETE FROM token WHERE NOT DATE_SUB(CURDATE(),INTERVAL 2 DAY) <= expires;'

当然,如果你在清除token的时候不幸遇到如下的错误:

ERROR 1205 (HY000) at line 1: Lock wait timeout exceeded; try restarting transaction

只需要增加innodb_lock_wait_timeout的值:

mysql> show variables like 'innodb_lock_wait_timeout';+--------------------------+-------+| Variable_name            | Value |+--------------------------+-------+| innodb_lock_wait_timeout | 50    |+--------------------------+-------+1 row in set (0.00 sec)mysql> set innodb_lock_wait_timeout=100;Query OK, 0 rows affected (0.00 sec)mysql> show variables like 'innodb_lock_wait_timeout';+--------------------------+-------+| Variable_name            | Value |+--------------------------+-------+| innodb_lock_wait_timeout | 100   |+--------------------------+-------+

重新运行上面的脚本即可。

当然,兄弟们不能每次自己手动去服务器上执行这个脚本,采用crontab+脚本的方式,脚本clearToken.sh

#!/bin/bashmysql_user=keystonemysql_password=********mysql_host=mysql=$(which mysql)logger -t keystone-cleaner "Starting Keystone 'token' table cleanup"logger -t keystone-cleaner "Starting token cleanup"mysql -u${mysql_user} -p${mysql_password} -h${mysql_host} -e 'USE keystone ; DELETE FROM token WHERE NOT DATE_SUB(CURDATE(),INTERVAL 2 DAY) <= expires;'valid_token=$($mysql -u${mysql_user} -p${mysql_password} -h${mysql_host} -e 'USE keystone ; SELECT * FROM token;' | wc -l)logger -t keystone-cleaner "Finishing token cleanup, there is still $valid_token valid tokens..."exit 0

crontab的定时任务:

[root@controller01 keystone]# cat /etc/crontabSHELL=/bin/bashPATH=/sbin:/bin:/usr/sbin:/usr/binMAILTO=rootHOME=/# For details see man 4 crontabs# Example of job definition:# .---------------- minute (0 - 59)# |  .------------- hour (0 - 23)# |  |  .---------- day of month (1 - 31)# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat# |  |  |  |  |# *  *  *  *  * user-name command to be executed0 1 * * * /opt/clearToken.sh

Memcached存放Token

为了给MySQL的token表瘦身,可以后端采用Memcached作为Token的存储后端。但采用Memcached作为后端的存储。但Memcached这块,目前还是有些问题:

  • Token在Memcached中是否永久存储?

  • 当Memcached宕机时,Cache无法持久化

  • Memcached采用集群复制,如何去做?

  • Memcached效率如何?

Memcached使用OpenStack

安装Memcached服务:

yum -y install memcached

修改keystone.conf配置文件:

[token]driver = keystone.token.backends.memcache.Token

重启服务:

service memcached restartservice openstack-keystone restart

检查是否work:

[root@controller01 ~]# lsof -i :11211COMMAND     PID      USER   FD   TYPE   DEVICE SIZE/OFF NODE NAMEkeystone-  6658  keystone   10u  IPv4 20381693      0t0  TCP localhost:41865->localhost:memcache (ESTABLISHED)keystone-  6658  keystone   12u  IPv4 19947698      0t0  TCP localhost:33995->localhost:memcache (ESTABLISHED)keystone-  6658  keystone   14u  IPv4 20140990      0t0  TCP localhost:37472->localhost:memcache (ESTABLISHED)keystone-  6658  keystone   20u  IPv4 20333522      0t0  TCP localhost:40973->localhost:memcache (ESTABLISHED)memcached 28336 memcached  126u  IPv4  3050900      0t0  TCP *:memcache (LISTEN)memcached 28336 memcached  127u  IPv4  3050902      0t0  UDP *:memcachememcached 28336 memcached  128u  IPv4 20381696      0t0  TCP localhost:memcache->localhost:41865 (ESTABLISHED)memcached 28336 memcached  129u  IPv4 19947701      0t0  TCP localhost:memcache->localhost:33995 (ESTABLISHED)memcached 28336 memcached  130u  IPv4 20140993      0t0  TCP localhost:memcache->localhost:37472 (ESTABLISHED)memcached 28336 memcached  133u  IPv4 20333525      0t0  TCP localhost:memcache->localhost:40973 (ESTABLISHED)

可以看到keystone已经和memcached建立了TCP连接。

可以用telnet查看memcached中的token的信息:

root@controller01 ~]# telnet 127.0.0.1 11211Trying 127.0.0.1...Connected to 127.0.0.1.Escape character is '^]'.stats itemsSTAT items:9:number 1STAT items:9:age 19766STAT items:9:evicted 0STAT items:9:evicted_nonzero 0STAT items:9:evicted_time 0STAT items:9:outofmemory 0STAT items:9:tailrepairs 0STAT items:11:number 62STAT items:11:age 81982STAT items:11:evicted 0STAT items:11:evicted_nonzero 0STAT items:11:evicted_time 0STAT items:11:outofmemory 0STAT items:11:tailrepairs 0STAT items:15:number 1STAT items:15:age 20365STAT items:15:evicted 0STAT items:15:evicted_nonzero 0STAT items:15:evicted_time 0STAT items:15:outofmemory 0STAT items:15:tailrepairs 0STAT items:17:number 1STAT items:17:age 20287STAT items:17:evicted 0STAT items:17:evicted_nonzero 0STAT items:17:evicted_time 0STAT items:17:outofmemory 0STAT items:17:tailrepairs 0STAT items:18:number 8558STAT items:18:age 7675STAT items:18:evicted 0STAT items:18:evicted_nonzero 0STAT items:18:evicted_time 0STAT items:18:outofmemory 0STAT items:18:tailrepairs 0STAT items:22:number 1STAT items:22:age 81605STAT items:22:evicted 0STAT items:22:evicted_nonzero 0STAT items:22:evicted_time 0STAT items:22:outofmemory 0STAT items:22:tailrepairs 0STAT items:28:number 1STAT items:28:age 81982STAT items:28:evicted 0STAT items:28:evicted_nonzero 0STAT items:28:evicted_time 0STAT items:28:outofmemory 0STAT items:28:tailrepairs 0STAT items:36:number 1STAT items:36:age 82020STAT items:36:evicted 0STAT items:36:evicted_nonzero 0STAT items:36:evicted_time 0STAT items:36:outofmemory 0STAT items:36:tailrepairs 0ENDstats cachedump 18 100ITEM token-9be5243e6765408bb67cd73f66367cdd [3827 b; 1387340643 s]ITEM token-499d93bec0a54ddebdc28ef0941ba7df [3827 b; 1387340702 s]ITEM token-186a1394b2474c998dafc752fd80d058 [3827 b; 1387340700 s]ITEM token-3de99c3d4f174d15a1546ce321d1e3a1 [3824 b; 1387340576 s]ITEM token-fcab58d23ff94369b27a8dc335340028 [3824 b; 1387340697 s]ITEM token-7092f681ebe34cae9830eba8ae7d45f3 [3824 b; 1387340636 s]ITEM token-977cf2ab85e54920b3d3b582dabba7d8 [3824 b; 1387340634 s]ITEM token-49df94c6ef7a4a1582c7539f5829b354 [3824 b; 1387340567 s]ITEM token-7b1f9646734542d5a30dd0cbc8d1937d [3824 b; 1387340569 s]……

可以看到,目前items:18存放的是token信息。

"怎么提高keystone的效率"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

数据 脚本 数据库 时间 问题 效率 方式 时候 还是 存储 服务 配置 信息 内容 更多 知识 过程 速度 永久 不错 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 数据库db是什么意思 腾鹰网络技术 wow六零数据库 人力资源管理功能模块数据库 网易163邮箱收件服务器主机名 网络安全学习读后感 网络技术服务业行业现状 网络安全宣传片内容 万方数据库旧版跟新版的区别 组织机构数据库怎么设计 php增删改查带数据库案例 河南丰欧互联网科技有限公司 嘉兴app软件开发需要多少钱 计算机安全 网络安全的概念 三级 网络技术 及格 nexis数据库如何注册 世界上第一个网络技术 大唐集团软件开发公司有哪些 深圳秒懂互联网科技有限公司 杨浦区运营网络技术有哪些 黑客公司数据库 潮流网络技术公司面试难吗 网络安全运维管理平台建设 中通软件开发级别有多少级别 北京阿里云服务器ip是什么意思 广东省摄像头软件开发公司 贵州分类招生计算机网络技术 单机版考试系统用什么软件开发 大唐集团软件开发公司有哪些 网络技术中职教学
0