从无到有,搭建一个简单版的JAVA PAAS云平台 (一)

2014-11-24 08:22:12 · 作者: · 浏览: 0

前言
PAAS:platform as a service,平台即服务,把软件研发的平台作为一种服务,提供给用户使用。当前PAAS平台服务商,诸如google app engine,sina app egine,cloud foundry等,都是程序员们的福音,可以避免从无到有搭建程序运行的平台,多了一个选择。
本着学习PAAS的态度,构建一个简易版PAAS平台,构建JAVA运行时环境,提供tomcat servlet容器服务。当然,不局限于JAVA,PHP、ROR、nodejs等,理论上行得通。但这里以构建Tomcat Servlet环境为主。
说是简易版,基本靠谱,所有的操作,都需要手动操作,高端功能组件,诸如计费、安全等,暂时还不涉及。仅搭建一个原型,别期望过多,可能为了表示最核心的PAAS的核心部分,其它更为先进的功能,都是在核心的功能上进行的拓展。但这对认识PAAS,可能会有点帮助。
一般来说,虚拟化建立在性能强劲的物理机器上,IAAS(基础即服务)建立在虚拟化技术的基础上,PAAS建立在IAAS基础上,SAAS(软件即服务)可以建立在PAAS的基础上。可以从总体上感知各种服务之间关系,这样做资源利用会更高效些。
PAAS,每一个Tomcat运行平台之间,诸如内存空间、CPU使用、磁盘IO等资源,需要做到相互隔离,并且可以配置。目前Linux服务器一般用KVM、XEN、LVS等虚拟化方案,但与Lxc(Linux Container)相比,有些重。Lxc是一种Linux内核虚拟化技术,可以提供轻量级的虚拟化,以便隔离进程和资源,而且不需要提供指令解释机制以及全虚拟化的其他复杂性(更多解释,见http://baike.baidu.com/view/6572152.htm)。一般被用作隔离的虚拟容器使用。
目前vmware的cloud foundry开源的PAAS,单独使用了cgroups + c 语言组件使用了比Lxc更为轻量的方案,有时间会谈一下。Lxc,借助cgroups组件,可以做到精确到CPU、内存、IO性能等,但cgroups无法做到磁盘限额,借助LVM的强大功能,可以做到单个应用磁盘容量的精确控制。
Lxc的另一个替代品,OpenVZ,使用上可能会简单些,起码在磁盘限额方面,比Lxc做的更好一些。

准备
VirtualBox 4.1
所有操作环境,都是基于免费的VritualBox虚拟机基础上。若有兴趣尝试者,也建议安装一个。在进行后面步骤之前,需要熟悉VritualBox的各项操作,都很简单。
官网
Ubuntu 12.04 Server
Ubuntu 12.04服务器版,在虚拟支持方面,比Centos等系统更友好,也更完善。其已经内置对LXC等的支持,十分简单、易用。
LVM
Linux下逻辑磁盘管理工具,可能需要一点点了解。它是一个好东西,Linux系统管理员应该不会陌生,可以对磁盘、分区动态进行容量管理维护,十分强大。
LXC
Linux Container,在一个ubuntu服务器上虚拟若干个互相隔离的子系统,每一个子系统用于托管Java Web应用。
安装
在Virtualbox中安装Ubuntu 12.04,若32位操作系统,只能安装32位Ubuntu服务器,若是64位版本,可以安装64位服务器版本。
网络连接,选择桥接模式即可(我的网络环境为DHCP),利用了现有的网络设施,便于安装一些组件。
安装后,确定openssh服务器已经安装,否则,将很麻烦。记录下IP地址(这里DHCP地址最好)记下IP地址,使用SSH客户端Xshell连接,进行维护操作。
Ubuntu安装时,记得选择LVM管理磁盘;安装好之后,还是可以使用LVM管理磁盘的。

虚拟机安装
挂载新磁盘
这一步不是必须,仅为了建立名称为lxc的卷组。有了卷组,可以方便进行虚拟机的磁盘容量管理,同时也用于单独存放虚拟机的文件系统。
安装好ubuntu 12.04 之后,VritualBox中为当前系统“创建一个新的虚拟硬盘”,假设磁盘名称为NewHardDsik1.vmdk。
很多安装都需要切换到root用户角色下操作,这里优先切换到root管理员下
sudo -i
安装lxc和lvm
apt-get install lxc
备注:若安装Ubuntu时,若没有选择LVM分区管理等,则默认情况下,lvm2软件没有被安装,单独安装lvm2软件包:
apt-get install lvm2
建立lxc卷组
为第二块磁盘创建一个物理卷
pvcreate /dev/sdb
创建一个物理卷组名称为lxc:
vgcreate lxc /dev/sdb
输入vgdisplay查看卷组
www.2cto.com:~# vgdisplay

--- Volume group ---
VG Name lxc
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 18
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 3
Open LV 1
Max PV 0
Cur PV 1
Act PV 1
VG Size 8.00 GiB
PE Size 4.00 MiB
Total PE 2047
Alloc PE / Size 768 / 3.00 GiB
Free PE / Size 1279 / 5.00 GiB
VG UUID SCoO4G-NImr-15WF-CMha-1QAV-7nm3-gnHGz2
配置属性
lxc所有通用配置位于/etc/lxc/lxc.conf,基于默认配置基础上创建一个最小配置lxc_min.conf:
#vi /etc/lxc/lxc_min.conf
lxc.network.type = veth
lxc.network.link = lxcbr0
lxc.network.flags = up
lxc.cgroup.cpuset.cpus = 0
lxc.cgroup.cpu.shares = 1024
lxc.cgroup.memory.limit_in_bytes = 512M
lxc.cgroup.memory.memsw.limit_in_bytes = 768M

创建虚拟机
创建一个虚拟机:
lxc-create -t ubuntu -n s4 –f /etc/lxc/lxc_min.conf -B lvm --lvname s4 --vgname lxc --fstype ext4 --fssize 1000M
-t : 创建的虚拟机模板名称,默认为ubuntu 12.04最小安装版,非常小
-n : 创建的虚拟名称,需要指定,这里设置为s4,默认情况下也是新建虚拟机的机器名,即 hostnmae
-f : 指定配置文件
-B : 虚拟机磁盘的系统,为了控制单个虚拟机的磁盘容量限制,这里使用lvm进行管理。
--lvname :虚拟机使用卷名,默认使用虚拟