作用
1 响应云主机请求, 并把连接调度至对应的 compute 节点
2 提供 console 认证服务
3 提供 vnc 访问云主机功能
软件安装
# yum install -y openstack-nova-api openstack-nova-compute openstack-nova-conductor openstack-nova-scheduler python-cinderclient openstack-utils openstack-nova-novncproxy openstack-nova-console
配置 vnc 服务
# openstack-config --set /etc/nova/nova.conf DEFAULT novncproxy_base_url http://<你的ip>:6080/vnc_auto.html
# openstack-config --set /etc/nova/nova.conf DEFAULT vncserver_listen <你的ip>
# openstack-config --set /etc/nova/nova.conf DEFAULT vncserver_proxyclient_address <你的ip>
# openstack-config --set /etc/nova/nova.conf DEFAULT vnc_enabled true
# openstack-config --set /etc/nova/nova.conf DEFAULTvnc_keymap en-us
# openstack-config --set /etc/nova/nova.conf DEFAULT vpvncproxy_port 6081
# openstack-config --set /etc/nova/nova.conf DEFAULT novncproxy_host <你的ip>
# openstack-config --set /etc/nova/nova.conf DEFAULT novncproxy_port 6080
配置 keystone 验证
# openstack-config --set /etc/nova/nova.conf DEFAULT auth_strategy keystone
# openstack-config --set /etc/nova/nova.conf keystone_authtoken auth_host <keystone地址>
# openstack-config --set /etc/nova/nova.conf keystone_authtoken auth_port 35357
# openstack-config --set /etc/nova/nova.conf keystone_authtoken auth_protocol http
# openstack-config --set /etc/nova/nova.conf keystone_authtoken auth_uri http:// <keystone地址>:5000/
# openstack-config --set /etc/nova/nova.conf keystone_authtoken admin_user nova
# openstack-config --set /etc/nova/nova.conf keystone_authtoken admin_password nova
# openstack-config --set /etc/nova/nova.conf keystone_authtoken admin_tenant_name service
# openstack-config --set /etc/nova/api-paste.ini filter:authtoken auth_host <keystone地址>
# openstack-config --set /etc/nova/api-paste.ini filter:authtoken admin_tenant_name service
# openstack-config --set /etc/nova/api-paste.ini filter:authtoken admin_user nova
# openstack-config --set /etc/nova/api-paste.ini filter:authtoken admin_password nova
# openstack-config --set /etc/nova/api-paste.ini filter:authtoken paste.filter_factory keystoneclient.middleware.auth_token:filter_factory
nova 连接 glance
# openstack-config --set /etc/nova/nova.conf DEFAULT glance_host <glance_地址>
# openstack-config --set /etc/nova/nova.conf DEFAULT glance_port 9292
# openstack-config --set /etc/nova/nova.conf DEFAULT glance_protocol http
# openstack-config --set /etc/nova/nova.conf DEFAULT glance_api_servers <glance_地址>:9292
# openstack-config --set /etc/nova/nova.conf DEFAULT image_service nova.image.glance.GlanceImageService
# openstack-config --set /etc/nova/nova.conf DEFAULT network_api_class nova.network.neutronv2.api.API
nova 连接 rabbitmq
# openstack-config --set /etc/nova/nova.conf DEFAULT rpc_backend nova.openstack.common.rpc.impl_kombu
# openstack-config --set /etc/nova/nova.conf DEFAULT rabbit_host <mq_地址>
# openstack-config --set /etc/nova/nova.conf DEFAULT rabbit_port 5672
# openstack-config --set /etc/nova/nova.conf DEFAULT rabbit_userid nova
# openstack-config --set /etc/nova/nova.conf DEFAULT rabbit_password <nova_mq_密码>
# openstack-config --set /etc/nova/nova.conf DEFAULT rabbit_virtual_host /
设定虚拟云主机超配
# openstack-config --set /etc/nova/nova.conf DEFAULT cpu_allocation_ratio 5.0
# openstack-config --set /etc/nova/nova.conf DEFAULT ram_allocation_ratio 1.0
# openstack-config --set /etc/nova/nova.conf DEFAULT reserved_host_memory_mb 1024
# openstack-config --set /etc/nova/nova.conf DEFAULT reserved_host_disk_mb 0
这里 cpu_allocation_ratio 为 CPU 的超配, 如果 24 核,会虚拟为 24 X 5 = 120 核
这里 ram_allocation_ratio 为内存超配,不建议超配内存,因此设定为 1.0
nova 节点启用 metadata-proxy 连接 metadata
# openstack-config --set /etc/nova/nova.conf DEFAULT enabled_apis ec2,osapi_compute,metadata
# openstack-config --set /etc/nova/nova.conf DEFAULT metadata_listen <本地地址>
# openstack-config --set /etc/nova/nova.conf DEFAULT metadata_workers 24
# openstack-config --set /etc/nova/nova.conf DEFAULT rootwrap_config /etc/nova/rootwrap.conf
# openstack-config --set /etc/nova/nova.conf DEFAULT use_forwarded_for False
# openstack-config --set /etc/nova/nova.conf DEFAULT service_neutron_metadata_proxy True
# openstack-config --set /etc/nova/nova.conf DEFAULT neutron_metadata_proxy_shared_secret 744ee65672684281
# openstack-config --set /etc/nova/nova.conf DEFAULT neutron_default_tenant_id default
# openstack-config --set /etc/nova/nova.conf DEFAULT metadata_host <本地地址>
nova 基本配置
# openstack-config --set /etc/nova/nova.conf DEFAULT osapi_compute_listen <你IP>
# openstack-config --set /etc/nova/nova.conf DEFAULT osapi_compute_listen_port 8774
# openstack-config --set /etc/nova/nova.conf DEFAULT osapi_compute_workers 5
# openstack-config --set /etc/nova/nova.conf DEFAULT service_down_time 120
# openstack-config --set /etc/nova/nova.conf DEFAULT osapi_max_limit 10000
# openstack-config --set /etc/nova/nova.conf DEFAULT resize_confirm_window 10
# openstack-config --set /etc/nova/nova.conf DEFAULT reserved_host_disk_mb 10240
# openstack-config --set /etc/nova/nova.conf DEFAULT reserved_host_memory_mb 2048
# openstack-config --set /etc/nova/nova.conf DEFAULT scheduler_default_filters AggregateInstanceExtraSpecsFilter,RetryFilter,AvailabilityZoneFilter,RamFilter,ComputeFilter,ComputeCapabilitiesFilter,ImagePropertiesFilter,CoreFilter,DiskFilter
# openstack-config --set /etc/nova/nova.conf DEFAULT vcpu_pin_set 2-$
# openstack-config --set /etc/nova/nova.conf DEFAULT firewall_driver nova.virt.firewall.NoopFirewallDriver
# openstack-config --set /etc/nova/nova.conf DEFAULT dhcp_domain "''"
# openstack-config --set /etc/nova/nova.conf DEFAULT max_pool_size 100
# openstack-config --set /etc/nova/nova.conf DEFAULT max_overflow 60
# openstack-config --set /etc/nova/nova.conf DEFAULT connection_debug 100
# openstack-config --set /etc/nova/nova.conf DEFAULT
nova 连接 neutron
# openstack-config --set /etc/nova/nova.conf DEFAULT network_api_class nova.network.neutronv2.api.API
# openstack-config --set /etc/nova/nova.conf DEFAULT neutron_url http://<neutron_地址>:9696/
# openstack-config --set /etc/nova/nova.conf DEFAULT neutron_admin_tenant_name service
# openstack-config --set /etc/nova/nova.conf DEFAULT neutron_admin_username neutron
# openstack-config --set /etc/nova/nova.conf DEFAULT neutron_admin_password neutron
# openstack-config --set /etc/nova/nova.conf DEFAULT neutron_admin_auth_url http://<keystone_地址>:35357/v2.0
# openstack-config --set /etc/nova/nova.conf DEFAULT security_group_api neutron
# openstack-config --set /etc/nova/nova.conf DEFAULT neutron_url http://<neutron_daddr>:9696
# openstack-config --set /etc/nova/nova.conf DEFAULT neutron_ovs_bridge br-int
# openstack-config --set /etc/nova/nova.conf DEFAULT firewall_drivernova.virt.firewall.NoopFirewallDriver
指定 libvirt 连接驱动
openstack-config --set /etc/nova/nova.conf libvirt vif_driver nova.virt.libvirt.vif.LibvirtGenericVIFDriver
支持 ovs 网络 plugin
openstack-config --set /etc/nova/nova.conf libvirt vif_driver nova.virt.libvirt.vif.LibvirtGenericVIFDriver
openstack-config --set /etc/nova/nova.conf libvirt vif_driver nova.virt.xenapi.vif.XenAPIBridgeDriver
nova 连接 db
openstack-config --set /etc/nova/nova.conf DEFAULT sql_connection mysql://nova:openstack@<db_地址>/nova
初始化数据
当数据库配置成功, 则下面命令能够在数据库上产生 108 个表
sudo -u nova nova-manage db sync
服务启动
# service openstack-nova-consoleauth restart
# service openstack-nova-novncproxy restart
# service messagebus restart
# service libvirtd restart
# service openstack-nova-api restart
# service openstack-nova-scheduler restart
# service openstack-nova-conductor restart
nova flavor (vm 规格定义)
默认状态会有下面几种 flavor
# nova flavor-list
+----+-----------+-----------+------+-----------+------+-------+-------------+-----------+
| ID | Name | Memory_MB | Disk | Ephemeral | Swap | VCPUs | RXTX_Factor | Is_Public |
+----+-----------+-----------+------+-----------+------+-------+-------------+-----------+
| 1 | m1.tiny | 512 | 1 | 0 | | 1 | 1.0 | True |
| 2 | m1.small | 2048 | 20 | 0 | | 1 | 1.0 | True |
| 3 | m1.medium | 4096 | 40 | 0 | | 2 | 1.0 | True |
| 4 | m1.large | 8192 | 80 | 0 | | 4 | 1.0 | True |
| 5 | m1.xlarge | 16384 | 160 | 0 | | 8 | 1.0 | True |
+----+-----------+-----------+------+-----------+------+-------+-------------+-----------+
如果不符合要求,可以自己重新创建一个 vm 规格模板
nova flavor-delete 1
nova flavor-delete 2
nova flavor-delete 3
nova flavor-delete 4
nova flavor-delete 5
创建自定义 flavor 方法 ( 8核 16G, 40GB 硬盘) ( 4C 8G 40GB 硬盘) exxample )
# nova flavor-create --swap 2 --is-public true 4c-8g 236a0fbf-7002-4049-8e89-aa25e16371ea 8192 40 4
+--------------------------------------+-------+-----------+------+-----------+------+-------+-------------+-----------+
| ID | Name | Memory_MB | Disk | Ephemeral | Swap | VCPUs | RXTX_Factor | Is_Public |
+--------------------------------------+-------+-----------+------+-----------+------+-------+-------------+-----------+
| 236a0fbf-7002-4049-8e89-aa25e16371ea | 4c-8g | 8192 | 40 | 0 | 2 | 4 | 1.0 | True |
+--------------------------------------+-------+-----------+------+-----------+------+-------+-------------+-----------+
# nova flavor-create --swap 2 --is-public true 8c-16g a4d57d25-71f0-4f52-b255-20571012689a 16384 40 8
+--------------------------------------+--------+-----------+------+-----------+------+-------+-------------+-----------+
| ID | Name | Memory_MB | Disk | Ephemeral | Swap | VCPUs | RXTX_Factor | Is_Public |
+--------------------------------------+--------+-----------+------+-----------+------+-------+-------------+-----------+
| a4d57d25-71f0-4f52-b255-20571012689a | 8c-16g | 16384 | 40 | 0 | 2 | 8 | 1.0 | True |
+--------------------------------------+--------+-----------+------+-----------+------+-------+-------------+-----------+
查询当前 flavor
# nova flavor-list
+--------------------------------------+--------+-----------+------+-----------+------+-------+-------------+-----------+
| ID | Name | Memory_MB | Disk | Ephemeral | Swap | VCPUs | RXTX_Factor | Is_Public |
+--------------------------------------+--------+-----------+------+-----------+------+-------+-------------+-----------+
| 236a0fbf-7002-4049-8e89-aa25e16371ea | 4c-8g | 8192 | 40 | 0 | 2 | 4 | 1.0 | True |
| a4d57d25-71f0-4f52-b255-20571012689a | 8c-16g | 16384 | 40 | 0 | 2 | 8 | 1.0 | True |
+--------------------------------------+--------+-----------+------+-----------+------+-------+-------------+-----------+
创建防火墙
[root@hh-yun-compute-130025 ~(keystone_admin)]# nova agent-list
+----------+------------+----+--------------+---------+---------+-----+
| Agent_id | Hypervisor | OS | Architecture | Version | Md5hash | Url |
+----------+------------+----+--------------+---------+---------+-----+
+----------+------------+----+--------------+---------+---------+-----+
检测服务状态
[root@hh-yun-compute-130025 ~(keystone_admin)]# nova service-list
+------------------+-----------------------------------+----------+---------+-------+----------------------------+-----------------+
| Binary | Host | Zone | Status | State | Updated_at | Disabled Reason |
+------------------+-----------------------------------+----------+---------+-------+----------------------------+-----------------+
| nova-consoleauth | hh-yun-compute-130030.vclound.com | internal | enabled | up | 2014-10-11T02:36:15.000000 | - |
| nova-scheduler | hh-yun-compute-130030.vclound.com | internal | enabled | up | 2014-10-11T02:36:16.000000 | - |
| nova-conductor | hh-yun-compute-130030.vclound.com | internal | enabled | up | 2014-10-11T02:36:16.000000 | - |
| nova-compute | hh-yun-compute-130030.vclound.com | nova | disabled| down | 2014-10-11T02:36:16.000000 | - |
+------------------+-----------------------------------+----------+---------+-------+----------------------------+-----------------+
检测网络
[root@hh-yun-compute-130025 ~(keystone_admin)]# nova network-list
+--------------------------------------+---------+------+
| ID | Label | Cidr |
+--------------------------------------+---------+------+
| b26b81fc-bda9-4882-950c-614e9546bcd1 | ext_net | - |
+--------------------------------------+---------+------+
检测安全组
[root@hh-yun-compute-130025 ~(keystone_admin)]# nova secgroup-list
+--------------------------------------+---------+-------------+
| Id | Name | Description |
+--------------------------------------+---------+-------------+
| 9caa0d6f-c063-46f9-ab3b-845962ac836b | default | default |
+--------------------------------------+---------+-------------+
检测规则
[root@hh-yun-compute-130025 ~(keystone_admin)]# nova secgroup-list-rules default
+-------------+-----------+---------+-----------+--------------+
| IP Protocol | From Port | To Port | IP Range | Source Group |
+-------------+-----------+---------+-----------+--------------+
| | | | | default |
| | | | | default |
+-------------+-----------+---------+-----------+--------------+
为 default 安全组加添规则
# nova secgroup-add-rule default icmp -1 -1 0.0.0.0/0 > /dev/null
# nova secgroup-add-rule default tcp 22 22 0.0.0.0/0 > /dev/null
# nova secgroup-add-rule default udp 53 53 0.0.0.0/0 > /dev/null
验证
[root@hh-yun-compute-130025 ~(keystone_admin)]# nova secgroup-list-rules default
+-------------+-----------+---------+-----------+--------------+
| IP Protocol | From Port | To Port | IP Range | Source Group |
+-------------+-----------+---------+-----------+--------------+
| icmp | -1 | -1 | 0.0.0.0/0 | |
| | | | | default |
| tcp | 22 | 22 | 0.0.0.0/0 | |
| udp | 53 | 53 | 0.0.0.0/0 | |
| | | | | default |
+-------------+-----------+---------+-----------+--------------+
创建新的安全组
# nova secgroup-create terry_test_rule "allow ping and ssh" > /dev/null
# nova secgroup-add-rule terry_test_rule icmp -1 -1 0.0.0.0/0 > /dev/null
# nova secgroup-add-rule terry_test_rule tcp 22 22 0.0.0.0/0 > /dev/null
# nova secgroup-add-rule terry_test_rule udp 53 53 0.0.0.0/0 > /dev/null
验证
[root@hh-yun-compute-130025 ~(keystone_admin)]# nova secgroup-list-rules terry_test_rule
+-------------+-----------+---------+-----------+--------------+
| IP Protocol | From Port | To Port | IP Range | Source Group |
+-------------+-----------+---------+-----------+--------------+
| icmp | -1 | -1 | 0.0.0.0/0 | |
| udp | 53 | 53 | 0.0.0.0/0 | |
| tcp | 22 | 22 | 0.0.0.0/0 | |
+-------------+-----------+---------+-----------+--------------+
故障提示
openstack-nova-novncproxy 无法启动
# systemctl status openstack-nova-novncproxy.service -l
● openstack-nova-novncproxy.service - OpenStack Nova NoVNC Proxy Server
Loaded: loaded (/usr/lib/systemd/system/openstack-nova-novncproxy.service; disabled; vendor preset: disabled)
Active: failed (Result: exit-code) since Wed 2025-02-12 15:21:08 CST; 1min 33s ago
Process: 20168 ExecStart=/usr/bin/nova-novncproxy --web /usr/share/novnc/ $OPTIONS (code=exited, status=1/FAILURE)
Main PID: 20168 (code=exited, status=1/FAILURE)
Feb 12 15:21:08 ns-yun-020038.vclound.com nova-novncproxy[20168]: File "/usr/lib/python2.7/site-packages/nova/cmd/novncproxy.py", line 87, in main
Feb 12 15:21:08 ns-yun-020038.vclound.com nova-novncproxy[20168]: wrap_cmd=None)
Feb 12 15:21:08 ns-yun-020038.vclound.com nova-novncproxy[20168]: File "/usr/lib/python2.7/site-packages/nova/console/websocketproxy.py", line 38, in __init__
Feb 12 15:21:08 ns-yun-020038.vclound.com nova-novncproxy[20168]: ssl_target=None, *args, **kwargs)
Feb 12 15:21:08 ns-yun-020038.vclound.com nova-novncproxy[20168]: File "/usr/lib/python2.7/site-packages/websockify/websocketproxy.py", line 231, in __init__
Feb 12 15:21:08 ns-yun-020038.vclound.com nova-novncproxy[20168]: websocket.WebSocketServer.__init__(self, RequestHandlerClass, *args, **kwargs) <-- 参考这里
Feb 12 15:21:08 ns-yun-020038.vclound.com nova-novncproxy[20168]: TypeError: __init__() got an unexpected keyword argument 'no_parent'
Feb 12 15:21:08 ns-yun-020038.vclound.com systemd[1]: openstack-nova-novncproxy.service: main process exited, code=exited, status=1/FAILURE
Feb 12 15:21:08 ns-yun-020038.vclound.com systemd[1]: Unit openstack-nova-novncproxy.service entered failed state.
Feb 12 15:21:08 ns-yun-020038.vclound.com systemd[1]: openstack-nova-novncproxy.service failed.
验证 wbsockify 包版本
rpm -qa | grep python-websockify
python-websockify-0.6.0-2.el7.noarch
降级改软件即可解决问题
# yum downgrade python-websockify-0.5.1-1.el7.noarch -y
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
Resolving Dependencies
--> Running transaction check
---> Package python-websockify.noarch 0:0.5.1-1.el7 will be a downgrade
---> Package python-websockify.noarch 0:0.6.0-2.el7 will be erased
--> Finished Dependency Resolution
Dependencies Resolved
======================================================================================================================
Package Arch Version Repository Size
======================================================================================================================
Downgrading:
python-websockify noarch 0.5.1-1.el7 epel-old 57 k
Transaction Summary
======================================================================================================================
Downgrade 1 Package
Total download size: 57 k
Downloading packages:
python-websockify-0.5.1-1.el7.noarch.rpm | 57 kB 00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : python-websockify-0.5.1-1.el7.noarch 1/2
Cleanup : python-websockify-0.6.0-2.el7.noarch 2/2
Verifying : python-websockify-0.5.1-1.el7.noarch 1/2
Verifying : python-websockify-0.6.0-2.el7.noarch 2/2
Removed:
python-websockify.noarch 0:0.6.0-2.el7
Installed:
python-websockify.noarch 0:0.5.1-1.el7
Complete!
# systemctl restart openstack-nova-novncproxy.service
# systemctl status openstack-nova-novncproxy.service
● openstack-nova-novncproxy.service - OpenStack Nova NoVNC Proxy Server
Loaded: loaded (/usr/lib/systemd/system/openstack-nova-novncproxy.service; disabled; vendor preset: disabled)
Active: active (running) since Wed 2025-02-12 15:35:07 CST; 5s ago
Main PID: 7699 (nova-novncproxy)
Tasks: 1
Memory: 38.0M
CGroup: /system.slice/openstack-nova-novncproxy.service
└─7699 /usr/bin/python /usr/bin/nova-novncproxy --web /usr/share/novnc/
Feb 12 15:35:07 ns-yun-020037.vclound.com systemd[1]: Started OpenStack Nova NoVNC Proxy Server.