OpenStack实践基础知识(二)
问题导读:1.OpenStack的使用成本和团队学习成本如何?
2.学习 OpenStack需要哪些储备知识?
3.有没有线上使用的成功案例?
4.OpenStack安装部署和设置对于初级用户来说有什么建议?
5.将OpenStack应用到企业生产环境,需要考虑哪些?需要如何准备?
6.虚拟机的HA(至少主流版本没有)有好的建议或已有方案?
static/image/hrline/4.gif
OpenStack的使用成本和团队学习成本如何
学习成本还是比较高的,因为使用OpenStack的企业绝不是纯粹把它跑起来而已,一般都想上生产环境,这里问题就来了:网络(扁平网络、vlan、GRE/vxlan、交换机、路由器、广播/组播……), 存储(LVM、共享存储、对象存储、块存储……),监控、自动化部署、安全、用户管理、迁移;大型环境还有各种高可用、多Region、多可用域、性能、可靠性,都需要考虑。
小规模环境,比如50个节点以下,搭建单控制节点、多个计算节点、使用LVM,直接从社区拿到的OpenStack版本还是比较稳定的;一般可能会遇到不少网络问题,这需要了解Neutron、OpenvSwitch、Vlan等;DHCP可能有时候分配不到IP,Nova-compute可能有时候创建不了虚拟机。但所有一切,除了网上有大量资料可以参考,另外只需要重启下服务,一般都足以解决问题。所以这类使用,大可放心。
从技术角度,首先是需要网络方面的专才,对传统和软件定义的网络、网桥、交换机、路由器、Vlan、DHCP等都比较熟悉才行。
其次是存储、操作系统等,要有了解数据中心管理、配置的人才行。
Python写的代码很容易上手,只要具备编程经验的人手,基本就是个体力活。
但最主要的是,需要有了解企业级场景和需求的人。OpenStack太复杂,功能太多,学不胜学,因此一定要剪裁,做减法才行,要选取适合自己企业需求的功能和组件重点突破。
学习 OpenStack需要哪些储备知识
学习和部署OpenStack需要大量的系统方面的知识。在《OpenStack企业云平台架构与实践》一书里第2.9节列举了一些知识点。
熟悉需要使用的Linux,包括安装、系统管理、文件系统、网络等。
SQL数据库的安装、配置、管理和调优。
虚拟化的知识和一些使用经验。
网络和多个Linux主机之间的网络:
- DHCP;
- Linux Bridge;
- VLAN;
- Iptables。
网络:
- 交换机;
- 路由器;
- 防火墙。
存储,包括:
- LVM;
- 存储设别;
- 分布式存储;
- 块存储;
- 对象存储。
物理机/BIOS。
Python编程经验。
脚本编程经验。
一套最基本的可运行的OpenStack环境,至少要包括Keystone、Nova、Cinder、Glance、Neutron、MySQL、RabbitMQ等,都分布式地“串”起来,部署到合适的物理环境(物理机,包括CPU、内存、磁盘、网口、操作系统、磁盘分区),网络(千兆、万兆、Vlan、IP地址池、网关),存储(LVM、Gluster、Ceph、Swift……), IP地址池,网关……具体配置参数……
其实对于OpenStack具体某个项目的某个服务,因为是Python代码,要读和修改代码都不难,难的是把整个都串起来,而且整个平台运行起来是期望的那样,这个是最难的。因为具体哪一块都可能出问题,而且很多问题都不直观,甚至很难定位。如果某人拿没有规范搭建的环境问笔者为什么不工作,笔者也没法回答,可能的情况太多了。
有没有线上使用的成功案例
关于OpenStack平台,这方面非常多了。中小型企业环境,比如节点数少于100,少于50的非常多,各种版本的都有。笔者见过最早的有E版本的,现在搭建这种规模环境非常容易了。假使遇到问题,只要用错误信息一搜,有很多帖子来交流如何解决;大规模环境,包括金山、京东、携程、苏宁、巨人网络,几个运营商都有,国外就更多了。
有些企业是纯粹的OpenStack,而有些企业只用到其中一些项目,如美团用到了Keystone、Glance、Swift。大家这方面的怀疑完全可以打消。
感兴趣的人还可以关注如下网址:http://www.OpenStack.org/user-stories/。
现在OpenStack从业者关注的问题,已经到IaaS之上了,以前交付给用户的是光秃秃的虚拟机,拿到虚拟机,用户还需要装软件、配置系统;现在搭建IaaS,OpenStack提供者还需要解决应用的问题,这方面可以使用OpenStack Heat(编排,支持服务的自扩展)、Trove(数据库即服务)、Sahara(大数据/分析即服务)等来支持,基本功能本身都很稳定,只是一些特殊功能还缺失。
关于OpenStack安装部署和设置给初级用户的建议
首先要考虑安装部署拓扑,但这个比较基本。中小企业里考虑单控制节点,或者主从的控制节点即可。计算节点则可以考虑计算、存储一体的,比较稳定,比较简单。
网络情况比较复杂,而且是出问题最多的地方:首先是选型,考虑是Flat网络是否就够了?如果够了,用Nova-network足矣。一般生产环境使用的是Vlan,这个可以基于Nova-manager, 但目前普遍的是用Neutron;另外研究可以使用Neutron,并研究下GRE/vxlan。如果确定什么网络适合,剩下的是具体的配置/服务把它们跑起来,当然事先要准备好IP地址池、网关、Vlan段等信息在手边。
网络问题的调试则设计到许多传统网络里固有的问题。另外,如命名空间、软件交换机,总体上引入不少新生事物,但也不是翻天覆的变化。
配置:初始化Keystone,包括service、admin tenant、endpoint……这些可以用RDO/DevStack装个环境看下,基本都一样;数据库,有类似于db-sync之类的脚本,可以把各个项目需要的数据库创建出来。配置文件:如果没有特殊要求,只需要把里面的MySQL、RabbitMQ配置需要的IP填写对即可。
如果是初级用户,建议先用DevStack搭建单机环境,总共只有4步;搭建完毕,查看MySQL,各个配置文件(/etc/xxx/xxx.conf);其次可以用RDO或者Mirantis,Mirantis Fuel是唯一有界面的OpenStack部署工具,刚发布6.0,但目前还有一些问题,建议用它们的5.0/5.1版本。
下面的图可以说明,搭建一个相对完备的云平台需要做的方面(当然还包括许多其他的)。 总体上既要战略上藐视OpenStack,也要在战术上重视OpenStack。并没有想象得那么难,但需要关注的技术、问题方面会很多。也特别需要一些好的架构师才能把事情做成。
搭建一个相对完备的云平台需要做的工作将OpenStack应用到企业生产环境,需要考虑哪些?需要如何准备
这个问题《OpenStack企业云平台架构与实践》第8章讲得比较多,需要考虑的方面比较多。
[*]什么样的业务系统需要迁移/新建到OpenStack平台?特别需要关注:可靠性需求、性能需求、调度需求、安全需求、数量需求,这些问题关系到底层的硬件/网络选型和OpenStack拓扑规划选型等。
[*]是否有其他企业系统需要集成?最经常的如认证、监控、安全网关、负载均衡器等。
[*]现在有什么样的硬件可用,是否能满足计算/存储等需求,网络带宽足够;是否还有其他如VMware、Power,或者纯KVM一类的平台(当然这些需要考虑在内,但目前不产生多大影响)。
[*]时间、技术人员成熟度等。
接下来就要准备:
[*]选择什么拓扑:这里有单控制节点(研发、测试,小型生产环境)、主从(生产,但有一定支持,非苛刻生产环境)、Active-Active,且支持扩展的(大型、苛刻、自服务生产环境);计算节点,存储节点,或者计算存储一体的;另外还有把控制服务全部打散的,支持Cell的。这些可以量力而行。如果实在不好决断,选择大部分人使用的中庸的方案即可。
[*]自动化运维工具,如Cobbler、Puppet、Chef等都是很流行的且与OpenStack结合很好的工具,另外如Ironic(但笔者周围人用得很少,工具做得太全太大,且问题不知多少,掌握起来并不太容易,且等以后吧)。
[*]确定什么样的网络:扁平网络、VLAN网络、GRE/vxlan等。其中扁平和Vlan非常成熟,对现有网络改动不大,非常容易部署。这里稍微考虑是否网卡bond。GRE/vxlan适合大型,IDC之类的,但现有OpenStack Neutron是否足以满足需求,这个需要三思而行。
[*]确定存储:基本的有LVM,这也是绝大部分使用场景;另外如果要支持热迁移,(host)evacuate,需要共享存储,选择很多如NFS、GlusterFS、Ceph、GPFS,各种SAN存储。但NFS支持5~8节点以上,需要考虑性能;Ceph非常热,但有一定的技术门槛。GPFS是商业产品,而传统企业里有许多SAN存储,一种是通过Cinder接进来,另外可以考虑划分多个LUN,接到存储服务器。通过Cinder接入则需要各种特定存储的Driver,这个工作量相对比较大。
[*]选择合适的OpenStack版本,目前Havanna、Icehouse都有大量的部署,而Juno已经出来3个月,里面的Bug相信已经修改差不多了,可以考虑使用。部署方式可以考虑手工部署(但需要相当的OpenStack实际调试经验,另外如果支持Active-Active,则工作量很大);DevStack(一般部署单节点做开发测试用,几乎没人用于部署生产),RDO(研发测试生产都有,但需要一定经验,了解Answer File、Packstack,一定的Puppet), Mirantis Fuel(这个足以部署生产环境,而且功能非常多。但注意的是,里面也是有Bug的,用于生产环境还是要经常关注该版本修补的Bug,及时打补丁;另外网络部分由于支持的网络类型太多,每个网卡都建了虚拟网桥,需要两个VIP,稍微的遗憾就是不是量身定做的)。
[*]部署时网络分离的原则。
[*]安全加固,密码。
[*]镜像制作,主机类型,这些都很简单。
[*]权限划分(通常都使用SQL为认证的后端,如果需要与LDAP集成或其他,需要修改policy.json,可能还需要改代码;但现在已经支持domain、group等概念)。
[*]监控:笔者的建议是环境开始搭建就要准备监控,常用的有Nagios、Zabbix等,其他的基于snmp的也满足一定的需求。注意Ceilometer主要是云资源的使用计量,并不是我们需要的IaaS资源/服务状态的监控。
[*]OpenStack数据库的备份。
总体上,如果一个大型系统,要做的事情还是比较多。
操作系统的选择,可能大家对操作系统是非常信任的,但其实不然,操作系统内核有Bug,会在某个条件触发下造成整个物理机宕机/crash/重启,如果是上生产系统,可能需要谨慎了。OpenStack里用得比较多的操作系统是Ubuntu和CentOS。当然RedHat更好,但需要资金。操作系统还需要关注版本。H和I版本用的很多的是CentOS 6.5。如果想用CentOS 7.0,还是先到CentOS 社区看看目前开放的Bug, 一些是和虚拟网络紧密相关的,当然解决速度很快,但需不需要一段时间让Bug 沉淀下呢?还是想尝鲜?
系统规划,比如很多系统重启不来,原因是根分区被日志文件塞满了。另外如果系统关机,突然重启,系统都会对KVM 虚拟机做保护,这个也占用磁盘空间;生产环境免不了还是会发生意外,是否需要一些预装的调试工具,还是当问题发生再找呢?这些都是要考虑的。
虚拟机的HA(至少主流版本没有)有好的建议或已有方案
针对控制节点与服务的HA(高可用)方案很具体而可实施。最佳可行的包括主备方案和Active-Active方案。虽然复杂,但是切实可行,也进入生产环境了。
针对虚拟机的HA方案,如果应用本身集群支持得挺好,而且调度策略也支持反亲和策略,那可能底层并不需要提供什么HA。需要时候新增加一些虚拟机就好了。有个很有趣的比喻是Pets VS. Cattle,http://it20.info/2012/12/vcloud-OpenStack-pets-and-cattle/。如果应用本身已经达到cattle的程度,那就非常轻松了。
有几种我尝试过的方案。
[*]可以基于Pacemaker+corosync,把虚拟机当作Pacemaker管理的一种资源。
[*]利用ZooKeeper。
[*]自己写个简单的检测服务/主机是否挂了(注意有时候检测失败可能是网络不通,但虚拟机和虚拟机网络还好好的),这些基于共享存储,结合(host)evacuate很好支持;这种方式还可以结合IPMI或共享存储,提供更高的故障检测。
上一篇:OpenStack实践基础知识(一)
谢谢,有了很清晰的概念啦
页:
[1]