keystonemiddleware支持SASL--系列3

这一篇写如何使用demo代码对keystonemiddleware进行测试。

  • 存储函数执行结果 keystone heat nova等项目把一些固定的属性和查询请求的结果放到cache里面,加速访问。
  • 存储keystone token token创建完成之后,不需要修改,会有大量的读操作,适合放到cache中
  • 存储keystonemiddleware token 为neutron,cinder,nova等各个项目缓存从keystone获得的token。
  • 存储horizon用户会话数据 主要是django支持使用

存储函数执行结果

优势在于,很多查询函数的结果是固定的,但是又比较常用,查询一次之后,按照key-value存到cache中,再次查询时不需要访问数据库,直接从内存缓存中根据key将结果取出,可以提高很多速度。或者还有一些查询请求,查询的参数千变万化,但是结果只有固定的几类,这种更适合使用cache加速。

  • sql 将token存放在数据库中,使用这种方法需要定期清理过期token,防止token表太大影响性能。
  • memcache 将token存放到memcache中,token本身创建之后不会被修改,只会被读,所以很适合放到cache中,加速访问,放到cache中也不需要写脚本定期清理数据库中的过期token。
  • memcache_pool 在memcache的基础上,实现了memcache的连接池,可以在线程之间复用连接。

使用memcache_pool的优势在于什么地方呢?

memcache driver的缺点在于,memcache本身是分布式的设计,但是并不是高可用的,如果controller-1上的的cache服务被重启,这个节点上的所有token都会丢失掉,会带来一些错误。

比这更糟糕的是,如果controller1网络不可达或者宕机,那么我们会观察到几乎每个openstack api请求都会有3s以上的卡顿。这是因为openstack默认使用python-memcached访问memcache,它提供的操作keystone的client继承自Thread.local类,和构建它的线程绑定。openstack服务启动后,会启动一定数量的子进程,每个http request到达,会有一个子进程接收,孵化一个线程去处理这个请求。如果用到memcache,线程会调用python-memcached
构建一个client类,通过这个client的实例对memcache进行操作。如果访问到网络不可达的memcache节点,卡住,操作超时,将这个节点标识为30秒内不可用,在这个线程内,不会再因此而卡住,但是这个http请求结束之后,下一个http请求过来,重新孵化的线程会reinit这个client,新的client丢失了旧的client的状态,还是可能会访问到卡住的memcache节点上。

社区之所以要做memcache_pool,就是为了解决这个问题,将client统一由pool管理起来,memcache节点的状态,也由pool管理起来,这样每个子进程里只会卡第一次,所以强烈推荐使用memcache_pool驱动而不是memcache。社区将memcache_pool的代码从keystone复制到oslo_cache项目中,希望所有使用memcache的项目都通过它的memcachepool去访问,避免这个问题。其中,nova在M版本支持,heat在L版本支持。

具体的各个服务如何配置使用memcache_pool driver这里不再赘述。

 

keystonemiddleware/opts.py文件是列出所有的配置项

[filter:authtoken]

paste.filter_factory = keystonemiddleware.auth_token:filter_factory

 

 

由于已经改好了代码,没法像oslo.cache那样直接写一个demo进行测试,只好把这些代码直接放到openstack环境中进行测试了!

但是直接放进去之后,出现nova list无法执行的错误,认证这边出现了问题

结果只能回退快照,对比环境中的keystonemiddleware代码和git下载下来的代码,发现在auth_token/_opts.py文件中有一些差异

改完差异之后,直接把改动的代码合进去之后,上面的错误就没有了!

 

配置文件修改:

/etc/nova/nova.conf:71:[keystone_authtoken]
/etc/nova/nova-cpu.conf:69:[keystone_authtoken]
/etc/cinder/cinder.conf:2:[keystone_authtoken]
/etc/placement/placement.conf:15:[keystone_authtoken]
/etc/glance/glance-registry.conf:20:[keystone_authtoken]
/etc/glance/glance-api.conf:24:[keystone_authtoken]
/etc/neutron/neutron.conf:873:[keystone_authtoken]

需要在上面的配置文件中,添加如下的配置信息才行:

memcache_sasl_enable = True
memcache_usrname = ***
memcache_password = ***

memcache_use_advanced_pool = True

可根据实际需要来选择是否开启memcache_use_advanced_pool = True选项,如果不开启,直接用bmemcached.Client连接,开启的话,则用用户池调用的是_bmemcached_pool文件

在调试的时候,在这个地方将参数打出来,看看是否有用户名和密码传进去,也可以依次判断用户名和密码是否正确,以及哪些服务的配置文件还没有配置用户名和密码

可以看出来,在服务没有配置用户名和密码的时候,访问memcache会出现Invalid magic的错误

同时这个日志是在n-api.service中打印出来的,所以可以看一下这个服务的配置文件是否正确配置了!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值