8月28日更新:
第五步中qemu-common的安装有问题,我从f13的源码中编译出来的qemu存在问题,兼容性不好,一个是我通过virt-manager安装windows虚拟机中创建完成后无法启动直接报错;二个是我在dash中对实例进行suspend操作时报错操作失败,因此建议在元数据的注入时采用guestfs这样只需要安装三外软件包libguestfs,libguestfs-mount,fuse这些包在组“Virtualization Tools”中,安装简单可以不用编译nbd模块,省去第四、五步,但是据说guestfs速度比nbd慢,如果坚持要用nbd,请参考这里http://jamyy.dyndns.org/blog/2012/02/3582.html
1.操作系统的准备
操作系统的准备请看CentOS6.2下一步一步源代码安装OpenStack(一)操作系统准备与计算节点相关的部分我已经用蓝色字体标出。
2.时间同步、防火墙及selinux
2.1时间同步
计算节点要与控制节点通信,保持时间的同步很重要,我们需要配置ntp服务器。
2.1.1配置启动控制节点的ntp
[root@cc ~]# vim /etc/ntp.conf
在:
# Hosts on local network are less restricted.
#restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
下添加你要提供时间同步服务的网段,如我的为:
restrict 10.61.2.0 mask 255.255.255.0 nomodify notrap
去掉以下两行前的注释:
server 127.127.1.0 # local clock
fudge 127.127.1.0 stratum 10
[root@cc ~]# vim /etc/sysconfig/ntpd
在后面添加:
SYNC_HWCLOCK=yes
使时间更新到bios
启动ntp:
[root@cc ~]# chkconfig ntpd on && service ntpd start
2.1.2配置启动计算节点的ntp
[root@node1 ~]# vim /etc/ntp.conf
以下三行:
server 0.centos.pool.ntp.org
server 1.centos.pool.ntp.org
server 2.centos.pool.ntp.org
替换为:
server 10.61.2.88
这里的ip还是你的控制节点的ip
[root@node1 ~]# vim /etc/sysconfig/ntpd
在后面添加:
SYNC_HWCLOCK=yes
使时间更新到bios
启动ntp:
[root@node1 ~]# chkconfig ntpd on && service ntpd start
计算节点情况:
2.2防火墙配置
我的机器均只使用了一个网卡,配置的本地ip段为10.61.2.0/24,为简单我会直接对本地的ip数据包全部放行。CentOS在启动时会加载/etc/sysconfig/iptables中的过滤规则,所以我选择编辑它加入我的一条简单规则,注意控制节点和计算节点都要添加
[root@node1 ~]# vim /etc/sysconfig/iptables
在:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
后添加:
-A INPUT -s 10.61.2.0/24 -j ACCEPT
该规则只有在机器重启后才会有效,要想现在就运行该规则请运行:
[root@node1 ~]# iptables -I INPUT 9 -s 10.61.2.0/24 -j ACCEPT
这里的数字表示该规则插入的位置,我这里是放在
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh
后面,请运行:
[root@node1 ~]# iptables -L
查看该规则位置 ,位置从1开始计数
2.3关闭selinux
selinux会引起一些权限的问题,因此我选择关闭
[root@node1 ~]# setenforce 0
[root@node1 ~]# vim /etc/selinux/config
修改SELINUX=disabled
3.组件安装
组件的安装见CentOS6.2下一步一步源代码安装OpenStack(二)组件安装,这里我们只安装nova、glance、python-novaclient其它后两个为nova所依赖的
4.编译nbd模块
参考:http://jamyy.dyndns.org/blog/2012/02/3582.html
安装kernel-devel及kernel-headers:
yum --enablerepo=iso --disablerepo=base,updates,extras install kernel-devel kernel-headers
安装kernel source code:
wget ftp://ftp.redhat.com/pub/redhat/linux/enterprise/6ComputeNode/en/os/SRPMS/kernel-2.6.32-220.el6.src.rpm
rpm -ihv kernel-2.6.32-220.el6.src.rpm
备份:
cd /usr/src/kernels/
mv $(uname -r) $(uname -r)-old
解压源文件:
tar jxpf /root/rpmbuild/SOURCES/linux-2.6.32-220.el6.tar.bz2 -C ./
mv linux-2.6.32-220.el6 $(uname -r)
编译:
cd $(uname -r)
make mrproper
cp ../$(uname -r)-old/Module.symvers ./
cp /boot/config-$(uname -r) ./.config
make oldconfig
make prepare
make scripts
make CONFIG_BLK_DEV_NBD=m M=drivers/block
cp drivers/block/nbd.ko /lib/modules/$(uname -r)/kernel/drivers/block/
depmod -a
注意:nbd模块不会在机器启动后自己load,必须用命令modprobe nbd加载,怎样使其开机自动加载?
开机自启动方法:编辑/etc/rc.d/rc.local 在文件尾添加一行:modprobe nbd
5.安装qemu-common
计算节点上还需要有qemu-nbd工具,该工具在qemu-common中,遗憾的是CentOS中并不包含qemu-common,不得不自己从f13找来与CentOS版本最接近的qemu源代码rpm自己编译,但安装qemu-common时仍然与已安装的qemu-kvm冲突。因此先卸载qemu-kvm及qemu-img,再重新安装,安装时发现依赖seabios-bin,还得从源rpm编译。。。
5.1编译qemu及seabios
我会提供已经编译好的包供大家下载,如果采用我提供的包请直接查看5.3软件的安装,下载信息我会放在OpenStack相关软件下载及说明
5.1.1安装编译所依赖的包
有些包在CentOS-6.2-x86_64-bin-DVD2.iso中,因此要将该镜像也挂载上,并修改iso.repo文件
[root@node1 ~]# mkdir /media/iso2
[root@node1 ~# mount -o loop -t iso9660 ~/CentOS-6.2-x86_64-bin-DVD2.iso /media/iso2
[root@node1 ~]# vim /etc/yum.repos.d/iso.repo
[iso]
name=iso
baseurl=file:///media/iso/
file:///media/iso2/
gpgcheck=1
enables=0
gpgkey=file:///media/iso/RPM-GPG-KEY-CentOS-6
添加了红色字体这一行
安装依赖:
[root@node1 ~]# yum --enablerepo=iso --disablerepo=base,updates,extras install rpm-build glib2-devel SDL-devel texi2html gnutls-devel cyrus-sasl-devel libaio-devel pciutils-devel pulseaudio-libs-devel ncurses-devel iasl
5.2安装qemu及seabios源rpm并编译
参考:http://wiki.xen.org/wiki/RHEL6_Xen4_Tutorial
下载:
[root@node1 ~]# wget http://archives.fedoraproject.org/pub/archive/fedora/linux/releases/13/Everything/source/SRPMS/qemu-0.12.3-8.fc13.src.rpm
[root@node1 ~]# wget ftp://ftp.redhat.com/pub/redhat/linux/enterprise/6ComputeNode/en/os/SRPMS/seabios-0.6.1.2-8.el6.src.rpm(发现编译不能生成seabios-bin改用其它src)
[root@node1 ~]# wget http://archives.fedoraproject.org/pub/fedora/linux/releases/16/Everything/source/SRPMS/seabios-0.6.2-3.fc16.src.rpm
安装:
[root@node1 ~]# rpm -ihv qemu-0.12.3-8.fc13.src.rpm
[root@node1 ~]# rpm -ihv seabios-0.6.2-3.fc16.src.rpm
编译:
[root@node1 ~]# cd rpmbuild/SPECS/
[root@node1 SPECS]# rpmbuild -bb qemu.spec
最后编译结果:
Wrote: /root/rpmbuild/RPMS/x86_64/qemu-0.12.3-8.el6.x86_64.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/qemu-kvm-0.12.3-8.el6.x86_64.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/qemu-img-0.12.3-8.el6.x86_64.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/qemu-common-0.12.3-8.el6.x86_64.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/qemu-user-0.12.3-8.el6.x86_64.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/qemu-system-x86-0.12.3-8.el6.x86_64.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/qemu-system-ppc-0.12.3-8.el6.x86_64.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/qemu-system-sparc-0.12.3-8.el6.x86_64.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/qemu-system-arm-0.12.3-8.el6.x86_64.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/qemu-system-mips-0.12.3-8.el6.x86_64.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/qemu-system-cris-0.12.3-8.el6.x86_64.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/qemu-system-m68k-0.12.3-8.el6.x86_64.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/qemu-system-sh4-0.12.3-8.el6.x86_64.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/qemu-kvm-tools-0.12.3-8.el6.x86_64.rpm
[root@node1 SPECS]# rpmbuild -bb seabios.spec
最后编译结果:
Wrote: /root/rpmbuild/RPMS/x86_64/seabios-0.6.2-3.el6.x86_64.rpm
Wrote: /root/rpmbuild/RPMS/noarch/seabios-bin-0.6.2-3.el6.noarch.rpm
5.3重新安装qemu
卸载旧版本:
[root@node1 SPECS]# yum --enablerepo=iso --disablerepo=base,updates,extras remove qemu-img qemu-kvm seabios
安装新版本:
[root@node1 SPECS]# rpm -ihv /root/rpmbuild/RPMS/noarch/seabios-bin-0.6.2-3.el6.noarch.rpm
[root@node1 SPECS]# rpm -ihv /root/rpmbuild/RPMS/x86_64/seabios-0.6.2-3.el6.x86_64.rpm
[root@node1 SPECS]# rpm -ihv /root/rpmbuild/RPMS/x86_64/qemu-common-0.12.3-8.el6.x86_64.rpm
[root@node1 SPECS]# rpm -ihv /root/rpmbuild/RPMS/x86_64/qemu-system-x86-0.12.3-8.el6.x86_64.rpm
[root@node1 SPECS]# rpm -Uhv /root/rpmbuild/RPMS/x86_64/qemu-img-0.12.3-8.el6.x86_64.rpm
[root@node1 SPECS]# rpm -Uhv /root/rpmbuild/RPMS/x86_64/qemu-kvm-0.12.3-8.el6.x86_64.rpm
[root@node1 SPECS]# yum --enablerepo=iso --disablerepo=base,updates,extras install libvirt virt-who
启动libvirtd:
[root@node1 SPECS]# chkconfig libvirtd on && service libvirtd start
6.运行nova-compute
计算节点上只要运行nova-compute就可以了,当然还可以运行nova-network,这时需要在/etc/nova下添加policy.json文件
从控制节点拷贝配置文件nova.conf到/etc/nova/nova.conf
修改其中的my_ip为计算节点的ip
修改其中的vncserver_listen为计算节点的ip
我这里还没弄好swift实例采用本地文件系统存储,因此要创建一个本地目录,该目录可在nova.conf中用instances_path=/home/instances指定:
[root@node1 ~]# mkdir /home/instances
运行:
[root@node1 ~]# nova-compute
7.测试
7.1查看nova-compute是否启动
[root@node1 ~]# nova-manage service list
注意:控制节点上我采用nova-all启动相关服务,但nova-all不会启动nova-compute和nova-consoleauth,如果要能够在控制节点上创建实例,需另外启动nova-compute,在采用vnc操作实例要另外启动nova-consoleauth来进行验证,我的控制节点重启后没有挂载nova-volumes,所以nova-volume没有启动起来,但在这里没有什么影响,你看到node1这个主机上有两个nova-compute及nova-network这个不用管,这是我以前安装的时候遗留下来的。
7.2通过horizon创建实例
现在就可以在控制节点通过ssh连接实例了:
另外我在我的计算节点上无法ping通实例:
北方工业大学 | 云计算研究中心 | 姜永