<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>vpsee.com</title>
	
	<link>http://www.vpsee.com</link>
	<description />
	<lastBuildDate>Fri, 01 Jun 2012 12:40:54 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/vpsee" /><feedburner:info uri="vpsee" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>在 CentOS 6.2 上安装和配置 Foreman</title>
		<link>http://feedproxy.google.com/~r/vpsee/~3/IYQinbOw9bs/</link>
		<comments>http://www.vpsee.com/2012/05/instal-and-configure-foreman-on-centos-6-2/#comments</comments>
		<pubDate>Thu, 31 May 2012 06:19:07 +0000</pubDate>
		<dc:creator>vpsee</dc:creator>
				<category><![CDATA[Cloud | Virtualization | Thin]]></category>
		<category><![CDATA[centos]]></category>
		<category><![CDATA[foreman]]></category>
		<category><![CDATA[puppet]]></category>

		<guid isPermaLink="false">http://www.vpsee.com/?p=1772</guid>
		<description><![CDATA[服务器（物理机器和虚拟机）多了以后需要工具来管理，经常登陆系统后不知是在虚拟机上还是在物理机上？如果在虚拟机上这个虚拟机运行在哪个服务器节点（host）上？如果在物理机上运行在什么配置的物理机上？运行在 Dell 刀片服务器上还是 IBM 超级计算机上，SUN 服务器上还是普通 PC 上？这个系统 IP 是多少？域名是啥？有几个网卡？分别走的哪个交换机？有没有连到 SAN 存储等等？无数问题，我们需要一个统一查看和管理所有机器（物理机和虚拟机）的这么一套工具。Foreman 就是这么一个集成了 Puppet 的统一机器生命周期管理工具。 Foreman 功能很强大，可以解决硬件或虚拟机上线到运行 Puppet 之间的一切问题，比如安装操作系统、配置网络、配置 DNS、Puppet 客户端安装认证等等，完成必要的上线工作后，Foreman 就把剩下的工作交给了 Puppet，Puppet 完成剩下的服务器和服务配置工作，这样就完美的完成了从服务器上线到服务上线的全过程，而且是自动的。这里主要介绍用 Foreman 获取（配合 Puppet Facts）和查看服务器信息。 加入 foreman 官方源后安装软件包： # cat > /etc/yum.repos.d/foreman.repo]]></description>
			<content:encoded><![CDATA[<p>服务器（物理机器和虚拟机）多了以后需要工具来管理，经常登陆系统后不知是在虚拟机上还是在物理机上？如果在虚拟机上这个虚拟机运行在哪个服务器节点（host）上？如果在物理机上运行在什么配置的物理机上？运行在 Dell 刀片服务器上还是 IBM 超级计算机上，SUN 服务器上还是普通 PC 上？这个系统 IP 是多少？域名是啥？有几个网卡？分别走的哪个交换机？有没有连到 SAN 存储等等？无数问题，我们需要一个统一查看和管理所有机器（物理机和虚拟机）的这么一套工具。Foreman 就是这么一个集成了 Puppet 的统一机器生命周期管理工具。</p>
<p>Foreman 功能很强大，可以解决硬件或虚拟机上线到运行 Puppet 之间的一切问题，比如安装操作系统、配置网络、配置 DNS、Puppet 客户端安装认证等等，完成必要的上线工作后，Foreman 就把剩下的工作交给了 Puppet，Puppet 完成剩下的服务器和服务配置工作，这样就完美的完成了从服务器上线到服务上线的全过程，而且是自动的。这里主要介绍用 Foreman 获取（配合 Puppet Facts）和查看服务器信息。</p>
<p>加入 foreman 官方源后安装软件包：</p>
<pre class="code">
# cat > /etc/yum.repos.d/foreman.repo << EOF
[foreman]
name=Foreman Repo
baseurl=http://yum.theforeman.org/stable
gpgcheck=0
enabled=1
EOF

# yum install foreman
</pre>
<p>拷贝 foreman 里面的 report 例子到 puppet 下，并更改 $foreman_url 指向这台安装 foreman 的服务器：</p>
<pre class="code">
# cp /usr/share/foreman/extras/puppet/foreman/templates/foreman-report.rb.erb \
/usr/lib/ruby/site_ruby/1.8/puppet/reports/foreman.rb

# vi /usr/lib/ruby/site_ruby/1.8/puppet/reports/foreman.rb
...
$foreman_url='http://foreman.vpsee.com:3000/'
...
</pre>
<p>配置 puppetmaster 服务端，编辑 puppet.conf 配置文件：</p>
<pre class="code">
# vi /etc/puppet/puppet.conf
[main]
...
    reports=log, foreman
...

# /etc/init.d/puppetmaster restart
</pre>
<p>配置 puppet 客户端，编辑 puppet.conf 配置文件，确保 report 是 true：</p>
<pre class="code">
# vi /etc/puppet/puppet.conf
...
report = true
...
</pre>
<p>初始化 foreman 数据库（这里 foreman 默认使用 sqlite，简单、不用任何配置，如果想用 mysql 的话可以参考官方帮助文件）：</p>
<pre class="code">
# cd /usr/share/foreman
# RAILS_ENV=production rake db:migrate
</pre>
<p>启动 foreman：</p>
<pre class="code">
# /etc/init.d/foreman start
</pre>
<p>我们把 foreman 和 puppetmaster 安装在同一个机器上，每次运行这个脚本都会导入新的 facts：</p>
<pre class="code">
# cd /usr/share/foreman
# rake puppet:import:hosts_and_facts RAILS_ENV=production
(in /usr/share/foreman)
Importing from /var/lib/puppet/yaml/facts
Importing monitor.vpsee.com
Importing dev.vpsee.com
Importing intranet.vpsee.com
Importing datasrv.vpsee.com
Importing rocket.vpsee.com
Importing grid.vpsee.com
Importing proxy.vpsee.com
Importing mail.vpsee.com
</pre>
<p>导入成功后打开浏览器访问 http://foreman.vpsee.com:3000 就可以看到 foreman 界面了：<br />
<img style="clear: both; float: left; width: 550px; display: block;" src="http://www.vpsee.com/wp-content/uploads/2012/05/foreman.png" alt="foreman" /></p>
<p class="clr">
<img src="http://feeds.feedburner.com/~r/vpsee/~4/IYQinbOw9bs" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.vpsee.com/2012/05/instal-and-configure-foreman-on-centos-6-2/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.vpsee.com/2012/05/instal-and-configure-foreman-on-centos-6-2/</feedburner:origLink></item>
		<item>
		<title>修改 OpenNebula 虚拟机实例的内存大小</title>
		<link>http://feedproxy.google.com/~r/vpsee/~3/GZrpzeLdUmI/</link>
		<comments>http://www.vpsee.com/2012/05/change-an-opennebula-instance-memory/#comments</comments>
		<pubDate>Thu, 24 May 2012 20:10:21 +0000</pubDate>
		<dc:creator>vpsee</dc:creator>
				<category><![CDATA[Cloud | Virtualization | Thin]]></category>
		<category><![CDATA[kvm]]></category>
		<category><![CDATA[opennebula]]></category>
		<category><![CDATA[virsh]]></category>

		<guid isPermaLink="false">http://www.vpsee.com/?p=1769</guid>
		<description><![CDATA[OpenNebula 创建虚拟机（实例）以后将不能直接更改虚拟机的配置参数，如 CPU、内存等。如果创建虚拟机以后发现内存给的太大，想改小怎么办呢？如何给 OpenNebula 上的虚拟机修改内存呢？（注：OpenNebula 没有直接操作的命令，需要到节点上用 virsh setmem 动态修改。）让人不可思议的是，OpenNebula 推荐的方法是删除原有虚拟机以后重新创建一个配置合适的虚拟机，一些云计算平台认为虚拟机（计算资源）应该像自来水一样打开就用，不用就关闭。个人觉得云计算应该至少能随时改变计算资源（配置），而不是删除＋创建。 比如下面这个 id 为28的虚拟机实例用了 2GB 内存，想修改到 1GB： # onevm list ID USER GROUP NAME STAT CPU MEM HOSTNAME TIME ... 14 root oneadmin queue runn 3 1G cloud06 40 20:38:50 18 root oneadmin grid03 runn 144 24G cloud18 39 00:47:01 19 root oneadmin grid02 runn 143 [...]]]></description>
			<content:encoded><![CDATA[<p>OpenNebula 创建虚拟机（实例）以后将不能直接更改虚拟机的配置参数，如 CPU、内存等。如果创建虚拟机以后发现内存给的太大，想改小怎么办呢？如何给 OpenNebula 上的虚拟机修改内存呢？（注：OpenNebula 没有直接操作的命令，需要到节点上用 virsh setmem 动态修改。）让人不可思议的是，OpenNebula 推荐的方法是删除原有虚拟机以后重新创建一个配置合适的虚拟机，一些云计算平台认为虚拟机（计算资源）应该像自来水一样打开就用，不用就关闭。个人觉得云计算应该至少能随时改变计算资源（配置），而不是删除＋创建。</p>
<p>比如下面这个 id 为28的虚拟机实例用了 2GB 内存，想修改到 1GB：</p>
<pre class="code">
# onevm list
ID USER     GROUP    NAME         STAT CPU     MEM        HOSTNAME        TIME
...
14 root     oneadmin queue        runn   3      1G         cloud06 40 20:38:50
18 root     oneadmin grid03       runn 144     24G         cloud18 39 00:47:01
19 root     oneadmin grid02       runn 143     32G         cloud21 39 00:26:26
28 root     oneadmin monitor      runn   9      2G         cloud03 05 22:04:14
...
</pre>
<p>首先找到这个28号虚拟机实例所在的 OpenNebula 计算节点（node），从上面的 HOSTNAME 看出 monitor 运行在 cloud03 这个节点上，我们 ssh 到这个节点操作发现这台 OpenNebula ID 为28的虚拟机实例在这个节点上名字为 one-28：</p>
<pre class="code">
# ssh root@cloud03

# virsh list
 Id Name                 State
----------------------------------
 39 one-20               running
 42 one-25               running
 45 one-28               running
</pre>
<p>可以动态修改 one-28 的内存参数为 1GB，但是这种办法重启后就会丢失配置重回到 2GB：</p>
<pre class="code">
# virsh setmem one-28 1048576
</pre>
<p>所以最好关闭 one-28 后再修改 one-28 配置文件，改动 memory 部分为 1048576（1GB），修改完毕后启动虚拟机：</p>
<pre class="code">
# virsh shutdown one-28

# virsh edit one-28
...
<memory>1048576</memory>
...

# virsh start one-28
</pre>
<p>修改完后 onevm list 会发现 one-28 内存大小依然是 2GB，没有变，这是因为这部分纪录在 OpenNebula 的数据库里，需要修改数据库，先 select 一下发现 OpenNebula 把 VM 的 XML 配置文件写在数据库里，这容易办，用 SQL 语句的 update 操作更新一下数据库：</p>
<pre class="code">
# sqlite3 /var/lib/one/one.db

sqlite> select * from vm_pool where oid='28';
28|monitor|...<MEMORY>2097152</MEMORY>...|0|0|1337014904|3|3|1|0|0

sqlite> update vm_pool set body="...<MEMORY>1048576</MEMORY>..." where oid="28";
</pre>
<p>然后 onevm list 就会得到正确的、修改过内存的虚拟机实例了：</p>
<pre class="code">
# onevm list
ID USER     GROUP    NAME         STAT CPU     MEM        HOSTNAME        TIME
...
14 root     oneadmin queue        runn   3      1G         cloud06 40 23:44:51
18 root     oneadmin grid03       runn 144     24G         cloud18 39 03:47:01
19 root     oneadmin grid02       runn 143     32G         cloud21 39 03:32:27
28 root     oneadmin monitor      runn   9   1024M         cloud03 05 01:10:15
...
</pre>
<img src="http://feeds.feedburner.com/~r/vpsee/~4/GZrpzeLdUmI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.vpsee.com/2012/05/change-an-opennebula-instance-memory/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.vpsee.com/2012/05/change-an-opennebula-instance-memory/</feedburner:origLink></item>
		<item>
		<title>使用 collectd 和 Graphite 监控服务器</title>
		<link>http://feedproxy.google.com/~r/vpsee/~3/EKAuvVnvU4Q/</link>
		<comments>http://www.vpsee.com/2012/05/use-collectd-with-graphite-to-monitor-servers/#comments</comments>
		<pubDate>Wed, 16 May 2012 07:32:03 +0000</pubDate>
		<dc:creator>vpsee</dc:creator>
				<category><![CDATA[Linux | BSD | Solaris]]></category>
		<category><![CDATA[collectd]]></category>
		<category><![CDATA[graphite]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://www.vpsee.com/?p=1766</guid>
		<description><![CDATA[Graphite 只是一个数据绘图工具，安装 Graphite 完以后啥也不能干，需要其他工具喂它数据，所以具体的数据采集工作是由第三方工具完成，Graphite 的设计体现了 Unix 的思想：只做一件事，把事情做好。Graphite 支持的第三方工具很多，Bucky, collectd, Collectl, Charcoal, Diamond, Ganglia, Host sFlow, statsd, Tasseo 等等。这里 VPSee 选用 collectd 来收集机器的各个性能参数，collectd 安装在需要被监控的机器上。 安装 collectd，创建一个 collectd.d 目录便于存放稍后会遇到的插件配置文件 graphite.conf，并在 collectd.conf 包含这个目录 ： $ sudo apt-get install collectd $ sudo make /etc/collectd/collectd.d $ sudo vi /etc/collectd/collectd.conf ... Include "/etc/collectd/collectd.d" 安装 git 并下载 collectd-carbon 插件： $ sudo apt-get [...]]]></description>
			<content:encoded><![CDATA[<p>Graphite 只是一个数据绘图工具，<a href="http://www.vpsee.com/2012/05/install-graphite-on-ubuntu-12-04/">安装 Graphite</a> 完以后啥也不能干，需要其他工具喂它数据，所以具体的数据采集工作是由第三方工具完成，Graphite 的设计体现了 Unix 的思想：只做一件事，把事情做好。Graphite 支持的第三方工具很多，Bucky, collectd, Collectl, Charcoal, Diamond, Ganglia, Host sFlow, statsd, Tasseo 等等。这里 VPSee 选用 collectd 来收集机器的各个性能参数，collectd 安装在需要被监控的机器上。</p>
<p>安装 collectd，创建一个 collectd.d 目录便于存放稍后会遇到的插件配置文件 graphite.conf，并在 collectd.conf 包含这个目录 ：</p>
<pre class="code">
$ sudo apt-get install collectd

$ sudo make /etc/collectd/collectd.d
$ sudo vi /etc/collectd/collectd.conf
...
Include      "/etc/collectd/collectd.d"
</pre>
<p>安装 git 并下载 collectd-carbon 插件：</p>
<pre class="code">
$ sudo apt-get install git

$ sudo git clone https://github.com/indygreg/collectd-carbon.git /opt/collectd-plugins
</pre>
<p>修改插件的配置文件的 ModulePath 部分，指向 carbon_writer.py 文件所在目录，并且修改 LineReceiverHost 部分：</p>
<pre class="code">
$ sudo vi /etc/collectd/collectd.d/graphite.conf
<LoadPlugin "python">
    Globals true
</LoadPlugin>

<Plugin "python">
    # carbon_writer.py is at path /opt/collectd-plugins/carbon_writer.py
    ModulePath "/opt/collectd-plugins/"

    Import "carbon_writer"

    <Module "carbon_writer">
        LineReceiverHost "monitor.vpsee.com"
        LineReceiverPort 2003
        DifferentiateCountersOverTime true
        LowercaseMetricNames true
        TypesDB "/usr/share/collectd/types.db"
    </Module>
</Plugin>
</pre>
<p>修改好配置文件后重启服务：</p>
<pre class="code">
$ sudo /etc/init.d/collectd restart
</pre>
<p>大功告成，等着客户端的 collectd 收集数据发送给监控服务器的 carbon（监听端口为 2003）吧，然后递交给 graphite 绘制图形。</p>
<img src="http://feeds.feedburner.com/~r/vpsee/~4/EKAuvVnvU4Q" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.vpsee.com/2012/05/use-collectd-with-graphite-to-monitor-servers/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://www.vpsee.com/2012/05/use-collectd-with-graphite-to-monitor-servers/</feedburner:origLink></item>
		<item>
		<title>在 Ubuntu 12.04 上安装 Graphite 监控工具</title>
		<link>http://feedproxy.google.com/~r/vpsee/~3/7uW3KeXkgso/</link>
		<comments>http://www.vpsee.com/2012/05/install-graphite-on-ubuntu-12-04/#comments</comments>
		<pubDate>Thu, 10 May 2012 20:07:37 +0000</pubDate>
		<dc:creator>vpsee</dc:creator>
				<category><![CDATA[Linux | BSD | Solaris]]></category>
		<category><![CDATA[graphite]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://www.vpsee.com/?p=1762</guid>
		<description><![CDATA[有几个朋友都跟我提过 Graphite，监控工具里面的新秀，一直都没时间关注，最近把 n 台物理服务器用 Puppet 代码化的任务完成后有了不少空闲时间，抽时间看了看 Graphite，先搜了一下中文想看看大家对这个工具有啥看法，居然没人提到这个工具，哪怕一篇博客一个帖子都没有？？ 常收到一些学生朋友来信，问到一些 Linux、计算机方面的学习建议，VPSee 能给的第一个建议是学好英语，优秀的技术人员必须能熟练的翻阅英文资料，大家也看到了，可用的中文资料真的不多，虽然英文会议我们可以不去、英文技术会议的视频也可以不看，但是平时的一些技术交流邮件、Github、Mailing list、经典技术书籍、文档、好的技术博客等都需要英文。Eric Steven Raymond 在他的那篇有名的 How To Become A Hacker 里也提到了： If you don&#8217;t have functional English, learn it. 如果不能用英语交流，Linus Torvalds 写出来的 Linux 可能也就出不了芬兰，也不会有今天的成功。 废话打住，来看 Graphite. Graphite 是一个（可运行在廉价硬件上的）企业级开源监控工具，用于采集服务器实时信息并进行统计，可采集 n 个服务器实时状态，如：用户请求消息，Memcached 命中率，RabbitMQ 消息服务器状态、操作系统负载、等等。Graphite 使用 Python 编写，采用 Django 框架，使用自己的简单文本协议通讯，服务平均每分钟有4800次更新操作，简单的文本协议和强大的绘图功能可以方便地扩展到任何需要监控的系统上。 和其他监控工具不同的是，Graphite 自己本身并不收集具体的数据，这些数据收集的具体工作通常由第三方工具或插件完成（如 Ganglia, collectd, statsd, Collectl 等，参考：使用 collectd 和 [...]]]></description>
			<content:encoded><![CDATA[<p>有几个朋友都跟我提过 <a href="http://graphite.wikidot.com/start">Graphite</a>，监控工具里面的新秀，一直都没时间关注，最近<a href="http://www.vpsee.com/2012/05/using-puppet-modules-from-example42/">把 n 台物理服务器用 Puppet 代码化</a>的任务完成后有了不少空闲时间，抽时间看了看 Graphite，先搜了一下中文想看看大家对这个工具有啥看法，居然没人提到这个工具，哪怕一篇博客一个帖子都没有？？</p>
<p>常收到一些学生朋友来信，问到一些 Linux、计算机方面的学习建议，VPSee 能给的第一个建议是学好英语，优秀的技术人员必须能熟练的翻阅英文资料，大家也看到了，可用的中文资料真的不多，虽然英文会议我们可以不去、英文技术会议的视频也可以不看，但是平时的一些技术交流邮件、Github、Mailing list、经典技术书籍、文档、好的技术博客等都需要英文。Eric Steven Raymond 在他的那篇有名的 <a href="http://www.catb.org/~esr/faqs/hacker-howto.html">How To Become A Hacker</a> 里也提到了：</p>
<blockquote><p>If you don&#8217;t have functional English, learn it. </p></blockquote>
<p>如果不能用英语交流，Linus Torvalds 写出来的 Linux 可能也就出不了芬兰，也不会有今天的成功。</p>
<p>废话打住，来看 Graphite.</p>
<p>Graphite 是一个（可运行在廉价硬件上的）企业级开源监控工具，用于采集服务器实时信息并进行统计，可采集 n 个服务器实时状态，如：用户请求消息，Memcached 命中率，RabbitMQ 消息服务器状态、操作系统负载、等等。Graphite 使用 Python 编写，采用 Django 框架，使用自己的简单文本协议通讯，服务平均每分钟有4800次更新操作，简单的文本协议和强大的绘图功能可以方便地扩展到任何需要监控的系统上。</p>
<p>和其他监控工具不同的是，Graphite 自己本身并不收集具体的数据，这些数据收集的具体工作通常由第三方工具或插件完成（如 Ganglia, collectd, statsd, Collectl 等，参考：<a href="http://www.vpsee.com/2012/05/use-collectd-with-graphite-to-monitor-servers/">使用 collectd 和 Graphite 监控服务器</a>）。所以上面说 “Graphite 是一个系统监控工具” 的说法不完全正确，更准确的说法应该是 “Graphite 是一个数据绘图工具”，得到数据后绘图，它并不关心具体数据，你甚至可以把每天收到的邮件数当作参数传给 Graphite 制成图，然后一段时间后就生产一个漂亮的邮件繁忙展示图，并可以看出趋势。</p>
<p>简单的说，Graphite 做两件事：1、存储数据；2、按需绘图。</p>
<p>安装必要软件包：</p>
<pre class="code">
$ sudo apt-get install apache2 libapache2-mod-wsgi python-django \
python-twisted python-cairo python-pip python-django-tagging
</pre>
<p>用 pip 安装 whisper (简单的存放和操作数据的库), carbon (监控数据的 Twisted 守护进程) 和 graphite-web (Django webapp)：</p>
<pre class="code">
$ sudo pip install whisper
$ sudo pip install carbon
$ sudo pip install graphite-web
</pre>
<p>初始化配置，直接用 example 文件里的默认配置就可以：</p>
<pre class="code">
$ cd /opt/graphite/conf/

$ sudo cp carbon.conf.example carbon.conf
$ sudo cp storage-schemas.conf.example storage-schemas.conf
$ sudo cp graphite.wsgi.example graphite.wsgi
</pre>
<p>修改 apache 配置，增加一个 vhost 或者偷懒下载一个配置文件覆盖 default，覆盖后需要重新 reload 配置：</p>
<pre class="code">
$ wget http://launchpad.net/graphite/0.9/0.9.9/+download/graphite-web-0.9.9.tar.gz
$ tar -zxvf graphite-web-0.9.9.tar.gz
$ cd graphite-web-0.9.9
$ sudo cp example-graphite-vhost.conf /etc/apache2/sites-available/default

$ sudo /etc/init.d/apache2 reload
</pre>
<p>初始化 graphite 需要的数据库，修改 storage 的权限，用拷贝的方式创建 local_settings.py 文件：</p>
<pre class="code">
$ cd /opt/graphite/webapp/graphite/

$ sudo python manage.py syncdb
$ sudo chown -R www-data:www-data /opt/graphite/storage/
$ sudo cp local_settings.py.example local_settings.py

$ sudo /etc/init.d/apache2 restart
</pre>
<p>启动 carbon：</p>
<pre class="code">
$ cd /opt/graphite/

$ sudo ./bin/carbon-cache.py start
</pre>
<p>浏览器访问 IP 地址后就可以看到 graphite web 界面：<br />
<img style="clear: both; float: left; width: 547px; display: block;" src="http://www.vpsee.com/wp-content/uploads/2012/05/graphite.png" alt="graphite" /></p>
<p class="clr">
<img src="http://feeds.feedburner.com/~r/vpsee/~4/7uW3KeXkgso" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.vpsee.com/2012/05/install-graphite-on-ubuntu-12-04/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.vpsee.com/2012/05/install-graphite-on-ubuntu-12-04/</feedburner:origLink></item>
		<item>
		<title>如何使用 Example42 的 Puppet 模块</title>
		<link>http://feedproxy.google.com/~r/vpsee/~3/HJYEOoO0CWg/</link>
		<comments>http://www.vpsee.com/2012/05/using-puppet-modules-from-example42/#comments</comments>
		<pubDate>Fri, 04 May 2012 11:01:29 +0000</pubDate>
		<dc:creator>vpsee</dc:creator>
				<category><![CDATA[Linux | BSD | Solaris]]></category>
		<category><![CDATA[puppet]]></category>
		<category><![CDATA[puppet module]]></category>

		<guid isPermaLink="false">http://www.vpsee.com/?p=1757</guid>
		<description><![CDATA[现在我们差不多移植了100多台服务器到虚拟机，中间合并了很多功能类似的服务器（历史遗留问题）到同一虚拟机，并且整个配置过程完全用 Puppet 代码化，也就是说有一天我们实验室机房遭遇物理毁灭（刚看完 Battleship，有点激动～），只要再给我们合适的硬件设备（异地有备份数据）我们应该能在6小时内恢复整个基础设施（OS, DNS, DHCP, Provision, Firewall, Squid, Web, Database, LDAP, Email, VPN, Kerberos, NFS, HPC, Cloud, Monitor, Backup, &#8230;）。自从 Puppet/Chef 之类的自动化配置工具流行以后，现在甚至有了一个新职位叫做 DevOps. 安装好 Puppet 后，就可以开始自己写配置代码了，当然也可以在网上找到别人的配置代码直接拿过来用，更妙的是一些通用的 Puppet 配置代码，比如配置一台 Nginx/PHP/MySQL、配置 NFS、配置 DHCP、配置 DNS、配置 OpenNebula 等等已经有人写成模块了，直接拷过来就可以用了。Example42 就是这样的开源 Puppet 模块大集合，包含了众多常用的服务器配置。 首先去 Example42 下载 Puppet 模块代码： $ git clone http://github.com/example42/puppet-modules.git 看看 Example42 包含了哪些模块吧，几乎常用的都有，不用自己亲自去写配置： $ cd puppet-modules/ $ ls [...]]]></description>
			<content:encoded><![CDATA[<p>现在我们差不多移植了100多台服务器到虚拟机，中间合并了很多功能类似的服务器（历史遗留问题）到同一虚拟机，并且整个配置过程完全用 Puppet 代码化，也就是说有一天我们实验室机房遭遇物理毁灭（刚看完 <a href="http://www.imdb.com/title/tt1440129/">Battleship</a>，有点激动～），只要再给我们合适的硬件设备（异地有备份数据）我们应该能在6小时内恢复整个基础设施（OS, DNS, DHCP, Provision, Firewall, Squid, Web, Database, LDAP, Email, VPN, Kerberos, NFS, HPC, Cloud, Monitor, Backup, &#8230;）。自从 Puppet/Chef 之类的自动化配置工具流行以后，现在甚至有了一个新职位叫做 DevOps.</p>
<p><a href="http://www.vpsee.com/2012/03/install-puppet-on-centos-6-2/">安装好 Puppet 后</a>，就可以开始自己写配置代码了，当然也可以在网上找到别人的配置代码直接拿过来用，更妙的是一些通用的 Puppet 配置代码，比如配置一台 Nginx/PHP/MySQL、配置 NFS、配置 DHCP、配置 DNS、配置 OpenNebula 等等已经有人写成模块了，直接拷过来就可以用了。Example42 就是这样的开源 Puppet 模块大集合，包含了众多常用的服务器配置。</p>
<p>首先去 Example42 下载 Puppet 模块代码：</p>
<pre class="code">
$ git clone http://github.com/example42/puppet-modules.git
</pre>
<p>看看 Example42 包含了哪些模块吧，几乎常用的都有，不用自己亲自去写配置：</p>
<pre class="code">
$ cd puppet-modules/
$ ls
DOCS		example42	mysql		puppi		synbak
Example42-tools	exim		nagios		rails		sysctl
LICENSE		firewall	network		redis		sysklogd
README.rdoc	foo		nfs		repo		syslog-ng
Rakefile	foreman		nginx		resolver	tftp
activemq	git		nrpe		rootmail	timezone
apache		haproxy		ntp		rpmbuild	tomcat
apt		hardening	openldap	rsync		trac
autofs		hosts		openntpd	rsyslog		users
backup		iptables	openssh		samba		vagrant
bind		jboss		openvpn		sarg		varnish
clamav		jenkins		oracle		selinux		virtualbox
cobbler		lighttpd	pam		sendmail	vmware
collectd	link		php		snmpd		vsftpd
common		logrotate	phpsyslogng	spamassassin	wordpress
concat		lsb		portmap		splunk		xinetd
controltier	mailscanner	postfix		sqlgrey		yum
cron		mailx		postgresql	squid		zip
dashboard	mcollective	powerdns	squirrelmail
dhcpd		monit		psad		ssh
dovecot		monitor		psick		ssmtp
drupal		munin		puppet		stdlib42
</pre>
<p>把上面的 Example42 代码移到 /etc/puppet 目录，然后修改 Puppet 服务器的配置，加上 puppet-modules 模块路径，别忘了重启 puppetmaster 服务：</p>
<pre class="code">
# mv puppet-modules /etc/puppet

# vi /etc/puppet/puppet.conf
...
[master]
    modulepath = /etc/puppet/puppet-modules

# /etc/init.d/puppetmaster
</pre>
<p>写个配置文件测试一下，自动配置 PHP + Apache + MySQL：</p>
<pre class="code">
# vi /etc/puppet/manifests/node.pp

node 'web.vpsee.com' {
    include apache

    include php
    include php::pear
    include php::apc
    php::module { mysql: }
    php::module { curl: }
    php::module { gd: }
    php::module { idn: }
    php::module { imagick: }
    php::module { imap: }
    php::module { mcrypt: }
    php::module { ming: }
    php::module { ps: }
    php::module { pspell: }
    php::module { recode: }
    php::module { snmp: }
    php::module { tidy: }
    php::module { xmlrpc: }
    php::module { xsl: }
    php::module { ldap: }

    include mysql
}
</pre>
<p>在要配置的机器上执行下面一条命令就自动装上 Apache/PHP/MySQL 了，再不用自己手动去安装配置了：</p>
<pre class="code">
# puppet agent --test --server=master.vpsee.com
</pre>
<img src="http://feeds.feedburner.com/~r/vpsee/~4/HJYEOoO0CWg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.vpsee.com/2012/05/using-puppet-modules-from-example42/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		<feedburner:origLink>http://www.vpsee.com/2012/05/using-puppet-modules-from-example42/</feedburner:origLink></item>
		<item>
		<title>给 Xen 安装 Xen Shell 控制面板</title>
		<link>http://feedproxy.google.com/~r/vpsee/~3/IzqRaMKbD80/</link>
		<comments>http://www.vpsee.com/2012/04/install-xen-shell-control-panel-with-xen/#comments</comments>
		<pubDate>Fri, 27 Apr 2012 13:22:34 +0000</pubDate>
		<dc:creator>vpsee</dc:creator>
				<category><![CDATA[Cloud | Virtualization | Thin]]></category>
		<category><![CDATA[xen]]></category>
		<category><![CDATA[xen shell]]></category>

		<guid isPermaLink="false">http://www.vpsee.com/?p=981</guid>
		<description><![CDATA[安装完 Xen 后可能需要安装一个控制面板方便用户自己操作虚拟机（VPS）。可以在网上找到一些 Xen 的开源控制面板，有的是基于 Web 的，不过大多数 Xen 控制面板都不完善也不好用，有的还有漏洞，比如2010年的时候 HyperVM 就曝重大安全漏洞，导致多家 VPS 服务商的服务器被黑，客户数据全部丢失，有的服务商甚至因为这个关门了。今天介绍的这个 Xen Shell 控制面板是由 Perl 写的命令行式 Xen 管理工具，包含开启、关闭、重启、查看控制台等功能。 首先到 http://xen-tools.org/software/xen-shell/releases.html 下载最新的 xen-shell 源代码包，解压后安装： # wget http://xen-tools.org/software/xen-shell/xen-shell-1.9.tar.gz # tar zxvf xen-shell-1.9.tar.gz # cd xen-shell-1.9 # make # make install 修改 xen-shell 的配置文件，加上 banner 然后禁止一些不需要的命令： # vi /etc/xen-shell/xen-shell.conf banner = VPSee's VPS Shell blacklist = [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.vpsee.com/2010/04/install-xen-on-centos-from-source/">安装完 Xen</a> 后可能需要安装一个控制面板方便用户自己操作虚拟机（VPS）。可以在网上找到一些 Xen 的开源控制面板，有的是基于 Web 的，不过大多数 Xen 控制面板都不完善也不好用，有的还有漏洞，比如2010年的时候 HyperVM 就曝重大安全漏洞，导致<a href="http://www.vpsee.com/2010/05/damnvps-5-95-512mb-openvz-xen-vps/">多家 VPS 服务商的服务器被黑，客户数据全部丢失</a>，有的服务商甚至因为这个关门了。今天介绍的这个 Xen Shell 控制面板是由 Perl 写的命令行式 Xen 管理工具，包含开启、关闭、重启、查看控制台等功能。</p>
<p>首先到 http://xen-tools.org/software/xen-shell/releases.html 下载最新的 xen-shell 源代码包，解压后安装：</p>
<pre class="code">
# wget http://xen-tools.org/software/xen-shell/xen-shell-1.9.tar.gz
# tar zxvf xen-shell-1.9.tar.gz
# cd xen-shell-1.9
# make
# make install
</pre>
<p>修改 xen-shell 的配置文件，加上 banner 然后禁止一些不需要的命令：</p>
<pre class="code">
# vi /etc/xen-shell/xen-shell.conf

banner = VPSee's VPS Shell
blacklist = version, uptime, shutdown, pause, serial, sysreq, unpause, top, whoami, author, quit
</pre>
<p>增加一个用户登陆 xen-login-shell 使用 xen-shell 控制面板：</p>
<pre class="code">
# useradd vpsee
# passwd vpsee

# vi /etc/shells
/usr/bin/xen-login-shell

# chsh -s /usr/bin/xen-login-shell vpsee
</pre>
<p>在 Xen 虚拟机配置文件里修改 name, xen_shell, vif，如下：</p>
<pre class="code">
# vi /etc/xen/vpsee

name = "vpsee"
xen_shell = 'vpsee'
bootloader = "/usr/bin/pygrub"
vcpus = 1
maxmem = "512"
memory = "512"
disk = [ "phy:sdb1,xvdb1,w", "phy:sdb2,xvdb2,w" ]
root = "/dev/sdb1 ro"
vif = [ "vifname=vpsee,bridge=xenbr0" ]
on_shutdown = "destroy"
on_poweroff = "destroy"
on_reboot = "restart"
on_crash = "restart"
</pre>
<p>用新建的用户登陆后运行 xen-shell 后会出现以下错误：</p>
<pre class="code">
$ /usr/bin/xen-shell 

  There were no Xen configuration files found which matched the pattern:

   /etc/xen/*

  Please update /etc/xen-shell/xen-shell.conf
</pre>
<p>这是因为刚创建的用户没有权限读取 /etc/xen 目录及 /etc/xen/vpsee 配置文件，所以需要修改 /etc/xen 和 /etc/xen/vpsee 的权限：</p>
<pre class="code">
# chmod 755 xen
</pre>
<p>刚创建的用户进入 xen-shell 后需要执行 xm 等相关操作，需要 root 权限，所以要把用户加到 sudoers 里面去：</p>
<pre class="code">
# chmod 0640 /etc/sudoers
# vi /etc/sudoers
User_Alias   XENUSERS = vpsee
Cmnd_Alias   XEN      = /usr/sbin/xm
Cmnd_Alias   XENIMG   = /usr/bin/xen-create-image
XENUSERS     ALL      = NOPASSWD: XEN,XENIMG

# chmod 0440 /etc/sudoers
</pre>
<p>用户登陆后仍然不能执行 xm console 等操作，因为找不到路径，所以需要在用户主目录下把 xm 命令的路径包括进去：</p>
<pre class="code">
# vi /home/vpsee/.bashrc
# User specific aliases and functions
export PATH=$PATH:/usr/sbin/
</pre>
<p>最后再执行 xen-shell 就可以顺利看到界面了。<br />
<img style="clear: both; float: left; width: 497px; display: block;" src="http://www.vpsee.com/wp-content/uploads/2010/03/vpsee-vps-shell.png" alt="vpsee vps shell" /></p>
<p class="clr">
<img src="http://feeds.feedburner.com/~r/vpsee/~4/IzqRaMKbD80" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.vpsee.com/2012/04/install-xen-shell-control-panel-with-xen/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.vpsee.com/2012/04/install-xen-shell-control-panel-with-xen/</feedburner:origLink></item>
		<item>
		<title>在 CentOS 6.2 上安装和配置 KVM</title>
		<link>http://feedproxy.google.com/~r/vpsee/~3/1QnLob9Vo5c/</link>
		<comments>http://www.vpsee.com/2012/04/install-kvm-on-centos-6-2/#comments</comments>
		<pubDate>Fri, 20 Apr 2012 07:45:39 +0000</pubDate>
		<dc:creator>vpsee</dc:creator>
				<category><![CDATA[Cloud | Virtualization | Thin]]></category>
		<category><![CDATA[centos]]></category>
		<category><![CDATA[kvm]]></category>
		<category><![CDATA[libvirt]]></category>

		<guid isPermaLink="false">http://www.vpsee.com/?p=1721</guid>
		<description><![CDATA[RHEL6 已经推出很久了，没想到在 RedHat 自家的 RHEL6 上安装 KVM 还有这么多问题，难道不应该是像 Apache/MySQL 那样安装完就可以用的么？（注：除去商标，CentOS 就是 RHEL，CentOS6 和 RHEL6 是一回事）。以下操作在 CentOS 6.2 最小化安装版本 CentOS-6.2-x86_64-minimal.iso 上完成，其他版本可能不会遇到本文提到的部分问题。 检查 CPU 和 Xen 不同，KVM 需要有 CPU 的支持（Intel VT 或 AMD SVM），在安装 KVM 之前检查一下 CPU 是否提供了虚拟技术的支持： # egrep 'vmx&#124;svm' /proc/cpuinfo ... flags : fpu vme de pse tsc msr pae mce cx8 apic mtrr pge [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.vpsee.com/2010/04/redhat-released-rhel6-beta/">RHEL6 已经推出很久了</a>，没想到在 RedHat 自家的 RHEL6 上安装 KVM 还有这么多问题，难道不应该是像 Apache/MySQL 那样安装完就可以用的么？（注：<a href="http://www.vpsee.com/2009/06/128mb-vps-optimize-centos5/">除去商标，CentOS 就是 RHEL</a>，CentOS6 和 RHEL6 是一回事）。以下操作在 CentOS 6.2 最小化安装版本 CentOS-6.2-x86_64-minimal.iso 上完成，其他版本可能不会遇到本文提到的部分问题。</p>
<h2>检查 CPU</h2>
<p>和 Xen 不同，KVM 需要有 CPU 的支持（Intel VT 或 AMD SVM），在安装 KVM 之前检查一下 CPU 是否提供了虚拟技术的支持：</p>
<pre class="code">
# egrep 'vmx|svm' /proc/cpuinfo
...
flags		: fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm dca sse4_1 sse4_2 popcnt aes lahf_lm ida arat dts tpr_shadow vnmi flexpriority ept vpid
</pre>
<h2>安装 KVM</h2>
<p>安装 KVM 很容易，要正常运行的话还需要折腾一下：</p>
<pre class="code">
# yum -y install qemu-kvm libvirt python-virtinst bridge-utils
</pre>
<p>安装完后关闭 selinux 并重启系统，然后确认一下是否 kvm 安装成功：</p>
<pre class="code">
# vi /etc/sysconfig/selinux
SELINUX=disabled

# reboot

# lsmod | grep kvm
kvm_intel              50412  3
kvm                   305988  1 kvm_intel

# stat /dev/kvm
  File: `/dev/kvm'
  Size: 0         	Blocks: 0          IO Block: 4096   character special file
Device: 5h/5d	Inode: 10584       Links: 1     Device type: a,e8
Access: (0666/crw-rw-rw-)  Uid: (    0/    root)   Gid: (   36/     kvm)
Access: 2012-04-18 16:00:46.276341129 +0200
Modify: 2012-04-18 16:00:46.276341129 +0200
Change: 2012-04-18 16:00:46.276341129 +0200
</pre>
<p>再来确认一下 libvirt 是否能正常启动和关闭。重启 libvirtd 服务的话会报错，查看日志发现 internal error Failed to create mDNS client 错误，这个问题容易改正，安装 avahi 即可，也可以去 /etc/libvirt/libvirtd.conf 设置 mdns_adv = 0，VPSee 这里采用安装 avahi 的方法：</p>
<pre class="code">
# /etc/init.d/libvirtd restart
Stopping libvirtd daemon:                                  [FAILED]
Starting libvirtd daemon:                                  [  OK  ]

# tail /var/log/libvirt/libvirtd.log
2012-04-18 13:51:03.032+0000: 18149: info : libvirt version: 0.9.4, package: 23.el6_2.7 (CentOS BuildSystem <http://bugs.centos.org>, 2012-04-16-14:12:59, c6b5.bsys.dev.centos.org)
2012-04-18 13:51:03.032+0000: 18149: error : virNetServerMDNSStart:460 : internal error Failed to create mDNS client: Daemon not running

# yum -y install avahi
# /etc/init.d/messagebus restart
# /etc/init.d/avahi-daemon restart
</pre>
<p>重启 libvirtd 服务继续报错，发现缺少 dmidecode 包，安装 dmidecode 后终于重启 libvirtd 成功 ：</p>
<pre class="code">
# /etc/init.d/libvirtd restart
Stopping libvirtd daemon:                                  [FAILED]
Starting libvirtd daemon:                                  [  OK  ]

# tail /var/log/libvirt/libvirtd.log
2012-04-18 13:54:54.654+0000: 18320: info : libvirt version: 0.9.4, package: 23.el6_2.7 (CentOS BuildSystem <http://bugs.centos.org>, 2012-04-16-14:12:59, c6b5.bsys.dev.centos.org)
2012-04-18 13:54:54.654+0000: 18320: error : virSysinfoRead:465 : internal error Failed to find path for dmidecode binary

# yum -y install dmidecode

# /etc/init.d/libvirtd restart
Stopping libvirtd daemon:                                  [  OK  ]
Starting libvirtd daemon:                                  [  OK  ]
</pre>
<p>现在 kvm 和 libvirt 都安装成功和运行了，但并不表示可用了，问题接着来。</p>
<h2>安装虚拟机</h2>
<p>从 6 系列开始 RedHat 推荐使用 virt-install/virsh 系列工具操作 kvm，而不是直接使用 qemu-kvm，所以 qemu-kvm 被移到一个不起眼的地方 /usr/libexec/，做个链接：</p>
<pre class="code">
# qemu-kvm
-bash: qemu-kvm: command not found

# ls /usr/libexec/qemu-kvm
/usr/libexec/qemu-kvm

# ln -sf /usr/libexec/qemu-kvm /usr/bin/kvm
</pre>
<p>VPSee 采用 RedHat 推荐的方式（virt-install）安装虚拟机，这里以安装 ubuntu-11.10-server-amd64.iso 为例：</p>
<pre class="code">
# virt-install \
--name ubuntu \
--ram 512 \
--vcpus=1 \
--disk path=/root/ubuntu.img,size=10 \
--accelerate \
--cdrom /root/ubuntu-11.10-server-amd64.iso \
--graphics vnc
</pre>
<p>开始安装，创建硬盘 ubuntu.img 后就报错，用的是 root 帐号居然还 Permission denied？！</p>
<pre class="code">
Starting install...
Creating storage file ubuntu.img                                 | 10.0 GB     00:00
ERROR    internal error Process exited while reading console log output: char device redirected to /dev/pts/1
qemu-kvm: -drive file=/root/ubuntu.img,if=none,id=drive-ide0-0-0,format=raw,cache=none: could not open disk image /root/ubuntu.img: Permission denied

Domain installation does not appear to have been successful.
If it was, you can restart your domain by running:
  virsh --connect qemu:///system start ubuntu
otherwise, please restart your installation.
</pre>
<p>修改 qemu.conf 配置，把下面几个地方的注释去掉，然后把 dynamic_ownership 的值改成0，禁止 libvirtd 动态修改文件的归属：</p>
<pre class="code">
# vi /etc/libvirt/qemu.conf
...
user = "root"
group = "root"
dynamic_ownership = 0
...
</pre>
<p>重启 libvirtd 服务再用上面的 virt-install 命令安装就应该可以了。这个时候 vnc 默认绑定的是本机 127.0.0.1，如果其他机器想用 vnc 客户端访问这台 kvm 服务器正在安装的 ubuntu 的话需要把 vnc 绑定到服务器的 IP 地址或者绑定到全局 0.0.0.0. 修改 qemu.conf 文件取消 vnc_listen 一行前面的注释，记得重启 libvirtd：</p>
<pre class="code">
# vi /etc/libvirt/qemu.conf
...
vnc_listen = "0.0.0.0"
...
</pre>
<p>在 CentOS 5.x 安装 KVM 可以看：<a href="http://www.vpsee.com/2010/07/install-kvm-on-centos/">在 CentOS 上安装和配置 KVM</a>.</p>
<p>对 Xen 和 OpenVZ 感兴趣的同学可以参考以下一些文章：</p>
<blockquote><p>Ubuntu 版本可以参看：<a href="http://www.vpsee.com/2009/10/install-xen-on-ubuntu/">在 Ubuntu 上安装和配置 Xen</a>；<br />
Debian 版本参看：<a href="http://www.vpsee.com/2010/03/install-xen-on-debian/">在 Debian 上安装和配置 Xen</a>；<br />
OpenSolaris 版本参看：<a href="http://www.vpsee.com/2009/10/install-xen-on-opensolaris/">在 OpenSolaris 上安装和配置 Xen</a>；<br />
NetBSD 版本参看：<a href="http://www.vpsee.com/2010/11/install-xen-on-netbsd/">在 NetBSD 上安装和配置 Xen</a>；</p>
<p>安装 OpenVZ 参看：<a href="http://www.vpsee.com/2011/01/install-openvz-on-centos/">在 CentOS 上安装和配置 OpenVZ</a>.</p></blockquote>
<img src="http://feeds.feedburner.com/~r/vpsee/~4/1QnLob9Vo5c" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.vpsee.com/2012/04/install-kvm-on-centos-6-2/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		<feedburner:origLink>http://www.vpsee.com/2012/04/install-kvm-on-centos-6-2/</feedburner:origLink></item>
		<item>
		<title>如何让 OpenNebula 虚拟机自动获得 IP 等网络配置信息？</title>
		<link>http://feedproxy.google.com/~r/vpsee/~3/9q2yEzdnu9E/</link>
		<comments>http://www.vpsee.com/2012/04/how-to-get-ip-configured-for-opennebula-vm/#comments</comments>
		<pubDate>Wed, 11 Apr 2012 19:04:08 +0000</pubDate>
		<dc:creator>vpsee</dc:creator>
				<category><![CDATA[Cloud | Virtualization | Thin]]></category>
		<category><![CDATA[cloud]]></category>
		<category><![CDATA[contextualize]]></category>
		<category><![CDATA[ip]]></category>
		<category><![CDATA[opennebula]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://www.vpsee.com/?p=1648</guid>
		<description><![CDATA[制作完 OpenNebula 的 Ubuntu 虚拟机镜像后需要对镜像配置一下以适应所在的网络运行环境，因为我们的 OpenNebula 虚拟机使用的是网桥的方式，所以虚拟机启动后会使用现有网络，并企图从 DHCP 服务器那里获得 IP 地址，如果 DHCP 服务器不做绑定的话这样随便获得的 IP 地址并不符合我们在 small_network.net (onevnet create small_network.net) 定义的要求，我们希望虚拟机启动后能从 small_network.net 这个网络配置文件中获得相应的 IP 地址。OpenNebula 里面的 Contextualizing 部分就是用来对付这种情况的，不过 VPSee 在这里介绍一个更简单的偷懒办法：直接用一个启动脚本来搞定。OpenNebula 已经为我们准备了类似的脚本，只需要根据自己的要求调整一下就可以了，不过这个脚本有点问题需要在 vmcontext.sh 文件最后加上重启网络（/etc/init.d/networking restart）这行： $ wget http://dev.opennebula.org/attachments/download/378/vmcontext.sh $ sudo -i # mv vmcontext.sh /etc/init.d/vmcontext.sh # chmod +x /etc/init.d/vmcontext.sh # ln /etc/init.d/vmcontext.sh /etc/rc2.d/S01vmcontext.sh # echo "/etc/init.d/networking restart" [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.vpsee.com/2011/12/create-ubuntu-kvm-image-for-opennebula/">制作完 OpenNebula 的 Ubuntu 虚拟机镜像</a>后需要对镜像配置一下以适应所在的网络运行环境，因为我们的 OpenNebula 虚拟机使用的是网桥的方式，所以虚拟机启动后会使用现有网络，并企图从 DHCP 服务器那里获得 IP 地址，如果 DHCP 服务器不做绑定的话这样随便获得的 IP 地址并不符合我们在 small_network.net (onevnet create small_network.net) 定义的要求，我们希望虚拟机启动后能从 small_network.net 这个网络配置文件中获得相应的 IP 地址。OpenNebula 里面的 <a href="http://opennebula.org/documentation:archives:rel2.2:cong">Contextualizing 部分</a>就是用来对付这种情况的，不过 VPSee 在这里介绍一个更简单的偷懒办法：直接用一个启动脚本来搞定。OpenNebula 已经为我们准备了类似的脚本，只需要根据自己的要求调整一下就可以了，不过这个脚本有点问题需要在 vmcontext.sh 文件最后加上重启网络（/etc/init.d/networking restart）这行：</p>
<pre class="code">
$ wget http://dev.opennebula.org/attachments/download/378/vmcontext.sh 

$ sudo -i

# mv vmcontext.sh /etc/init.d/vmcontext.sh
# chmod +x /etc/init.d/vmcontext.sh
# ln /etc/init.d/vmcontext.sh /etc/rc2.d/S01vmcontext.sh

# echo "/etc/init.d/networking restart" >> /etc/init.d/vmcontext.sh
</pre>
<p>还记得上次说的<a href="http://www.vpsee.com/2011/12/create-a-swap-for-opennebula-linux-vm/">给 OpenNebula 虚拟机增加 swap 分区的问题</a>吗，直接把激活 swap 的部分放在 vmcontext.sh 里就不必每次创建虚拟机后再增加 swap 的繁琐工作了。</p>
<pre class="code">
# echo "swapon /dev/sdb" >> /etc/init.d/vmcontext.sh
</pre>
<img src="http://feeds.feedburner.com/~r/vpsee/~4/9q2yEzdnu9E" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.vpsee.com/2012/04/how-to-get-ip-configured-for-opennebula-vm/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.vpsee.com/2012/04/how-to-get-ip-configured-for-opennebula-vm/</feedburner:origLink></item>
		<item>
		<title>在 Ubuntu 11.10 上安装 Sun Grid Engine</title>
		<link>http://feedproxy.google.com/~r/vpsee/~3/dYGxyu2HFoY/</link>
		<comments>http://www.vpsee.com/2012/04/install-sun-grid-engine-on-ubuntu-11-10/#comments</comments>
		<pubDate>Thu, 05 Apr 2012 19:14:49 +0000</pubDate>
		<dc:creator>vpsee</dc:creator>
				<category><![CDATA[Cloud | Virtualization | Thin]]></category>
		<category><![CDATA[cloud]]></category>
		<category><![CDATA[hpc]]></category>
		<category><![CDATA[sun grid engine]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://www.vpsee.com/?p=1710</guid>
		<description><![CDATA[Sun Grid Engine（现在叫做 Oracle Gird Engine）是一套开源的分布式资源管理软件，用来统一管理和利用所有（愿意被管理的）电脑上的资源，使得这些电脑（集群）使用起来就像一台电脑一样，好处是可以随意扩展总的计算资源（买更多的电脑加入集群），并且管理上就像使用一台电脑一样方便。使用者只需要把需要计算的工作准备好，提交到 Sun Grid Engine (SGE)，SGE 就会根据已经订好的管理策略以及使用者的需求在集群里找到合适的电脑来完成计算工作。SGE 主要用在高性能计算、网格计算等领域。 我们云计算项目里面有个想法就是能在我们的云计算平台上快速创建多个高配置虚拟机并自动接入到 SGE 集群，能迅速满足整个实验室高峰时期的计算需求。目前我们的 SGE 集群包含 2 台 IBM 超级计算机，n 台 PC 服务器和多个刀片服务器，以后为了临时满足高峰时期的计算要求会从云里申请多个虚拟机并自动配置到 SGE 集群里。 安装 Sun Grid Engine 需要 Java 的支持（最好是 SUN 的 Java 版本），所以所有结点都需要安装 Java 包。Ubuntu 从 11.10 版本不在提供 SUN 的官方 Java 版本，需要另外的源： $ sudo apt-get install python-software-properties $ sudo add-apt-repository ppa:ferramroberto/java [...]]]></description>
			<content:encoded><![CDATA[<p>Sun Grid Engine（现在叫做 Oracle Gird Engine）是一套开源的分布式资源管理软件，用来统一管理和利用所有（愿意被管理的）电脑上的资源，使得这些电脑（集群）使用起来就像一台电脑一样，好处是可以随意扩展总的计算资源（买更多的电脑加入集群），并且管理上就像使用一台电脑一样方便。使用者只需要把需要计算的工作准备好，提交到 Sun Grid Engine (SGE)，SGE 就会根据已经订好的管理策略以及使用者的需求在集群里找到合适的电脑来完成计算工作。SGE 主要用在高性能计算、网格计算等领域。</p>
<p>我们云计算项目里面有个想法就是能在我们的云计算平台上快速创建多个高配置虚拟机并自动接入到 SGE 集群，能迅速满足整个实验室高峰时期的计算需求。目前我们的 SGE 集群包含 2 台 IBM 超级计算机，n 台 PC 服务器和多个刀片服务器，以后为了临时满足高峰时期的计算要求会从云里申请多个虚拟机并自动配置到 SGE 集群里。</p>
<p>安装 Sun Grid Engine 需要 Java 的支持（最好是 SUN 的 Java 版本），所以所有结点都需要安装 Java 包。Ubuntu 从 11.10 版本不在提供 SUN 的官方 Java 版本，需要另外的源：</p>
<pre class="code">
$ sudo apt-get install python-software-properties
$ sudo add-apt-repository ppa:ferramroberto/java
$ sudo apt-get update
$ sudo apt-get install sun-java6-jre
</pre>
<p>首先在所有结点上修改 /etc/hosts，grid00 是主控结点，grid01 和 grid02 是执行结点（我们一般把主控结点叫做 master 或者 head，执行结点叫做 client）：</p>
<pre class="code">
$sudo vi /etc/hosts
127.0.0.1	localhost.localdomain	localhost
192.168.2.10	grid00.vpsee.com	grid00
192.168.2.11	grid01.vpsee.com	grid01
192.168.2.12	grid02.vpsee.com	grid02
</pre>
<p>在主控结点（grid00）上安装 gridengine-master 以及一些管理工具 qhost/qconf/qstat 等（包含在 gridengine-client 中）：</p>
<pre class="code">
$ sudo apt-get install gridengine-client gridengine-common gridengine-master
</pre>
<p>如果不习惯命令行界面，可以在主控结点上装个 qmon 图形管理工具，界面如下：</p>
<pre class="code">
$ sudo apt-get install xserver-xorg gridengine-qmon
</pre>
<p><img style="width: 480px; display: block; float: left; clear: both;" src="http://www.vpsee.com/wp-content/uploads/2012/03/sun-grid-engine-qmon.png" alt="sun grid engine qmon guy" /></p>
<p class="clr">
<p>在所有执行结点（grid01 和 grid02）上安装 gridengine-exec：</p>
<pre class="code">
$ sudo apt-get install gridengine-exec
</pre>
<p>在主控结点上执行以下操作把所有的执行结点加到集群里：</p>
<pre class="code">
$ sudo -i

# qconf -ah grid01
# qconf -ah grid02
</pre>
<p>在所有执行结点执行以下操作，通过 act_qmaster 这个文件识别主控结点，然后启动服务：</p>
<pre class="code">
$ sudo echo "grid00.vpsee.com" > /var/lib/gridengine/default/common/act_qmaster

$ sudo /etc/init.d/gridengine-exec start
</pre>
<p>最后在主控结点上查看一下是否成功：</p>
<pre class="code">
# qhost
HOSTNAME                ARCH         NCPU  LOAD  MEMTOT  MEMUSE  SWAPTO  SWAPUS
-------------------------------------------------------------------------------
global                  -               -     -       -       -       -       -
grid00.vpsee.com        -               -     -       -       -       -       -
grid01.vpsee.com        lx26-amd64     24 24.00   63.0G    1.7G    3.7G     0.0
grid02.vpsee.com        lx26-amd64      8  0.01   55.2G  642.2M    1.0G     0.0
</pre>
<h2>测试</h2>
<p>如何知道这个集群是否能正常工作呢？提交一个任务（job）测试一下。在主控结点上写一个简单脚本打印当前 Linux 内核版本：</p>
<pre class="code">
# vi uname.sge
#!/bin/bash
uname -a
</pre>
<p>然后用 qsub 提交这个脚本到 SGE 集群：</p>
<pre class="code">
# vi uname.sge
#!/bin/bash
uname -a

# qsub uname.sge
qsub uname.sge
Your job 3557 ("uname.sge") has been submitted
</pre>
<p>如果运行成功就会在某个执行结点的自己目录下面（我这里用的是 root 帐号，所以是 /root 目录）得到2个文件，执行结果就在 uname.sge.o3557 这个文件里：</p>
<pre class="code">
# ls
uname.sge.e3557  uname.sge.o3557

# cat uname.sge.o3557
Linux grid02 3.0.0-16-server #29-Ubuntu SMP Tue Feb 14 13:08:12 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux
</pre>
<img src="http://feeds.feedburner.com/~r/vpsee/~4/dYGxyu2HFoY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.vpsee.com/2012/04/install-sun-grid-engine-on-ubuntu-11-10/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		<feedburner:origLink>http://www.vpsee.com/2012/04/install-sun-grid-engine-on-ubuntu-11-10/</feedburner:origLink></item>
		<item>
		<title>Red Hat 正在悄悄贡献 OpenStack 代码</title>
		<link>http://feedproxy.google.com/~r/vpsee/~3/El3vvNr_tOs/</link>
		<comments>http://www.vpsee.com/2012/03/redhat-is-quietly-developing-openstack/#comments</comments>
		<pubDate>Thu, 29 Mar 2012 19:54:51 +0000</pubDate>
		<dc:creator>vpsee</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[canonical]]></category>
		<category><![CDATA[openstack]]></category>
		<category><![CDATA[rackspace]]></category>
		<category><![CDATA[red hat]]></category>

		<guid isPermaLink="false">http://www.vpsee.com/?p=1722</guid>
		<description><![CDATA[据说 OpenStack 刚开始启动的时候 Red Hat 拒绝加入，主要是因为不喜欢 OpenStack 的管理模式（牢牢被抓在 Rackspace 手里），也可能是为了保护自己的云计算产品。不过随着 OpenStack 社区模式日益清晰，Rackspace 将会逐步把 OpenStack 交给社区或基金管理和运作，Red Hat 可能放了点心，从一月份的一篇 Red Hat Quietly Joins the OpenStack Effort 看出，Red Hat 的几个开发人员正在悄悄贡献 OpenStack 代码，估计是为 OpenStack on Fedora 的需要投入了不少人力，也可能是为了以后把 OpenStack 加入到自己的 RHEL 企业版。大家做了什么，看 git 日志最能说明问题。我们来证实一下： $ git clone https://github.com/openstack/nova.git $ cd nova $ git log --since="6 months ago" --pretty=format:"%ae" &#124; grep [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.vpsee.com/wp-content/uploads/2012/03/redhat-logo.png" alt="red hat" /></p>
<p>据说 OpenStack 刚开始启动的时候 Red Hat 拒绝加入，主要是因为不喜欢 OpenStack 的管理模式（牢牢被抓在 Rackspace 手里），也可能是为了保护自己的云计算产品。不过随着 OpenStack 社区模式日益清晰，Rackspace 将会逐步把 OpenStack 交给社区或基金管理和运作，Red Hat 可能放了点心，从一月份的一篇 <a href="http://www.readwriteweb.com/cloud/2012/01/red-hat-quietly-joins-the-open.php">Red Hat Quietly Joins the OpenStack Effort</a> 看出，Red Hat 的几个开发人员正在悄悄贡献 OpenStack 代码，估计是为 OpenStack on Fedora 的需要投入了不少人力，也可能是为了以后把 OpenStack 加入到自己的 RHEL 企业版。大家做了什么，看 git 日志最能说明问题。我们来证实一下：</p>
<pre class="code">
$ git clone https://github.com/openstack/nova.git
$ cd nova
$ git log --since="6 months ago" --pretty=format:"%ae" | grep -v \
"review.openstack.org" | cut -d@ -f2 | sort -n | uniq -c | sort -n | tail -10
     26 jk0.org
     27 canonical.com
     32 nicira.com
     35 citrix.com
     37 openstack.org
     43 codestud.com
     47 cloudscaling.com
    156 redhat.com
    310 gmail.com
    352 rackspace.com
</pre>
<p>从开发人员的邮件地址来看，显然 Rackspace 贡献最多，有很多人不用公司邮箱用 Gmail，然后就是 Red Hat 了（看这个样子，不像是打几个包修改几个 bug 这么简单），那个貌似和 OpenStack 打的火热的 Ubuntu 公司 Canonical 在哪里？嗯，差不多第9位，让人感到困惑的是 Ubuntu 云计算宣传做的倒是挺足，Ubuntu 还是 OpenStack 开发团队的默认开发测试平台，怎么仔细一看没做啥呢，不会就是把 OpenStack 打包后方便大家 apt-get install 吧？<a href="http://www.vpsee.com/2010/12/who-writes-linux/">Ubuntu 在 Linux 内核方面没贡献</a>，在 OpenStack 也贡献不多，在忙啥呢～～奇怪没有看到 Dell，貌似 Dell 对 OpenStack 很积极，还集成到了自己的开源项目 Crowbar 里，可能和 Canonical 一样，更多的是集成，而不是开发吧。</p>
<p>今天刚拿到空邮过来的杂志了，貌似作者可以免费收到一本，看了一下<a href="http://www.vpsee.com/2012/03/linuxpilot-setup-a-private-cloud-on-ubuntu/">自己的文章</a>被改成繁体术语有点别扭，排版出来居然整整正反两面有三页 A4 的纸。</p>
<p><img style="width: 500px; display: block; float: left; clear: both;" src="http://www.vpsee.com/wp-content/uploads/2012/03/linuxpilot-111.jpg" alt="linuxpilot" /></p>
<p class="clr">
<img src="http://feeds.feedburner.com/~r/vpsee/~4/El3vvNr_tOs" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.vpsee.com/2012/03/redhat-is-quietly-developing-openstack/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.vpsee.com/2012/03/redhat-is-quietly-developing-openstack/</feedburner:origLink></item>
	</channel>
</rss>

