iaas-install-nova-controller.sh
#!/bin/bash
source /etc/iaas-openstack/openrc.sh
source /etc/keystone/admin-openrc.sh
#mysql nova mysql
mysql -uroot -p$DB_PASS -e "create database IF NOT EXISTS nova ;" # 创建nova数据库
mysql -uroot -p$DB_PASS -e "create database IF NOT EXISTS nova_api ;" # nova_api数据库
mysql -uroot -p$DB_PASS -e "create database IF NOT EXISTS nova_cell0 ;" # nova——cell0
mysql -uroot -p$DB_PASS -e "GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' IDENTIFIED BY '$NOVA_DBPASS' ;" # 授权nova用户拥有从本地访问nova数据库的所有权限
mysql -uroot -p$DB_PASS -e "GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' IDENTIFIED BY '$NOVA_DBPASS' ;" # 授权nova用户拥有从远程访问nova数据库的所有权限
mysql -uroot -p$DB_PASS -e "GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'localhost' IDENTIFIED BY '$NOVA_DBPASS' ;" # 授权nova用户拥有从本地访问nova_api数据库的所有权限
mysql -uroot -p$DB_PASS -e "GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%' IDENTIFIED BY '$NOVA_DBPASS' ;" # 授权nova用户拥有从远程访问nova_api数据库的所有权限
mysql -uroot -p$DB_PASS -e "GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'localhost' IDENTIFIED BY '$NOVA_DBPASS' ;" # 授权nova用户拥有从本地访问nova——cell0数据库的所有权限
mysql -uroot -p$DB_PASS -e "GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'%' IDENTIFIED BY '$NOVA_DBPASS' ;" # 授权nova用户拥有从远程访问nova——cell0数据库的所有权限
#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 role 赋予 service project 和 nova user
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 # 创建placement用户
openstack role add --project service --user placement admin # 将admin role 赋予 service project 和 placement user
openstack service create --name placement --description "Placement API" placement # 创建Placement API计算服务 service entity
openstack endpoint create --region RegionOne placement public http://$HOST_NAME:8778 # 创建placement计算服务组件的public API endpoint
openstack endpoint create --region RegionOne placement internal http://$HOST_NAME:8778 # 创建placement计算服务组件的internal API
openstack endpoint create --region RegionOne placement admin http://$HOST_NAME:8778 # 创建placement计算服务组件的admin API endpoint
#nova install
yum install openstack-nova-api openstack-nova-conductor openstack-nova-console openstack-nova-novncproxy openstack-nova-scheduler openstack-nova-placement-api -y # 安装nova的核心组件
#/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为$HOST_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 # 两行命令为配置数据库的连接
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认证密码
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(文件锁)路径为/var/lib/nova/tmp
# 配置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
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数据库
# 将nova计算服务信息同步到 nova数据库
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
# 设置nova服务开机自启
# 开启nova服务
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
iaas-install-nova-compute.sh
#!/bin/bash
source /etc/iaas-openstack/openrc.sh
#nova-compute install
yum install openstack-nova-compute -y # 安装openstack-nova-compute
#/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_NODE # 配置控制节点管理ip为$HOST_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 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 0.0.0.0 # 不监听本机所有IP地址端口
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 # 配置glance镜像服务地址
crudini --set /etc/nova/nova.conf oslo_concurrency lock_path /var/lib/nova/tmp # 配置lock(文件锁)路径为/var/lib/nova/tmp
# 配置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
# 检查本机是否支持硬件加速
virt_num=`egrep -c '(vmx|svm)' /proc/cpuinfo`
if [ $virt_num = '0' ];then
# 配置nova服务的配置文件,修改虚拟化类型
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/iaas-openstack/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