restart nova-api; restart nova-objectstore; restart nova-scheduler
查看nova-network是否启动起来了,安装过程中有时会起不来,查看dnsmasq是否启动了,它使用的端口是53端口,一次安装过程中由于已经开启了bind9服务,占用了53端口,需要杀掉bind9进程。dnsmasq服务是给虚拟机提供网络相关服务用的。
同步数据库nova,openstack会在nova数据库中建一些表
/usr/bin/nova-manage db sync (直接用nova-manage db sync 也可以) 创建管理员用户:nova (名字随意,参数admin表示是管理员账户 )
/usr/bin/nova-manage user admin nova
返回EC2_ACCESS_KEY 和EC2_SECRET_KEY 创建工程(项目),需要制定工程名字和创建者。
/usr/bin/nova-manage project create novaproject nova 创建虚拟机网络
/usr/bin/nova-manage network create 172.16.0.1/24 1 256
注意:其中172.16.0.1/24必须在nova.conf中配置的--fixed_range 的范围内,1表 示创建1个网络,256表示每个网络有多少个ip。
上述创建的用户,工程和网络都会记录在数据库nova中。 创建证书
mkdir –p ~/creds 目录随意
nova-manage project zipfile novaproject nova ~/creds/novacert.zip
这个命令会在~/creds文件夹中创建novacert.zip文件,里面压缩了记录用户认证和环
境变量的一些文件。解开这个文件
unzip ~/creds/novacert.zip -d ~/creds/
在文件夹creds下会看到cacert.pem cert.pem novarc pk.pem这几个文件,其中
novarc记录的是环境变量,其他的是一些认证文件
source ~/creds/novarc 就会注册该环境变量,当然也可以加到.bashrc中。
授权对结算节点上的虚拟机的访问,要使用使用euca-authorize命令
euca-authorize -P icmp -t -1:-1 default 授权ping euca-authorize -P tcp -p 22 default 授权ssh
注意:如果ping不通虚拟机的话,需要看一下dnsmasq服务,当你有虚拟机在运
行的情况下,(当然,到现在为止,还没有开启一个虚拟机),要检查是否有两个 dnsmasq服务在运行中,如果不是,运行下面命令:
killall dnsmasq
service nova-network restart
在计算节点上安装nova
在计算节点上只需要一个nova-compute服务启动就行了,所以只需要安装nova-compute 服务。
修改/etc/nova/nova.conf文件(基本上与控制节点上的一样),当然一些配置网络的参数就不需要了。必须要配置消息队列服务器地址,网络服务器地址,数据库地址,控制中心地址等
再配置网桥,因为nova使用的是br100作为网桥,所以/etc/network/interfaces 如下: # The loopback network interface auto lo
iface lo inet loopback
# The primary network interface auto br100
iface br100 inet static bridge_ports eth0 bridge_stp off bridge_maxwait 0 bridge_fd 0
address xxx.xxx.xxx.xxx
netmask xxx.xxx.xxx.xxx
gateway xxx.xxx.xxx.xxx 重启网络服务
/etc/init.d/networking restart
配置完nova.conf ,和网络之后,重启nova-compute 和libvirt-bin
restart libvirt-bin; service nova-compute restart
为了避免KVM的问题和nova的访问权限,修改下面权限
chgrp kvm /dev/kvm chmod g+rwx /dev/kvm
在计算节点上要配置一个iptables ,因为在计算节点上没有启动nova-api服务,配置一个nat,跳转到nova-api上,这样UEC镜像才能取得正确的数据。
# iptables -t nat -A PREROUTING -d 169.254.169.254/32 -p tcp -m tcp --dport 80 -j DNAT --to-destination $NOVA_API_IP:8773
测试计算节点服务是否已经在控制节点上生效,运行下面命令
nova-manage service list
ubuntu10 nova-scheduler enabled :-) 2011-11-04 08:47:56 ubuntu10 nova-network enabled :-) 2011-11-04 08:48:00 ubuntu10 nova-compute enabled :-) 2011-11-04 08:47:59 ubuntu10 nova-volume enabled :-) 2011-11-04 08:47:57 ubuntu12 nova-compute enabled :-) 2011-11-04 08:48:02 ubuntu12 nova-scheduler disabled XXX 2011-11-02 04:50:16 这里不仅需要服务是enabled,而且需要 :-) +时间,这个时间表示最近的一次服务是否开 启测试的时间(最后一次心跳时间)
如果一切正常,那么两台机器之间的通信就没有问题了
在openstack上开启虚拟机
发布镜像
uec-publish-tarball ubuntu-10.10-server-uec-i386.tar.gz mybucket
返回三个值,ami,aki,ari
创建一个ssh登录keypair,在这之前需要先source ~/creds/novarc 也就是要把环境变量配 置好,因为这个命令要把一些环境变量配置为ssh登录keypair。
euca-add-keypair mykey > mykey.priv 名字随意
修改keypair.priv权限,太高权限出错
chmod 600 mykey.priv
开启一个虚拟机
euca-run-instances ami-g06qbntt -k mykey -t m1.tiny 查看虚拟机列表
euca-describe-instances
找到刚建的虚拟机,如果已经授权过了对虚拟机的访问,则ping 其ip ,ssh登录测试,一般都会失败,可能是程序bug,但也有正常的时候,这时要检查一下dnsmasq是否开启了两个服务,若不是killall dnsmasq ;service nova-network restart。
可以查看/var/lib/nova/instances/instance-******/console.log
一般还不行,查看ip ad sh,查看br100中两个ip的位置,如果物理机ip在第一位,那么一般都不会ping通虚拟机,这时要删掉这两个ip,在分别加上,先加虚拟机网络的网关ip,再加物理机ip。
先删掉br100上的两个ip地址 删掉172的网段
ip addr del 172.16.0.1 dev br100 再删掉br100上的192网段
ip addr del 192.168.1.10 dev br100 然后再添加172网段,(先添加的显示在第一位) ip addr add 172.168.0.1/24 brd 172.16.0.255 dev br100
然后再添加192网段,通过ip ad sh 显示 :172在192的前面 ip addr add 192.168.1.10/24 brd 192.168.1.255 dev br100 然后检查 ip ad sh ,虚拟机网段要在第一位 重启服务
再次新建个虚拟机,基本上就能ping通,也能ssh 登录上了,这个问题太让人费解了 当然在删除ip的过程中,会把一些默认路由也删掉了。
停止一个虚拟机命令:
euca-terminate-instances i-1b0bh8n
手动分配ip地址
开启一个虚拟机后,openstack会自动为其分配一个ip地址,可以理解为固定ip地址(fixed_ips),openstack中还存在浮动ip地址(floating_ips),利用浮动ip,可以手动给虚拟机分配ip地址,内网和外网的都可以,同样要使用浮动ip地址也是要先建立浮动ip的地址池。
nova-manage floating create [hostname] [cidr]:为特定主机创建特定的浮动地址,可以是一个ip地址,也可以是一个子网。
nova-manage floating destroy [hostname] [cidr]:删除特定主机上的某浮动ip nova-manage floating list 显示浮动ip列表
创建好浮动ip地址池后可以用下面命令从池中获取一个ip地址。
euca-allocate-address
返回一个浮动ip地址池中的ip地址,然后就能分配这个ip地址给虚拟机 euca-associate-address -i [instance_id] [floating_ip]
这样就绑定floating_ip到instance_id,可以ping和ssh测试一下 当要把这个ip地址与虚拟机解除绑定时,运行
euca-disassociate-address[floating_ip] 解除浮动ip和虚拟机的绑定。
euca-deallocate-address [floating_ip]
返回一个ip,这个ip返回到ip池里,而且euca-allocate-addressk可以再次分配这个ip给其他虚拟机使用。
配置逻辑卷
安装lvm,openstack使用lvm管理逻辑卷,建立的逻辑卷可以分给虚拟机,在虚拟机看来是一块硬盘。openstack需要nova-volume服务。
安装lvm2和nova-volume
apt-get install lvm2 nova-volume 可以用一块单独的分区,也可以用一个回环设备做个测试,这里使用的是回环设备测试
dd if=/dev/zero of=/tmp/nova-volumes.img bs=1M seek=10000 count=0 losetup --show -f /tmp/nova-volumes.img
vgcreate nova-volumes /dev/loop0这里创建nova-volume逻辑卷组,openstack默认 接下来需要开启iscsitarget服务,安装iscsitarget时,默认并没有启动,做如下两步:
sed -i ‘s/false/true/g’ /etc/default/iscsitarget service iscsitarget start
查看iscsitarget服务有没有启动起来,有时就启动不起来,可以试一试下面的命令:
/etc/init.d/open-iscsi start
一次排错,在运行完这条命令之后就可以启动iscsitarget服务了。。。。 继续配置nova-volume,重启nova-volume服务。
service nova-volume restart nova-manage service list
可以看到nova-volume服务已经启动成功
由于前面已经用LVM建立了一个逻辑卷组nova-volumes,这里直接用这个卷组创建逻辑卷,并绑定到虚拟机上,euca2ools命令: euca-create-volume euca-attach-volume euca-detach-volume euca-delete-volume euca-describe-volumes
euca-create-volume -s 1 -z nova -s:大小 单位G, -z 区域,一般是nova euca-describe-volumes 可以显示创建的逻辑卷 给虚拟机绑定磁盘(逻辑卷)
euca-attach-volume vol-0000000e -i i-00000027 -d /dev/vdb vol-0000000e :逻辑卷id -i 实例id,也就是虚拟机id
-d 显示在虚拟机中的设备名称,如果虚拟机已经有了vda 、vdb ,那么这里就是/dev/vdc
然后登录虚拟机 i-00000027 用命令 fdisk -l ,发现多了块磁盘 /dev/vdb
euca-detach-volume euca-delete-volume 分别用来解绑逻辑卷,和删除逻辑卷
动态迁移
更新系统,升级硬件等都需要用到动态迁移,文件夹: NOVA-INST-DIR/instances/ (一般是/var/lib/nova/instances/)需要mount到共享存储上,这里用的是NFS。
首先要保证主机之间ping主机名时能够相互ping通。
ping hostA ping hostB ping hostC 安装nfs:
apt-get install nfs-kernel-server
在中心机上 配置 /etc/exports,添加内容如下:
/var/lib/nova/instances ubuntu10/255.255.255.0(rw,sync,fsid=0,no_root_squash) /etc/init.d/nfs-kernel-server restart 修改文件 /etc/default/nfs-common
设置 NEED_IDMAPD =yes
重启 /etc/init.d/nfs-kernel-server restart /etc/init.d/idmapd restart
这里用到了idmapd这个进程,如果不配置该进程的话,那么共享目录里的在客户端看不到共享文件的所属主和组,也不是nogroup,而是一个很大的数字,这样在nfs客户端是改不了文件所属主和组的,必须要配置idmapd这个进程,并开启该服务,如果这个服务没配置好开启,那么会出现\Remote I/O error\。
配置nfs客户端
修改文件 /etc/fstab 添加内容如下:
ubuntu10:/ /var/lib/nova/instances nfs4 defaults 0 0 配置了nfs4,所以ubuntu10后面直接用 \ 在两台机器上配置libvirt-bin 点10上
修改/etc/libvirt/libvirtd.conf 文件如下: 改前 : #listen_tls = 0 改后: listen_tls = 0 改前 : #listen_tcp = 1 改后: listen_tcp = 1
添加: auth_tcp = \
修改 /etc/init/libvirt-bin.conf
改前 : exec /usr/sbin/libvirtd $libvirtd_opts 改后 : exec /usr/sbin/libvirtd -d -l
修改 /etc/default/libvirt-bin 改前 :libvirtd_opts=\