2013年11月30日星期六

BootCamp 5.0 最新版驱动下载(Win8/Win7)

用苹果iMac或者Macbook笔记本玩Windows么?那么这个文章和最新版的BootCamp 5.0.5033下载对你会有帮助。Boot Camp 5 这个新版本并不是4月份刚发的,而是苹果在3月份发布,因为有网友索要,因此特别在IT之家补上。
当买回iMac、Macbook Pro(含 Retina)、Macbook Air 新款电脑和本本后,很多国内消费者习惯性的去安装Win7Win8。不管你是彻底抹掉Mac OS X分区单装Win7、单装Win8,还是双系统保留Mac OS用Boot Camp来安装第二个系统,你都需要苹果官方最新的驱动程序下载。实际上,在Mac OS里面用Boot Camp来安装Windows 的时候,有一步是提示你下载保存Boot Camp for Windows这个苹果官方驱动包的。一般情况下,软媒小编建议大家关注并下载最新版本的Boot Camp,毕竟每次更新都能解决N多的兼容性问题,尤其是Windows8系统。
微软在2012年正式发布了Windows8正式版,但知道2013年的3月份,苹果才迟迟的推出了为Win8和Win7精心准备的驱动软件套装——BootCamp 5.0.5033 正式版驱动下载。这个版本解决了非常多的大小问题,之前当你使用Mac OS X系统里面自带的BootCamp 4 的驱动的时候,你会发现在Windows8系统里会出现发热厉害、电池表现差、系统不稳定等一些毛病,现在2013年最新版本的BootCamp 5.0 一出,完美的解决了Win8和Win7下因驱动造成的一系列问题,同时,显卡驱动方面的带来了游戏性能的大提升也是非常好的消息。
强烈建议所有安装了 Win8 的 Mac 电脑用户升级 BootCamp,基本上2010年之后的 Macbook Pro、Air、Mini 以及 iMac 均能完美支持 BootCamp 5 以及 Win8,而早于此日期的大多产品只能使用 BootCamp 4 与 Win7 了,苹果将不再提供升级了。新版本的 BootCamp 除了解决了 Win8 驱动的一系列bug之外,显卡驱动的游戏性能也有了不小提升哦……
BootCamp 5.0 版本更新简介
BootCamp 是苹果电脑的 Windows 驱动程序包的名称,BootCamp 5 主要提供了一系列的关键Bug修正和 Windows 8 系统下的硬件驱动更新,包括最新的 Macbook Pro Retina 视网膜屏幕、雷电接口、USB 3.0、Apple Trackpad触控板及所有主板芯片、WiFi网卡、声卡、蓝牙、键盘输入以及显卡的驱动等。为了你的爱机着想,使用 Mac 安装 Windows 的朋友应该没理由不更新它的。当然如果你不是使用苹果电脑的话可以完全无视这篇文章。
除了支持Win7和Win8系统这一功能之外,Boot Camp 5.0还将可以让用户在他们的Mac机中安装3TB的硬盘驱动。不过,用户在安装之前必须要确保自己的系统已经升级到OS X 10.8.3,Safari已经升级到6.0.3。
BootCamp 5 支持机型与操作系统:
基本上大部分主流的 Mac 电脑都可以升级到 BootCamp 5,包括 MacBook,Mac Mini,MacBook Pro,MacBook Air,iMac 都可以,一些如2009年前及之前的旧型号则不支持,只能安装 BootCamp 4。最简单的判断办法就是,先将 BootCamp 5 下载回去,如果安装时提示错误的话就乖乖去下回 BootCamp 4 吧。而对于操作系统的要求,Win8 和 Win7 下可以装5或4,而在 XP、Vista 下则最高只能安装4。另外 BootCamp 5 只支持64位的系统。
BootCamp 主要用于安装原生的 Windows 系统时使用,如果你使用 Parallels Desktop、VMware Fusion、VirtualBox 等虚拟机软件安装 Windows 的话是不需要安装这个驱动的。
BootCamp 5.0.5033 最新版 for Win7/Win8 下载:
Boot Camp 5 苹果官方网站:http://www.apple.com.cn/support/bootcamp/
Boot Camp 5.0.5033 苹果官方下载(简体中文版):
http://support.apple.com/downloads/DL1638/zh_CN/BootCamp5.0.5033.zip 
建议使用魔方优化大师里面的魔方U盘启动软件,来制作微软原版的Win7、Win8系统安装U盘,魔方最新版下载:点击此处
软件版本:5.0.5033
发布日期:2013-3-14
文件大小:553.62 MB
系統需求: MacBook Air(2011 年中)或更新机型、MacBook Pro(2010 年中)或更新机型、* 不支持 MacBook Pro 13 英寸 - 2010 年中、Mac Pro(2009 年初)或更新机型、Mac mini(2011 年中)或更新机型、iMac(2010 年中或更新机型)、Windows 7 x64、Windows 8 x64
软媒再次提示一:BootCamp 5.0 只支持64位的Win7或Win8系统;
软媒再次提示二:2009年前及之前的旧型号苹果Mac电脑则不支持使用BootCamp 5.0,建议依然使用BootCamp 4系列;
BootCamp 5.0.5033 最新版 for Win7/Win8 使用方法:
1、在Win7或Win8系统里将整个 .zip 文件内容解压到您指定存放的地方;
2、运行Boot Camp 文件夹里面的 setup 文件;软媒提醒:如果你抹掉了Mac OS所需的BootCamp隐藏分区,就别运行Setup了,直接找文件夹里面的驱动手动安装就可以了。
3、系统提示允许更改时,点按“是”然后按照屏幕上的说明操作。安装可能需要几分钟。请勿中断安装进程。安装完成后,在出现的对话框中点按“完成”。
4、系统重新启动对话框会出现。点按“是”以完成安装。 

2013款MacBook Air装Windows7单系统


经过两天的摸索,查找无数资料终于把2013款的MacBook Air装上了WIN 7,虽然网上有很多的资料但是都不是我想要的,第一个我的是2013款的MacBook Air,跟原来2012 11款MacBook Air完全不一样,2013款MacBook Air需要usb3的芯片驱动,要不会在装的时候导致鼠标键盘失灵,所以我们要把usb3装到系统映像文件里面,第二个我要在2013款MacBook Air装Win7单系统(这是个人喜好,苹果再占个系统会感觉很不爽),好了,我们知道我的需求之后就开始行动吧

首先准备工作:

2个4G的U盘,这样为了方便,一个U盘来做PE(最低要求WIN7PE,WIN8也行的,我这用的老毛桃),一个U盘来做系统的启动盘

要准备硬件就这么多了

第一步:做系统盘(苹果电脑下完成)

在苹果OS X系统下打开bootcamp,拷贝你的系统镜像文件到桌面,插入的U盘,这个U盘就是来做系统的启动盘了,bootcamp里面的做系统盘相信大家一看就明白了,就不多说了,大概可能就不到一个小时就完成了,完了之后就拔下U盘吧,注意:安装单系统的话就不要在bootcamp下安装系统,那个是安装双系统的



第二步:做PE启动盘(WIN 7 或WIN 8电脑下完成)

我用的时老毛桃,可以百度搜索一下老毛桃,下载最新的那个就可以了,不懂做PE的可以去百度一下。



第三步:格式化苹果系统(苹果电脑下完成)

插入你做好的PE的U盘,按下开机键时会听到苹果电脑会响一声,这时尽快按option键就会进入选择启动的系统,你会看到除了OS X系统之后后面多了一个windows系统,没错,那个就是刚刚做的PE,点PE进去系统,用DiskGenius分区工具删掉所有分区,不要犹豫,删掉苹果系统吧,然后选择磁盘,编辑选择转换成MBR格式,因为windows系统是要在MBR格式的硬盘下安装,苹果的好像是GUID什么的去了,不用管它是什么了,转换MBR格式之后然后可以用快速分区也行,按照你自己的爱好分为3个或者4个都没问题。好了,现在你的苹果系统已经没了,你开机就没有系统了,要想回去也行,开机的时候按option+command+R 联网恢复OS X系统可能需要8小时左右(可能我这网速比较慢)



第四步:把usb3芯片驱动载入到系统盘里面去(最重要的一步)

首先我们在微软的官网下载了intel c220的usb3的驱动,点击这里直接下载吧,本人就用这个亲测可用

Intel(R)_USB_3.0_eXtensible_Host_Controller_Driver.zip

下载完之后在某个盘下新建一个文件夹,为了方便,最好英文名的,如aaa。在这个文件夹下面再建立两个文件夹,一个叫usb3,一个叫mount   。
 用上面下载好的usb3驱动。一个压缩包。解压后里面drivers文件夹下有hcsswitch和xhci两个文件夹,根据你安装的win7版本32位还是64位选择相应的文件。不管是哪个版本,应该都是12个文件,拷贝出来放到刚才建立的usb3文件夹里面。
 把boot.wim和install.wim两个文件拷贝到你建立的那个母文件夹(即里面有usb3和mount的,aaa目录下)。这两个文件在win7安装盘的sources文件夹里。
windows下用管理员模式运行cmd。并进入你刚才建立的母文件夹。
 比如你在d盘建立了aaa文件夹,那你需要打两条命令:
d:回车
cd aaa 回车(我擦,回车这词暴露年龄)
 然后继续输入下面的命令。
dism /mount-wim /wimfile:boot.wim /index:2 /mountdir:mount
 dism /image:mount /add-driver /driver:usb3\iusb3hub.inf
 dism /image:mount /add-driver /driver:usb3\iusb3xhc.inf
 dism /image:mount /add-driver /driver:usb3\iusb3hcs.inf
 dism /unmount-wim /mountdir:mount /commit
上面五条命令目的是给boot.wim添加驱动。第一条的意思是挂载镜像,然后是三条添加驱动的命令,最后一条命令是把镜像卸载。
 同理,把里面的boot.wim都替换成install.wim就可以给install.wim加驱动。install.wim文件比较大,所以会花些时间。
 注意!:挂载install.wim的命令里,针对你挂载的win7版本不同,index:后面的数字也是不同的,建议大家用旗舰版,旗舰版的话对应的数字是4,即挂载的那条命令里要打
index:4
两个文件加入驱动完成后,拷贝回原来的sources文件夹,这样win7的安装盘添加驱动就完成了。



第五步:安装WINDOWS7

用刚刚添加了驱动的win7 安装盘插入到macbook air 上面,按下电源键的同时一样按option键,进入选择windows系统,好了,安装步骤你应该都知道了,祝大家能安装成功

为了很多小伙伴可能看不懂我这些步骤,下面本人提供一个windows7 旗舰版添加了USB3驱动的镜像文件,用苹果自带的bootcamp做好安装盘直接装就可以了,那个添加USB3的步骤就省了



注:如有不懂的小伙伴可以留言联系我,本文绝对原创在博客园发表,网上经本人查找基本上没找到说这个的文章....

如何在 VMware ESXi 虚拟机上运行 KVM

记得以前就有人问过 “能不能在一个虚拟机上运行虚拟机”,答案当然是可以的,Xen HVM, KVM, VMware, Qemu 等 Hypervisor 都可以这样嵌套虚拟,不过由于性能低下实际用处不大。在 VMware ESXi 虚拟机上运行虚拟机,被称为多层虚拟或者嵌套虚拟机(Nested VMs)。如果只有一台电脑想测试多节点 OpenStack 环境的话,使用 VMware ESXi 虚拟几个运行 KVM Hypervisor 的 OpenStack 计算节点是个不错的办法。VMware ESXi 5.0 默认情况下不支持嵌套虚拟,所以在 VMware ESXi 虚拟机里安装完 KVM 以后会发现 KVM 虽然能装但不可用:
# kvm-ok 
INFO: Your CPU does not support KVM extensions
KVM acceleration can NOT be used
解决办法很简单:1、修改 VMware ESXi 的设置;2、修改对应虚拟机的设置。
登陆 VMware ESXi 控制台打开 VMware ESXi 5.0 的 SSH 服务(默认 SSH 服务是关闭的),然后用 ssh 登陆 VMware ESXi 后在 config 文件中最后加入 vhv.allow = “TRUE” 一行:
# vi /etc/vmware/config
libdir = "/usr/lib/vmware"
authd.proxy.vim = "vmware-hostd:hostd-vmdb"
authd.proxy.nfc = "vmware-hostd:ha-nfc"
authd.proxy.nfcssl = "vmware-hostd:ha-nfcssl"
authd.proxy.vpxa-nfcssl = "vmware-vpxa:vpxa-nfcssl"
authd.proxy.vpxa-nfc = "vmware-vpxa:vpxa-nfc"
authd.fullpath = "/sbin/authd"
authd.soapServer = "TRUE"
vmauthd.server.alwaysProxy = "TRUE"
vhv.allow = "TRUE"
重启 VMware ESXi 后编辑虚拟机选项(需要先关闭虚拟机),打开 Edit virtual machine settings 对话框,在 options 页面的 General Options 选项里把 Guest Operating System 的类型换成 Other 里面的 VMware ESxi 5.x,如图:
running nested vms on vmware esxi
最后启动虚拟机后再 kvm-ok 一下就可以看到 KVM 可以用了:
# kvm-ok 
INFO: /dev/kvm exists
KVM acceleration can be used
相关阅读:
在 CentOS 上安装和配置 KVM.
在 VMware ESXi 上安装 Minix.
在 VMware ESXi 虚拟机上运行不同的 Hypervisor 可以看看 VMware 的 Running Nested VMs.

OneStack:分步部署 All-in-One 的 OneStack 实验环境

囧,上次 OneStack 项目作者 Kayven 发过来的 OneStack 介绍和配置的文章只发了一半就忘了(本来打算分两部分发的~),今天在草稿箱里把这部分整理出来了,希望文章内容还没有过时(OpenStack 和 Ubuntu 版本都有了很大变化 …)。
前部分介绍请看:OneStack:Ubuntu 12.04 上一键自动部署 OpenStack。下面介绍的是用 OneStack 分步部署 OpenStack 的方法:
1、切换 root,或者用 sudo 执行脚本:
$ sudo -i
2、(可选,如果不需要跳过本步骤):
系统语言设置,可以参考 oneStack.sh locale 部分,不在此介绍。比如设置 apt 源:
# vi /etc/apt/sources.list
3、设置网络(可以参考 oneStack.sh locale 部分):
# vi /etc/network/interfaces
4、配置参数,除了网络 ip,其它可以不变:
## 数据库
MYSQL_PASSWD=${MYSQL_PASSWD:-"cloud1234"}
## 自行检查下面network/interfaces的两个网卡设置与此处一致
OUT_IP="192.168.139.50"
## 选择虚拟技术,裸机使用kvm,虚拟机里面使用qemu
VIRT_TYPE="qemu"
## token, 登录dashboard密码
ADMIN_TOKEN="admin"
5、部署基本系统
./setup_base.sh
6、添加镜像(Ubuntu12.04),添加一个实例,注意:里面的 ip 需要自己配置,镜像地址可以自己改动:
./setup_test.sh
7、分别部署控制节点和计算节点:
控制节点同上,可以去掉 nova-compute;
计算节点,只需要配置网络、数据库、虚拟机技术即可。
配置参数,除了计算节点 ip,其余与控制节点相同(包括 nova.conf 里的 ip)自行检查下面 network/interfaces 的两个网卡设置:
ServerControlIP=”192.168.139.50″
computeControlIP=”192.168.139.150″ # 本计算节点的外网IP
## token, 登录 dashboard 密码
ADMIN_TOKEN="admin"

## 网络配置
NETWORK_CONF=${NETWORK_CONF:-"/etc/network/interfaces"}
cat <$NETWORK_CONF
# The primary network interface
auto eth0
iface eth0 inet static
pre-up ifconfig eth0 hw ether b8:ac:6f:9a:ee:e5 #不需要绑定网卡的不需要这一行
        address 192.168.139.51 #外网ip
auto eth1
iface eth1 inet static
pre-up ifconfig eth1 hw ether b8:ac:6f:9a:ee:e5
        address 10.0.0.2 #内网IP

INTERFACES
sed -i -e "s/192.168.139.51/$computeControlIP/g" $NETWORK_CONF
/etc/init.d/networking restart
注意:以下与控制节点相同
## 配置 /etc/nova/nova.conf,这里与控制节点的配置相同!比如ip是控制节点的ip
MYSQL_PASSWD=${MYSQL_PASSWD:-"cloud1234"}
NOVA_DB_USERNAME=${NOVA_DB_USERNAME:-"novadbadmin"}
NOVA_DB_PASSWD=${NOVA_DB_PASSWD:-"cloud1234"}
OUT_IP="192.168.139.50" 
……
## 选择虚拟技术,裸机使用 kvm,虚拟机里面使用 qemu
VIRT_TYPE="qemu"
7、执行 ./addComputeNode.sh
./addComputeNode.sh
如果对这篇有任何技术问题请直接咨询 OneStack 项目的原作者 Kayven (Hily.Hoo@gmail.com),git/github 粉也可以从这里获得源码: https://github.com/Kayven/OneStack

DMTCP 分布式多线程检查点工具

高性能计算/分布式计算等大量计算需要程序运行几天、几周甚至几个月,如果期间因为电力或者不可避免的问题导致程序中断会浪费大量的时间和人力,还有超级计算机在这段时间里运行的电力成本。我们没有遇到过电力问题,不过我们最近遇到的场景是实验室需要做强制安全检查,要求关闭所有电脑,所以我们需要一种工具能设置断点暂停程序、把状态保存到硬盘、再按照要求恢复,就像程序员用 IDE 调试程序一样,设置断点、单步跟踪(或恢复运行)。
在多主机、多线程的复杂分布式计算环境,给程序设置断点不是一件容易的事情,因为程序的某部分可能在其他主机上运行。DMTCP: Distributed MultiThreaded CheckPointing 是我们目前正在考察的一个工具之一,我们喜欢它的一个原因是它不需要修改 Linux 内核,不依赖内核和内核模块。

安装

先安装一些编译 DMTCP 需要用到的软件包:
$ sudo apt-get install build-essential
下载 DMTCP 源代码后,解压、配置、编译、安装:
$ wget http://ufpr.dl.sourceforge.net/project/dmtcp/dmtcp/1.2.7/dmtcp-1.2.7.tar.gz
$ tar zxvf dmtcp-1.2.7.tar.gz
$ cd dmtcp-1.2.7
$ make
$ sudo make install
我们先来看一个例子程序,转到 dmtcp-1.2.7 里的 test 目录运行 dmtcp1,这个例子很简单,按照顺序输出 1 2 3 … 数字:
$ cd test
$ ./dmtcp1
  1   2   3   4   5   6 ^C
接下来我们要试验的是,中断这个例子程序,然后看看能不能恢复它。步骤是:
  1. 启动控制端 dmtcp_coordinator;
  2. 用 dmtcp_checkpoint 运行这个 dmtcp1 程序;
  3. 强制中断 dmtcp1;
  4. 恢复运行 dmtcp1.

使用

开另外一个窗口或者 screen 运行控制端 dmtcp_coordinator,用 l 查看当前节点状态:
$ dmtcp_coordinator
dmtcp_coordinator starting...
    Port: 7779
    Checkpoint Interval: disabled (checkpoint manually instead)
    Exit on last client: 0
Type '?' for help.

?
COMMANDS:
  l : List connected nodes
  s : Print status message
  c : Checkpoint all nodes
  i : Print current checkpoint interval
      (To change checkpoint interval, use dmtcp_command)
  f : Force a restart even if there are missing nodes (debugging only)
  k : Kill all nodes
  q : Kill all nodes and quit
  ? : Show this message

l
Client List:
#, PROG[PID]@HOST, DMTCP-UNIQUEPID, STATE
[7845] NOTE at dmtcp_coordinator.cpp:1039 in onConnect; REASON='worker connected'
     hello_remote.from = b51cf8-7846-516fbedc(-1)
然后重新用 dmtcp_checkpoint 运行 dmtcp1 这个例子程序:
$ dmtcp_checkpoint ./dmtcp1
dmtcp_checkpoint (DMTCP + MTCP) 1.2.7
Copyright (C) 2006-2011  Jason Ansel, Michael Rieker, Kapil Arya, and
                                                       Gene Cooperman
This program comes with ABSOLUTELY NO WARRANTY.
This is free software, and you are welcome to redistribute it
under certain conditions; see COPYING file for details.
(Use flag "-q" to hide this message.)

  1   2   3
回到控制端,l 一下就会看到多了条结点状态,dmtcp1 程序[进程号 7846]运行在主机名为 vpseedev 的主机上。
l
Client List:
#, PROG[PID]@HOST, DMTCP-UNIQUEPID, STATE
1, dmtcp1[7846]@vpseedev, b51cf8-7846-516fbedc, RUNNING
现在我们在控制端设置一个检查点(checkpoint),用 c 命令:
c
[7845] NOTE at dmtcp_coordinator.cpp:1315 in startCheckpoint; REASON='starting checkpoint, suspending all nodes'
     s.numPeers = 1
[7845] NOTE at dmtcp_coordinator.cpp:1317 in startCheckpoint; REASON='Incremented Generation'
     UniquePid::ComputationId().generation() = 1
[7845] NOTE at dmtcp_coordinator.cpp:643 in onData; REASON='locking all nodes'
[7845] NOTE at dmtcp_coordinator.cpp:678 in onData; REASON='draining all nodes'
[7845] NOTE at dmtcp_coordinator.cpp:684 in onData; REASON='checkpointing all nodes'
[7845] NOTE at dmtcp_coordinator.cpp:694 in onData; REASON='building name service database'
[7845] NOTE at dmtcp_coordinator.cpp:713 in onData; REASON='entertaining queries now'
[7845] NOTE at dmtcp_coordinator.cpp:718 in onData; REASON='refilling all nodes'
[7845] NOTE at dmtcp_coordinator.cpp:747 in onData; REASON='restarting all nodes'
[7845] NOTE at dmtcp_coordinator.cpp:919 in onDisconnect; REASON='client disconnected'
     client.identity() = b51cf8-7846-516fbedc
然后用 Ctrl + c 强制中断这个正在运行的 dmtcp1:
$ dmtcp_checkpoint ./dmtcp1
dmtcp_checkpoint (DMTCP + MTCP) 1.2.7
Copyright (C) 2006-2011  Jason Ansel, Michael Rieker, Kapil Arya, and
                                                       Gene Cooperman
This program comes with ABSOLUTELY NO WARRANTY.
This is free software, and you are welcome to redistribute it
under certain conditions; see COPYING file for details.
(Use flag "-q" to hide this message.)

  1   2   3   4   5   6   7   8 ^C
这样在当前目录 test 下会生成一个临时文件用来保存程序镜像(稍后会看到就是通过这个文件来恢复程序的):
$ ls -l ckpt_dmtcp1_b51cf8-7846-516fbedc.dmtcp
-rw------- 1 vpsee vpsee 2532431 Apr 18 09:37 ckpt_dmtcp1_b51cf8-7846-516fbedc.dmtcp
用 dmtcp_restart 恢复就会看到 dmtp1 这个例子程序(从它中断的地方)继续运行了:
$ dmtcp_restart ckpt_dmtcp1_b51cf8-7846-516fbedc.dmtcp
dmtcp_checkpoint (DMTCP + MTCP) 1.2.7
Copyright (C) 2006-2011  Jason Ansel, Michael Rieker, Kapil Arya, and
                                                       Gene Cooperman
This program comes with ABSOLUTELY NO WARRANTY.
This is free software, and you are welcome to redistribute it
under certain conditions; see COPYING file for details.
(Use flag "-q" to hide this message.)

  9  10  11  12 ^C
DMTCP 甚至允许我们把运行了一半的程序暂停、保存到硬盘、拷贝到其他服务器上、继续运行,很酷吧~

在 CentOS 6.4 上安装 CloudStack 4.2

又到年底,下月开始休假,所以这周基本上算今年 “努力” 的最后一周,接下来六周都不会有技术文章更新。
和 OpenStack, OpenNebula 类似,CloudStack 是另一款开源云计算平台。CloudStack 的前身是 Cloud.com 家的一款商业云计算产品(也有开源版本),2011年 Cloud.com 被 Citrix 收购,2012年的时候 Citrix 将收购的云平台 CloudStack 全部捐给了 Apache 基金会,自己则以 Citrix CloudPlatform (powered by Apache CloudStack) 的形式为客户提供商业化的云计算解决方案。
按照《OpenStack, OpenNebula, Eucalyptus, CloudStack 社区活跃度比较》的统计,貌似 CloudStack 项目的活跃程度仅次于 OpenStack. 和大多数云计算、集群软件一样,CloudStack 也是控制节点+计算节点这种架构,控制节点(cloudstack-management)用来统一管理计算节点,提供资源分配和任务,提供 API、GUI、数据库等服务;计算节点(cloudstack-agent)则用来跑虚拟机。我们需要做的是,
  • 在控制节点上安装 cloudstack-management;
  • 在(每个)计算节点上安装 cloudstack-agent 和 kvm.

在控制节点上

安装完 CentOS 6.4 系统后,升级系统并修改 hostname 后重启:
# yum update

# echo "cloudstack.vpsee.com" > /etc/hostname

# vi /etc/sysconfig/network
NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME=cloudstack.vpsee.com

# echo "192.168.2.150 cloudstack cloudstack.vpsee.com" >> /etc/hosts

# reboot
添加 cloudstack 软件包的官方源,安装 ntp, cloudstack-management, mysql 数据库服务器:
# vi /etc/yum.repos.d/cloudstack.repo
[cloudstack]
name=cloudstack
baseurl=http://cloudstack.apt-get.eu/rhel/4.2/
enabled=1
gpgcheck=0

# yum update

# yum install ntp
# yum install cloudstack-management
# yum install mysql-server
修改 mysql 配置文件,加入下面几行,启动 ntp, mysql 服务并运行 mysql_secure_installation 给 mysql 设置密码:
# vi /etc/my.cnf
...
[mysqld]
...
innodb_rollback_on_timeout=1
innodb_lock_wait_timeout=600
max_connections=350
log-bin=mysql-bin
binlog-format = 'ROW'

[mysqld_safe]
...


# service ntpd start
# chkconfig ntpd on

# service mysqld start
# chkconfig mysqld on

# mysql_secure_installation
修改 SELINUX 设置,并配置防火墙允许访问 mysql 的 3306 端口:
# vi /etc/selinux/config
...
SELINUX=permissive
...

# setenforce permissive

# vi /etc/sysconfig/iptables
...
-A INPUT -p tcp --dport 3306 -j ACCEPT
...

# service iptables restart
使用 cloudstack-setup-databases 初始化 ClouStack 数据库,完成后运行 cloudstack-setup-management:
# cloudstack-setup-databases cloud:cloud@localhost --deploy-as=root:root -i 192.168.2.150

# cloudstack-setup-management
Starting to configure CloudStack Management Server:
Configure sudoers ...         [OK]
Configure Firewall ...        [OK]
Configure CloudStack Management Server ...[OK]
CloudStack Management Server setup is Done!
控制节点应该和存储分开,这里为了方便,我们把 NFS 也装在这个控制节点上,并自己挂载自己的 NFS 分区:
# yum install nfs-utils
# mkdir -p /export/primary
# mkdir -p /export/secondary

# vi /etc/exports
/export  *(rw,async,no_root_squash,no_subtree_check)

# exportfs -a
# vi /etc/sysconfig/nfs
...
LOCKD_TCPPORT=32803
LOCKD_UDPPORT=32769
MOUNTD_PORT=892
RQUOTAD_PORT=875
STATD_PORT=662
STATD_OUTGOING_PORT=2020
...

# service rpcbind start
# service nfs start
# chkconfig nfs on
# chkconfig rpcbind on
# reboot

# mkdir -p /mnt/primary
# mkdir -p /mnt/secondary
# mount -t nfs 192.168.2.150:/export/primary /mnt/primary
# mount -t nfs 192.168.2.150:/export/secondary /mnt/secondary
修改防火墙配置,开放下面一些端口:
# vi /etc/sysconfig/iptables
...
-A INPUT -s 192.168.2.0/24 -m state --state NEW -p udp --dport 111 -j ACCEPT
-A INPUT -s 192.168.2.0/24 -m state --state NEW -p tcp --dport 111 -j ACCEPT
-A INPUT -s 192.168.2.0/24 -m state --state NEW -p tcp --dport 2049 -j ACCEPT
-A INPUT -s 192.168.2.0/24 -m state --state NEW -p tcp --dport 32803 -j ACCEPT
-A INPUT -s 192.168.2.0/24 -m state --state NEW -p udp --dport 32769 -j ACCEPT
-A INPUT -s 192.168.2.0/24 -m state --state NEW -p tcp --dport 892 -j ACCEPT
-A INPUT -s 192.168.2.0/24 -m state --state NEW -p udp --dport 892 -j ACCEPT
-A INPUT -s 192.168.2.0/24 -m state --state NEW -p tcp --dport 875 -j ACCEPT
-A INPUT -s 192.168.2.0/24 -m state --state NEW -p udp --dport 875 -j ACCEPT
-A INPUT -s 192.168.2.0/24 -m state --state NEW -p tcp --dport 662 -j ACCEPT
-A INPUT -s 192.168.2.0/24 -m state --state NEW -p udp --dport 662 -j ACCEPT
...

# service iptables restart
# service iptables save
创建虚拟机需要有模版,这个模版可以自己做,也可以下载官方现成的。需要注意的是,官方文档中的 /usr/lib64/cloud/common/… 路径不对,应该是 /usr/share/cloudstack-common/…:
# /usr/share/cloudstack-common/scripts/storage/secondary/cloud-install-sys-tmplt -m /mnt/secondary -u http://d21ifhcun6b1t2.cloudfront.net/templates/4.2/systemvmtemplate-2013-06-12-master-kvm.qcow2.bz2 -h kvm -s -F

在计算节点上

为了保持一致,我们在计算节点上也采用 CentOS 6.4. 在每个计算节点上都需要如下的安装和配置。升级系统并修改 hostname、重启:
# yum update

# echo "cloudstack01.vpsee.com" > /etc/hostname

# vi /etc/sysconfig/network
NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME=cloudstack01.vpsee.com

# echo "192.168.2.151 cloudstack01 cloudstack.vpsee.com" >> /etc/hosts

# reboot
添加 cloudstack 软件包的官方源,安装 ntp, cloudstack-agent 和 kvm:
# vi /etc/yum.repos.d/cloudstack.repo
[cloudstack]
name=cloudstack
baseurl=http://cloudstack.apt-get.eu/rhel/4.2/
enabled=1
gpgcheck=0

# yum update

# yum install ntp
# yum install cloudstack-agent
# yum install qemu-kvm
修改 libvirt 相关配置文件,去掉下面几行的注释,注意把 auth_tcp 改成 “none”,如果需要 vnc 访问的话别忘了取消 qemu.conf 里面的 vnc_listen 相关注释,重启 libvirtd 服务使配置生效:
# vi /etc/libvirt/libvirtd.conf
...
listen_tls = 0
listen_tcp = 1
tcp_port = "16509"
auth_tcp = "none"
mdns_adv = 0
...

# vi /etc/sysconfig/libvirtd
...
LIBVIRTD_ARGS="--listen"
...

# vi /etc/libvirt/qemu.conf
...
vnc_listen = "0.0.0.0"
...

# service libvirtd restart
别忘了让防火墙开放必要的端口:
# iptables -I INPUT -p tcp -m tcp --dport 22 -j ACCEPT
# iptables -I INPUT -p tcp -m tcp --dport 1798 -j ACCEPT
# iptables -I INPUT -p tcp -m tcp --dport 16509 -j ACCEPT
# iptables -I INPUT -p tcp -m tcp --dport 5900:6100 -j ACCEPT
# iptables -I INPUT -p tcp -m tcp --dport 49152:49216 -j ACCEPT
# iptables-save > /etc/sysconfig/iptables

测试

打开浏览器,访问控制节点 http://192.168.2.150:8080/client/ 就会看到登录界面,默认用户名和密码是 admin/password,登录后修改密码、做一些配置后就可以开始用了:
a docker web ui

用 Google Docs 监控网站是否在线

监控服务器、VPS 的工具和服务有很多,比如开源工具就有 Nagios, Cacti, Zabbix, Zenoss, Ganglia, … 如果自己不想 host 这些监控软件的话,可以考虑外包给第三方服务,比如 Pingdom, ServerDensity, ScoutApp, PagerDuty 等都做的很棒。如果自己要求不多、只是想监控一下网站(而不是整个服务器的各个性能指标的话)可以考虑一些免费监控服务,比如 monitor.us, SiteUptime, Montastic, site24x7 … 这里介绍的是完全不同的另类办法,用 Google Docs 来监控网站,还包括免费的手机报警功能哦~
点击 这里 会新建一个页面询问是否要拷贝一个文档:
Google Docs
Make a new copy of this document?
This copy will appear in your document list.
Yes, make a copy.
选择 Yes, make a copy. 后就会在自己的 Google Docs 里面生成一个名为 Copy of Website Monitor 的文件,按照提示填写要监控的Wbsite URLs,监控报警用的 Email Address,短信提示 SMS Notifications 就可以了。
Website URLs ::
Email Address ::
SMS Notifications ::
Help ::
填写完后再运行菜单上的 Website Monitor 的 Step1: Initialize 和 Step2: Start,不用了的话就 Uninstall (Stop). 默认的监控频率是每5分钟检查网站一次。
using google docs monitoring website uptime
如果对背后的代码有兴趣的话,可以看看原文 Website Monitor with Google Docs.

使用浏览器访问 Linux 终端

wssh 可以让我们通过 HTTP 来调用远程的一个 shell,也就是说我们可以用浏览器来访问某个 Linux 服务器/虚拟机的终端(只要这个服务器上运行了 wsshd 服务器端)。wssh 客户端通过 ssh 帐号连接到 wsshd 服务器端。wssh 更多的是当作库来开发一些应用,比如开发云计算、虚拟机后台控制面板的虚拟机控制台等等。我们先来玩一下简单的~
安装一些必要软件:
$ sudo apt-get install git gcc python libevent-dev python-dev python-pip
安装 wssh 需要的各种 Python 库:
$ sudo pip install gevent gevent-websocket paramiko flask
下载并安装 wssh:
$ git clone https://github.com/aluzzardi/wssh.git
$ cd wssh
$ sudo python setup.py install
运行 wsshd:
$ wsshd
wsshd/0.1.0 running on 0.0.0.0:5000
从浏览器打开 http://IP:5000 后会看到如下登陆界面:
wssh
使用 ssh 帐号登陆后就可以看到终端了:

央行划界P2P行业红线 涉嫌非法集资



据第一财经消息,11 月 25 日,由银监会牵头的九部委处置非法集资部际联席会议上,网络借贷与民间借贷、农业专业合作社、私募股权领域非法集资等一同被列为须高度关注的六大风险领域。同时人民银行条法司相关人士给出了明确的风险警示,要求明确P2P网络借贷平台的业务经营红线。
“应当在鼓励P2P网络借贷平台创新发展的同时,合理设定其业务边界,划出红线,明确平台的中介性质,明确平台本身不得提供担保,不得归集资金搞资金池,不得非法吸收公众存款,更不能实施集资诈骗。”央行负责人强调。
在央行提供的材料中,对当前一些P2P平台搞的理财产品“资金池”等模式涉嫌非法吸收公众存款和集资诈骗,做出了相对明确的界定。
据 P2P 行业门户“网贷之家”统计,10 月以来出现倒闭或资金链断裂的 P2P 平台已经达到 39 家,涉及大约 10 亿元资金。

说说 JavaEye 网站架构

偶然看到了Robbin的一篇文章,说到了一些JavaEye的一些实现解密,那就来看看有哪些有意思的东西。
我正在参与做的一个项目,在某某地方上线,需要几十块单板集群;在某某地方上线,又需要怎样的一个集群组网。咋听起来兴许觉得能有怎样的业务逻辑处理和怎样的用户量呢?可是JavaEye让我很吃惊,我先前只知道与CSDN比起来,JavaEye确实是一个小规模一些的网站,专业一些的网站,可是服务器呢?只有两台!
这是那台Web Server:
• AMD Opteron 2.4GHz单核 * 2 颗
• 8G内存
• 146G SCSI硬盘
这是那台DBServer:
• AMD Opteron 2.0GHz单核 * 2 颗
• 4G内存
• 73G SCSI硬盘
实在不能说有多么优秀的硬件配置,JavaEye又得面对怎样的访问量呢?
150万动态请求/天
image
这个是JavaEye封杀网络爬虫的简单匹配表达式:
image
JavaEye采用Ruby作为实现语言,看来Ruby很慢是没有说头的,看看Google Adplanner Data:
image
这张图表就很有意思了:
image
CSDN拥有JavaEye的3.5倍访问量,但使用了三十多台服务器集群,中国最大的几个IT站点,使用ASP.NET、Ruby、PHP的都有,但看起来JavaEye的性能或许是最佳的。
-----------------------------------------------------------------------------------------------------------------------------------------------------
JavaEye网站架构进化:
(1)2006年9月
• lighttpd
• ruby 1.8.4, rails 1.1.2, 以fastcgi方式运行
• mysql5.0
FastCGI像是一个常驻(long-live)型的CGI,它可以一直执行着,只要激活后,不会每次都要花费时间去fork一次(这是CGI最为人诟病的fork-and-execute 模式)。因为是多进程,所以比CGI多线程消耗更多的服务器内存,举例来说,PHP-CGI解释器每进程消耗7至25兆内存,将这个数字乘以50或100就是很大的内存数。
其实小网站来说,使用FastCGI+Lighttpd是一个非常优秀的组合
(2)2007年1月
• 添加了第2台服务器
• 把web和DB分开
• 系统瓶颈在数据库IO端
系统瓶颈出现在DB IO上面是很正常的,我自己这边的项目经常遇到在Java侧锁瓶颈,无疑是非常奇怪的,一方面是性能测试的用例未必能反映现网真实情况导致,另一方面我还是觉得当整个架构过于复杂,远程方法过多,就会导致这样的问题。
(3)2007年2月
• 把posts表的大字段剥离出来
• posts表的select count操作从30秒减少到
0.1秒
把大表的大字段剥离出来,这是一种基于性能考虑的常用的DB重构方法
剥离前:
• posts(id, ..., body)
• 磁盘存储空间2GB
剥离后:
• posts(id, post_text_id,...) 50MB
• post_texts(id, body) 2GB
(4)2007年3月
• 数据库瓶颈仍然存在
• 引入memcached和CachedModel
• 自己编写了简单的查询缓存
• 240 sql query/s 下降到 140 sql query/s
• memcached缓存命中率在75%
这一次的改进主要在缓存上面,其实在做性能优化的时候,需要经常关注的一个东西就是缓存命中率。
(5)2007年9月
• 引入全文检索
• 使用ruby的ferret
• 中文分词使用单字拆分法
主要是对搜索引擎的优化。
(6)2008年1月
• JavaEye网站代码重写
• 缓存框架改用cache_fu
• 缓存命中率上升到84%
• sql query下降到 50条/s
回去打算去了解一下cache_fu,这里有两篇文章可以参考:
• cache_fu不对AR对象进行任何拦截,全部交给用户编程
• 用户有完全的控制权,但所有的缓存代码要自己手工编写
(7)2008年5月
• 中文分词算法改用rmmseg-cpp
(8)2008年10月
• 自制山寨cache plugin
• 缓存命中率上升到96%以上
• 抛弃ferret,自己编写全文检索服务器
• 使用Java的lucene作为全文检索引擎
• 自己实现C/S架构的内部调用
(8)2008年11月
• 实现博客,新闻制作PDF功能
(9)2009年3月
• SNS feed功能
• twitter绑定功能
• 开放API
• 废弃Google Analytics
• 自己编写简单的网站流量分析系统
image
(10)2009年12月
• 添加Web IM
• 添加一台服务器
• 合理规划服务器
image
一个生命周期较长的WEB应用每发展到一定阶段一定要面对的是架构上的重组,有时哪怕牺牲一些性能的代价,有时则是牺牲可维护性的代价,带来的是结构层次清晰,便于短期内扩展等好处。这个过程每次都可能是痛苦的,但又是不可避免的。同时,我认为,在项目初期不应当也不可能把架构的融合性和扩展性考虑得太远,那样反而作茧自缚。而在应用发展过程中不断地重构却是更有价值的。
-----------------------------------------------------------------------------------------------------------------------------------------------------
进化总结:
(1)对象缓存原则:
• 数据库表的设计要细颗粒度
• 把有冗余字段的大表拆分为n个互相外键关联的小表
• ORM的性能瓶颈不在于表关联,而在于大表的全表扫描
• 尽量避免join查询,多制造n+1条SQL
上面第一条我觉得还是要看表容量而定,第四条我深有体会,记得在iBatis的使用中还有这样一个专题。
(2)对象缓存的意义:
• Web应用很容易通过集群方式实现横向扩展,系统的瓶颈往往出现在数据库
• 数据库的瓶颈往往出现在磁盘IO读写
• 因此要避免数据库的全表扫描和大表的数据扫描操作
• 如何避免:拆表和臭名昭著的n+1条SQL
……
image
• memcached缓存命中率96%
• cache get : sql query = 4 : 1
另外,Robbin还提到,Ruby的字符串处理,尤其是正则表达式处理性能不好,解决方法也是使用缓存。
cache_money:
• 出自twitter开发团队之手
• 可能是目前最强大的ruby cache框架
• 支持分页查询缓存,支持条件查询缓存
全文检索:
image

金融业摆脱 IOE 束缚 云计算帮助企业减负



“IOE”作为“买计算机”时代的产物,正在被云计算所重塑,变成低成本、高可用的买“计算”时代。
 11月27日,阿里云高调发布金融云服务,借助阿里巴巴集团去“IOE”(IOE分别代表着IBM的小型机,Oracle的数据库,及EMC存储设备)转型云架构的成功经验,把阿里集团大规模的云计算集群资源开放给金融行业用户,使其获得安全、便捷的云计算服务,以摆脱传统IOE的束缚,拥抱互联网金融。
对传统金融企业来说,几乎所有的核心系统都依赖“IOE”的标配。他们每年要为这些设备支付高额的购买与维护费用。但互联网大数据时代已经来临,电子银行蓬勃发展,随之而来的是爆发性增长的用户数量和交易量,这让绝大部分金融企业对计算资源的需求难以通“IOE”来满足。
特别是对于城镇银行来说,科技水平落后仍然是制约其科技创新和产品创新的短板。山西省晋中市榆次融信村镇银行行长薛建华表示,该行三年多来虽然在“支农支小”和发展传统金融业务上有了长足的发展,并取得了全国金融IC卡公共应用试点,但由于没有网银,卡功能的发挥及应用受到诸多限制。今年以来,通过阿里金融云,该行支付宝快捷支付系统即将上线运行。
同样通过云计算受益的,还有像天弘基金这样的证券企业。
天弘基金旗下的余额宝产品,在整个“双十一”期间,购物消费笔数达到1540万笔,购物消费金额37.93亿元,以99.9%以上的支付成功率成为当日成功率最高的支付方式,稳定性远胜网银。这一切,始于其通过云计算展开的去“IOE”创新。
余额宝产品一期是基于传统的“IOE”来设计的,但是系统上线第一天,网站系统就瘫痪了。天弘基金管理有限公司创新支持部总经理樊振华介绍,因为要参与双十一,我们必须选择云计算,选择阿里云金融云服务,因为传统的“IOE”投入产出无法承受这样巨大的成本压力。
天弘基金在其金融产品解决方案提供商金证科技的协助下,通过三个月时间,成为国内第一个将核心系统放在云上的基金公司。使用阿里云金融云服务之后,其交易笔数由原来“IOE”时期的3亿笔,累计上升达到7.2亿笔,成本则节省超过四千万元。
云计算时代,传统硬件、软件及整体解决方案的优势不在。中国最大的电子银行供应商科蓝软件CIO戴林巧介绍,阿里金融云服务不仅将银行人员从繁重的系统建设、运维工作中解脱出来,从而使其能够集中优势人力专注于业务创新。还将银行系统从传统机房的“IOE”中解放出来,提供按需定制、随时增减容的能力,随时应对突发情况,从而最大化的节省成本。
转载请注明作者、来源和原文链接 | 编辑张超