How to use the ZooKeeper driver for ServiceGroup in OpenStack Nova
ServiceGroup APIs
Nova会从ServiceGroup API 中查询节点的存活信息。
ServiceGroup API 工作流程是:
当一个compute worker (running the nova-compute daemon) 启动,它会调用join API来加入到compute group,
这样其他需要这些信息的组件如scheduler就可以查询到这些信息 (by call get_all or get_one), 或者某一node的service是否存活通过service_is_up ServiceGroup API call.
在底层,ServiceGroup client driver 会自动的更新compute worker status。也可以call leave来从ServiceGroup中移除某一个node。
ServiceGroup Drivers
目前实现的有3个:database and ZooKeeper, memcached
/opt/stack/nova/nova/servicegroup/drivers$ ls base.py base.pyc db.py db.pyc __init__.py __init__.pyc mc.py zk.py
Database ServiceGroup driver
DB是最早支持的也是默认的driver,compute worker会周期的发送update到DB,周期为service_down_time。
def join(self, member, group, service=None):
service.tg.add_timer(report_interval, self._report_state,
api.INITIAL_REPORTING_DELAY, service)
DB driver有2个缺陷:
- 随着部署规模的增加,DB的压力增大。
- 信息过时,
service_down_time之前的update并不一定现在是有效的。
ZooKeeper ServiceGroup driver
How it works
和DB相反,ZooKeeper是一个分布式系统。它的负载被划分在多个server上。
在compute node建立一个ZooKeeper sesion,node上会在group directory下生成一个临时的znode。而这个临时的znode和session的生命周期是同步的,
Driver只需要”ls“group directory就可以得到group membership。
def join(self, member, group, service=None):
"""Add a new member to a service group. :param member: the joined member ID/name
:param group: the group ID/name, of the joined member
:param service: a `nova.service.Service` object
"""
process_id = str(os.getpid())
LOG.debug('ZooKeeperDriver: join new member %(id)s(%(pid)s) to the '
'%(gr)s group, service=%(sr)s',
{'id': member, 'pid': process_id,
'gr': group, 'sr': service})
member = self._memberships.get((group, member), None)
if member is None:
# the first time to join. Generate a new object
path = "%s/%s/%s" % (CONF.zookeeper.sg_prefix, group, member)
try:
zk_member = membership.Membership(self._session, path,
process_id)
except RuntimeError:
LOG.exception(_LE("Unable to join. It is possible that either"
" another node exists with the same name, or"
" this node just restarted. We will try "
"again in a short while to make sure."))
eventlet.sleep(CONF.zookeeper.sg_retry_interval)
zk_member = membership.Membership(self._session, path, member)
self._memberships[(group, member)] = zk_member
Installation and configuration
To use ZooKeeper, you'll need two client-side Python libraries on every nova node.
首先安装ZooKeeper servers
在安装ZooKeeper clients in Ubuntu:
sudo apt-get install python-zookeeper python-pip
sudo pip install evzookeeper
python-zookeeper is the official ZooKeeper Python binding. evzookeeper is the library to make the official binding work with the eventlet threading model.
After installation, make sure you have the following configuration snippet at the end of /etc/nova/nova.conf on every node:
servicegroup_driver="zk" [zookeeper]
address="192.168.0.1:2181,192.168.0.2:2181,192.168.0.3:2181"
之后,你就可以nova-manage service list 来查询compute node的存活了。
https://github.com/maoy/writeups/blob/master/ZooKeeperInNova.md
memcached driver与DB类似,之不过后端DB是memcached。
另外cinder也在试图添加类似功能:
https://blueprints.launchpad.net/cinder/+spec/add-servicegroup-using-tooz
How to use the ZooKeeper driver for ServiceGroup in OpenStack Nova的更多相关文章
- IPMITool driver
官网链接: https://docs.openstack.org/ironic/latest/admin/drivers/ipmitool.html IPMITool driver 概述IPMI(In ...
- OpenStack集成Docker
声明:绝对原创,欢迎转载,但请标明出处,谢谢! 最近在做openstack与Docker的集成工作,走了不少弯路,遇到不少问题,不过最终搭建成功了.现在将过程分享出来,以供参考. 一.环境介绍 1.软 ...
- Openstack搭建(流水账)
Openstack管理三大资源:1.网络资源2.计算资源3.存储资源 Keystone 做服务注册 Glance 提供镜像服务 Nova 提供计算服务 Nova scheduler决策虚拟主机创建在哪 ...
- OpenStack 2018 年终盘点
目录 文章目录 目录 前言 OpenStack 一年来的成长 Nova Cinder Neutron Ironic Cyborg Octavia Kolla Magnum Zun Kuryr 从 Op ...
- Openstack Nova 源码分析 — Create instances (nova-conductor阶段)
目录 目录 前言 Instance Flavor Instance Status Virt Driver Resource Tracker nova-conductor Create Instance ...
- RedHat 和 Mirantis OpenStack 产品的版本和功能汇总和对比(持续更新)
Mirantis 和 Red Hat 作为 OpenStack 商业化产品领域的两大领军企业,在行业内有重要的地位.因此,研究其产品版本发布周期和所支持的功能,对制定 OpenStack 产品的版本和 ...
- OpenStack 通用设计思路 - 每天5分钟玩转 OpenStack(25)
API 前端服务 每个 OpenStack 组件可能包含若干子服务,其中必定有一个 API 服务负责接收客户请求. 以 Nova 为例,nova-api 作为 Nova 组件对外的唯一窗口,向客户暴露 ...
- Neutron 理解 (7): Neutron 是如何实现负载均衡器虚拟化的 [LBaaS V1 in Juno]
学习 Neutron 系列文章: (1)Neutron 所实现的虚拟化网络 (2)Neutron OpenvSwitch + VLAN 虚拟网络 (3)Neutron OpenvSwitch + GR ...
- OpenStack 企业私有云的若干需求(1):Nova 虚机支持 GPU
本系列会介绍OpenStack 企业私有云的几个需求: 自动扩展(Auto-scaling)支持 多租户和租户隔离 (multi-tenancy and tenancy isolation) 混合云( ...
随机推荐
- 如何用 JavaScript 控制 Arduino?
Arduino 运行 C 语言,而主控端运行 JavaScript,一次要编写和维护两种程序.既然浏览器和服务器都用 JavaScript,若 Arduino 也能用 JavaScript 控制,那岂 ...
- 第七课 nodejs请求响应
1 server.js 接收请求接收请求参数 和接收完成需要对request增加两个监听事件 var http = require('http');var url = require('url');f ...
- Vue.js之组件传值
Vue.js之组件传值 属性传值可以从父组件到子组件,也可以从子组件到父组件. 这里讲一下从父组件到子组件的传值 还以上次的demo为例,demo里有APP.vue是父组件,Header.vue,Us ...
- REST --- Representational State Transfer --- 表现层状态转化
引用:阮一峰的网络日志 如果一个架构符合REST原则,就称它为RESTful架构. 要理解RESTful架构,最好的方法就是去理解Representational State Transfer这个词组 ...
- Android基础入门教程
http://www.kancloud.cn/wizardforcel/w3school-android/100491
- SMW0 上传问题?
*SMW0 和 OAOR 的区别在哪3个方面? SMW0 上传 出现: 没有指派至MIME 类型
- 使用ajax进行汽车详情表的查询
主界面代码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w ...
- css position absolute 浮动特性
absolute的元素不会占据未浮动的元素的空间<html> <head> <style type="text/css"> .flipbox{ ...
- SVN 过滤文件
SVN新手最容易犯的一个错误: 就是把所有文件一股脑地全提交上去了. 这样很不好,因为这当中包含很多编译器自动生成的文件,还有中间文件. 这些文件可能每次编译都会不同,所以编译一次就冲突一次. 很显然 ...
- 01_Hadoop学习笔记内容说明
Hadoop学习笔记内容说明_00 1. 观看云帆大数据梦琪老师的<企业级 Hadoop 1.x 应用开发基础课程>2014年4月左右版本. 2. 博客是在梦琪老师的随堂笔记上改动的, ...