本博客已經添加"打賞"功能,"打賞"位置位於右邊欄紅色框中,感謝您贊助的咖啡.
常用操作:
常用的查詢命令
#keystone user-list 查詢用戶信息
#keystone role-list 查詢角色信息
#keystone tenant-list
查詢租戶信息
#glance index 查詢當前存在的鏡像信息
#nova image-list 查看當前存在的鏡像狀態
#nova secgroup-list 查看當前存在的安全組
#nova keypair-list 查看當前存在的密鑰
#nova flavor-list 查看當前可以創建的實例類型
#nova list 查看實例的狀態
#nova console-log cirros 查看實例cirros的啟動日志信息
#nova-manage service list 查詢當前啟動的Compute服務狀態
#nova-manage version list 查詢當前安裝軟件的版本
#nova-manage vm list 列出所有的實例狀態
#nova-manage fixed list 列出所有的固定內網IP地址信息及分配情況
#nova-manage floating list 列出所以浮動IP地址信息及分配情況
#nova-manage host list 列出當前主機的信息
#nova-manage network list 列出當前網絡的相關信息
#nova-manage logs errors 列出錯誤的日志信息
#nova-manage logs syslog 列出syslog日志信息
nova flavor-list
nova show myserver1
nova console-log myserver2
nova delete myserver2
虛擬網絡命令
brctl
virsh
tgtadm --lld iscsi --op show --mode target 控制節點查看target
tgtadm --op new --lld=iscsi --mode=target --tid=1 --targetname=iqn.2010-10.org.openstack:volume-00000001 建立target
nova 掛接實例/分區
sudo nova-rootwrap guestmount --rw -a /home/instances/instance-0000001b/disk -m /dev/sda1 /tmp/tmpfe4fNg
配置:nova.conf
##################filter#############
#scheduler_default_filters=AvailabilityZoneFilter,RamFilter,ComputeFilter,IsolatedHostsFilter
#isolated_hosts=hyops2.elex.com
#isolated_images=ee30929c-a3bb-42a7-a494-9a77ae501c54
配置於nova.conf
規定在某個images上創建的實例位於固定計算節點主機
重新初始化nova庫:
停止控制和計算節點的nova服務,刪除/home/instances目錄下的文件
nova-manage network delete 192.168.193.0/24
nova-manage network delete 10.18.4.0/24
mysql -uroot -p
mysql> drop database nova
mysql> create database nova;
mysql> grant all privileges on nova.* to 'nova_user'@'%' identified by 'nova_pw3465';
nova-manage db sync
nohup /usr/bin/python /usr/bin/nova-all >> /var/log/nova.log 2>&1 &
nova-manage network create --label=public --fixed_range_v4=10.18.4.0/24 --num_networks=1 --network_size=256 --gateway=10.18.4.254 --bridge=br_pu --bridge_interface=em1 --multi_host='F'
nova-manage network create --label=private --fixed_range_v4=192.168.193.0/24 --num_networks=1 --network_size=256 --gateway=192.168.193.1 --bridge=br_pr --bridge_interface=em2 --multi_host='F'
創建密鑰:
nova keypair-add mykey > oskey.priv
chmod 600 oskey.priv
設置安全策略
nova secgroup-add-rule default tcp 22 22 0.0.0.0/0
nova secgroup-add-rule default icmp -1 -1 0.0.0.0/0
nova secgroup-list
nova secgroup-list-rules default
上傳鏡像
glance add name="CentOS-6.3_Fina_qcow2" is_public=true container_format=bare disk_format=qcow2 < CentOS-6.3_Fina_qcow2.img
glance add name="CentOS-6.3_Fina_raw" is_public=true container_format=bare disk_format=raw < CentOS-6.3_Fina_raw.img
重新生成實例
常見錯誤:
已解決
注:vncserver_listen的值在計算節點上時應配置成計算節點的ip
不然會報錯libvirtError: operation failed: failed to retrieve chardev info in qemu with 'info chardev'而無法啟動實例。
ERROR nova.manager [-] Error during ComputeManager.update_available_resource: list index out of range
libvir: QEMU error : Domain not found: no domain with matching name 'instance-00000002'
RemoteError: Remote error: InstanceNotFound Instance instance-00000002 could not be found.
此三類錯誤解決方法:/usr/lib/python2.6/site-packages/nova-2012.1-py2.6.egg/nova/virt/libvirt/utils.py:95
此文件的backing_file = [i.split('actual path:')[1].strip()[:-1]替換為backing_file = [i.strip()[:-1]
解決啟動nova-network、nova-volume出現timeout錯誤:
/usr/lib/python2.6/site-packages/eventlet/green/subprocess.py
第35行換成def wait(self, check_interval=0.01, timeout=None):
nova-novncproxy啟動報錯
ImportError: No module named websockify
解決:yum install python-websockify
Stderr: 'sudo: sorry, you must have a tty to run sudo\n'
而 CentOS 的 sudo 選項 requiretty 是默認打開的,ssh 需要一個 tty 才能執行,所以遠程 sudo 就會出錯
關閉(注釋掉) requiretty 這行:
# chmod 0440 /etc/sudoers; chmod 0440 /etc/sudoers.d/nova
# vi /etc/sudoers
注釋行 #Defaults requiretty
#cat /etc/sudoers.d/nova 或在 /etc/sudoers添加
nova ALL=(ALL) NOPASSWD: ALL
啟動rabbitmq-server出錯
ERROR: epmd error for host "hyops4": address (unable to establish tcp connection)
解決辦法:添加hyops4的解析到hosts文件
glance數據庫已經有了,但是用glance index提示
glance index
Failed to show index. Got error:
You are not authenticated.
注意admin_passwd 和 service_passwd的區別
RemoteError: Remote error: NetworkNotFound Network 5 could not be found.
重新創建網絡nova-manage network create后出現 要修改數據庫數據刪除virtual_interfaces表中網絡ID為5的行
VNC始終轉發的是127.0.0.1的IP,計算節點的nova.conf內的vncserver_proxyclient_address不起作用
原因:在計算節點程序啟動目錄有另外的nova.conf配置存在,且vncserver_proxyclient_address指向127.0.0.1
尚未解決
關閉nova DEBUG信息
TRACE nova.api.openstack Timeout: Timeout while waiting on RPC response.
TRACE nova.rpc.common timeout: timed out
RabbitMQ AQMP queue is full.
==> /var/log/nova/compute.log <==
libvir: QEMU error : Domain not found: no domain with matching name 'instance-0000000f' 創建實例時報此錯誤
...
2012-12-10 02:55:20 WARNING nova.virt.libvirt.connection [req-e4...db 6760c8a1013840aebd32655e379bca59] [instance: 77...ab24] \
Ignoring error injecting data into image 517c8f63-d3fb-4112-b56c-6e80d65d4062 ([Errno 16] Device or resource busy: '/tmp/tmprI2cza')
WARNING nova.compute.manager [-] Found 1 in the database and 0 on the hypervisor.
WARNING nova.compute.manager [-] [instance: 5...7] Instance found in database but not known by hypervisor. Setting power state to NOSTATE
Ops創建VM流程(FlatDHCP)
工作流程
請求:nova boot --image ttylinux --flavor 1 i-01
nova-api 接受請求,一個tcp REST請求.
nova-api 發送一個創建虛擬機的請求到消息隊列,並會存數據庫,帶uuid.
nova-scheduler 接受這個消息,並進行過濾,根據請求的虛擬資源,即flavor的信息.
scheduler會找到一個可用的主機(裝有nova-compute的物理主機),如果沒有找到就虛擬機的狀態設置成ERROR,
如果有可用主機,就發消息到nova-network,就進入下一步,配置網絡,注:此過程虛擬機處於scheduling任務狀態。
nova-network 接收到消息就,從fixed IP表(數據庫)里拿出一個可用IP,
並設置dnsmsq(DHCP server),確保拿出的IP可以與對應的MAC地址(生成的)對應,
確保虛擬機可以被賦予對應的IP設置IPTABLE.
對fixed IP 進行地址轉換,使虛擬機可以訪問外網,
設置好network之后,會發消息到消息隊列,使要在其上創建虛擬機的物理計算節點就收到創建虛擬機的消息,
計算節點接收到消息后,就開始創建虛擬機,首先會download鏡像從glance上
然后會根據之前生成的uuid,MAC,鏡像位置,
創建一個啟動虛擬機的xml文件,然后會調用libvirt接口,根據xml配置創建虛擬機,虛擬機創建完成之后,
會把虛擬機狀態改成ACTIVE
至此,一台虛擬機發布完成
#glance index 查詢當前存在的鏡像信息
#nova image-list 查看當前存在的鏡像狀態
#nova secgroup-list 查看當前存在的安全組
#nova keypair-list 查看當前存在的密鑰
#nova flavor-list 查看當前可以創建的實例類型
#nova list 查看實例的狀態
#nova console-log cirros 查看實例cirros的啟動日志信息
#nova-manage service list 查詢當前啟動的Compute服務狀態
#nova-manage version list 查詢當前安裝軟件的版本
#nova-manage vm list 列出所有的實例狀態
#nova-manage fixed list 列出所有的固定內網IP地址信息及分配情況
#nova-manage floating list 列出所以浮動IP地址信息及分配情況
#nova-manage host list 列出當前主機的信息
#nova-manage network list 列出當前網絡的相關信息
#nova-manage logs errors 列出錯誤的日志信息
#nova-manage logs syslog 列出syslog日志信息
nova flavor-list
nova show myserver1
nova console-log myserver2
nova delete myserver2
虛擬網絡命令
brctl
virsh
tgtadm --lld iscsi --op show --mode target 控制節點查看target
tgtadm --op new --lld=iscsi --mode=target --tid=1 --targetname=iqn.2010-10.org.openstack:volume-00000001 建立target
nova 掛接實例/分區
sudo nova-rootwrap guestmount --rw -a /home/instances/instance-0000001b/disk -m /dev/sda1 /tmp/tmpfe4fNg
配置:nova.conf
##################filter#############
#scheduler_default_filters=AvailabilityZoneFilter,RamFilter,ComputeFilter,IsolatedHostsFilter
#isolated_hosts=hyops2.elex.com
#isolated_images=ee30929c-a3bb-42a7-a494-9a77ae501c54
配置於nova.conf
規定在某個images上創建的實例位於固定計算節點主機
重新初始化nova庫:
停止控制和計算節點的nova服務,刪除/home/instances目錄下的文件
nova-manage network delete 192.168.193.0/24
nova-manage network delete 10.18.4.0/24
mysql -uroot -p
mysql> drop database nova
mysql> create database nova;
mysql> grant all privileges on nova.* to 'nova_user'@'%' identified by 'nova_pw3465';
nova-manage db sync
nohup /usr/bin/python /usr/bin/nova-all >> /var/log/nova.log 2>&1 &
nova-manage network create --label=public --fixed_range_v4=10.18.4.0/24 --num_networks=1 --network_size=256 --gateway=10.18.4.254 --bridge=br_pu --bridge_interface=em1 --multi_host='F'
nova-manage network create --label=private --fixed_range_v4=192.168.193.0/24 --num_networks=1 --network_size=256 --gateway=192.168.193.1 --bridge=br_pr --bridge_interface=em2 --multi_host='F'
創建密鑰:
nova keypair-add mykey > oskey.priv
chmod 600 oskey.priv
設置安全策略
nova secgroup-add-rule default tcp 22 22 0.0.0.0/0
nova secgroup-add-rule default icmp -1 -1 0.0.0.0/0
nova secgroup-list
nova secgroup-list-rules default
上傳鏡像
glance add name="CentOS-6.3_Fina_qcow2" is_public=true container_format=bare disk_format=qcow2 < CentOS-6.3_Fina_qcow2.img
glance add name="CentOS-6.3_Fina_raw" is_public=true container_format=bare disk_format=raw < CentOS-6.3_Fina_raw.img
重新生成實例
常見錯誤:
已解決
注:vncserver_listen的值在計算節點上時應配置成計算節點的ip
不然會報錯libvirtError: operation failed: failed to retrieve chardev info in qemu with 'info chardev'而無法啟動實例。
ERROR nova.manager [-] Error during ComputeManager.update_available_resource: list index out of range
libvir: QEMU error : Domain not found: no domain with matching name 'instance-00000002'
RemoteError: Remote error: InstanceNotFound Instance instance-00000002 could not be found.
此三類錯誤解決方法:/usr/lib/python2.6/site-packages/nova-2012.1-py2.6.egg/nova/virt/libvirt/utils.py:95
此文件的backing_file = [i.split('actual path:')[1].strip()[:-1]替換為backing_file = [i.strip()[:-1]
解決啟動nova-network、nova-volume出現timeout錯誤:
/usr/lib/python2.6/site-packages/eventlet/green/subprocess.py
第35行換成def wait(self, check_interval=0.01, timeout=None):
nova-novncproxy啟動報錯
ImportError: No module named websockify
解決:yum install python-websockify
Stderr: 'sudo: sorry, you must have a tty to run sudo\n'
而 CentOS 的 sudo 選項 requiretty 是默認打開的,ssh 需要一個 tty 才能執行,所以遠程 sudo 就會出錯
關閉(注釋掉) requiretty 這行:
# chmod 0440 /etc/sudoers; chmod 0440 /etc/sudoers.d/nova
# vi /etc/sudoers
注釋行 #Defaults requiretty
#cat /etc/sudoers.d/nova 或在 /etc/sudoers添加
nova ALL=(ALL) NOPASSWD: ALL
啟動rabbitmq-server出錯
ERROR: epmd error for host "hyops4": address (unable to establish tcp connection)
解決辦法:添加hyops4的解析到hosts文件
glance數據庫已經有了,但是用glance index提示
glance index
Failed to show index. Got error:
You are not authenticated.
注意admin_passwd 和 service_passwd的區別
RemoteError: Remote error: NetworkNotFound Network 5 could not be found.
重新創建網絡nova-manage network create后出現 要修改數據庫數據刪除virtual_interfaces表中網絡ID為5的行
VNC始終轉發的是127.0.0.1的IP,計算節點的nova.conf內的vncserver_proxyclient_address不起作用
原因:在計算節點程序啟動目錄有另外的nova.conf配置存在,且vncserver_proxyclient_address指向127.0.0.1
尚未解決
關閉nova DEBUG信息
TRACE nova.api.openstack Timeout: Timeout while waiting on RPC response.
TRACE nova.rpc.common timeout: timed out
RabbitMQ AQMP queue is full.
==> /var/log/nova/compute.log <==
libvir: QEMU error : Domain not found: no domain with matching name 'instance-0000000f' 創建實例時報此錯誤
...
2012-12-10 02:55:20 WARNING nova.virt.libvirt.connection [req-e4...db 6760c8a1013840aebd32655e379bca59] [instance: 77...ab24] \
Ignoring error injecting data into image 517c8f63-d3fb-4112-b56c-6e80d65d4062 ([Errno 16] Device or resource busy: '/tmp/tmprI2cza')
WARNING nova.compute.manager [-] Found 1 in the database and 0 on the hypervisor.
WARNING nova.compute.manager [-] [instance: 5...7] Instance found in database but not known by hypervisor. Setting power state to NOSTATE
Ops創建VM流程(FlatDHCP)
工作流程
請求:nova boot --image ttylinux --flavor 1 i-01
nova-api 接受請求,一個tcp REST請求.
nova-api 發送一個創建虛擬機的請求到消息隊列,並會存數據庫,帶uuid.
nova-scheduler 接受這個消息,並進行過濾,根據請求的虛擬資源,即flavor的信息.
scheduler會找到一個可用的主機(裝有nova-compute的物理主機),如果沒有找到就虛擬機的狀態設置成ERROR,
如果有可用主機,就發消息到nova-network,就進入下一步,配置網絡,注:此過程虛擬機處於scheduling任務狀態。
nova-network 接收到消息就,從fixed IP表(數據庫)里拿出一個可用IP,
並設置dnsmsq(DHCP server),確保拿出的IP可以與對應的MAC地址(生成的)對應,
確保虛擬機可以被賦予對應的IP設置IPTABLE.
對fixed IP 進行地址轉換,使虛擬機可以訪問外網,
設置好network之后,會發消息到消息隊列,使要在其上創建虛擬機的物理計算節點就收到創建虛擬機的消息,
計算節點接收到消息后,就開始創建虛擬機,首先會download鏡像從glance上
然后會根據之前生成的uuid,MAC,鏡像位置,
創建一個啟動虛擬機的xml文件,然后會調用libvirt接口,根據xml配置創建虛擬機,虛擬機創建完成之后,
會把虛擬機狀態改成ACTIVE
至此,一台虛擬機發布完成