VPSPort:$8 1GB Hyper-V VPS

vpsport

VPSPortAutomatedVPS 使用的是同一个 PayPal 帐号,所以猜测他们和 AutomatedVPS 是一家。使用的虚拟技术也都是 Windows 的 Hyper-V。Hyper-V 需要使用 Windows Server 版本,他们使用的是 64位 Windows Server 2008 R2 SP1,查了一下Microsoft 官方网站上的 Windows Server 2008(带 Hyper-V)的报价是 $3,999,这还不包括服务器上每个 Windows 虚拟机的版权费用,还有服务器硬件成本和流量的费用,真不知道他们这8美元的超低价格是怎么做出来的(年付平均只要7.17美元每月),应该连版权费都不够。Anyway,有便宜出来就要占,现在这款 1GB Windows VPS 使用这个链接购买只要6.99美元(才出来一天就已经 sold out)。VPS配置如下:

1GB RAM
20GB 硬盘
100GB 流量
1 IP
8美元每月

服务器硬件配置信息:

Intel Xeon 3.46 Ghz CPU

在 Ubuntu 上安装和配置 OpenStack Nova

openstack

OpenStack 是由 Rackspace 和 NASA 共同开发的云计算平台,帮助服务商和企业内部实现类似于 Amazon EC2 和 S3 的云基础架构服务(Infrastructure as a Service, IaaS)。OpenStack 包含两个主要模块:Nova 和 Swift,前者是 NASA 开发的虚拟服务器部署和业务计算模块;后者是 Rackspack 开发的分布式云存储模块,两者可以一起用,也可以分开单独用。OpenStack 是开源项目,除了有 Rackspace 和 NASA 的大力支持外,后面还有包括 Dell, Citrix, Cisco, Canonical 这些重量级公司的贡献和支持,发展速度非常快,有取代另一个业界领先开源云平台 Eucalyptus 的态势。

OpenStack 是 Python 2.6 写的,CentOS 5.6 上默认的是 Python 2.4 的环境并且还有很多依赖关系不容易升级到 2.6,所以在 Ubuntu 上安装会简单一些,而且 Ubuntu 是 OpenStack 的官方首选系统,文档都是按 Ubuntu 写的,所以这里 VPSee 采用最新的 Ubuntu 11.04 Server 64bit 版本来安装和配置 OpenStack Nova. 使用 CentOS 的朋友可以看看:在 CentOS 上安装和配置 OpenStack Nova;如果对其他类似的开源云计算平台感兴趣的话可以看看:在 CentOS 上安装和配置 OpenNebula.

配置网络

在安装完基本的 Ubuntu 11.04 Server 系统后升级和更新整个系统,安装完 bridge-utils 包后重启系统:

$ sudo apt-get update
$ sudo apt-get upgrade

$ sudo apt-get install bridge-utils

$ sudo reboot

配置网桥:

$ sudo vi /etc/network/interfaces

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
address 172.16.39.111
netmask 255.255.254.0
gateway 172.16.38.1

auto br100
iface br100 inet static
bridge_ports eth1
bridge_stp off
bridge_maxwait 0
bridge_fd 0
address 192.168.0.1
netmask 255.255.0.0
broadcast 192.168.255.255

关于 FlatManager 网络配置可参考:OpenStack Nova 安装后的 FlatManager 网络配置

安装 NTP 服务

OpenStack Nova 需要 NTP 服务器来保持所有节点服务器(Cloud Compute)的时间同步,所以需要在前端控制服务器(Cloud Controller)上安装 NTP 服务器,然后在节点服务器上安装 NTP 客户端保持与前端的同步:

$ sudo apt-get install ntp

$ sudo vi /etc/ntp.conf
server 127.127.1.0
fudge 127.127.1.0 stratum 10

$ sudo /etc/init.d/ntp restart

安装和配置 MySQL 数据库

OpenStack Nova 需要数据库的支持,这里选用 MySQL(当然也可以用其他的数据库,比如 PostgreSQL 等):

$ sudo apt-get install mysql-server

修改 MySQL 绑定地址,以便其他的节点服务器也能访问这个数据库:

$ sudo vi /etc/mysql/my.cnf
...
#bind-address           = 127.0.0.1
bind-address            = 0.0.0.0
...

$ sudo /etc/init.d/mysql restart

创建一个名为 nova 的数据库,并设置 root 从任何 IP 访问的权限和密码:

$ sudo mysql -uroot -ppassword -e 'CREATE DATABASE nova;'
$ sudo mysql -uroot -ppassword -e "GRANT ALL PRIVILEGES ON *.* TO \
'root'@'%' WITH GRANT OPTION;"
$ sudo mysql -uroot -ppassword -e "SET PASSWORD FOR \
'root'@'%' = PASSWORD('password');"

安装 Glance 镜像服务

Glance 是个镜像服务器,用来给 OpenStack Nova 提供操作系统镜像(image)服务,提供可选择的操作系统模版(镜像)。

$ sudo apt-get install glance

安装 OpenStack Nova

OpenStack Nova 已经进入 Ubuntu 11.04 源,所以直接安装就可以了,不必源码安装:

$ sudo apt-get install rabbitmq-server nova-common nova-doc python-nova 
nova-api nova-network nova-volume nova-objectstore nova-scheduler nova-compute

$ sudo apt-get install -y euca2ools

$ sudo apt-get install -y unzip

配置 Nova:

$ sudo vi /etc/nova/nova.conf
--dhcpbridge_flagfile=/etc/nova/nova.conf
--dhcpbridge=/usr/bin/nova-dhcpbridge
--logdir=/var/log/nova
--state_path=/var/lib/nova
--lock_path=/var/lock/nova
--verbose
--s3_host=172.16.39.111
--rabbit_host=192.168.0.1
--cc_host=192.168.0.1
--ec2_url=http://172.16.39.111:8773/services/Cloud
--fixed_range=192.168.0.0/16
--network_size=8
--FAKE_subdomain=ec2
--routing_source_ip=192.168.0.1
--sql_connection=mysql://root:password@172.16.39.111/nova
--glance_host=192.168.0.1
--image_service=nova.image.glance.GlanceImageService

重启 nova 相关服务以便设置生效:

$ sudo restart libvirt-bin; sudo restart nova-network; 
sudo restart nova-compute; sudo restart nova-api; 
sudo restart nova-objectstore; sudo restart nova-scheduler; 
sudo restart nova-volume; sudo restart glance-api; sudo restart glance-registry

使用 Nova

开始使用 Nova 前需要创建 nova 数据库表、创建网络、创建管理员帐号、创建云并联到刚才创建的管理员上:

$ sudo nova-manage db sync
$ sudo nova-manage network create 192.168.0.0/24 1 255
$ sudo nova-manage floating create 10.10.10.2 10.10.10.224/27
$ sudo nova-manage user admin vpsee
$ sudo nova-manage project create mycloud vpsee

因为多个管理员可以创建多个不同的云,所以某个云的管理员需要特定的权限才能访问和管理自己的 Nova 云,创建权限信息,并解压到自己的目录里,需要注意的是每次使用 nova 管理云的时候都需要读取 novarc 里面的配置信息:

$ mkdir /home/vpsee/creds
$ sudo nova-manage project zipfile mycloud vpsee /home/vpsee/creds/novacreds.zip

$ cd /home/vpsee/creds
$ unzip novacreds.zip
$ sudo chown -R vpsee:vpsee /home/vpsee/creds/

$ source /home/vpsee/creds/novarc

每次用 nova 的时候都要用到 novarc 里面的环境变量,每次 source novarc 很麻烦,所以最好加到 .bashrc 里面:

$ cat  /home/vpsee/creds/novarc >> /home/vpsee/.bashrc
$ source /home/vpsee/.bashrc

再次重启 nova 相关的所有服务:

$ sudo restart libvirt-bin; sudo restart nova-network; 
sudo restart nova-compute; sudo restart nova-api; 
sudo restart nova-objectstore; sudo restart nova-scheduler;
sudo restart nova-volume; sudo restart glance-api; sudo restart glance-registry

如果一切正常的话,应该可以打印出如下的类似信息:

$ euca-describe-availability-zones verbose
AVAILABILITYZONE	nova	available
AVAILABILITYZONE	|- node00
AVAILABILITYZONE	| |- nova-scheduler	enabled :-) 2011-05-22 10:32:31
AVAILABILITYZONE	| |- nova-network	enabled :-) 2011-05-22 10:32:32
AVAILABILITYZONE	| |- nova-compute	enabled :-) 2011-05-22 10:32:24

如果出现这个问题,检查 novarc 这个文件看看 EC2_URL, S3_URL, NOVA_URL 这三行是不是有两个连续的 http://?

$ euca-describe-availability-zones verbose
invalid literal for int() with base 10: ''

$ vi /home/vpsee/creds/novarc
...
export EC2_URL="http://http://172.16.39.100:8773/services/Cloud"
export S3_URL="http://http://172.16.39.100:3333"
...
export NOVA_URL="http://http://172.16.39.100:8774/v1.1/"
...

删除一个 http:// 就可以了:

$ vi /home/vpsee/creds/novarc
...
export EC2_URL="http://172.16.39.100:8773/services/Cloud"
export S3_URL="http://172.16.39.100:3333"
...
export NOVA_URL="http://172.16.39.100:8774/v1.1/"
...

启动第一个实例

启动实例之前需要先上传一个系统模版,我们称之为镜像(image),自己制作操作系统镜像有点麻烦(请看:为 OpenStack Nova 制作 Ubuntu 镜像为 OpenStack Nova 制作 CentOS 镜像为 OpenStack Nova 制作 Windows 镜像。),这里直接使用一个已经做好的 Ubuntu 10.10 版本镜像,下载已经做好的镜像文件并上传到镜像服务器(这里镜像服务器和前端服务器在同一台物理服务器上):

$ wget http://c0179148.cdn1.cloudfiles.rackspacecloud.com/ubuntu1010-UEC-localuser-image.tar.gz

$ uec-publish-tarball ubuntu1010-UEC-localuser-image.tar.gz ubuntu1010-bucket x86_64

列出云里现有的可以加载的镜像,并以某个镜像(比如编号为 ami-00000003)为模版启动一个实例(操作系统):

$ euca-describe-images
IMAGE	aki-00000001	ubuntu1010-bucket/vmlinuz-2.6.32-28-server.manifest.xml		available	public		x86_64	kernel	 	 
IMAGE	ari-00000002	ubuntu1010-bucket/initrd.img-2.6.32-28-server.manifest.xmavailable	public		x86_64	ramdisk	 	 
IMAGE	ami-00000003	ubuntu1010-bucket/maverick-server-uec-amd64.img.manifest.xml		available	public		x86_64	machine	aki-00000001	ari-00000002

$ euca-add-keypair mykey > mykey.priv

$ euca-run-instances -k mykey -t m1.tiny ami-00000003

检查一下实例是否成功启动和运行:

$ virsh list
 Id Name                 State
----------------------------------
  1 instance-00000001    running

访问实例

启动实例后怎么访问呢?和访问 VPS 一样,需要 IP 地址然后 ssh 访问,还记得上面的网络配置么,新创建的系统将按照 192.168.0.x 的形式分配 IP,所以 192.168.0.3 就是刚刚 euca-run-instances 创建的实例的 IP 地址:

$ ssh ubuntu@192.168.0.3

Troubleshooting

解决 DataSourceEc2.py[WARNING]: ‘http://169.254.169.254′ failed: url error 问题
删除 OpenStack Nova Volume 时遇到的 error_deleting 问题
解决 Warning: failed to parse error message from AWS: :1:0: syntax error 问题
重置 OpenStack Nova 数据库

sshuttle:不需配置的 VPN

sshuttle 被其作者称为 “穷人的 VPN”(A poor man’s instant VPN),甚至不需要远端服务器的 root 权限就可以用(只需要一个普通 SSH 帐号),和在 Mac/Linux 客户端直接用 ssh -D 的方式有点类似。如果不想花钱买 VPN,又懒得自己在 VPS 上安装和设置复杂的 VPN 服务,又不想用 ssh -D 这么朴素的技巧的话可以试一下这个 sshuttle,按照作者的说法 sshuttle 比 sshd -D 的方式快一点,因为 It’s just data-over-TCP,而不是 TCP-over-TCP,TCP-over-TCP 的方式会带来不必要的性能问题,因为 TCP 本身就是可靠传输协议,保证了包的有序性和无差错,并确保包被接受,如果有包丢失的话 TCP 协议可以自己立即重传弥补,所以没必要两层都 TCP,一层 TCP 就比较安全了。

sshuttle 的用法很简单,在客户端下载和运行就可以了(需要有 Python 的支持),无需在服务器端做任何配置(但是需要一个 ssh 帐号和 Python 支持):

$ git clone git://github.com/apenwarr/sshuttle

$ ./sshuttle -r username@sshserver 0.0.0.0/0 -vv
Starting sshuttle proxy.
Binding: 12300
Listening on ('127.0.0.1', 12300).
[local sudo] Password: 
firewall manager ready.
c : connecting to server...
...

成功运行 sshuttle 后会在 Terminal 上看到一些运行时 log:
sshuttle

Hostigation:$6 256MB KVM VPS

hostigation

Hostigation 背后是一家叫做 Dialpoint Communication 的公司,又是一家提供 KVM 虚拟技术的 VPS 服务商,随着 RHEL 6 的流行,相信在 CentOS 6 发布后会有更多的服务商进入 KVM 市场,消费者将会看到更多的10美元以下的 KVM VPS. Hostigation 已经在 hosting 行业混了5年,他们现在提供 Xen, KVM 和 OpenVZ 三种主流虚拟/容器技术的 VPS,价格和配置都不同。他们提供 FreeBSD 8.2 系统,这款 256MB KVM VPS 只要6美元,512MB 的也只需9美元,价格很不错。他们的官方网站像是90年代拨号时代的设计风格,像是某个电子专业的学生当年用 Frontpage 98 拖出来的半成品。他们的数据中心在 South Carolina 的 Rock Hill. VPS 产品在 LowEndBox 和 WHT 上都有好评。VPS 配置如下:

LowEndVPS OVZ256 KVM256
64MB RAM 256MB RAM 256MB RAM
128MB Swap 384MB Burst 256MB Swap
10GB 硬盘 25GB 硬盘 10GB 硬盘
1024GB 流量 1024GB 流量 500GB 流量
1 IP 1 IP 1 IP
4美元 4.99美元 6美元

服务器硬件配置信息:

AMD Phenom(tm) II X6 1090T Processor

WordPress 和 APC 的小问题

昨天晚上给一位付费客户安装 APC PHP 加速器 的时候发现一个小问题,访问 WordPress 页面没问题也可以看到 WordPress 管理后台页面,但是无法登录,报错如下:

Fatal error: Call to undefined function wp_dashboard_setup() in /home/vpsee/wordpress/wp-admin/index.php on line 15

关闭 APC 后这个问题就消失了,只要一打开 APC 就报错,进一步调查把问题缩小到一个 APC 配置参数上 apc.include_once_override=1,如果设置成 apc.include_once_override=0 就没有问题。根据 APC 参考手册的说明,apc.include_once_override 参数是用来 Optimize include_once() and require_once() calls and avoid the expensive system calls used. 一般的建议是设置成0(关闭这个选项)。现在解决办法有两个,一个是设置 apc.include_once_override 为 0(这样会影响到所有网站,所有 PHP 站都不能用到 apc.include_once_override 这个优化了):

# vi /etc/php.d/apc.ini

...
apc.include_once_override = 0
...

另一个办法是修改 WordPress 文件(这样只会影响到一个 WordPress 网站),打开 wp-admin/index.php 文件找到 require_once(ABSPATH . ‘wp-admin/includes/dashboard.php’); 这行注释掉后修改成如下:

# vi /home/vpsee/wordpress/wp-admin/index.php

...
/* require_once(ABSPATH . 'wp-admin/includes/dashboard.php'); */
require_once('./includes/dashboard.php');
...

Encept:$10 128MB Xen HVM VPS

encept

Encept 隶属俄克拉荷马州一家叫 Zeruck 的小公司,域名是今年1月份刚注册的, 其创始人曾在一家提供短 URL 服务的网站 oss.im 干了4年多,现在出来单干。他们提供基于 Xen HVM 的 VPS,亮点是可提供 FreeBSD 8.1 VPS,也可选 Linux 和 Windows。他们的服务器托管在多个数据中心,Ashburn VA 的 Latisys, Los Angeles 的 Awknet 以及 Dallas 的 Softlayer 等,也有德国和荷兰的机房。有一点不太方便的地方是他们不支持 PayPal 支付,只能用信用卡通过 Google Checkout 的方式支付。虽然域名注册时间不长,他们在 WHT 上的赢得了一些好评,这是一个好的开始:)现在点击这个链接购买他们的这款 128MB VPS(含2个 IP 和 SolusVM 控制面板)只要6.5美元每月(原价10美元每月)。VPS 配置如下:

128MB RAM
8GB 硬盘
40GB 流量
2 IPs
10美元每月

服务器硬件配置信息:

All of our servers contain multiple socket (physical) processors from Intel™ Xeon and AMD™ Opteron. We use registered memory with error checking and incorporate spare memory RDIMMS in our hardware configurations. Our hosting servers also incorporate RAID 1+0 or RAID 5 arrays to provide the highest available speed possible.

如何快速创建 Xen 虚拟机镜像

在 Linux 上安装完 Xen 服务器后接下来的工作就是如何创建和启动一个虚拟机。这个看似很简单的问题难住了不少人,VPSee 收到不少邮件关于如何快速创建和部署虚拟机镜像的。创建虚拟机的工具有很多,比如 virt-manager, virt-install, virsh, xen-create-image 等等,不过这些工具都要每次重头安装虚拟机的操作系统,需要人机交互、速度慢、不自动,不利于写成脚本。有什么快速的创建/部署/克隆虚拟机的办法呢?可以先做一个模版,然后通过拷贝模版的办法。我们只需要两个步骤:1、创建一个空白文件镜像;2、然后把一个打包好的 Linux 系统模版拷贝过去。通常一个打包好的最小 Linux 系统只要200MB 左右,在高配置的服务器上拷贝基本能瞬间完成,比起拷贝整个虚拟机镜像文件(比如 10GB)要快得多。具体步骤:

1、创建一个磁盘镜像文件:

# dd if=/dev/zero of=test.img bs=1 count=1 seek=10G

2、格式化磁盘:

# mkfs.ext3 test.img

3、挂载刚刚创建的磁盘镜像文件:

# mount -o loop test.img /mnt

4、找个现有 Linux 的文件系统拷贝过去:

# tar -zxSf centos.tar.gz -C /mnt/

需要说明的是,这里的 centos.tar.gz 是提前制作好的,可以在一个干净的虚拟机上手动安装好一个最小的 CentOS 系统,然后配置和优化好,这样就是一个模板,以后如果创建新的 CentOS 虚拟机就可以从这个模板直接拷贝。

5、卸载 /mnt:

# umount mnt

6、创建一个交换分区:

# dd if=/dev/zero of=test-swap.img bs=1M count=256

7、创建和编辑一个 Xen 虚拟机的启动文件:

# vi /etc/xen/test.conf
name            = 'test'
vcpus           = 1
memory          = '256'
disk            = [ 'tap:aio:/home/vpsee/test.img,sda1,w',
'tap:aio:/home/vpsee/test-swap.img,sda2,w',
]
vif             = [ 'bridge=eth0' ]
root            = '/dev/sda1 ro'
on_reboot       = 'restart'
on_crash        = 'restart'
kernel          = "/boot/vmlinuz-2.6.18-194.32.1.el5xen"
ramdisk         = "/boot/initrd-2.6.18-194.32.1.el5xen.img"

8、启动 Xen 虚拟机:

# xm create test

如果把上面的步骤综合起来写在一个脚本里并配上 Xen Shell 控制面板就可以完成 VPS 客户自己快速重装系统的功能。如果把这个脚本加到客户的账单管理系统里(比如 WHMCS)就可以完成客户付款自动开通 VPS 的功能。不过我们的 VPS 不提供客户自助重装功能和自动开通功能,损失了一点方便性,但是换来了稳定和性能还是值得的。如果用 LVM, iSCSI 之类的存储方式的话原理也是一样的。

FiberVolt:$6.5 256MB OpenVZ VPS

fibervolt

FiberVolt 的域名是去年6月份注册的,7月份开始做的网站,直到今年4月份才第一次在 WHT 上打广告。他们的网站设计的不错,是由爱尔兰的一个叫做 Adam Gammell 设计师设计的。个人不太喜欢一些公司在自己的 About 页面上动不动就说自己是 leader “Fiber Volt, a leader in the Virtualization hosting field …“,这种说法只会让客户觉得在忽悠,这个行业已经很成熟,leader 是谁大家都知道。他们的数据中心在加州的 San Diego,服务器托管在 i2B Networks,测试 IP 是 66.181.4.219。粗略看了一下他们的服务条款和用户使用条款,限制有点严格,用户购买前需要认真阅读。现在使用 LEB15OFF 优惠码购买他们的 256 Volts 有终身15%的优惠,相当于5.53美元每月。VPS 配置如下:

128 Volts 256 Volts
128MB RAM 256MB RAM
256MB Burst 512MB Burst
15GB 硬盘 30GB 硬盘
100GB 流量 150GB 流量
1 IP 1 IP
20美元每年 6.5美元每月

服务器硬件配置信息:

8 Cores Intel Xeon Nehalem

同步管理多个 SSH 会话

当我们管理数十台或更多 Linux 服务器的时候,往往需要在每台服务器上执行同样的命令,比如我们想一次查看10台 Xen 服务器(node)上系统负载情况,或者想知道哪台 Xen 服务器有剩余内存可以分给新客户,又或者想执行 df 命令看看哪个服务器上还有多的硬盘空间等等,除了可以用脚本或工具统一收集这些信息外,我们还可以考虑使用一些同步管理多个 SSH 会话的小工具来帮助管理多台服务器,节省时间提高管理效率。在 Linux 上可以用 pdsh、ClusterSSH 和 mussh;在 Mac 上可以用 csshX.

使用 csshX 很简单,下载解压后就可以运行,如果要同时 ssh 到4个服务器的话:

$ ./csshX 192.168.0.1 192.168.0.2 192.168.0.3 192.168.0.4

也可以把这些要 ssh 管理的 IP 写到一个文件里,然后加载这个文件:

$ vi xenhosts
192.168.0.1
192.168.0.2
192.168.0.3
192.168.0.4

$ ./csshX --hosts xenhosts

csshX

Carstensz Pyramid Server:$8.4 256MB KVM VPS

pyramidserver

Carstensz Pyramid Server 是印度尼西亚的一家 Xen/KVM VPS 服务商,租用的是两家美国机房的服务器,一个在 Asheville, NC(测试 IP: 67.23.160.247);另一个是 Dallas 的 Tailor Made Servers(测试 IP: 72.9.149.15)。现在购买他们的 VPS 使用优惠码 THANKSLEB 就可以获得22%的永久优惠。值得一提的是他们提供基于 KVM 和 Xen HVM 的 VPS,RedHat 在发布 RHEL 6 Beta 版本的时候就明确剔除了 Xen,改用 KVM。虽然 Xen 的数据中心地位目前还不能动摇,但是随着 RHEL 6.0 正式版的发布和 CentOS 6.0 的到来以及 IBM 和 RedHat 这两大重量级 Linux 厂商的的大力支持,KVM 将会在逐步蚕食 Xen 的企业市场。不过对于 VPS 用户来说,使用 Xen VPS 和 KVM VPS 基本上没区别,都是 Linux 而已。VPS 配置如下:

CLK-128 MB CLK-256 MB
128MB RAM 256MB RAM
256MB Swap 512MB Swap
6GB 硬盘 10GB 硬盘
100GB 流量 150GB 流量
1 IP 1 IP
36美元每年 8.4美元每月

没有服务器硬件配置信息。