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) 混合云( ...
随机推荐
- 《挑战程序设计竞赛》1.6 轻松热身 POJ1852
Ants Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 12782 Accepted: 5596 Description ...
- 64位matlab mex64位编译器解决方案
安装libsvm的时候用到了mex -setup,有的会报 Could not find the 64-bit compiler. This may indicate that the "X ...
- margin 依附与可见的内容,不能为margin而写margin
margin 依附于可见的内容,不能为margin而写margin <!DOCTYPE html><html><head><style> p{marg ...
- 整理前端css/js/jq常见问题及解决方法(2)
移动端 手机 1.点击图片或按钮,选中状态影响到其他范围解决:html{-webkit-user-select:none}<meta name="msapplication-tap-h ...
- Linux运维-zabbix_agent最新版的yum安装
agentd端可以直接使用yum来进行安装 rpm -ivh http://repo.zabbix.com/zabbix/2.4/rhel/6/x86_64/zabbix-release-2.4-1. ...
- openresty安装文档
一.OpenResty简介 OpenResty是一个基于 Nginx与 Lua的高性能 Web平台,其内部集成了大量精良的 Lua 库.第三方模块以及大多数的依赖项.用于方便地搭建能够处理超高并 ...
- Python API:openstack
OpenStack 是一个越来越流行的.用于部署基础架构即服务 (IaaS) 云的开源解决方案.OpenStack 附带了一个仪表板 Web 应用程序,非常适合执行手动任务,比如启动单个虚拟机 (VM ...
- iframe 跨域请求
iframe.contentWindow 兼容各个浏览器,可取得子窗口的 window 对象. iframe.contentDocument Firefox 支持,> ie8 的ie支持.可取得 ...
- Ag-grid控件使用pine:left后,配合iview下拉框,会出现闪烁
Ag-grid控件使用pinned:left后,配合iview下拉框,会出现闪烁 引起原因:下拉图标的反转动画 目前解决方案: 添加一个全局样式: 禁用动画,其他地方也是如此, 影响控件有:gz-tr ...
- springboot-数据库
Spring-data-jpa jpa定义了一系列持久化的标准,比如hibernate就实现了这一标准. Springboot 的jpa就是hibernate的整合. 在pom文件中增加配置: < ...