zoukankan      html  css  js  c++  java
  • 第四步(2):安装openstack-nova服务-控制节点

    简介

    nova 是 openstack 最早的组件之一,nova 分为控制节点和计算节点,计算节点通过 nova computer 进行虚拟机创建,通过 libvirt 调用 kvm 创建虚拟机,nova 之间通信通过 rabbitMQ 队列进行通信,其组件和功能如下:
    API:负责接收和响应外部请求。监听端口为 8774、8775、6080;
    Scheduler:负责调度虚拟机所在的物理机。
    Conductor:计算节点访问数据库的中间件。当计算节点创建好虚拟机后,会把虚拟机的元数据发送到消息队列中,由控制节点监听消息队列,控制节点会通过 nova Conductor 组件,将虚拟机的元数据(地址、类型、在哪个node节点运行)写入到mysql;node节点不能直接连接mysql;
    Consoleauth:用于控制台的授权认证。新版本已经没有此组件;
    Novncproxy:VNC 代理,用于显示虚拟机操作终端。通过vnc协议去连接,但是vnc不能直接在终端执行粘贴复制;通过VNC连接访问正在运行的实例的代理;
    nova-spicehtml5proxy:提供用于通过SPICE连接访问正在运行的实例的代理。支持基于浏览器的HTML5客户端。
    
    控制端需要安装nova控制端服务,Node节点需要安装nova客户端服务;
    (03)
    
    使用dashboard或者命令通过nova api去请求创建虚拟机,nova api会把创建虚拟机的请求放到消息队列中,由nova schedule接收请求并进行筛选出一个可用的node节点;
    将筛选后的结果写入到消息队列中,最终会写入到mysql,nova neutron会监听消息队列,给虚拟机创建请求分配一个ip地址,并将虚拟机的ip地址写入到mysql中;
    nova-volume也会监听消息队列,给虚拟机分配一个存储,nova-volume会调用外部存储给虚拟机进行分配,结果会写到mysql;
    最终会由nova compute在宿主机上执行虚拟机的创建,nova compute也会监听消息队列,node节点执行创建虚拟机时,会通过glance api获取到镜像,glance api会从镜像存储中获取到镜像;
    
    此图适用于早期版本,有的组件名称已经改变,有的组件已经删除;
    
    Nova-API 的功能:
    Nova-api 组件实现了 restful API 的功能,接收和响应来自最终用户的计算 API 请求,接收外部的请求并通过 message queue 将请求发动给其他服务组件,同时也兼容 EC2 API(国外公有云api),所以也可以使用 EC2 的管理工具对 nova 进行日常管理。Nova-api是接收外部请求,实现对虚拟机的增、删、改、查;
    
    nova scheduler:
    nova scheduler 模块在 openstack 中的作用是决策虚拟机创建在哪个主机(计算节点)上。决策一个虚拟机应该调度到某物理节点,需要分为两个步骤:
    1、过滤(filter),过滤出可以创建虚拟机的主机,通过一些策略进行过滤,如创建在哪个组中,通过对组内的node节点进行权重评估,对硬件信息进行打分(cpu、内存、存储);(04)
    
    2、计算权值(weight),根据权重大小进行分配,默认根据资源可用空间进行权重排序,如cpu、内存越多,评分就越高,则创建虚拟机的可能性也就越大(05)
    
    对于nova管理端来说,是接收外部创建请求,通过 nova scheduler 筛选出node节点,并下发指令到node节点,由node节点创建虚拟机;控制端筛选出node节点后,会把创建虚拟机的请求发送到 rabbitmq 中,各个node节点都会监听 rabbitmq 中的队列,最终在node节点上是由 nova compute 调用 libvirt,libvirt 调用 kvm 创建虚拟机
    

    https://docs.openstack.org/nova/train/install/get-started-compute.html #简介参考

    部署nova-controller

    https://docs.openstack.org/nova/train/install/controller-install-rdo.html #nova-controller部署

    1、. admin-openrc.sh
    
    2、openstack user create --domain default --password-prompt nova   #创建认证账号
    
    3、openstack role add --project service --user nova admin
    #把nova用户添加到service项目,拥有admin权限
    
    4、openstack service create --name nova --description "OpenStack Compute" compute
    #创建nova服务
    
    5、openstack endpoint create --region RegionOne compute public http://openstack-vip.linux.local:8774/v2.1
    openstack endpoint create --region RegionOne compute internal http://openstack-vip.linux.local:8774/v2.1
    openstack endpoint create --region RegionOne compute admin http://openstack-vip.linux.local:8774/v2.1
    #给nova服务关联endpoint
    
    6、openstack endpoint list   #验证
    
    7、yum install openstack-nova-api openstack-nova-conductor openstack-nova-novncproxy openstack-nova-scheduler -y
    
    8、vim /etc/nova/nova.conf
    [DEFAULT]
    enabled_apis = osapi_compute,metadata  #支持的api类型;开启之后,就可以通过dashboard或命令行访问
    transport_url = rabbit://openstack:openstack123@openstack-vip.linux.local:5672/  #配置RabbitMQ消息队列访问
    use_neutron = true   #使用neutron获取网络信息
    firewall_driver = nova.virt.firewall.NoopFirewallDriver   
    #通过此驱动程序与neutron进行交互,其实就是一个python文件;/usr/lib/python2.7/site-packages/ pythone模块都放在此目录下
    
    [api_database]
    connection = mysql+pymysql://nova:nova123@openstack-vip.linux.local/nova_api
    
    [database]
    connection = mysql+pymysql://nova:nova123@openstack-vip.linux.local/nova
    
    [api]
    auth_strategy = keystone  #nova认证方式采用keystone认证
    
    [keystone_authtoken]
    www_authenticate_uri = http://openstack-vip.linux.local:5000/  #指定keystone地址
    auth_url = http://openstack-vip.linux.local:5000/
    memcached_servers = openstack-vip.linux.local:11211   #指定memcache地址
    auth_type = password
    project_domain_name = Default
    user_domain_name = Default
    project_name = service
    username = nova
    password = nova
    
    [vnc]   #只有vnc配置正确,后期才可以通过浏览器管理虚拟机,否则报1006或者1005状态码,即vnc配置错误
    enabled = true
    server_listen = 172.31.7.101   #controller端,监听地址都为本机
    server_proxyclient_address = 172.31.7.101
    
    [glance]   #nova需要连接glance获取镜像 
    api_servers = http://openstack-vip.linux.local:9292
    
    [oslo_concurrency]   #指定锁路径
    lock_path = /var/lib/nova/tmp    #锁的作用是创建虚拟机时,在执行某个操作的时候,需要等此步骤执行完后才能执行下一个步骤,不能并行执行,保证操作是一步一步的执行
    
    [placement]   #通过调用placement服务,获取当前可用的主机列表
    region_name = RegionOne
    project_domain_name = Default
    project_name = service
    auth_type = password
    user_domain_name = Default
    auth_url = http://openstack-vip.linux.local:5000/v3  #通过此地址调用placement服务
    username = placement
    password = placement
    
    9、su -s /bin/sh -c "nova-manage api_db sync" nova  #初始化nova_api数据库
    
    10、su -s /bin/sh -c "nova-manage cell_v2 map_cell0" nova
    #注册cell0数据库;nova服务内部把资源划分到不同的cell中,把计算节点划分到不同的cell中;openstack内部基于cell把计算节点进行逻辑上的分组
    
    11、su -s /bin/sh -c "nova-manage cell_v2 create_cell --name=cell1 --verbose" nova
    #创建cell1单元格;
    
    12、su -s /bin/sh -c "nova-manage db sync" nova  
    #初始化nova数据库;可以通过 /var/log/nova/nova-manage.log 日志判断是否初始化成功
    
    13、su -s /bin/sh -c "nova-manage cell_v2 list_cells" nova
    #验证cell0和cell1组件是否注册成功
    
    14、systemctl start       #开启服务
        openstack-nova-api.service 
        openstack-nova-scheduler.service 
        openstack-nova-conductor.service 
        openstack-nova-novncproxy.service
    
    15、systemctl enable 
        openstack-nova-api.service 
        openstack-nova-scheduler.service 
        openstack-nova-conductor.service 
        openstack-nova-novncproxy.service      #vnc会监听6080端口
        
    16、tail -f /var/log/nova/nova-*.log  
    #确保nova在启动过程中没有任何报错;日志中可能会出现关于mysql连接错误,此报错是因为nova是通过haproxy代理与mysql进行连接的,一但haproxy到了超时时间,nova没有与mysql进行交互,则会自动断开连接(重启nova服务后,日志中就不会出现该报错),想要让该报错少一些的话,可以修改haproxy配置文件中的配置:timeout client、timeout server、timeout http-keep-alive
    
    17、vim nova-restart.sh   #编写一个重启nova的脚本
    #!/bin/bash
    systemctl restart openstack-nova-api.service openstack-nova-scheduler.service openstack-nova-conductor.service openstack-nova-novncproxy.service
    

    mysql需要做的配置

    1、CREATE DATABASE nova_api;
      CREATE DATABASE nova;
      CREATE DATABASE nova_cell0;
      
    2、GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%' IDENTIFIED BY 'nova123';
      GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' IDENTIFIED BY 'nova123';
      GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'%' IDENTIFIED BY 'nova123';  
    

    haproxy配置

    1、vim /etc/haproxy/haproxy.cfg
    listen openstack-nova-controller-8774
     mode tcp
     bind 172.31.7.248:8774
     server 172.31.7.101 172.31.7.101:8774 check inter 3s fall 3 rise 5
    
    listen openstack-nova-controller-8775
     mode tcp
     bind 172.31.7.248:8775
     server 172.31.7.101 172.31.7.101:8775 check inter 3s fall 3 rise 5
    #虚拟机通过请求nova API获取当前虚拟机的元数据,如公钥(获取到到的公钥会写入到虚拟机镜像中,用于ssh连接)、实例类型等,以实现让虚拟机进行磁盘空间拉伸 
     
    listen openstack-nova-novncproxy-6080
     mode tcp
     bind 172.31.7.248:6080
     server 172.31.7.101 172.31.7.101:6080 check inter 3s fall 3 rise 5
    
    2、systemctl restart haproxy.service
    
  • 相关阅读:
    《那些年啊,那些事——一个程序员的奋斗史》十一
    《那些年啊,那些事——一个程序员的奋斗史》九
    《那些年啊,那些事——一个程序员的奋斗史》十二
    《那些年啊,那些事——一个程序员的奋斗史》六
    C++排序算法总结
    C++标准库头文件介绍
    《那些年啊,那些事——一个程序员的奋斗史》七
    《那些年啊,那些事——一个程序员的奋斗史》八
    《那些年啊,那些事——一个程序员的奋斗史》十
    《那些年啊,那些事——一个程序员的奋斗史》十三
  • 原文地址:https://www.cnblogs.com/dongzhanyi123/p/13299878.html
Copyright © 2011-2022 走看看