****************** iaas-install-nova-controller.sh **********************
#!/bin/bash #声明解释器类型
source /etc/xiandian/openrc.sh #生效环境变量
source /etc/keystone/admin-openrc.sh #生效admin用户脚本
#mysql nova mysql #创建数据库 nova, nova_api, nova_cell0
mysql -uroot -p$DB_PASS -e "create database IF NOT EXISTS nova ;"
mysql -uroot -p$DB_PASS -e "create database IF NOT EXISTS nova_api ;"
mysql -uroot -p$DB_PASS -e "create database IF NOT EXISTS nova_cell0 ;"
#创建数据库用户并赋予数据库用户权限
mysql -uroot -p$DB_PASS -e "GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' IDENTIFIED BY '$NOVA_DBPASS' ;"
mysql -uroot -p$DB_PASS -e "GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' IDENTIFIED BY '$NOVA_DBPASS' ;"
mysql -uroot -p$DB_PASS -e "GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'localhost' IDENTIFIED BY '$NOVA_DBPASS' ;"
mysql -uroot -p$DB_PASS -e "GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%' IDENTIFIED BY '$NOVA_DBPASS' ;"
mysql -uroot -p$DB_PASS -e "GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'localhost' IDENTIFIED BY '$NOVA_DBPASS' ;"
mysql -uroot -p$DB_PASS -e "GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'%' IDENTIFIED BY '$NOVA_DBPASS' ;"
#nova user role service endpoint
openstack user create --domain $DOMAIN_NAME --password $NOVA_PASS nova #创建nova用户
openstack role add --project service --user nova admin #将admin 权限赋予 nova 用户
openstack service create --name nova --description "OpenStack Compute" compute #创建nova计算服务
openstack endpoint create --region RegionOne compute public http://$HOST_NAME:8774/v2.1 #创建nova计算服务组件的外部的 API endpoint
openstack endpoint create --region RegionOne compute internal http://$HOST_NAME:8774/v2.1 #创建nova计算服务组件的内部的 API endpoint
openstack endpoint create --region RegionOne compute admin http://$HOST_NAME:8774/v2.1 #创建nova计算服务组件的admin API endpoint
openstack user create --domain $DOMAIN_NAME --password $NOVA_PASS placement
openstack role add --project service --user placement admin
openstack service create --name placement --description "Placement API" placement
openstack endpoint create --region RegionOne placement public http://$HOST_NAME:8778
openstack endpoint create --region RegionOne placement internal http://$HOST_NAME:8778
openstack endpoint create --region RegionOne placement admin http://$HOST_NAME:8778
#nova install #安装nova的核心组件
yum install openstack-nova-api openstack-nova-conductor openstack-nova-console openstack-nova-novncproxy openstack-nova-scheduler openstack-nova-placement-api -y
#/etc/nova/nova.conf #配置默认服务信息
crudini --set /etc/nova/nova.conf DEFAULT enabled_apis osapi_compute,metadata # 停止使用EC2 API
crudini --set /etc/nova/nova.conf DEFAULT transport_url rabbit://openstack:$NOVA_DBPASS@$HOST_NAME # 配置RabbitMQ的消息队列访问
crudini --set /etc/nova/nova.conf DEFAULT my_ip $HOST_IP # 配置控制节点管理IP地址
crudini --set /etc/nova/nova.conf DEFAULT use_neutron True # 定义nova支持neutron网络服务组件
crudini --set /etc/nova/nova.conf DEFAULT firewall_driver nova.virt.firewall.NoopFirewallDriver # 关闭nova计算服务组件的防火墙功能
crudini --set /etc/nova/nova.conf api auth_strategy keystone # 配置认证方式为keystone
#配置数据库连接
crudini --set /etc/nova/nova.conf api_database connection mysql+pymysql://nova:$NOVA_DBPASS@$HOST_NAME/nova_api
crudini --set /etc/nova/nova.conf database connection mysql+pymysql://nova:$NOVA_DBPASS@$HOST_NAME/nova
#配置keystone认证
crudini --set /etc/nova/nova.conf keystone_authtoken auth_url http://$HOST_NAME:5000/v3 # 配置管理员访问端口
crudini --set /etc/nova/nova.conf keystone_authtoken memcached_servers $HOST_NAME:11211 # 配置缓存服务端口
crudini --set /etc/nova/nova.conf keystone_authtoken auth_type password # 配置认证类型为密码认证
crudini --set /etc/nova/nova.conf keystone_authtoken project_domain_name $DOMAIN_NAME # 配置租户域名
crudini --set /etc/nova/nova.conf keystone_authtoken user_domain_name $DOMAIN_NAME # 配置用户域名
crudini --set /etc/nova/nova.conf keystone_authtoken project_name service # 配置租户名
crudini --set /etc/nova/nova.conf keystone_authtoken username nova # 配置用户名
crudini --set /etc/nova/nova.conf keystone_authtoken password $NOVA_PASS # 配置keystone认证密码
#配置VNC(虚拟网络控制台)
crudini --set /etc/nova/nova.conf vnc enabled true # 配置VNC开机自启
crudini --set /etc/nova/nova.conf vnc server_listen $HOST_IP # 配置VNC代理使用控制节点的管理IP地址
crudini --set /etc/nova/nova.conf vnc server_proxyclient_address $HOST_IP # 使用主机地址为数据网络IP地址
crudini --set /etc/nova/nova.conf glance api_servers http://$HOST_NAME:9292 # 配置glance镜像服务地址
crudini --set /etc/nova/nova.conf oslo_concurrency lock_path /var/lib/nova/tmp # 配置lock(文件锁)的文件路径
#配置placement
crudini --set /etc/nova/nova.conf placement os_region_name RegionOne
crudini --set /etc/nova/nova.conf placement project_domain_name $DOMAIN_NAME
crudini --set /etc/nova/nova.conf placement project_name service
crudini --set /etc/nova/nova.conf placement auth_type password
crudini --set /etc/nova/nova.conf placement user_domain_name $DOMAIN_NAME
crudini --set /etc/nova/nova.conf placement auth_url http://$HOST_NAME:5000/v3
crudini --set /etc/nova/nova.conf placement username placement
crudini --set /etc/nova/nova.conf placement password $NOVA_PASS
#/etc/httpd/conf.d/00-nova-placement-api.conf #修改placement的apache配置文件00-nova-placement-api.conf
echo " " >> /etc/httpd/conf.d/00-nova-placement-api.conf
echo "<Directory /usr/bin>" >> /etc/httpd/conf.d/00-nova-placement-api.conf
echo " <IfVersion >= 2.4>" >> /etc/httpd/conf.d/00-nova-placement-api.conf
echo " Require all granted" >> /etc/httpd/conf.d/00-nova-placement-api.conf
echo " </IfVersion>" >> /etc/httpd/conf.d/00-nova-placement-api.conf
echo " <IfVersion < 2.4>" >> /etc/httpd/conf.d/00-nova-placement-api.conf #apache版本
echo " Order allow,deny" >> /etc/httpd/conf.d/00-nova-placement-api.conf #允许apache访问/usr/bin目录;否则/usr/bin/placement-api将不允许被访问
echo " Allow from all" >> /etc/httpd/conf.d/00-nova-placement-api.conf #允许apache访问
echo " </IfVersion>" >> /etc/httpd/conf.d/00-nova-placement-api.conf
echo "</Directory>" >> /etc/httpd/conf.d/00-nova-placement-api.conf
#httpd restart
systemctl restart httpd
#su nova mysql #将nova和nova_api的信息同步到数据库
su -s /bin/sh -c "nova-manage api_db sync" nova
su -s /bin/sh -c "nova-manage cell_v2 map_cell0" nova
su -s /bin/sh -c "nova-manage cell_v2 discover_hosts --verbose" nova
su -s /bin/sh -c "nova-manage cell_v2 create_cell --name=cell1 --verbose" nova
su -s /bin/sh -c "nova-manage db sync" nova
nova-manage cell_v2 list_cells #验证Nova数据库是否创建成功
#nova start service
systemctl enable openstack-nova-api.service openstack-nova-consoleauth.service openstack-nova-scheduler.service openstack-nova-conductor.service openstack-nova-novncproxy.service
systemctl start openstack-nova-api.service openstack-nova-consoleauth.service openstack-nova-scheduler.service openstack-nova-conductor.service openstack-nova-novncproxy.service
——Cell
1. 概念:nova为了增加横向扩展以及分布式、大规模(地理位置级别)部署的能力,同时又不增加数据库和消息中间件的复杂度,引入了cell的概念,并引入了nova-cell服务。
2.作用
1. 解决OpenStack的扩展性和规模瓶颈
2. 每个Cell都有自己独立的DB和AMQP,不与其他模块共用DB和AMQP,解决了大规模环境中DB和AMQP的瓶颈问题;
3. Cell实现了树形结构(通过消息路由)和分级调度(过滤算法和权重算法),Cell之间通过RPC通讯,解决了扩展性问题;
——nova-Placement:跟踪资源(比如计算节点,存储资源池,网络资源池等)的使用情况,提供自定义资源的能力,为分配资源提供服务。
——nova-API:负责接收和响应外部请求。
——nova-Scheduler:负责调度虚拟机所在的物理机。
——nova-Conductor:计算节点访问数据库的中间件。
——nova-Consoleauth:用于控制台的授权认证。
——nova-Novncproxy:VNC 代理,用于显示虚拟机操作终端。由于云主机instance所在的compute一般在内网运行,而instance的VNC端口是绑定在compute的IP地址上的。外网的用户,需要访问instance的VNC,就需要使用Proxy代理**
用户访问VNC,一般采用两种方式的客户端,分别对应两种Proxy:
1.支持web socket的浏览器,如Chrome、Firefox等,使用NoVNC
2.java客户端代理,使用Xvpvncproxy
****************** iaas-install-nova-comput.sh ******************
#!/bin/bash
source /etc/xiandian/openrc.sh
#nova-compute install
yum install openstack-nova-compute -y
#/etc/nova/nova.conf
crudini --set /etc/nova/nova.conf DEFAULT enabled_apis osapi_compute,metadata
crudini --set /etc/nova/nova.conf DEFAULT transport_url rabbit://openstack:$NOVA_DBPASS@$HOST_NAME
crudini --set /etc/nova/nova.conf DEFAULT my_ip $HOST_IP_NODE
crudini --set /etc/nova/nova.conf DEFAULT use_neutron True
crudini --set /etc/nova/nova.conf DEFAULT firewall_driver nova.virt.firewall.NoopFirewallDriver
crudini --set /etc/nova/nova.conf api auth_strategy keystone
crudini --set /etc/nova/nova.conf keystone_authtoken auth_url http://$HOST_NAME:5000/v3
crudini --set /etc/nova/nova.conf keystone_authtoken memcached_servers $HOST_NAME:11211
crudini --set /etc/nova/nova.conf keystone_authtoken auth_type password
crudini --set /etc/nova/nova.conf keystone_authtoken project_domain_name $DOMAIN_NAME
crudini --set /etc/nova/nova.conf keystone_authtoken user_domain_name $DOMAIN_NAME
crudini --set /etc/nova/nova.conf keystone_authtoken project_name service
crudini --set /etc/nova/nova.conf keystone_authtoken username nova
crudini --set /etc/nova/nova.conf keystone_authtoken password $NOVA_PASS
#配置VNC以启用远程终端的访问
crudini --set /etc/nova/nova.conf vnc enabled True
crudini --set /etc/nova/nova.conf vnc server_listen 0.0.0.0 # 不监听任何端口
crudini --set /etc/nova/nova.conf vnc server_proxyclient_address $HOST_IP_NODE # 使用主机地址为数据网络IP地址
crudini --set /etc/nova/nova.conf vnc novncproxy_base_url http://$HOST_IP:6080/vnc_auto.html # 代理服务地址
crudini --set /etc/nova/nova.conf glance api_servers http://$HOST_NAME:9292
crudini --set /etc/nova/nova.conf oslo_concurrency lock_path /var/lib/nova/tmp
crudini --set /etc/nova/nova.conf placement os_region_name RegionOne
crudini --set /etc/nova/nova.conf placement project_domain_name $DOMAIN_NAME
crudini --set /etc/nova/nova.conf placement project_name service
crudini --set /etc/nova/nova.conf placement auth_type password
crudini --set /etc/nova/nova.conf placement user_domain_name $DOMAIN_NAME
crudini --set /etc/nova/nova.conf placement auth_url http://$HOST_NAME:5000/v3
crudini --set /etc/nova/nova.conf placement username placement
crudini --set /etc/nova/nova.conf placement password $NOVA_PASS
#检查本机是否支持硬件加速
virt_num=`egrep -c '(vmx|svm)' /proc/cpuinfo`
if [ $virt_num = '0' ];then
crudini --set /etc/nova/nova.conf libvirt virt_type qemu
fi
systemctl enable libvirtd.service openstack-nova-compute.service
systemctl restart libvirtd.service openstack-nova-compute.service
#添加计算节点
ssh $HOST_IP << EOF
source /etc/xiandian/openrc.sh
source /etc/keystone/admin-openrc.sh
openstack compute service list --service nova-compute
su -s /bin/sh -c "nova-manage cell_v2 discover_hosts --verbose" nova
exit
EOF
——nova-compute:运行在计算节点上,负责创建、删除、启动、暂停和关闭虚拟机等功能。
——Libvirt是由Redhat开发的一套开源的软件工具,目标是提供一个通用和稳定的软件库来高效、安全地管理一个节点上的虚拟机,并支持远程操作。