博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
openstack
阅读量:4229 次
发布时间:2019-05-26

本文共 13756 字,大约阅读时间需要 45 分钟。

Openstack

 

目录

概念:


 

 

IaaS  基础设施,通常分为:公有云,私有云,混合云

PaaS 平台,

SaaS 软件,

介绍

OpenStack是一个由NASA(美国国家航空航天局)和Rackspace合作研发并发起的项目

OpenStack是一套IaaS解决方案

OpenStack是一个开源的云计算管理平台

以Apache许可证为授权

  • 结构图

组件

web组件(页面)horizon   
客户端nova
后端盘(相当于yum源共享给其他)glance
数据快速转移和共享 swift
网络互联互通的问题(建vlan) quantum
(逻辑)卷存储 cinder
身份认证  keystone

Horizon 

– 用于管理Openstack各种服务的、基于web的管理接口

– 通过图形界面实现创建用户、管理网络、启动实例等操作

keystone

– 为其他服务提供认证和授权的集中身份管理服务

– 也提供了集中的目录服务
– 支持多种身份认证模式,如密码认证、令牌认证、以
及AWS(亚马逊Web服务)登陆
– 为用户和其他服务提供了SSO认证服务

Cinder

– 为虚拟机管理存储卷的服务

– 为运行在Nova中的实例提供永久的块存储
– 可以通过快照进行数据备份
– 经常应用在实例存储环境中,如数据库文件

Neutron 

– 一种软件定义网络服务

– 用于创建网络、子网、路由器、管理浮动IP地址
– 可以实现虚拟交换机、虚拟路由器
– 可用于在项目中创建VPN

Glance  

– 扮演虚拟机镜像注册的角色

– 允许用户为直接存储拷贝服务器镜像
– 这些镜像可以用于新建虚拟机的模板

Nova    

– 在节点上用于管理虚拟机的服务

– Nova是一个分布式的服务,能够与Keystone交互实现
认证,与Glance交互实现镜像管理
– Nova被设计成在标准硬件上能够进行水平扩展
– 启动实例时,如果有则需要下载镜像

 

部署安装环境

准备三台虚拟机

openstack 管理主机

2CPU , 6G内存,50G硬盘

配置静态IP:192.168.1.10

 

nova01,nova02计算几点*2

2CPU , 4.5G内存,100G硬盘

配置静态IP:192.168.1.11(12)

真机:

]# cd  /var/lib/libvirt/images

]# ls -a

]# virsh domblklist  A     随便看一个虚拟机找出后端盘

目标     源

------------------------------------------------
vda        /var/lib/libvirt/images/A.img

]# qemu-img info  /var/lib/libvirt/images/nova01.img    
image: /var/lib/libvirt/images/nova01.img
file format: qcow2
virtual size: 100G (107374182400 bytes)
disk size: 724M
cluster_size: 65536
backing file: /var/lib/libvirt/images/.node_base.qcow2  #后端盘
Format specific information:
    compat: 1.1
    lazy refcounts: false

]# qemu-img create -b  /var/lib/libvirt/images/.node_base.qcow2 -f qcow2  openstack.img  50G  创建硬盘文件

]# qemu-img create -b  /var/lib/libvirt/images/.node_base.qcow2 -f qcow2  nova01.img  100G

]# qemu-img create -b  /var/lib/libvirt/images/.node_base.qcow2 -f qcow2  nova02.img  100G

]#  ll

]# cd   /etc/libvirt/qemu      #随便改这里的xml的文件输出做新的

]# sed 's,,nova01,'  A.xml  >  nova01.xml

]# sed 's,,nova02,'  A.xml  >  nova02.xml

]# sed 's,,openstack,'  A.xml  >  openstack.xml

]# virsh define  openstack.xml        #用文件创建虚拟机

]# virsh define nova02.xml

]# virsh define nova01.xml

]# virsh  edit  openstack                         #修改内存

<domain type='kvm'>

  <name>openstack</name>
  <uuid>2aa5d74e-d9d3-4862-b09f-72acf27db577</uuid>
  <memory unit='KiB'>7888282</memory>              #没有6G多安装不了openstack
  <currentMemory unit='KiB'>7888282</currentMemory>
  <vcpu placement='static'>2</vcpu>

]#  virsh edit nova01

<domain type='kvm'>

  <name>nova01</name>
  <uuid>31d90ce6-4399-4ba8-bfff-8b3a20a26b33</uuid>
  <memory unit='KiB'>4688282</memory>
  <currentMemory unit='KiB'>4688282</currentMemory>
  <vcpu placement='static'>2</vcpu>

]# virsh edit nova02

<domain type='kvm'>
  <name>nova02</name>
  <uuid>9c64c746-8fbe-4aae-adf8-74e8d6a08ba2</uuid>
  <memory unit='KiB'>4688282</memory>
  <currentMemory unit='KiB'>4688282</currentMemory>
  <vcpu placement='static'>2</vcpu>

]# virsh start openstack

]# virsh start nova01

]# virsh start nova02

]# virsh  list


]# virsh console  openstack/nova01/nova02   --->

vim /etc/sysconfig/network-scripts/ifcfg-eth0      #这里以192.168.1.10为例,其他一样这样配

# Generated by dracut initrd

DEVICE="eth0"
ONBOOT="yes"
NM_CONTROLLED="no"
TYPE="Ethernet"
BOOTPROTO="static"      #静态IP
IPADDR="192.168.1.10"  #IP地址
NETMASK="255.255.255.0"
GATEWAY="192.168.1.254" #真机的ip(网关)
 

 

重启机器reboot或者systemctl restart network

这时可以直接ssh 连接,方便识别修改主机名为openstack ,  nova01,  nova02

df  -h ;  free     检查内存和磁盘大小

 

 

 

 

配置DNS

vim /etc/resolv.conf      #192.168.1.10-12配置一样

去掉search开头的所有行,DNS默认无需修改,注:DNS服务器不能与openstack 安装在同一台主机上

vim /etc/hosts       #将主机名对应的ip解析到openstack服务器,192.168.1.10-12也配置一样

192.168.1.10 openstack
192.168.1.11 nova01
192.168.1.12 nova02

测试能互相ping通

NTP时间同步

vim /etc/chrony.conf           #192.168.1.10-12也配置一样

#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
server 192.168.1.254 iburst       #同步真机时间

[root@nova01 ~]# systemctl restart chronyd

[root@nova01 ~]# chronyc sources -v

===============================================================================

^* gateway                       3   6    37    22  +4292ns[  +86us] +/- 4219us     # ^* 为OK  ^?为失败

 

 

真机上操作

[root@tedu-cn 04]# cd /var/ftp/

[root@tedu-cn ftp]# mkdir extras

[root@tedu-cn ftp]# mkdir openstack
mount /linux-soft/04/openstack/RHEL7OSP-10.iso   openstack/

mount /linux-soft/04/openstack/RHEL7-extras.iso  extras/

[root@tedu-cn ftp]# vim /etc/fstab

/linux-soft/04/openstack/RHEL7OSP-10.iso /var/ftp/openstack iso9660 defaults 0 0

/linux-soft/04/openstack/RHEL7-extras.iso /var/ftp/extras iso9660 defaults 0 0

mount -a 

 cat /proc/sys/net/ipv4/ip_forward    #查看路由转发功能开启了没

1


 

虚拟机192.168.1.10-12上操作

搭yum源

vim /etc/yum.repos.d/local.repo

[local_repo]

name=CentOS-$releasever - Base
baseurl="ftp://192.168.1.254/centos-1804"
enabled=1
gpgcheck=1

[RHEL7OSP-10.iso]

name=devtools
baseurl="ftp://192.168.1.254/openstack/rhel-7-server-openstack-10-devtools-rpms/"
enabled=1
gpgcheck=0

[RHEL7OSP]

name=10-rpms
baseurl="ftp://192.168.1.254/openstack/rhel-7-server-openstack-10-rpms/"
enabled=1
gpgcheck=0

[RHEL7-extras.iso]

name=extras
baseurl="ftp://192.168.1.254/extras/"
enabled=1
gpgcheck=0
]# yum repolist     #软件包共有10670,只能多不能少

 

yum -y install qemu-kvm libvirt-daemon libvirt-daemon-driver-qemu libvirt-client python-setuptools   #安装依赖包

grep vmx /proc/cpuinfo       #检查cpu支不支持这功能

 grep ssse3 /proc/cpuinfo 

如果没有vmx,ssse3就在真机执行

vim  /etc/modprobe.d/kvm.conf

options kvm_intel nested=1

重启真机

 

  • 环境检查

是否卸载firewalld 和 NetworkManager

• 检查配置主机网络参数(静态IP)
• 主机名必须能够相互 ping 通
• 检查配置主机yum源(4个,10670)
• 依赖软件包是否安装
• 检查NTP服务器是否可用
• 检查 /etc/resolv.conf 不能有 search 开头的行


  • 192.168.1.10安装openstack需要使用packstack

yum install -y openstack-packstack

  • 使用packstack创建通用应答文件

packstack --gen-answer-file=answer.ini

修改应答文件

[root@openstack ~]# vim answer.ini
42: CONFIG_SWIFT_INSTALL=n
45: CONFIG_CEILOMETER_INSTALL=n
49: CONFIG_AODH_INSTALL=n
53: CONFIG_GNOCCHI_INSTALL=n
75: CONFIG_NTP_SERVERS=192.168.1.254
98: CONFIG_COMPUTE_HOSTS=192.168.1.11
102: CONFIG_NETWORK_HOSTS=192.168.1.10,192.168.1.11
333: CONFIG_KEYSTONE_ADMIN_PW=a
840: CONFIG_NEUTRON_ML2_TYPE_DRIVERS=flat,vxlan
910: CONFIG_NEUTRON_OVS_BRIDGE_MAPPINGS=physnet1:br-ex
921: CONFIG_NEUTRON_OVS_BRIDGE_IFACES=br-ex:eth0
1179: CONFIG_PROVISION_DEMO=n

packstack --answer-file=answer.ini    #一键部署openstack

如果前期环境准备无误,只要耐心等待安装结束即可,禁止终于Ctrl +C

• 根据主机配置不同,安装过程需要20分钟左右或更久
• 如果出现错误,根据屏幕上给出的日志文件进行排错

 

 

br-ex:虚拟交换机

打vlan标记隔离

[root@openstack ~]# cat /etc/sysconfig/network-scripts/ifcfg-br-ex   #br-ex为外部OVS网桥

ONBOOT="yes"
NM_CONTROLLED="no"
IPADDR="192.168.1.10"
NETMASK="255.255.255.0"
GATEWAY="192.168.1.254"
DEVICE=br-ex
NAME=br-ex
DEVICETYPE=ovs    #虚拟交换机网卡类型
OVSBOOTPROTO="static"
TYPE=OVSBridge    
 

[root@openstack ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0   #查看外部ovs网桥端口eth0

DEVICE=eth0
NAME=eth0
DEVICETYPE=ovs
TYPE=OVSPort
OVS_BRIDGE=br-ex
ONBOOT=yes
BOOTPROTO=none
 

[root@openstack ~]# ovs-vsctl show       #验证OVS配置

5f897b10-b34a-43fa-92ef-1956cbea12f1

    Manager "ptcp:6640:127.0.0.1"
        is_connected: true
    Bridge br-tun
        Controller "tcp:127.0.0.1:6633"
            is_connected: true
        fail_mode: secure
        Port patch-int
            Interface patch-int
                type: patch
                options: {peer=patch-tun}
        Port br-tun
            Interface br-tun
                type: internal
        Port "vxlan-c0a8010b"
            Interface "vxlan-c0a8010b"
                type: vxlan
                options: {df_default="true", in_key=flow, local_ip="192.168.1.10", out_key=flow, remote_ip="192.168.1.11"}
    Bridge br-int
        Controller "tcp:127.0.0.1:6633"
            is_connected: true
        fail_mode: secure
        Port br-int
            Interface br-int
                type: internal
        Port int-br-ex
            Interface int-br-ex
                type: patch
                options: {peer=phy-br-ex}
        Port patch-tun
            Interface patch-tun
                type: patch
                options: {peer=patch-int}
    Bridge br-ex
        Controller "tcp:127.0.0.1:6633"
            is_connected: true
        fail_mode: secure
        Port "eth0"
            Interface "eth0"
        Port phy-br-ex
            Interface phy-br-ex
                type: patch
                options: {peer=int-br-ex}
        Port br-ex
            Interface br-ex
                type: internal
    ovs_version: "2.5.0"

]# vim /etc/httpd/conf.d/15-horizon_vhost.conf          #Horizon 的BUG,需加此项才能访问网页

  WSGIProcessGroup apache

  WSGIApplicationGroup %{GLOBAL}
]# apachectl graceful 重新加载文件

真机上访问192.168.1.10然后登陆,密码忘了看下方:

[root@openstack ~]# cat keystonerc_admin 

unset OS_SERVICE_TOKEN
    export OS_USERNAME=admin
    export OS_PASSWORD=a
    export OS_AUTH_URL=http://192.168.1.10:5000/v2.0
    export PS1='[\u@\h \W(keystone_admin)]\$ '
    
export OS_TENANT_NAME=admin
export OS_REGION_NAME=RegionOne
 

 

Horizon

是一个用以管理,控制Openstack服务的WEB控制面板,也称之Dashboard仪盘表

可以管理实例,镜像,创建密钥对,对实例添加卷,操作Swift容器等.除此之外,用户还可以在控制面板中使用终端(console)或VNC直接访问实例

基于python的diango  web 框架开发

 

功能与特点

• 实例管理:创建、终止实例,查看终端日志,VNC连接,添加卷等

• 访问与安全管理:创建安全群组,管理密钥对,设置浮动IP等
• 偏好设定:对虚拟硬件模板可以进行不同偏好设定
• 镜像管理:编辑或删除镜像
• 用户管理:创建用户等
• 卷管理:创建卷和快照
• 对象存储处理:创建、删除容器和对象

 

 

命令行接口:

[root@openstack ~]# source ~/keystonerc_admin 

[root@openstack ~(keystone_admin)]# env | grep OS

HOSTNAME=openstack
OS_REGION_NAME=RegionOne
OS_PASSWORD=a
OS_AUTH_URL=http://192.168.1.10:5000/v2.0
OS_USERNAME=admin
OS_TENANT_NAME=admin
 

[root@openstack ~(keystone_admin)]# openstack --help

 

 

项目管理

项目:一组隔离的资源和对象。由一组关联的用户进行管理

• 在旧版本里,也用租户(tenant)来表示

• 根据配置的需求,项目对应一个组织、一个公司或是一个使用客户等
• 项目中可以有多个用户,项目中的用户可以在该项目创建、管理虚拟资源
• 具有admin角色的用户可以创建项目
• 项目相关信息保存到MariaDB中

• 缺省情况下,packstack安装的openstack中有两个独立的项目

– admin:为admin账户创建的项目

– services:与安装的各个服务相关联

 

基本概念

• 用户在openstack中用于身份认证
• 管理员用户admin一般在packstack安装过程中创建
• 其他用户由管理员用户创建,并指定可以访问的项目
• 非管理员用户创建后,保存到MariaDB中

• 非管理员用户具有以下权限

– 启动实例
– 创建卷和快照
– 创建镜像
– 分配浮动IP
– 创建网络和路由器
– 创建防火墙以及规则、规则策略
– 查看网络拓扑、项目使用概况等

 

 

 

 

网络地址--->写网段地址

 

创建云主机时状态错误时重启nova01该服务

[root@nova01 ~]# systemctl stop openstack-nova-compute.service 

[root@nova01 ~]# systemctl start openstack-nova-compute.service 

[root@nova01 ~]# virsh list

 

 

1006错误(原因之前DNS没有删除search那行)13:42视频

[root@nova01 ~]# sed  -n '8430p'  /etc/nova/nova.conf 

vncserver_proxyclient_address=nova01或不知道是什么巴拉巴拉一大串

 

把那串写进/etc/hosts  能够给他解析

192.168.1.11  不知道是什么巴拉巴拉一大串

 

 

 

 

 

 

 

 

 

 

 

扩容节点

环境检查[192.168.1.12]

[root@nova02 ~]# free -h    --->4G多

[root@nova02 ~]# df -h     -->100G

[root@nova02 ~]# cat /etc/resolv.conf  --->删除search的行

[root@nova02 ~]# cat /etc/hosts

192.168.1.10 openstack

192.168.1.11 nova01
192.168.1.12 nova02
 

[root@nova02 ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0 

# Generated by dracut initrd
DEVICE="eth0"
ONBOOT="yes"
NM_CONTROLLED="no"
TYPE="Ethernet"
BOOTPROTO="static"
IPADDR="192.168.1.12"
NETMASK="255.255.255.0"
GATEWAY="192.168.1.254"
 

[root@nova02 ~]# head /etc/chrony.conf 

# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
# server 0.centos.pool.ntp.org iburst
# server 1.centos.pool.ntp.org iburst
# server 2.centos.pool.ntp.org iburst
# server 3.centos.pool.ntp.org iburst
server 192.168.1.254 iburst
[root@nova02 ~]# chronyc sources -v
^* gateway                       3   7   377   118    -14us[  -20us] +/- 5364us

 

[root@nova02 ~]# cat /etc/yum.repos.d/local.repo 

[local_repo]
name=CentOS-$releasever - Base
baseurl="ftp://192.168.1.254/centos-1804"
enabled=1
gpgcheck=1

[RHEL7OSP-10.iso]

name=devtools
baseurl="ftp://192.168.1.254/openstack/rhel-7-server-openstack-10-devtools-rpms"
enabled=1
gpgcheck=0

[RHEL7OSP]

name=10-rpms
baseurl="ftp://192.168.1.254/openstack/rhel-7-server-openstack-10-rpms/"
enabled=1
gpgcheck=0

[RHEL7-extras.iso]

name=extras
baseurl="ftp://192.168.1.254/extras/"
enabled=1
gpgcheck=0
 

yum   repolist   --->  repolist: 10,670个

[root@nova02 ~]# yum -y install qemu-kvm libvirt-client libvirt-daemon libvirt-daemon-driver-qemu python-setuptools

 

查看cpu

top -->按1

%Cpu0  :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st

%Cpu1  :  0.0 us,  0.3 sy,  0.0 ni, 99.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st


[root@openstack ~]# vim answer.ini

  98 CONFIG_COMPUTE_HOSTS=192.168.1.11,192.168.1.12

 102 CONFIG_NETWORK_HOSTS=192.168.1.10,192.168.1.11,192.168.1.12

 

确保openstack能够ssh远程nova02

 

[root@openstack ~]# packstack --answer-file  answer.ini 

完成后

[root@openstack ~]# vim /etc/httpd/conf.d/15-horizon_vhost.conf   #该文件又被还原了

  WSGIProcessGroup apache

  WSGIApplicationGroup %{GLOBAL}

[root@openstack ~]# apachectl graceful  #重载配置网页就可以进去了

 

 

 

 

 

 

 

 

 

 

配额管理

基础

• 管理员可以通过配额限制,防止资源的过度使用

• 配额基本项目,限制每个项目可以使用多少资源
• 这些操作上的功能限制,赋予了管理员对每个项目的精准控制

资源参数

• 安全组规则:指定每个项目可用的规则数

• 核心:指定每个项可用的VCPU核心数
• 固定IP地址:指定每个项目可用的固定IP数
• 浮动IP地址:指定每个项目可用的浮动IP数
• 注入文件大小 :指定每个项目内容大小
• 注入文件路径:指定每个项目注入的文件路径长度

• 注入文件:指定每个项目允许注入的文件数目

• 实例:指定每个项目可创建的虚拟机实例数目
• 密钥对:指定每个项可创建的密钥数
• 元数据:指定每个项目可用的元数据数目
• 内存:指定每个项目可用的最大内存
• 安全组:指定每个项目可创建的安全组数目

 

 

云主机类型基本概念

• 云主机类型就是资源的模板
• 它定义了一台云主机可以使用的资源,如内存大小、磁盘容量和CPU核心数等
• Openstack提供了几个默认的云主机类型
• 管理员还可以自定义云主机类型

 

 

 

 

 

 

云主机类型参数

• Name:云主机类型名称

• ID:云主机类型ID,系统自动生成一个UUID
• VCPUs:虚拟CPU数目
• RAM(MB):内存大小
• Root disk(GB):外围磁盘大小。如果希望使用本地磁盘,设置为0
• 临时磁盘:第二个外围磁盘
• swap磁盘:交换磁盘大小

 

 

 

镜像基本概念

• 在红帽Openstack平台中,镜像指的是虚拟磁盘文件,磁盘文件中应该已经安装了可启动的操作系统
• 镜像管理功能由Glance服务提供
• 它形成了创建虚拟机实例最底层的块结构
• 镜像可以由用户上传,也可以通过红帽官方站点下载

 

 

Glance磁盘格式

• raw:非结构化磁盘镜像格式

• vhd:VMware、Xen、Microsoft、VirtualBox等均支持的通用磁盘格式
• vmdk:是Vmware的虚拟磁盘格式
• vdi:VirtualBox虚拟机和QEMU支持磁盘格式
• iso:光盘数据内容的归档格式
• qcow2:QEMU支持的磁盘格式。空间自动扩展,并支持写时复制copy-on-write

 

 

镜像服务

• 镜像服务提供了服务器镜像的拷贝、快照功能,可以作为模板快速建立、起动服务器

• 镜像服务维护了镜像的一致性
• 当上传镜像时,容器格式必须指定
• 容器格式指示磁盘文件格式是否包含了虚拟机元数据

 

 

 

 

镜像容器格式

• bare:镜像中没有容器或元数据封装

• ovf:一种开源的文件规范,描述了一个开源、安全、有效、可拓展的便携式虚拟打包以及软件分布格式
• ova:OVA归档文件
• aki:亚马逊内核镜像
• ami:亚马逊主机镜像

 

 

 

Openstack网络工作原理

• 实例被分配到子网中,以实现网络连通性

• 每个项目可以有一到多个子网
• 在红帽的Openstack平台中,OpenStack网络服务是缺省的网络选项,Nova网络服务作为备用
• 管理员能够配置丰富的网络,将其他Openstack服务连接到这些网络的接口上
• 每个项目都能拥有多个私有网络,各个项目的私有网络互相不受干扰

 

 

 

 

 

网络类型

• 项目网络:由Neutron提供的项目内部网络,网络间可用VLAN隔离

• 外部网络:可以让虚拟机接入外部网络,但需要配置浮动IP地址
• 提供商网络:将实例连接到现有网络,实现虚拟机实例与外部系统共享同一二层网络

 

 

 

浮动IP地址的作用

• 浮动 IP 一般是花钱购买的

• 浮动IP地址用于从外界访问虚拟机实例
• 浮动IP地址只能从现有浮动IP地址池中分配
• 创建外部网络时,浮动IP地址池被定义
• 虚拟机实例起动后,可以为其关联一个浮动IP地址
• 虚拟机实例也可以解除IP地址绑定

 

 

 

 

安全组

• 安全组用于控制对虚拟机实例的访问

• 安全组在高层定义了哪些网络及哪些协议是被授权可以访问虚拟机实例的
• 每个项目都可以定义自己的安全组
• 项目成员可以编辑默认的安全规则,也可以添加新的安全规则
• 所有的项目都有一个默认的default安全组

 

 

安全组规则

• 安全组规则定义了如何处理网络访问

• 规则基于网络或协议定义
• 每个规则都有出和入两个方向
• 规则也可以指定ip协议版本
• 默认的安全组规则,允许虚拟机实例对外访问,但是阻止所有对虚拟机实例的访问

 

 

迁移云主机

 

1.新建2台云主机

2.配浮动IP(公网ip)

3.真机要能ping通浮动IP

4.设置安全组,使外界(真机)可以ssh连接上

有多个 nova 计算节点的时候,我们可以选择性的把

某一个云主机从某台机器上迁移到另外一台机器上

– nova 计算节点与 openstack 管理节点都能相互 ping通,主机名称也要能 ping 通

– 所有计算节点安装 qemu-img-rhev,qemu-kvm-rhev
– 如未安装,在安装以后需要重启 libvirtd 服务

迁移期间不断开连接

 

 

 

 

 

转载地址:http://oriqi.baihongyu.com/

你可能感兴趣的文章
Programming Mobile Devices: An Introduction for Practitioners
查看>>
Designing for Networked Communications: Strategies and Development
查看>>
Building a Monitoring Infrastructure with Nagios
查看>>
Illustrated C# 2005
查看>>
Pro ASP.NET 2.0 E-Commerce in C# 2005
查看>>
Thinking Animation: Bridging the Gap Between 2D and CG
查看>>
Ajax in Practice
查看>>
Flash Animation for Teens
查看>>
The Oracle Hacker's Handbook: Hacking and Defending Oracle
查看>>
Microsoft Windows PowerShell: TFM
查看>>
Java Drawing with Apache Batik: A Tutorial
查看>>
Essential Windows Presentation Foundation
查看>>
Model-Driven Design Using Business Patterns
查看>>
Core Internet Application Development with ASP.NET 2.0
查看>>
Microsoft SharePoint 2007 For Dummies
查看>>
Core JavaServer(TM) Faces, Second Edition
查看>>
Beginning C# 2005 Databases: From Novice to Professional
查看>>
Adobe Flash CS3 Professional Classroom in a Book
查看>>
Digital Image Processing: PIKS Scientific Inside
查看>>
Photoshop CS3 For Dummies
查看>>