OpenStack 计算服务Nova [四]

摘要

Nova是openstack最早的两块模块之一,另一个是对象存储swift。在openstack体系中一个叫做计算节点,一个叫做控制节点。这个主要和nova相关,我们把安装为计算节点nova-compute,把除了nova-compute叫做控制节点。nova-compute是创建虚拟机的,只是创建虚拟机,所有的控制都在另一台上。

OpenStack 计算服务Nova [四]

openstack
时间:2016年11月28日

Nova简介:

  Nova是openstack最早的两块模块之一,另一个是对象存储swift。在openstack体系中一个叫做计算节点,一个叫做控制节点。这个主要和nova相关,我们把安装为计算节点nova-compute,把除了nova-compute叫做控制节点。nova-compute是创建虚拟机的,只是创建虚拟机,所有的控制都在另一台上。

nova有非常多的组件(服务)

Nova服务介绍
API:负责接受和响应外部请求。支持OpenStack API,EC2 API
Cert:负责身份认证EC 2
Scheduler:用于云主机调度
Conductor:计算节点访问数据的中间件
Consoleauth:用于控制台的授权验证
Novncproxy:VNC代理

提示:EC 2是亚马逊云主机的意思

Nova scheduler
  Nova scheduler模块在openstack中的作用就是决策虚拟机创建在那个主机(计算节点)上

决策一个虚拟机应该调度到那个物理节点,需要分两个步骤:

1、过滤(Fliter)
2、计算权值(Weight)

提示:我们经常会出现找不到有效的主机?为什么?

 因为nova scheduler认为没有资源创建虚拟机,即使你有100G内存,如果nova scheduler认为你没有资格照样无法进行创建。scheduler作用就是决策虚拟机创建在那个主机上

image_1b2kgrl8f1sje1euatfcpohlhd9.png-85.5kB

经过主机过滤后,需要对主机进行权值的计算,根据策略选择相应的某一台主机(对于每一个要创建的虚拟机而言)

image_1b2kgs83p1tajtsb18pn14ni1gqgm.png-166.9kB

控制节点设置:
数据库以及keystone修改我们在前面已经完成,所以在此跳过

安装软件包

  1. [root@linux-node1 ~]# yum install openstack-nova-api openstack-nova-conductor \
  2. > openstack-nova-console openstack-nova-novncproxy \
  3. > openstack-nova-scheduler

在配置文件中修改数据库的连接地址

  1. [root@linux-node1 ~]# vim /etc/nova/nova.conf
  2. [database]
  3. connection=mysql+pymysql://nova:nova@192.168.56.11/nova
  4. [api_database]
  5. connection=mysql+pymysql://nova:nova@192.168.56.11/nova_api

提示:不要修改错了,每个都在在相对应的模块下面进行修改

同步数据库

  1. [root@linux-node1 ~]# su -s /bin/sh -c "nova-manage api_db sync" nova
  2. [root@linux-node1 ~]# su -s /bin/sh -c "nova-manage db sync" nova

提示:db的有警告可以忽略

检查是否有表结构

  1. [root@linux-node1 ~]# mysql -h 192.168.56.11 -unova -pnova -e "use nova;show tables;"
  2. [root@linux-node1 ~]# mysql -h 192.168.56.11 -unova_api -pnova_api -e "use nova_api;show tables;"

配置keystone

  1. [root@linux-node1 ~]# vim /etc/nova/nova.conf
  2. [keystone_authtoken]
  3. auth_uri = http://192.168.56.11:5000
  4. auth_url = http://192.168.56.11:35357
  5. memcached_servers = 192.168.56.11:11211
  6. auth_type = password
  7. project_domain_name = default
  8. user_domain_name = default
  9. project_name = service
  10. username = nova
  11. password = nova
  12. [DEFAULT]
  13. auth_strategy=keystone
  14. #打开注释,此行代表使用keystone进行认证

RabbitMq(消息队列配置)
因为nova服务之间使用消息队列进行沟通,所以我们需要配置rabbitmq

  1. [root@linux-node1 ~]# vim /etc/nova/nova.conf
  2. [DEFAULT]
  3. rpc_backend=rabbit
  4. #搜索rpc_backend打开注释
  5. rabbit_host=192.168.56.11
  6. localhost修改为IP地址
  7. rabbit_port=5672
  8. 端口我们可以开启也可以不开启默认就好
  9. rabbit_userid=openstack
  10. rabbit_password=openstack
  11. 这个是我们在rabbitmq上配置的用户

配置nova自己的一些功能

  1. 设置启用的元数据API
  2. [root@linux-node1 ~]# vim /etc/nova/nova.conf
  3. [DEFAULT]
  4. enabled_apis=osapi_compute,metadata
  5. 启动网络服务支持
  6. use_neutron=true
  7. 关闭防火墙
  8. firewall_driver=nova.virt.firewall.NoopFirewallDriver

提示:默认情况下,计算服务使用内置的防火墙服务。由于网络服务包含了防火墙服务,你必须使用nova.virt.firewall.NoopFirewallDriver防火墙服务来禁用掉计算服务内置的防火墙服务

我们不配置my IP,因为My IP是一个大坑
配置VNC代理使用控制节点的管理接口IP地址

  1. [root@linux-node1 ~]# vim /etc/nova/nova.conf
  2. vncserver_listen=192.168.56.11
  3. vncserver_proxyclient_address=192.168.56.11

配置glance镜像服务API

  1. [root@linux-node1 ~]# vim /etc/nova/nova.conf
  2. [glance]
  3. api_servers=http://192.168.56.11:9292

配置锁路径

  1. [oslo_concurrency]
  2. lock_path=/var/lib/nova/tmp

nova配置说明

  1. [root@linux-node1 ~]# grep '^[a-z]' /etc/nova/nova.conf
  2. enabled_apis=osapi_compute,metadata #启动api
  3. auth_strategy=keystone #设置keystone
  4. firewall_driver=nova.virt.firewall.NoopFirewallDriver #关闭防火墙
  5. use_neutron=true #使用neutron
  6. rpc_backend=rabbit #使用rabbitmq
  7. connection = mysql+pymysql://nova:nova@192.168.56.11/nova_api #数据库地址
  8. connection = mysql+pymysql://nova:nova@192.168.56.11/nova #数据库地址
  9. api_servers=http://192.168.56.11:9292 #glance api地址
  10. auth_uri = http://192.168.56.11:5000 #keystone
  11. auth_url = http://192.168.56.11:35357 #keystone
  12. memcached_servers = 192.168.56.11:11211 #keystone
  13. auth_type = password #keystone
  14. project_domain_name = default #keystone
  15. user_domain_name = default #keystone
  16. project_name = service #keystone
  17. username = nova #keystone
  18. password = nova #keystone
  19. lock_path=/var/lib/nova/tmp #锁路径
  20. rabbit_host=192.168.56.11 #rabbitmq
  21. rabbit_port=5672 #rabbitmq
  22. rabbit_userid=openstack #rabbitmq
  23. rabbit_password=openstack #rabbitmq
  24. vncserver_listen=192.168.56.11 #VNC
  25. vncserver_proxyclient_address=192.168.56.11 #VNC

设置开机启动,并启动服务

  1. # systemctl enable openstack-nova-api.service \
  2. openstack-nova-consoleauth.service openstack-nova-scheduler.service \
  3. openstack-nova-conductor.service openstack-nova-novncproxy.service
  4. # systemctl start openstack-nova-api.service \
  5. openstack-nova-consoleauth.service openstack-nova-scheduler.service \
  6. openstack-nova-conductor.service openstack-nova-novncproxy.service

nova启动成功之后还需要去keystone上进行注册,否则别人无法进行连接

创建nova服务

  1. [root@linux-node1 ~]# source admin-openstack.sh
  2. [root@linux-node1 ~]# openstack service create --name nova --description "Openstack Compute " compute
  3. +-------------+----------------------------------+
  4. | Field | Value |
  5. +-------------+----------------------------------+
  6. | description | Openstack Compute |
  7. | enabled | True |
  8. | id | c9aca55493924f2ba9cb5b304cb1322f |
  9. | name | nova |
  10. | type | compute |
  11. +-------------+----------------------------------+

创建Compute服务api端点

  1. [root@linux-node1 ~]# openstack endpoint create --region RegionOne \
  2. > compute public http://192.168.56.11:8774/v2.1/%\(tenant_id\)s
  3. +--------------+----------------------------------------------+
  4. | Field | Value |
  5. +--------------+----------------------------------------------+
  6. | enabled | True |
  7. | id | 71414f00b2834e8190ee25c219e3d3c4 |
  8. | interface | public |
  9. | region | RegionOne |
  10. | region_id | RegionOne |
  11. | service_id | c9aca55493924f2ba9cb5b304cb1322f |
  12. | service_name | nova |
  13. | service_type | compute |
  14. | url | http://192.168.56.11:8774/v2.1/%(tenant_id)s |
  15. +--------------+----------------------------------------------+
  16. [root@linux-node1 ~]# openstack endpoint create --region RegionOne compute admin http://192.168.56.11:8774/v2.1/%\(tenant_id\)s
  17. +--------------+----------------------------------------------+
  18. | Field | Value |
  19. +--------------+----------------------------------------------+
  20. | enabled | True |
  21. | id | 9162f57b72e244f799086eeca3b7df6c |
  22. | interface | admin |
  23. | region | RegionOne |
  24. | region_id | RegionOne |
  25. | service_id | c9aca55493924f2ba9cb5b304cb1322f |
  26. | service_name | nova |
  27. | service_type | compute |
  28. | url | http://192.168.56.11:8774/v2.1/%(tenant_id)s |
  29. +--------------+----------------------------------------------+
  30. [root@linux-node1 ~]# openstack endpoint create --region RegionOne compute internal http://192.168.56.11:8774/v2.1/%\(tenant_id\)s
  31. +--------------+----------------------------------------------+
  32. | Field | Value |
  33. +--------------+----------------------------------------------+
  34. | enabled | True |
  35. | id | 8fb3d0da5ee64ed693b7b4608844d5ff |
  36. | interface | internal |
  37. | region | RegionOne |
  38. | region_id | RegionOne |
  39. | service_id | c9aca55493924f2ba9cb5b304cb1322f |
  40. | service_name | nova |
  41. | service_type | compute |
  42. | url | http://192.168.56.11:8774/v2.1/%(tenant_id)s |
  43. +--------------+----------------------------------------------+

检查控制节点是否成功

  1. [root@linux-node1 ~]# openstack host list
  2. +---------------------------+-------------+----------+
  3. | Host Name | Service | Zone |
  4. +---------------------------+-------------+----------+
  5. | linux-node1.abcdocker.com | consoleauth | internal |
  6. | linux-node1.abcdocker.com | conductor | internal |
  7. | linux-node1.abcdocker.com | scheduler | internal |
  8. +---------------------------+-------------+----------+

nova计算节点配置

 我们在架构中想构建几个虚拟机就要看计算节点的配置,虚拟化工具我们只能使用VMware,因为VMware支持嵌套虚拟化,其他的虚拟化软件不支持
image_1b2khh2tp1bjikcr1q851mo6hot13.png-117.2kB
我们nova计算节点IP是192.168.56.12

需要开启虚拟化技术
因为需要使用kvm来创建虚拟机,所以我们需要开启虚拟化。如果是服务器需要在bios上开启
image_1b2khjgc4931a216vg1b1j1tso1g.png-71.1kB

环境准备

  1. [root@linux-node2 ~]# cat /etc/redhat-release
  2. CentOS Linux release 7.2.1511 (Core)
  3. [root@linux-node2 ~]# uname -r
  4. 3.10.0-327.36.2.el7.x86_64

时间同步

  1. [root@linux-node1 ~]# yum install ntpdate -y
  2. [root@linux-node1 ~]# ntpdate time1.aliyun.com
  3. [root@linux-node1 ~]# timedatectl set-timezone Asia/Shanghai #设置时区
  4. [root@linux-node1 ~]# rpm -ivh http://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm

安装openstack仓库

  1. [root@linux-node2 ~]# yum install -y centos-release-openstack-mitaka

安装openstack客户端

  1. [root@linux-node1 ~]# yum install -y python-openstackclient

因为控制节点的nova和计算节点的配置除了没有数据库其他的都是相同的,这里我们采取scp的形式进行修改

安装openstack SELinux管理包

  1. [root@linux-node2 ~]# yum install -y openstack-selinux

安装nova

  1. [root@linux-node2 ~]# yum install -y openstack-nova-compute

步骤:
1、从控制节点scp nova.conf
2、 删除数据库的配置
3、 vnc的配置进行变更
4、 设置一个虚拟化的选项
提示:要注意nova.conf文件的权限

时间必须同步!!!!

1.将控制节点的nova.conf 复制到计算节点上

  1. [root@linux-node1 ~]# scp /etc/nova/nova.conf 192.168.56.12:/etc/nova/
  2. The authenticity of host '192.168.56.12 (192.168.56.12)' can't be established.
  3. ECDSA key fingerprint is 43:50:3c:fa:03:29:7c:3c:5f:aa:d2:76:b5:8e:d9:54.
  4. Are you sure you want to continue connecting (yes/no)? yes
  5. Warning: Permanently added '192.168.56.12' (ECDSA) to the list of known hosts.
  6. root@192.168.56.12's password:
  7. nova.conf 100% 180KB 180.0KB/s 00:00

2.进入计算节点进行修改

  1. 首先保证权限一致
  2. [root@linux-node2 nova]# ll /etc/nova/nova.conf
  3. -rw-r----- 1 root nova 184332 Nov 18 17:02 /etc/nova/nova.conf

3.修改配置文件

  1. [root@linux-node2 nova]# vim /etc/nova/nova.conf
  2. #connection =
  3. #connection =
  4. 搜索mysqlmysql路径注释掉

配置vnc

  1. novncproxy_base_url=http://192.168.56.11:6080/vnc_auto.html
  2. vncserver_listen=0.0.0.0
  3. vncserver_proxyclient_address=192.168.56.12
  4. 5384enabled=true

提示:服务器组件监听所有的 IP 地址,而代理组件仅仅监听计算节点管理网络接口的 IP 地址。基本的 URL 指示您可以使用 web 浏览器访问位于该计算节点上实例的远程控制台的位置。

选择虚拟化类型

确定您的计算节点是否支持虚拟化的硬件加速。
egrep -c '(vmx|svm)' /proc/cpuinfo
如果这个命令返回了1或不等于0的值,那么你的计算节点支持硬件加速且不需要额外的配置。
如果这个命令返回了 0 值,那么你的计算节点不支持硬件加速。你必须配置 libvirt 来使用 QEMU 去代替 KVM

KVM文章:http://www.abcdocker.com/abcdocker/1627

/etc/nova/nova.conf文件的 [libvirt] 区域做出如下的编辑:

  1. [libvirt]
  2. virt_type=kvm
  3. #配置虚拟化类型

总结
nova.conf修改了如下五行

  1. [root@linux-node2 nova]# grep '^[a-z]' /etc/nova/nova.conf
  2. enabled=true
  3. vncserver_listen=0.0.0.0
  4. vncserver_proxyclient_address=192.168.56.12
  5. novncproxy_base_url=http://192.168.56.11:6080/vnc_auto.html
  6. virt_type=kvm

设置开机启动

  1. [root@linux-node2 ~]# systemctl enable libvirtd openstack-nova-compute
  2. [root@linux-node2 ~]# systemctl start libvirtd openstack-nova-compute

列出服务组件,以验证是否成功启动并注册了每个进程:

  1. [root@linux-node1 ~]# source admin-openstack.sh
  2. [root@linux-node1 ~]# openstack host list
  3. +---------------------------+-------------+----------+
  4. | Host Name | Service | Zone |
  5. +---------------------------+-------------+----------+
  6. | linux-node1.abcdocker.com | consoleauth | internal |
  7. | linux-node1.abcdocker.com | conductor | internal |
  8. | linux-node1.abcdocker.com | scheduler | internal |
  9. | linux-node2.abcdocker.com | compute | nova |
  10. +---------------------------+-------------+----------+
  11. 该输出应该显示三个服务组件在控制节点上启用,一个服务组件在计算节点上启用。

查看novakeystone是否正常

  1. [root@linux-node1 ~]# nova service-list
  2. +----+------------------+---------------------------+----------+---------+-------+----------------------------+-----------------+
  3. | Id | Binary | Host | Zone | Status | State | Updated_at | Disabled Reason |
  4. +----+------------------+---------------------------+----------+---------+-------+----------------------------+-----------------+
  5. | 1 | nova-consoleauth | linux-node1.abcdocker.com | internal | enabled | up | 2016-11-18T09:24:23.000000 | - |
  6. | 2 | nova-conductor | linux-node1.abcdocker.com | internal | enabled | up | 2016-11-18T09:24:22.000000 | - |
  7. | 3 | nova-scheduler | linux-node1.abcdocker.com | internal | enabled | up | 2016-11-18T09:24:23.000000 | - |
  8. | 6 | nova-compute | linux-node2.abcdocker.com | nova | enabled | up | 2016-11-18T09:24:23.000000 | - |
  9. +----+------------------+---------------------------+----------+---------+-------+----------------------------+-----------------+

查看nova和glance服务相互是否正常

  1. [root@linux-node1 ~]# nova image-list
  2. +--------------------------------------+--------+--------+--------+
  3. | ID | Name | Status | Server |
  4. +--------------------------------------+--------+--------+--------+
  5. | fc67361d-ad30-40b2-9d96-941e50fc17f5 | cirros | ACTIVE | |
  6. +--------------------------------------+--------+--------+--------+

再次提示:时间必须同步!!!

nova安装到此截止!


新闻联播老司机

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: