网上大侠们分享的资料都非常好,就看你会不会用,如何使用,再次对本文所引用资料的作者表示感谢,如有侵权,请告知。
大致过程
参考资料
http://www.cnblogs.com/popsuper1982/p/3800426.html
http://www.cnblogs.com/popsuper1982/p/3927390.html
http://www.cnblogs.com/popsuper1982/p/3930350.html
http://www.cnblogs.com/popsuper1982/p/3931783.html
http://www.cnblogs.com/popsuper1982/p/3932330.html
http://www.cnblogs.com/popsuper1982/p/3932821.html
Request Flow for Provisioning Instance in Openstack(http://ilearnstack.com/2013/04/26/request-flow-for-provisioning-instance-in-openstack/),如果被墙挡住了,我转到了[转]Request Flow for Provisioning Instance in Openstack
Understanding OpenStack Authentication: Keystone PKI (https://www.mirantis.com/blog/understanding-openstack-authentication-keystone-pki/)
[转]Understanding OpenStack Authentication: Keystone PKI
数字证书原理(http://blog.sina.com.cn/s/blog_44ee37cd01016r1h.html)
这些概念都是了解SSL和https的必须的,而且我们在部署Openstack的时候,所有的服务最好也部署成HTTPS的。
下面这两篇文章会帮你更好的了解SSL
http://httpd.apache.org/docs/2.2/ssl/ssl_intro.html
http://www.codeproject.com/Articles/326574/An-Introduction-to-Mutual-SSL-Authentication
对于Openssl,推荐下面的链接
http://pages.cs.wisc.edu/~zmiller/ca-howto/如果被墙屏蔽了可以访问How To Setup a CA
对于certtool,推荐libvirt的官方文档,讲的非常的形象具体
http://wiki.libvirt.org/page/TLSSetup
keystone除了authentication的功能,还有authorization。
对于访问控制Access Control,发现有多种http://en.wikipedia.org/wiki/Access_control,而Openstack采用的是Role Based Access Control RBAC。
其中在V2中采用的每个Service下面的policy.json文件,访问控制是每个Service自己决策的。后来在V3中,除了policy.json文件,还可以将Policy在数据库中创建,实现了keystone的统一管理。
推荐下面的文章
Customizing OpenStack RBAC policies
[转] Customizing OpenStack RBAC policies
Mandatory Access Control (MAC)在Openstack中也有应用,就是对Libvirt对Host文件的访问控制AppArmor。当你使用virsh命令进行操作的时候,如果发现自己是root,但是还没有权限,八成就是它的原因了。
推荐http://ubuntuforums.org/showthread.php?t=1008906
Keystone V3中的概念就比较多了,也相对复杂,文档较少,比较推荐下面的文章。
http://www.florentflament.com/blog/setting-keystone-v3-domains.html
[转]Setting Keystone v3 domains
如果有人问我,看懂各个Service代码的钥匙是什么,我必须说,是paste文件,看懂了这个文件,就很容易找到对应的入口代码。对于Paste,我推荐
http://pythonpaste.org/deploy/
http://indico.cern.ch/event/44/session/9/#all其中Developing Applications with the Web Server Gateway Interface
nova-api接收请求,也不是随便怎么来都接收的,而是需要设定rate limits,默认的实现是在ratelimit的middleware里面实现的。然而有时候,我们希望实现distributed rate-limiting,从而Turnstile是一个不错的选择。
https://github.com/klmitch/turnstile
http://pypi.python.org/pypi/turnstile
openstack nova 基础知识——Quota(配额管理)
http://www.sebastien-han.fr/blog/2012/09/19/openstack-play-with-quota/
有关nova的database schema参考下面的文章
http://www.prestonlee.com/2012/05/03/openstack-nova-essex-mysql-database-schema-diagram-and-sql/
MySQL的HA有下面几种方式:
http://dev.mysql.com/doc/mysql-ha-scalability/en/index.html
要想系统的学习Mysql replication,推荐下面的这本书
《MySQL High Availability Tools for Building Robust Data Centers》
参考下面的两篇文章
http://www.sebastien-han.fr/blog/2012/04/08/mysql-galera-cluster-with-haproxy/
http://www.sebastien-han.fr/blog/2012/04/01/mysql-multi-master-replication-with-galera/
要弄懂Pacemaker,推荐读《SUSE high availability guide》
https://www.suse.com/documentation/sle_ha/singlehtml/book_sleha/book_sleha.html
本人做了一些笔记和实验,请参考
有关nova-conductor的文章
http://cloudystuffhappens.blogspot.com/2013/04/understanding-nova-conductor-in.html
在Openstack中,RPC的发送是通过RabbitMQ
RabbitMQ可以通过Pacemaker进行HA,当然也可以搭建自己的RabbitMQ Cluster
学习RabbitMQ当然首推《RabbitMQ in Action》
本人也做了一些笔记
RabbitMQ in Action (1): Understanding messaging
RabbitMQ in Action (2): Running and administering Rabbit
RabbitMQ in Action(5): Clustering and dealing with failure
还没完全读完,敬请谅解
当然Openstack中对于RabbitMQ的使用,一篇很好的文章是
本人也对RPC的调用过程进行了代码分析
request_spec中的第一个信息就是p_w_picpath的properties信息,尤其是当你想支持多种Hypervisor的时候,Xen的p_w_picpath, KVM的p_w_picpath, Hyper-V的p_w_picpath各不相同,如何保证p_w_picpath跑在正确的Hypervisor上?在p_w_picpath里面这种hypervisor_type property就很必要。
请阅读下面的文章http://www.cloudbase.it/filtering-glance-p_w_picpaths-for-hyper-v/
在Openstack文档中,这个例子很好的展示了host aggregates和Flavor extra_specs的配合使用
http://docs.openstack.org/trunk/config-reference/content/section_compute-scheduler.html
neutron创建network执行的那些命令http://www.cnblogs.com/popsuper1982/p/3849822.html
多个router和多个networkhttp://www.cnblogs.com/popsuper1982/p/3835466.html
在Openstack里面,对于KVM,应用到的Image格式主要是两种RAW和qcow2,
raw格式简单,容易转换为其他的格式。需要文件系统的支持才能支持sparse file,性能相对较高。
qcow2是动态的,相对于raw来说,有下列的好处:
即便文件系统不支持sparse file,文件大小也很小
Copy on write
Snapshot
压缩
加密
具体的格式和特点,参考下面的文章
QEMU KVM libvirt手册(4) – p_w_picpaths
创建一个p_w_picpath,有多种方法
一种方法是通过virt-install,讲hard disk设为一个p_w_picpath文件, 从CDROM启动一个虚拟机,按照正常的安装流程来,最后操作系统安装好,p_w_picpath再经过qemu-img进行处理,压缩,最终形成p_w_picpath。
参考文章
当然现在有了更先进的方法,就是libguestfs,它可以轻松基于已有版本的p_w_picpath创建一个你想要的p_w_picpath,就是virt-builder
参考文章
当然一个可以在Openstack里面使用的p_w_picpath,绝不是仅仅安装一个操作系统那么简单。
在OpenStack Virtual Machine Image Guide中详细写了一个Linux Image的各种需求
说完了创建p_w_picpath,还需要了解修改p_w_picpath,我们的文件注入,就是对p_w_picpath的修改。
有三种方式:通过mount一个loop device,通过qemu的network block device,或者最先进的,通过libguestfs
总结成了一篇文章
对于qemu-nbd,有文章
QEMU KVM Libvirt手册(6) – Network Block Device
对于libguestfs,我也写了一些笔记
libguestfs手册(2):guestfish command
对于文件注入,有文章
对于如何打snapshot,分多种,有文章
QEMU KVM Libvirt手册(5) – snapshots
[转] External(and Live) snapshots with libvirt
[转] Snapshotting with libvirt for qcow2 p_w_picpaths
QEMU KVM libvirt 手册(3) - Storage Media
QEMU KVM Libvirt手册(8): 半虚拟化设备virtio
machine参数是总线Architecture,通过qemu-system-x86_64 --machine ?查看,default就是参数中的值。
accel=kvm说明虚拟化使用的是kvm
cpu表示处理器的参数以及处理器的一些flags,可以使用命令qemu-system-x86_64 --cpu ?查看
smp是对称多处理器,
-smp 1,sockets=1,cores=1,threads=1
qemu仿真了一个具有1个vcpu,一个socket,一个core,一个threads的处理器。
socket, core, threads是什么概念呢
(1)socket就是主板上插cpu的槽的数目,也即管理员说的”路“
(2)core就是我们平时说的”核“,即双核,4核等
(3)thread就是每个core的硬件线程数,即超线程
在Openstack中,neutron的很多网络功能都是由openvswitch实现的,因而本人专门研究了一下openvswitch,参考下面的文章
[转]Comparing sFlow and NetFlow in a vSwitch
[转]Rapidly detecting large flows, sFlow vs. NetFlow/IPFIX
对于网络的管理,有很多好的工具可以使用
HTB Linux queuing discipline manual - user guide笔记
[转] Firewall and network filtering in libvirt
[转] XEN, KVM, Libvirt and IPTables
http://tldp.org/HOWTO/Traffic-Control-HOWTO/
http://rlworkman.net/howtos/iptables/iptables-tutorial.html