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) 混合云( ...
随机推荐
- N - Broken Keyboard (a.k.a. Beiju Text)(DFS,链表)
N - Broken Keyboard (a.k.a. Beiju Text) Time Limit:1000MS Memory Limit:0KB 64bit IO Format:% ...
- passback_params 支付回调的 原样返回字段 自定义字段的存放字段
开放平台文档中心 https://docs.open.alipay.com/204/105465/ passback_params String 否 512 公用回传参数,如果请求时传递了该参数,则返 ...
- 虚拟研讨会:如何设计好的RESTful API(转)
原文:虚拟研讨会:如何设计好的RESTful API? REST架构风格最初由Roy T. Fielding(HTTP/1.1协议专家组负责人)在其2000年的博士学位论文中提出.HTTP就是该架构风 ...
- 简述OSI七层协议模型、TCP/IP四层模型和五层协议之间的关系
一.OSI七层模型 OSI七层协议模型主要是:应用层(Application).表示层(Presentation).会话层(Session).传输层(Transport).网络层(Network).数 ...
- Python操作Redis(一)
redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sorted set ...
- Linux中的日志功能
配置文件 /etc/logrotate.conf daily 日志的轮替周期是每天weekly 日志的轮替周期是每周monthly 日志的轮替周期是每月rotate 数字 保留的日志文件的个数comp ...
- Android基础入门教程
http://www.kancloud.cn/wizardforcel/w3school-android/100491
- 2.5 使用ARDUINO做主控,手机发送短信控制开关LED
需要准备的硬件 MC20开发板 1个 https://item.taobao.com/item.htm?id=562661881042 GSM/GPRS天线 1根 https://item.taoba ...
- centos中搭建nginx环境
原文地址 安装PCRE 源码:ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/ cd /usr/local/src wget ftp://f ...
- Google Cloud Platfrom中运行基础的Apache Web服务
Links: https://cloud.google.com/compute/docs/tutorials/basic-webserver-apache 步骤: 1.安装Apache 2.重写Apa ...