故障现象

近期公司的OpenStack上频繁出现虚拟机创建失败的情况,查看日志定位到问题出在neutron-server向keystone认证token失败。

故障原因

Keystone所使用的Memcahed token后端配置的可用内存大小为64MB,新集群加入后,token量逐渐增加,需要保存的数据量大于这个大小,导致memcached频繁清理未过期的以腾出空间存储新创建的token,继而出现token丢的情况。

处理方法

给memcached分配更多的可用内存空间,目前分配4GB。

排查过程

在出现虚拟机创建失败情况时,查看日志,发现都是在nova-compute访问neutron-server去创建port时,neutron-server向keystone验证token报错:

查看代码梳理一遍认证流程:

1. nova-compute会保存一个全局的token,用这个token去访问neutron-server。每次访问前,检查token是否快要到期,判断标准是120秒,在nova代码里硬编码,也就是每次请求发现token剩余有效时间小于120秒,就重新申请一个token。

2. neutron-server从请求头中提取出token,访问keystone验证token是否有效。

3. keystone配置的token后端是memcache,keystone去memcached检查token时,发现找不到token,返回报错。

由于keystone保存在memcached的token是经过dogpile封装的,不能直接访问,所以无法查看memcached判断token状态。 于是在nova-compute打印出token的详细信息,得到如下结果:

发现token还没到过期时间就找不到了,严重的时候甚至新创建的token下一秒就找不到了。判断是memcached出了问题,将keystone的token后端设置为sql后,这个问题果然不再出现。于是查看memcached的状态,其中两个关键参数:

STAT limit_maxbytes
STAT evictions

表明memcached只有64MB可用内存,出现了54635次因为内存不足进行的对象清理。基本可以确定是memcached内存不足的问题。推断在只有两个region时,缓存的token没有达到memcache内存上限,在第三个region加入后,新增的token量导致memcached内存不足,越来越频繁地出现token被清理的情况。

将memcached可用内存配置为4GB后重启,目前没有再出现这个问题。

Memcached配置失误引发的Keystone token丢失的问题的更多相关文章

  1. MemCached配置与缓存知识概述

    先看看百度百科里面对缓存的介绍: 缓存(Cache memory)是硬盘控制器上的一块内存芯片,具有极快的存取速度,它是硬盘内部存储和外界接口之间的缓冲器.由于硬盘的内部数据传输速度和外界介面传输速度 ...

  2. 探针配置失误,线上容器应用异常死锁后,kubernetes集群未及时响应自愈重启容器?

    探针配置失误,线上容器应用异常死锁后,kubernetes集群未及时响应自愈重启容器? 探针配置失误,线上容器应用异常死锁后,kubernetes集群未及时响应自愈重启容器? 线上多个服务应用陷入了死 ...

  3. Memcached 配置 和项目应用

    Memcached 配置 http://blog.csdn.net/sup_heaven/article/details/32337711 memcached真实项目中的应用 http://blog. ...

  4. Jenkins权限配置失误后导致登录失败的解决办法

    为了便于管理,Jenkins一般需要设置用户,而且这些用户是需要配置相应的权限的,如果一不小心配置的时候出了问题,那么,你就斯巴达了. 这里,用我的切身经历,为大家说一下Jenkins因为权限配置失误 ...

  5. Druid连接池参数maxWait配置错误引发的问题

    Druid连接池参数maxWait配置错误引发的问题 1. 背景 数据库服务器(服务部署在客户内网环境)的运行一段时间后,网卡出现了问题,导致所有服务都连接不上数据库,客户把网络恢复之后,反馈有个服务 ...

  6. Rhel6-tomcat+nginx+memcached配置文档

    理论基础: User - > web ->nginx  ->tomcat1 ->*.jsp 80          8080 ↓      -> tomcat2 html ...

  7. OpenStack-Ocata版+CentOS7.6 云平台环境搭建 — 3.安装配置OpenStack认证服务(keystone)

    节点配置信息说明: 控制节点:controller: IP:192.168.164.128 hostname&hosts:likeadmin 计算加点:Nova: IP:192.168.164 ...

  8. 图解集合5:不正确地使用HashMap引发死循环及元素丢失

    问题引出 前一篇文章讲解了HashMap的实现原理,讲到了HashMap不是线程安全的.那么HashMap在多线程环境下又会有什么问题呢? 几个月前,公司项目的一个模块在线上运行的时候出现了死循环,死 ...

  9. (转)实战Memcached缓存系统(3)Memcached配置参数初解

    一.基本参数 在我们第一次安装Memcached时,一般都是用过这个命令: memcached -m 512 -u root -d -l 127.0.0.1 -p 11211 我们先来解释这几个参数的 ...

随机推荐

  1. TDH-常见运维指令

    1.查看cpu: cat /proc/cpuinfo | grep processor2.查看磁盘:df -h (查看磁盘使用率) df -i (查看iNode使用) fdisk -l (查看磁盘整体 ...

  2. Java基础:(三)运算

    一.参数传递 Java的参数是以值传递的形式传入方法中,而不是引用传递. 二.隐式类型转换 Java不能隐式执行向下转型,因为这会使精度降低:但是使用 += 运算符可以执行隐式类型转换. float ...

  3. sql常用操作(一)

    sql(structured query language,结构化查询语言)语言:和数据库交互的语言,进行数据库管理的语言. 1.1 sql语句的作用:说白了就是增删改查 管理数据库 管理表 管理数据 ...

  4. xcode在代码中查找中文

    总是忘记xcode中查找中文,这次记下来,以后就不会忘记了,哈哈 请看下图: 切换到查找,点击find后面的text,选择Regular Expression,然后输入 1. 查找非ascii的字符 ...

  5. 【extjs6学习笔记】1.8 初始: ExtJS命名约定

    Convention for Description Example Class 类名应该在CamelCase中 MyCustomClass 类名应包含字母数字字符. 如果属于技术术语,则允许使用数字 ...

  6. webservice、soap、wsdl

    搜集了一些关于webservice.soap.wsdl的基本知识,解决工作中遇到的疑问 一 .什么是webservice(用你的话描述webservice)?在什么时候用webservice(webs ...

  7. userBean-作用范围application

    package com.java1234.model; public class Student { private String name;private int age; public Strin ...

  8. LeetCode Happy Number 开心数字

    题意: 给出一个整数n,判断其是否为幸运数. 规则是,将n按十进制逐位拆出来后,每个位各自进行取平方,再将这些平方数求和作为新的数字n.若最后n=1,就是幸运数. 思路: 计算例子:n=47,接着n= ...

  9. mybatis(一):思维导图

  10. NHibernate使用之详细图解

    本文档适合初级开发者或者是第一次接触NHibernate框架的朋友,其中NHibernate不是最新的版本,但是一个比较经典的版本 NHibernate 2.1.2,其中用红线标注的部分一定要仔细看, ...