• OpenStack知识点总结


    一:云计算

        一、起源

           1. 云计算这个概念首次在2006年8月的搜索引擎会议上提出,成为了继互联网、计算机后信息时代的又一种革新(互联网第三次革命)。

           2. 云计算的核心是将资源协调在一起,使用户通过网络就可以获取到无限的资源并且不受时间和空间的限制,为用户提供一种全新的体验。

        二、基本概念

           1. 定义

               1. 官方:云计算是一种按使用量付费的模式(资源服务模式),该模式可以实现随时随地、便捷按需的从可配置资源共享池中获取所需的资源。

               2. 百度百科:云计算是基于互联网的相关服务的增加、使用和交付模式,通常涉及通过互联网来提供动态易扩展且经常是虚拟化的资源。

           2. 特点

               1. 按需部署:根据用户的需求快速配备计算能力及资源分配。

               2. 资源池化:供应商的资源被池化,以多用户租用模式被不同客户使用。

               3. 快速伸缩:资源可以弹性的部署和释放。

               4. 可靠性高:倘若服务器故障也不影响计算与应用的正常运行。

           3. 分类

               1. 私有云:云计算基础设施由一个单一的组织部署和使用。

               2. 公有云:云计算基础设施被部署给广泛的公众公开使用。

               3. 混合云:使用标准或专有的技术组合以上两种云。

           4. 服务类型

               1. IaaS(基础设施即服务):提供商提供虚拟化计算资源,如虚拟机、存储、网络和操作系统。

               2. PaaS(平台即服务):通过互联网为开发人员提供构建应用程序和服务的平台。

               3. SaaS(软件即服务):通过互联网为用户提供按需软件付费应用程序。

                

        三、平台分类

           1. 从技术应用划分

               1. 以数据存储为主的存储型云平台

               2. 以数据处理为主的计算型云平台

               3. 计算和存储兼顾的综合型云平台

           2. 从是否收费划分

               1. 开源云平台:AbiCloud、Hadoop、Eucalyptus、MongoDB、OpenStack

               2. 商业化云平台:Google、IBM、Oracle、Amazon、阿里云等

        四、应用

           1. 存储云:云存储是一个以数据存储和管理为核心的云计算系统。用户可以将本地的资源上传至云端上,可以在任何地方连入互联网来获取云上的资源。

           2. 医疗云:使用云计算来创建医疗健康服务云平台,实现了医疗资源的共享和医疗范围的扩大

           3. 金融云:利用云计算的模型,将信息、金融和服务等功能分散到庞大分支机构构成的互联网“云”中,共享互联网资源,从而解决现有问题并且达到高效、低成本的目标。

           4. 教育云:教育云可以将所需要的任何教育硬件资源虚拟化,然后将其传入互联网中,以向教育机构和学生老师提供一个方便快捷的平台。

        五、虚拟化

           1. 虚拟化技术

               1. 定义:虚拟化是一个广义上的术语,是指计算元件在虚拟的基础上而不是真实的基础上运行,是一个为了简化管理,优化资源的解决方案。

                    

               2. 分类 

                   1. 桌面虚拟化:在本地计算机显示和操作远程计算机桌面,在远程计算机执行程序和储存信息。

                   2. 应用虚拟化:在操作系统和应用程序间建立虚拟环境。

                   3. 服务器虚拟化:将服务器物理资源抽象成逻辑资源形成动态管理的“资源池“”。

                   4. 网络虚拟化:将不同网络的硬件和软件资源结合成一个虚拟的整体。

                   5. 存储虚拟化:将实体存储空间分隔成不同的逻辑存储空间。

           2. 云计算和虚拟化的关系

               

            3. 虚拟化的优点

                1. 提高IT资源利用率,加速应用部署,提高应用兼容性。

                2. 显著减少了服务器的数量,企业不动资产和管理成本。

    二:OpenStack

        一、简介

           1. 定义

               1. 百度百科:OpenStack是一个开源的云计算管理平台项目,由NASA(美国国家航空航天局)和Rackspace合作研发并发起,以Apache许可证授权的开源代码项目。

               2. 官方:OpenStack是一个云操作系统,通过数据中心可控制大型的计算、存储、网络等资源池。所有的管理通过前端界面管理员就可以完成,同样也可以通过web接口让最终用户部署资源。

           2. 发展历程

               

        二、核心架构

           1. 物理架构图

               

           2. 逻辑架构图

              

           3. 概念架构图

              

        三、核心项目

           1. 共享服务组件

               1. 数据库服务(database service):Mariadb及Mongodb。

               2. 消息传输(Message Queues)::RabbitMQ

               3. 缓存(cache):Memcached

               4. 时间同步(time sync):ntp

               5. 存储(storge provider):ceph,GFS,LVM,ISICI等

               6. 高可用及负载均衡:pacemaker,HAproxy,keepalived,lvs

           2. 核心组件

               1. 认证服务(Identity Service):Keystone。提供了其余所有组件的认证信息/令牌的管理,创建,修改等等,使用MySQL作为统一的数据库。

               2. 镜像服务(Image Service):Glance。提供了对虚拟机部署的时候所能提供的镜像的管理,包含镜像的导入,格式,以及制作相应的模板

               3. 计算服务(compute):Nova。负责维护和管理云计算计算资源,维护和管理计算和网络。

               4. 网络服务(Network):Neutron。提供了对网络节点的网络拓扑管理,同时提供Neutron在Horizon的管理面板

               5. Web界面服务(Dashboard):Horizon。提供了以Web的形式对所有节点的所有服务的管理

               6. 块存储服务(Block Storage):Cinder。为运行实例提供稳定的数据块存储服务

               7. 对象存储(Object Storage):Swift。为Glance提供镜像存储和卷备份服务

               8. 测量(Metering):Ceillrmeter。提供对物理资源以及虚拟资源的监控,并记录这些数据,对该数据进行分析,在一定条件下触发相应动作

               9. 部署编排(Orchestration):Heat。提供了基于模板来实现云环境中资源的初始化,依赖关系处理,部署等基本操作,也可以解决自动收缩,负载均衡等高级特性。

             10. 数据库服务(Database Service):Trove。提供可扩展和可靠的关系和非关系数据库引擎服务

                  

        四、组件详解

           1. RabbitMQ

               1. 概念:实现了AMQP( 高级消息队列协议 )的流行消息队列系统 ,用于在分布式系统中存储转发消息,在 易用性、扩展性、高可用性等方面表现不俗。

               2. 特点

                   1. 开源,性能优秀,稳定性保障。

                   2. 提供可靠性消息投递模式、返回模式和HA模式、表达式配置及镜像队列模型

                   3. 集群模式丰富,语Spring AMQP完美整合,保证数据不丢失的前提做到高可靠性和可用性

               3. 核心概念

                  

               4. 工作原理

                   1. 客户端连接到消息队列服务器,打开一个channel。

                   2. 客户端声明一个exchange,并设置相关属性。

                   3. 客户端声明一个queue,并设置相关属性。

                   4. 客户端使用routing key,在exchange和queue之间建立好绑定关系。

                   5. 客户端投递消息到exchange。

                   6. exchange接收到消息后,就根据消息的key和已经设置的binding,进行消息路由,将消息投递到一个或多个队列里。

                      

               5. 常用操作

                  

           2. Memcached

               1. 概念:Memcached 是一个开源的、高性能的分布式内存对象缓存系统。通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高网站访问速度,加速动态WEB应用、减轻数据库负载。

               2. 缓存流程

                   1. 检查客户端请求的数据是否在 Memcache 中,如果存在,直接将请求的数据返回,不在对数据进行任何操作。

                   2. 如果请求的数据不在 Memcache 中,就去数据库查询,把从数据库中获取的数据返回给客户端,同时把数据缓存一份 Memcache 中

                   3. 每次更新数据库的同时更新 Memcache 中的数据库,确保数据信息一致性。

                   4. 当分配给 Memcache 内存空间用完后,会使用 LRU 策略加到其失效策略,失效的数据首先被替换掉,然后再替换掉最近未使用的数据。

                        

           3. Keystone

               1. 作用:认证服务,提供了其余所有组件的认证信息/令牌的管理,创建,修改等等,使用MySQL作为统一的数据库。

               2. 核心概念

                  

               3. 工作原理

                  

               4. 工作流程(在各个组件中的作用)

                    

           4. Glance

               1. 作用:镜像服务,提供了对虚拟机部署的时候所能提供的镜像的管理,包含镜像的导入,格式,以及制作相应的模板

               2. 核心概念

                 

               3. 工作原理

                   1. Glance-api:接收REST API的请求,然后通过其他模块来完成诸如镜像的查找、获取、上传、删除等操作,默认监听端口9292。

                   2. Glance-registry:用于与MariaDB数据库交互,用于存储或获取镜像的元数据(metadata),默认监听端口9191。

                   3. Store Adapter:通过提供的存储接口来获取镜像

                      

           5. Nova(核心)

               1. 作用:负责维护和管理的网络和存储,提供计算服务

               2. 核心组件

                  

               3. 虚拟机创建流程

                  

           6. Horizon

               1. 作用:web界面服务(Dashboard),提供了以Web的形式对所有节点的所有服务的管理

               2. 区域(Region)

                   1. 地理上的概念,可以理解为一个独立的数据中心,每个所定义的区域有自己独立的Endpoint;

                   2. 区域之间是完全隔离的,但多个区域之间共享同一个Keystone和Dashboard(目前Openstack中的Dashboard还不支持多个区域);

                   3. 区域的设计更多侧重地理位置的概念,用户可以选择离自己更新的区域来部署自己的服务,选择不同的区域主要是考虑那个区域更靠近自己;

                   4. 区域的概念是由Amazon在AWS中提出,主要是解决容错能力和可靠性;

               3. 可用性区域(Availability Zone)

                   1. AZ是在Region范围内的再次切分,例如可以把一个机架上的服务器划分为一个AZ,划分AZ是为了提高容灾能力和提供廉价的隔离服务;

                   2. AZ主要是通过冗余来解决可用性的问题,在Amazon的声明中,Instance不可用是指用户所有AZ中的同一个Instance都不可达才表明不可用;

                   3. AZ是用户可见的一个概念,并可选择,是物理隔离的,一个AZ不可用不会影响其他的AZ,用户在创建Instance的时候可以选择创建到那些AZ中;

               4. Host Aggreates:一组具有共同属性的节点集合,如以CPU作为区分类型的一个属性

                    

               5. Cell

                   1. 概念:nova为了增加横向扩展以及分布式、大规模(地理位置级别)部署的能力,同时又不增加数据库和消息中间件的复杂度,引入了cell的概念,并引入了nova-cell服务。

                   2. 作用

                       1. 解决OpenStack的扩展性和规模瓶颈

                       2. 每个Cell都有自己独立的DB和AMQP,不与其他模块共用DB和AMQP,解决了大规模环境中DB和AMQP的瓶颈问题;

                       3. Cell实现了树形结构(通过消息路由)和分级调度(过滤算法和权重算法),Cell之间通过RPC通讯,解决了扩展性问题;

                            

           7. Cinder

               1. 作用:存储服务,为运行实例提供稳定的数据块存储服务

               2. 核心组件

                  

               3. 工作流程

                   

                   1. 用户向 cinder-api发送创建volume的请求

                   2. cinder-api对请求做一些必要处理后,通过 Messaging将创建消息发送给cinder-scheduler

                   3. cinder-scheduler从 Messaging 获取到 cinder-api发给它的消息,然后执行调度算法,从若干计存储点中选出节点 A

                   4. cinder-scheduler通过 Messaging 将创建消息发送给存储节点A

                   5. 存储节点 A 的 cinder-volume从 Messaging 中获取到 cinder-scheduler发给它的消息,然后通过 driver 在 volume provider 上创建 volume。

    三:先电云计算基础架构服务平台搭建

        一、搭建云平台(单双节点)

           1. 创建虚拟机并配置网络

               1. 虚拟机规格(单双节点均可用)

                 

               2. 网络配置

                  

           2. 基本环境配置

              

           3. 编辑环境变量

              

           4. 执行脚本安装服务

               1. 单节点(computer改为compute)

                  

               2. 双节点(computer改为compute)

                  

        二、脚本详解

           1. 基础配置脚本:iaas-pre-host.sh

     1 #/bin/bash
     2 source /etc/xiandian/openrc.sh  #加载配置文件
     3 # config env network
     4 # 关闭防火墙,将标准和错误输出永久丢弃
     5 systemctl  stop firewalld.service
     6 systemctl  disable  firewalld.service >> /dev/null 2>&1  ## 将
     7 # 关闭网络管理器,将标准和错误输出永久丢弃
     8 systemctl stop NetworkManager >> /dev/null 2>&1
     9 systemctl disable NetworkManager >> /dev/null 2>&1
    10 # 设置selinux的值为permissive
    11 sed -i 's/SELINUX=.*/SELINUX=permissive/g' /etc/selinux/config
    12 setenforce 0
    13 # 删除防火墙和网络管理器软件包,重启网络服务
    14 yum remove -y NetworkManager firewalld
    15 service network restart
    16 #----  ntp  ---------------------------------
    17 # 安装ntp和iptables服务,执行不成功报错并退出
    18 yum install ntp  iptables-services  -y 
    19 if [ 0  -ne  $? ]; then
    20         echo -e "33[31mThe installation source configuration errors33[0m"
    21         exit 1
    22 fi
    23 # 开启iptables防火墙并清空规则列
    24 systemctl enable iptables
    25 systemctl restart iptables
    26 iptables -F
    27 iptables -X
    28 iptables -X
    29 service iptables save
    30 # install package
    31 # 提高SSH的连接速度
    32 sed -i -e 's/#UseDNS yes/UseDNS no/g' -e 's/GSSAPIAuthentication yes/GSSAPIAuthentication no/g' /etc/ssh/sshd_config   
    33 # 更新软件包
    34 yum upgrade -y
    35 # 安装openstack的selinux管理包、客户端以及ini配置文件编辑器
    36 yum -y install openstack-selinux python-openstackclient crudini -y
    37 # 如果控制节点的IP地址不为空,就使用配置的主机名 
    38 if [[ `ip a |grep -w $HOST_IP ` != '' ]];then 
    39         hostnamectl set-hostname $HOST_NAME
    40 # 如果计算节点的IP地址不为空,就使用配置的主机名
    41 elif [[ `ip a |grep -w $HOST_IP_NODE ` != '' ]];then 
    42         hostnamectl set-hostname $HOST_NAME_NODE
    43 # 否则统一设置为配置的控制节点主机名
    44 else
    45         hostnamectl set-hostname $HOST_NAME
    46 fi
    47 # 配置主机名映射 ,首先删除原来配置,然后配置新的主机名映射
    48 sed -i -e "/$HOST_NAME/d" -e "/$HOST_NAME_NODE/d" /etc/hosts
    49 echo "$HOST_IP $HOST_NAME" >> /etc/hosts
    50 echo "$HOST_IP_NODE $HOST_NAME_NODE" >> /etc/hosts
    51 printf "33[35mPlease Reboot or Reconnect the terminal
    33[0m"
    iaas-pre-host.sh脚本解读

           2. 数据库服务脚本:iaas-install-msyql.sh

     1 #!/bin/bash
     2 source /etc/xiandian/openrc.sh  # 加载配置文件
     3 
     4 # ①ping控制节点最多四次并将标准和错误输出永久丢弃,如果执行失败后打印错误信息并退出
     5 ping $HOST_IP -c 4 >> /dev/null 2>&1
     6 if [ 0  -ne  $? ]; then
     7         echo -e "33[31m Warning
    Please make sure the network configuration is correct!33[0m"
     8         exit 1
     9 fi
    10 # ②配置时钟服务器
    11 sed -i  -e '/server/d' -e "/fudge/d" /etc/ntp.conf  # 删除默认
    12 sed -i  -e "1i server 127.127.1.0" -e "2i fudge 127.127.1.0 stratum 10" /etc/ntp.conf  # 配置时钟服务器
    13 systemctl restart ntpd 
    14 systemctl enable ntpd
    15 
    16 # ③安装MySQL的客户端、服务及与Python自动化(expect)交互工具,MongoDB客户端及服务,消息队列服务,缓存服务及与Python交互工具
    17 yum install mariadb mariadb-server python2-PyMySQL expect mongodb-server mongodb rabbitmq-server memcached python-memcached -y
    18 # 编辑配置文件,设置MySQL数据库默认引擎,数据库的编码,最大连接数
    19 sed -i  "/^symbolic-links/adefault-storage-engine = innodb
    innodb_file_per_table
    collation-server = utf8_general_ci
    init-connect = 'SET NAMES utf8'
    character-set-server = utf8
    max_connections=10000" /etc/my.cnf
    20 crudini --set /usr/lib/systemd/system/mariadb.service Service LimitNOFILE 10000
    21 crudini --set /usr/lib/systemd/system/mariadb.service Service LimitNPROC 10000
    22 systemctl daemon-reload  # 使配置文件生效
    23 systemctl enable mariadb.service
    24 systemctl restart mariadb.service
    25 
    26 #④自动化执行MySQL的安全配置向导
    27 expect -c " # 自动执行脚本
    28 spawn /usr/bin/mysql_secure_installation # 执行安全配置向导命令
    29 expect "Enter current password for root (enter for none):"  # 修改root密码
    30 send "
    "
    31 expect "Set root password?"  # 设置密码
    32 send "y
    " 
    33 expect "New password:"  # 新密码
    34 send "$DB_PASS
    "
    35 expect "Re-enter new password:"  # 确认新密码
    36 send "$DB_PASS
    "
    37 expect "Remove anonymous users?" # 删除匿名用户
    38 send "y
    " 
    39 expect "Disallow root login remotely?"  # 允许远程登录
    40 send "n
    "
    41 expect "Remove test database and access to it?"  # 删除test数据库并访问
    42 send "y
    "
    43 expect "Reload privilege tables now?" # 刷新权限表
    44 send "y
    "
    45 expect eof # 脚本结束运行
    46 "
    47 
    48 # mongo
    49 # 删除配置文件有bind_ip的行并将以smallfiles.开头和结尾的字符串替换为smallfiles=true
    50 sed -i -e '/bind_ip/d' -e 's/#smallfiles.*/smallfiles=true/g' /etc/mongod.conf 
    51 systemctl enable mongod.service
    52 systemctl restart mongod.service
    53 
    54 # rabbitmq
    55 systemctl enable rabbitmq-server.service
    56 systemctl restart rabbitmq-server.service
    57 rabbitmqctl add_user $RABBIT_USER $RABBIT_PASS
    58 rabbitmqctl set_permissions $RABBIT_USER ".*" ".*" ".*"
    59 
    60 # memcache
    61 systemctl enable memcached.service
    62 systemctl restart memcached.service
    iaas-install-msyql.sh

           3. 身份认证服务脚本:iaas-install-keystone.sh

      1 #!/bin/bash
      2 # 加载配置文件并安装keystone和HTTP服务及与Python交互接口
      3 source /etc/xiandian/openrc.sh
      4 yum install -y openstack-keystone httpd mod_wsgi
      5 
      6 # 登录MySQL数据库创建keystone用户并授予本地和远程权限
      7 mysql -uroot -p$DB_PASS -e "create database IF NOT EXISTS keystone ;"
      8 mysql -uroot -p$DB_PASS -e "GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY '$KEYSTONE_DBPASS' ;"
      9 mysql -uroot -p$DB_PASS -e "GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY '$KEYSTONE_DBPASS' ;"
     10 
     11 # 设置MySQL和Python连接,设置ADMIN_TOKEN令牌替换原来的值
     12 crudini --set /etc/keystone/keystone.conf database connection  mysql+pymysql://keystone:$KEYSTONE_DBPASS@$HOST_NAME/keystone
     13 ADMIN_TOKEN=$(openssl rand -hex 10) # 产生随机数
     14 crudini --set /etc/keystone/keystone.conf DEFAULT admin_token $ADMIN_TOKEN
     15 crudini --set /etc/keystone/keystone.conf token provider  fernet  # 安全消息传递格式
     16 # 同步数据库并运行keystone,初始化Fernet密钥存储用于token加密。,最后添加到hpptd服务
     17 su -s /bin/sh -c "keystone-manage db_sync" keystone
     18 keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
     19 sed -i "s/#ServerName www.example.com:80/ServerName $HOST_NAME/g" /etc/httpd/conf/httpd.conf 
     20 
     21 # 配置普通用户(5000)和管理员(35357)的httpd服务(新版本是没有区别的,都使用5000)
     22 cat >/etc/httpd/conf.d/wsgi-keystone.conf<<- EOF #标准输出重定向(cat >) 和标准输入重定向(<<- EOF,结束为EOF)
     23 Listen 5000
     24 Listen 35357
     25 <VirtualHost *:5000>
     26     WSGIDaemonProcess keystone-public processes=5 threads=1 user=keystone group=keystone display-name=%{GROUP}
     27     WSGIProcessGroup keystone-public
     28     WSGIScriptAlias / /usr/bin/keystone-wsgi-public
     29     WSGIApplicationGroup %{GLOBAL}
     30     WSGIPassAuthorization On
     31     ErrorLogFormat "%{cu}t %M"
     32     ErrorLog /var/log/httpd/keystone-error.log
     33     CustomLog /var/log/httpd/keystone-access.log combined
     34     <Directory /usr/bin>
     35         Require all granted
     36     </Directory>
     37 </VirtualHost>
     38 
     39 <VirtualHost *:35357>
     40     WSGIDaemonProcess keystone-admin processes=5 threads=1 user=keystone group=keystone display-name=%{GROUP}
     41     WSGIProcessGroup keystone-admin
     42     WSGIScriptAlias / /usr/bin/keystone-wsgi-admin
     43     WSGIApplicationGroup %{GLOBAL}
     44     WSGIPassAuthorization On
     45     ErrorLogFormat "%{cu}t %M"
     46     ErrorLog /var/log/httpd/keystone-error.log
     47     CustomLog /var/log/httpd/keystone-access.log combined
     48     <Directory /usr/bin>
     49         Require all granted
     50     </Directory>
     51 </VirtualHost>
     52 
     53 EOF
     54 
     55 systemctl enable httpd.service
     56 systemctl start httpd.service
     57 
     58 # 创建临时环境变量
     59 export OS_TOKEN=$ADMIN_TOKEN  #配置的Token
     60 export OS_URL=http://$HOST_NAME:35357/v3  # 手动指定Endpoint,版本v3
     61 export OS_IDENTITY_API_VERSION=3  # 认证版本
     62 
     63 # 创建服务实体和API端点
     64 openstack service create --name keystone --description "OpenStack Identity" identity  # 创建keystone身份认证服务
     65 openstack endpoint create --region RegionOne identity public http://$HOST_NAME:5000/v3    # 创建处理外部访问端点
     66 openstack endpoint create --region RegionOne identity internal http://$HOST_NAME:5000/v3  # 创建处理内部访问端点
     67 openstack endpoint create --region RegionOne identity admin http://$HOST_NAME:35357/v3  # 创建处理admin端点
     68 
     69 ## 创建域、租户、用户和角色
     70 openstack domain create --description "Default Domain" $DOMAIN_NAME  # 创建默认域
     71 # 创建admin
     72 openstack project create --domain $DOMAIN_NAME --description "Admin Project" admin  # 创建admin租户,拥有平台最高权限
     73 openstack user create --domain $DOMAIN_NAME --password $ADMIN_PASS admin  # 创建admin用户
     74 openstack role create admin  # 创建admin权限
     75 openstack role add --project admin --user admin admin  # 授予admin用户admin权限
     76 # 创建service
     77 openstack project create --domain $DOMAIN_NAME --description "Service Project" service  # 创建service租户,代表平台内所有的服务
     78 # 创建demo
     79 openstack project create --domain $DOMAIN_NAME --description "Demo Project" demo  # 创建demo租户,演示测试的普通用户
     80 openstack user create --domain $DOMAIN_NAME --password $DEMO_PASS demo  #  创建demo(普通)用户
     81 openstack role create user  # 创建普通用户权限
     82 openstack role add --project demo --user demo user  # 授予demo用户普通用户权限
     83 # 删除前面临时创建的环境变量
     84 unset OS_TOKEN OS_URL 
     85 
     86 # 使用标准输出和输入创建admin环境变量写入admin-openrc.sh配置文件
     87 cat > /etc/keystone/admin-openrc.sh <<-EOF
     88 export OS_PROJECT_DOMAIN_NAME=$DOMAIN_NAME   # 域名
     89 export OS_USER_DOMAIN_NAME=$DOMAIN_NAME   # 域名
     90 export OS_PROJECT_NAME=admin  # 租户
     91 export OS_USERNAME=admin  # 用户
     92 export OS_PASSWORD=$ADMIN_PASS  # 用户密码
     93 export OS_AUTH_URL=http://$HOST_NAME:35357/v3  # Endpoint
     94 export OS_IDENTITY_API_VERSION=3  # 认证版本
     95 export OS_IMAGE_API_VERSION=2  # 镜像版本
     96 EOF
     97 
     98 # 使用标准输出和输入创建demo(普通用户)环境变量写入admin-openrc.sh配置文件
     99 cat > /etc/keystone/demo-openrc.sh <<-EOF
    100 export OS_PROJECT_DOMAIN_NAME=$DOMAIN_NAME
    101 export OS_USER_DOMAIN_NAME=$DOMAIN_NAME
    102 export OS_PROJECT_NAME=demo
    103 export OS_USERNAME=demo
    104 export OS_PASSWORD=$DEMO_PASS
    105 export OS_AUTH_URL=http://$HOST_NAME:35357/v3
    106 export OS_IDENTITY_API_VERSION=3
    107 export OS_IMAGE_API_VERSION=2
    108 EOF
    iaas-install-keystone.sh

           4. 镜像服务脚本:iaas-install-glance.sh

     1 #!/bin/bash
     2 #### 加载脚本配置文件和keystone的admin配置文件
     3 source /etc/xiandian/openrc.sh
     4 source  /etc/keystone/admin-openrc.sh 
     5 #### 创建glance用户并授予本地和远程登录权限
     6 mysql -uroot -p$DB_PASS -e "create database IF NOT EXISTS glance ;"
     7 mysql -uroot -p$DB_PASS -e "GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' IDENTIFIED BY '$GLANCE_DBPASS' ;"
     8 mysql -uroot -p$DB_PASS -e "GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' IDENTIFIED BY '$GLANCE_DBPASS' ;"
     9 #### 安装glance服务组件
    10 yum install -y openstack-glance 
    11 #### 创建glance用户并授予admin权限
    12 openstack user create --domain $DOMAIN_NAME --password $GLANCE_PASS glance
    13 openstack role add --project service --user glance admin
    14 #### 创建镜像服务及处理外部、内部和admin的访问端口
    15 openstack service create --name glance --description "OpenStack Image" image
    16 openstack endpoint create --region RegionOne image public http://$HOST_NAME:9292
    17 openstack endpoint create --region RegionOne image internal http://$HOST_NAME:9292
    18 openstack endpoint create --region RegionOne image admin http://$HOST_NAME:9292
    19 
    20 #### 配置glance-api来接收请求并完成各种操作
    21 # 配置数据库连接
    22 crudini --set /etc/glance/glance-api.conf database connection  mysql+pymysql://glance:$GLANCE_DBPASS@$HOST_NAME/glance # 连接glance数据库
    23 # 配置keystone身份认证
    24 crudini --set /etc/glance/glance-api.conf keystone_authtoken auth_uri http://$HOST_NAME:5000   # 普通用户访问端点
    25 crudini --set /etc/glance/glance-api.conf keystone_authtoken auth_url http://$HOST_NAME:35357 # 管理员访问端点
    26 crudini --set /etc/glance/glance-api.conf keystone_authtoken memcached_servers  $HOST_NAME:11211 # 缓存服务 
    27 crudini --set /etc/glance/glance-api.conf keystone_authtoken auth_type password
    28 crudini --set /etc/glance/glance-api.conf keystone_authtoken project_domain_name $DOMAIN_NAME  # 租户
    29 crudini --set /etc/glance/glance-api.conf keystone_authtoken user_domain_name $DOMAIN_NAME  # 用户
    30 crudini --set /etc/glance/glance-api.conf keystone_authtoken project_name service  # service租户
    31 crudini --set /etc/glance/glance-api.conf keystone_authtoken username glance  # 用户名
    32 crudini --set /etc/glance/glance-api.conf keystone_authtoken password $GLANCE_PASS  # 密码
    33 crudini --set /etc/glance/glance-api.conf paste_deploy flavor keystone 
    34 crudini --set /etc/glance/glance-api.conf paste_deploy config_file  /usr/share/glance/glance-api-dist-paste.ini 
    35 #配置虚拟机镜像的存储
    36 crudini --set /etc/glance/glance-api.conf glance_store stores file,http  # 配置虚拟机镜像的存储方式
    37 crudini --set /etc/glance/glance-api.conf glance_store $DOMAIN_NAME'_store' file  # 配置虚拟机镜像的存储形式
    38 crudini --set /etc/glance/glance-api.conf glance_store filesystem_store_datadir /var/lib/glance/images/ # 配置虚拟机镜像的存储路径
    39 
    40 #### 配置glance-registry来交互数据库并完成镜像的存储和获取的元数据
    41 crudini --set /etc/glance/glance-registry.conf database connection  mysql+pymysql://glance:$GLANCE_DBPASS@$HOST_NAME/glance
    42 crudini --set /etc/glance/glance-registry.conf keystone_authtoken auth_uri http://$HOST_NAME:5000
    43 crudini --set /etc/glance/glance-registry.conf keystone_authtoken auth_url http://$HOST_NAME:35357
    44 crudini --set /etc/glance/glance-registry.conf keystone_authtoken memcached_servers $HOST_NAME:11211
    45 crudini --set /etc/glance/glance-registry.conf keystone_authtoken auth_type password
    46 crudini --set /etc/glance/glance-registry.conf keystone_authtoken project_domain_name $DOMAIN_NAME
    47 crudini --set /etc/glance/glance-registry.conf keystone_authtoken user_domain_name $DOMAIN_NAME
    48 crudini --set /etc/glance/glance-registry.conf keystone_authtoken project_name service
    49 crudini --set /etc/glance/glance-registry.conf keystone_authtoken username glance
    50 crudini --set /etc/glance/glance-registry.conf keystone_authtoken password $GLANCE_PASS
    51 crudini --set /etc/glance/glance-registry.conf paste_deploy flavor keystone
    52 crudini --set /etc/glance/glance-registry.conf paste_deploy config_file  /usr/share/glance/glance-registry-dist-paste.ini
    53 
    54 #### 将glance服务信息同步到数据库
    55 su -s /bin/sh -c "glance-manage db_sync" glance
    56 
    57 #### 开启glance的相关服务
    58 systemctl enable openstack-glance-api.service openstack-glance-registry.service
    59 systemctl restart openstack-glance-api.service openstack-glance-registry.service
    iaas-install-glance.sh

           5. 计算服务脚本:iaas-install-nova-{controller,comput}.sh

     1 #!/bin/bash
     2 #### 加载脚本配置文件和keystone的admin配置文件
     3 source /etc/xiandian/openrc.sh
     4 source /etc/keystone/admin-openrc.sh
     5 
     6 #### 创建nova和nova_api用户并授予本地和远程登录权限
     7 mysql -uroot -p$DB_PASS -e "create database IF NOT EXISTS nova ;"
     8 mysql -uroot -p$DB_PASS -e "GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' IDENTIFIED BY '$NOVA_DBPASS' ;"
     9 mysql -uroot -p$DB_PASS -e "GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' IDENTIFIED BY '$NOVA_DBPASS' ;"
    10 mysql -uroot -p$DB_PASS -e "create database IF NOT EXISTS nova_api ;"
    11 mysql -uroot -p$DB_PASS -e "GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'localhost' IDENTIFIED BY '$NOVA_DBPASS' ;"
    12 mysql -uroot -p$DB_PASS -e "GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%' IDENTIFIED BY '$NOVA_DBPASS' ;"
    13 
    14 #### 创建nova用户并授予admin权限,创建计算服务,创建处理外部、内部和admin访问端口
    15 openstack user create --domain $DOMAIN_NAME --password $NOVA_PASS nova
    16 openstack role add --project service --user nova admin
    17 openstack service create --name nova --description "OpenStack Compute" compute
    18 openstack endpoint create --region RegionOne compute public http://$HOST_NAME:8774/v2.1/%(tenant_id)s
    19 openstack endpoint create --region RegionOne compute internal http://$HOST_NAME:8774/v2.1/%(tenant_id)s
    20 openstack endpoint create --region RegionOne compute admin http://$HOST_NAME:8774/v2.1/%(tenant_id)s
    21 
    22 #### 安装nova的核心组件
    23 yum install -y openstack-nova-api openstack-nova-conductor openstack-nova-console openstack-nova-novncproxy openstack-nova-scheduler
    24 
    25 #### 配置计算服务
    26 # 配置数据库连接
    27 crudini --set /etc/nova/nova.conf database connection mysql+pymysql://nova:$NOVA_DBPASS@$HOST_NAME/nova
    28 crudini --set /etc/nova/nova.conf api_database connection mysql+pymysql://nova:$NOVA_DBPASS@$HOST_NAME/nova_api
    29 # 配置默认服务信息
    30 crudini --set /etc/nova/nova.conf DEFAULT enabled_apis  osapi_compute,metadata # 停止使用EC2 API
    31 crudini --set /etc/nova/nova.conf DEFAULT rpc_backend  rabbit  # 配置rpc_backend为rabbit
    32 crudini --set /etc/nova/nova.conf DEFAULT auth_strategy   keystone  # 配置认证方式为keystone
    33 crudini --set /etc/nova/nova.conf DEFAULT my_ip $HOST_IP  # 配置管理ip为主机地址
    34 crudini --set /etc/nova/nova.conf DEFAULT use_neutron True  # 定义nova支持neutron网络服务组件
    35 crudini --set /etc/nova/nova.conf DEFAULT firewall_driver nova.virt.firewall.NoopFirewallDriver  # 关闭nova计算服务组件的防火墙功能
    36 crudini --set /etc/nova/nova.conf DEFAULT metadata_listen 0.0.0.0   # 定义metadata监听所有IP地址
    37 crudini --set /etc/nova/nova.conf DEFAULT metadata_listen_port 8775  # 定义metadata监听8775端口
    38 # 配置消息队列服务
    39 crudini --set /etc/nova/nova.conf oslo_messaging_rabbit rabbit_host $HOST_NAME  # 消息队列的主机名
    40 crudini --set /etc/nova/nova.conf oslo_messaging_rabbit rabbit_userid $RABBIT_USER # 消息队列得用户
    41 crudini --set /etc/nova/nova.conf oslo_messaging_rabbit  rabbit_password  $RABBIT_PASS # 消息队列的密码
    42 # 配置keystone认证
    43 crudini --set /etc/nova/nova.conf keystone_authtoken auth_uri http://$HOST_NAME:5000  # 普通用户访问端口
    44 crudini --set /etc/nova/nova.conf keystone_authtoken auth_url http://$HOST_NAME:35357 # 管理员访问端口
    45 crudini --set /etc/nova/nova.conf keystone_authtoken memcached_servers $HOST_NAME:11211  # 缓存服务端口
    46 crudini --set /etc/nova/nova.conf keystone_authtoken auth_type password
    47 crudini --set /etc/nova/nova.conf keystone_authtoken project_domain_name $DOMAIN_NAME  # 租户
    48 crudini --set /etc/nova/nova.conf keystone_authtoken user_domain_name $DOMAIN_NAME # 用户
    49 crudini --set /etc/nova/nova.conf keystone_authtoken project_name service  # 服务租户
    50 crudini --set /etc/nova/nova.conf keystone_authtoken username  nova  # 用户名
    51 crudini --set /etc/nova/nova.conf keystone_authtoken password $NOVA_PASS  # 密码
    52 # 配置VNC(虚拟网络控制台)
    53 crudini --set /etc/nova/nova.conf vnc vncserver_listen $HOST_IP  # 使用主机地址为管理地址
    54 crudini --set /etc/nova/nova.conf vnc vncserver_proxyclient_address $HOST_IP  # 使用主机地址为数据网络IP地址
    55 # 配置glance镜像服务地址
    56 crudini --set /etc/nova/nova.conf glance api_servers http://$HOST_NAME:9292
    57 # 配置lock(文件锁)的文件路径
    58 crudini --set /etc/nova/nova.conf oslo_concurrency lock_path /var/lib/nova/tmp
    59 
    60 #### 将nova和nova_api的信息同步到数据库
    61 su -s /bin/sh -c "nova-manage api_db sync" nova
    62 su -s /bin/sh -c "nova-manage db sync" nova
    63 
    64 #### 清空iptables的规则列并保存
    65 iptables -F
    66 iptables -X
    67 iptables -Z
    68 /usr/libexec/iptables/iptables.init save
    69 
    70 #### 开启nova的相关服务
    71 systemctl enable openstack-nova-api.service  openstack-nova-consoleauth.service openstack-nova-scheduler.service  openstack-nova-conductor.service openstack-nova-novncproxy.service
    72 systemctl start openstack-nova-api.service  openstack-nova-consoleauth.service openstack-nova-scheduler.service openstack-nova-conductor.service openstack-nova-novncproxy.service
    73 
    74 :
    iaas-install-nova-controller.sh
     1 #!/bin/bash
     2 #### 生效(加载)脚本配置文件
     3 source /etc/xiandian/openrc.sh
     4 
     5 #### ping控制节点最多四次并将标准和错误输出永久丢弃,如果执行失败后打印错误信息并退出
     6 ping $HOST_IP -c 4 >> /dev/null 2>&1
     7         if [ 0  -ne  $? ]; then
     8                 echo -e "33[31m Warning
    Please make sure the network configuration is correct!33[0m"
     9                 exit 1
    10         fi
    11 
    12 #### 同步时钟服务器(单节点需要注释或删除)
    13 #sed -i  -e '/server/d' -e "/fudge/d" /etc/ntp.conf
    14 #ntpdate $HOST_IP
    15 
    16 #### 安装逻辑卷和nova-compute组件
    17 yum install lvm2 -y
    18 yum install openstack-nova-compute -y
    19 
    20 #### 配置计算服务
    21 # 配置默认服务信息
    22 crudini --set /etc/nova/nova.conf DEFAULT rpc_backend  rabbit  # 配置通信机制为rabbit消息队列服务
    23 crudini --set /etc/nova/nova.conf DEFAULT auth_strategy   keystone  # 配置认证方式为keystone
    24 crudini --set /etc/nova/nova.conf DEFAULT my_ip $HOST_IP_NODE # 配置管理ip为主机地址
    25 crudini --set /etc/nova/nova.conf DEFAULT use_neutron True # 配置使用neutron网络服务组件
    26 crudini --set /etc/nova/nova.conf DEFAULT firewall_driver nova.virt.firewall.NoopFirewallDriver # 关闭nova计算服务组件的防火墙功能
    27 # 配置消息队列服务
    28 crudini --set /etc/nova/nova.conf oslo_messaging_rabbit rabbit_host $HOST_NAME  # 消息队列服务主机
    29 crudini --set /etc/nova/nova.conf oslo_messaging_rabbit rabbit_userid $RABBIT_USER # 消息队列服务用户
    30 crudini --set /etc/nova/nova.conf oslo_messaging_rabbit  rabbit_password  $RABBIT_PASS # 消息队列服务密码
    31 # 配置keystone认证服务
    32 crudini --set /etc/nova/nova.conf keystone_authtoken auth_uri http://$HOST_NAME:5000  # 普通用户访问端点
    33 crudini --set /etc/nova/nova.conf keystone_authtoken auth_url http://$HOST_NAME:35357 # 管理员访问端点
    34 crudini --set /etc/nova/nova.conf keystone_authtoken memcached_servers $HOST_NAME:11211 # 缓存服务访问端点
    35 crudini --set /etc/nova/nova.conf keystone_authtoken auth_type password  
    36 crudini --set /etc/nova/nova.conf keystone_authtoken project_domain_name $DOMAIN_NAME  # 租户
    37 crudini --set /etc/nova/nova.conf keystone_authtoken user_domain_name $DOMAIN_NAME  # 用户
    38 crudini --set /etc/nova/nova.conf keystone_authtoken project_name service # 服务
    39 crudini --set /etc/nova/nova.conf keystone_authtoken username  nova  # 用户
    40 crudini --set /etc/nova/nova.conf keystone_authtoken password $NOVA_PASS  #密码
    41 # 配置VNC(虚拟网络控制台)
    42 crudini --set /etc/nova/nova.conf vnc enabled True  # 关闭vns
    43 crudini --set /etc/nova/nova.conf vnc vncserver_listen 0.0.0.0 # 不监听任何端口
    44 crudini --set /etc/nova/nova.conf vnc vncserver_proxyclient_address  $HOST_IP_NODE # 使用主机地址为数据网路IP地址
    45 crudini --set /etc/nova/nova.conf vnc novncproxy_base_url  http://$HOST_IP:6080/vnc_auto.html # 代理服务地址
    46 # 配置glance镜像服务地址
    47 crudini --set /etc/nova/nova.conf glance api_servers http://$HOST_NAME:9292
    48 # 配置lock(文件锁)的文件路径
    49 crudini --set /etc/nova/nova.conf oslo_concurrency lock_path /var/lib/nova/tmp
    50 
    51 #### 检查本机是否支持硬件加速
    52 virt_num=`egrep -c '(vmx|svm)' /proc/cpuinfo`
    53 if [ $virt_num = '0' ];then
    54         crudini --set /etc/nova/nova.conf libvirt virt_type  qemu
    55 fi
    56 crudini --set /etc/nova/nova.conf libvirt inject_key True
    57 
    58 #### 清空iptables的规则列并保存
    59 iptables -F
    60 iptables -X
    61 iptables -Z
    62 /usr/libexec/iptables/iptables.init save
    63 
    64 #### 开启nova-compute服务
    65 systemctl enable libvirtd.service openstack-nova-compute.service
    66 systemctl start libvirtd.service openstack-nova-compute.service
    iaas-install-nova-compute.sh

           6. 网络服务脚本

               1. 控制节点(单节点)

      1 #!/bin/bash
      2 #### 生效(加载)脚本配置文件和keystone的admin配置文件
      3 source /etc/xiandian/openrc.sh
      4 source /etc/keystone/admin-openrc.sh
      5 
      6 #### 创建neutron用户并授予本地和远程登录权限
      7 mysql -uroot -p$DB_PASS -e "create database IF NOT EXISTS neutron ;"
      8 mysql -uroot -p$DB_PASS -e "GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost' IDENTIFIED BY '$NEUTRON_DBPASS' ;"
      9 mysql -uroot -p$DB_PASS -e "GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' IDENTIFIED BY '$NEUTRON_DBPASS' ;"
     10 
     11 #### 创建neutron用户并授予admin权限,创建网络服务,创建处理外部、内部和admin访问端口
     12 openstack user create --domain $DOMAIN_NAME --password $NEUTRON_PASS neutron
     13 openstack role add --project service --user neutron admin
     14 openstack service create --name neutron --description "OpenStack Networking" network
     15 openstack endpoint create --region RegionOne network public http://$HOST_NAME:9696
     16 openstack endpoint create --region RegionOne network internal http://$HOST_NAME:9696
     17 openstack endpoint create --region RegionOne network admin http://$HOST_NAME:9696
     18 
     19 #### 安装neutron的核心组件
     20 yum install -y openstack-neutron openstack-neutron-ml2 openstack-neutron-linuxbridge ebtables  openstack-neutron-openvswitch  openstack-neutron-lbaas python-neutron-lbaas haproxy  openstack-neutron-fwaas
     21 
     22 #### 配置网络服务
     23 # 配置数据库连接
     24 crudini --set /etc/neutron/neutron.conf database connection  mysql://neutron:$NEUTRON_DBPASS@$HOST_NAME/neutron
     25 # 配置消息队列服务
     26 crudini --set /etc/neutron/neutron.conf DEFAULT rpc_backend rabbit
     27 crudini --set /etc/neutron/neutron.conf oslo_messaging_rabbit rabbit_host $HOST_NAME
     28 crudini --set /etc/neutron/neutron.conf oslo_messaging_rabbit rabbit_userid $RABBIT_USER
     29 crudini --set /etc/neutron/neutron.conf oslo_messaging_rabbit rabbit_password  $RABBIT_PASS
     30 # 配置插件信息
     31 crudini --set /etc/neutron/neutron.conf DEFAULT core_plugin  ml2  # 核心插件
     32 crudini --set /etc/neutron/neutron.conf DEFAULT service_plugins  router # 服务插件路由
     33 crudini --set /etc/neutron/neutron.conf DEFAULT allow_overlapping_ips  True # 允许包含多个ip
     34 # 配置keystone认证服务
     35 crudini --set /etc/neutron/neutron.conf DEFAULT auth_strategy keystone
     36 crudini --set /etc/neutron/neutron.conf keystone_authtoken auth_uri  http://$HOST_NAME:5000
     37 crudini --set /etc/neutron/neutron.conf keystone_authtoken auth_url  http://$HOST_NAME:35357
     38 crudini --set /etc/neutron/neutron.conf keystone_authtoken memcached_servers  $HOST_NAME:11211
     39 crudini --set /etc/neutron/neutron.conf keystone_authtoken auth_type  password
     40 crudini --set /etc/neutron/neutron.conf keystone_authtoken project_domain_name  $DOMAIN_NAME
     41 crudini --set /etc/neutron/neutron.conf keystone_authtoken user_domain_name $DOMAIN_NAME
     42 crudini --set /etc/neutron/neutron.conf keystone_authtoken project_name  service
     43 crudini --set /etc/neutron/neutron.conf keystone_authtoken username  neutron
     44 crudini --set /etc/neutron/neutron.conf keystone_authtoken password  $NEUTRON_PASS
     45 # 配置nova计算服务
     46 crudini --set /etc/neutron/neutron.conf DEFAULT notify_nova_on_port_status_changes  True
     47 crudini --set /etc/neutron/neutron.conf DEFAULT notify_nova_on_port_data_changes  True
     48 crudini --set /etc/neutron/neutron.conf  nova auth_url  http://$HOST_NAME:35357
     49 crudini --set /etc/neutron/neutron.conf  nova auth_type  password
     50 crudini --set /etc/neutron/neutron.conf  nova project_domain_name  $DOMAIN_NAME
     51 crudini --set /etc/neutron/neutron.conf  nova user_domain_name  $DOMAIN_NAME
     52 crudini --set /etc/neutron/neutron.conf  nova region_name  RegionOne
     53 crudini --set /etc/neutron/neutron.conf  nova project_name  service
     54 crudini --set /etc/neutron/neutron.conf  nova username  nova
     55 crudini --set /etc/neutron/neutron.conf  nova password  $NOVA_PASS
     56 crudini --set /etc/neutron/neutron.conf oslo_concurrency lock_path  /var/lib/neutron/tmp
     57 # 配置ml2(Ml2插件是一种同意OpenStack网络同一时候地利用多种二层网络技术的框架)
     58 crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 type_drivers  flat,vlan,gre,vxlan,local # 配置类型驱动(管理多种网络类型)
     59 crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 tenant_network_types   
     60 crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 mechanism_drivers  openvswitch,l2population  # 配置机制驱动
     61 crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 extension_drivers  port_security
     62 # 配置安全组
     63 crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini securitygroup enable_ipset  True  # 开启ip设置
     64 crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini securitygroup enable_security_group true  # 开启安全组
     65 crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini securitygroup firewall_driver iptables_hybrid  # 开启防火墙
     66 # 配置接口驱动和外部网络
     67 crudini --set  /etc/neutron/l3_agent.ini DEFAULT interface_driver  neutron.agent.linux.interface.OVSInterfaceDriver
     68 crudini --set  /etc/neutron/l3_agent.ini DEFAULT external_network_bridge 
     69 # 配置dhcp
     70 crudini --set  /etc/neutron/dhcp_agent.ini DEFAULT interface_driver  neutron.agent.linux.interface.OVSInterfaceDriver
     71 crudini --set  /etc/neutron/dhcp_agent.ini DEFAULT dhcp_driver  neutron.agent.linux.dhcp.Dnsmasq
     72 crudini --set  /etc/neutron/dhcp_agent.ini DEFAULT enable_isolated_metadata  True
     73 # 配置openvswitch
     74 crudini --set  /etc/neutron/plugins/ml2/openvswitch_agent.ini agent l2_population True
     75 crudini --set  /etc/neutron/plugins/ml2/openvswitch_agent.ini agent prevent_arp_spoofing True
     76 crudini --set  /etc/neutron/plugins/ml2/openvswitch_agent.ini ovs integration_bridge br-int
     77 crudini --set  /etc/neutron/plugins/ml2/openvswitch_agent.ini securitygroup  firewall_driver iptables_hybrid
     78 # 配置metadata
     79 crudini --set  /etc/neutron/metadata_agent.ini DEFAULT nova_metadata_ip  $HOST_IP
     80 crudini --set  /etc/neutron/metadata_agent.ini DEFAULT metadata_proxy_shared_secret  $METADATA_SECRET
     81 crudini --set  /etc/neutron/metadata_agent.ini DEFAULT nova_metadata_port 8775
     82 # 配置nova
     83 crudini --set  /etc/nova/nova.conf DEFAULT auto_assign_floating_ip True
     84 crudini --set  /etc/nova/nova.conf DEFAULT metadata_listen 0.0.0.0
     85 crudini --set  /etc/nova/nova.conf DEFAULT metadata_listen_port 8775
     86 crudini --set  /etc/nova/nova.conf DEFAULT scheduler_default_filters 'AvailabilityZoneFilter,RamFilter,ComputeFilter,ComputeCapabilitiesFilter,ImagePropertiesFilter,ServerGroupAntiAffinityFilter,ServerGroupAffinityFilter'
     87 crudini --set  /etc/nova/nova.conf DEFAULT compute_driver libvirt.LibvirtDriver
     88 crudini --set  /etc/nova/nova.conf neutron  url  http://$HOST_NAME:9696
     89 crudini --set  /etc/nova/nova.conf neutron  auth_url  http://$HOST_NAME:35357
     90 crudini --set  /etc/nova/nova.conf neutron  auth_type  password
     91 crudini --set  /etc/nova/nova.conf neutron  project_domain_name  $DOMAIN_NAME
     92 crudini --set  /etc/nova/nova.conf neutron  user_domain_name  $DOMAIN_NAME
     93 crudini --set  /etc/nova/nova.conf neutron  region_name  RegionOne
     94 crudini --set  /etc/nova/nova.conf neutron  project_name  service
     95 crudini --set  /etc/nova/nova.conf neutron  username  neutron
     96 crudini --set  /etc/nova/nova.conf neutron  password  $NEUTRON_PASS
     97 crudini --set  /etc/nova/nova.conf neutron  service_metadata_proxy  True
     98 crudini --set  /etc/nova/nova.conf neutron  metadata_proxy_shared_secret  $METADATA_SECRET
     99 
    100 #### 配置内核转发
    101 echo 'net.ipv4.ip_forward=1' >> /etc/sysctl.conf 
    102 echo "net.ipv4.conf.default.rp_filter=0" >> /etc/sysctl.conf 
    103 echo 'net.ipv4.conf.all.rp_filter=0' >> /etc/sysctl.conf
    104 sysctl -p
    105  
    106 #### 创建链接并同步数据库
    107 ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini
    108 su -s /bin/sh -c "neutron-db-manage --config-file /etc/neutron/neutron.conf   --config-file /etc/neutron/plugins/ml2/ml2_conf.ini upgrade head" neutron
    109 
    110 #### 开启服务
    111 systemctl restart openvswitch
    112 systemctl enable openvswitch
    113 ovs-vsctl add-br br-int  #添加网桥
    114 systemctl restart openstack-nova-api.service
    115 systemctl enable neutron-server.service    neutron-openvswitch-agent.service neutron-dhcp-agent.service neutron-metadata-agent.service
    116 systemctl restart neutron-server.service   neutron-openvswitch-agent neutron-dhcp-agent.service neutron-metadata-agent.service
    117 systemctl enable neutron-l3-agent.service
    118 systemctl restart neutron-l3-agent.service
    iaas-install-neutron-controller.sh
     1 #!/bin/bash
     2 #### 生效脚本配置文件和keystone的admin配置文件
     3 source /etc/xiandian/openrc.sh
     4 source /etc/keystone/admin-openrc.sh
     5 
     6 #### 配置neutron的负载均衡
     7 crudini --set /etc/neutron/neutron.conf DEFAULT service_plugins router,lbaas,firewall
     8 crudini --set /etc/neutron/neutron_lbaas.conf service_providers service_provider LOADBALANCER:Haproxy:neutron_lbaas.services.loadbalancer.drivers.haproxy.plugin_driver.HaproxyOnHostPluginDriver:default
     9 crudini --set /etc/neutron/lbaas_agent.ini DEFAULT device_driver neutron_lbaas.services.loadbalancer.drivers.haproxy.namespace_driver.HaproxyNSDriver
    10 crudini --set /etc/neutron/lbaas_agent.ini DEFAULT interface_driver neutron.agent.linux.interface.OVSInterfaceDriver
    11 crudini --set /etc/neutron/lbaas_agent.ini haproxy user_group haproxy
    12 #### 配置neutron的防火墙服务
    13 crudini --set /etc/neutron/neutron.conf service_providers FIREWALL:Iptables:neutron.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDriver:default
    14 crudini --set /etc/neutron/fwaas_driver.ini fwaas driver neutron_fwaas.services.firewall.drivers.linux.iptables_fwaas.IptablesFwaasDriver
    15 crudini --set /etc/neutron/fwaas_driver.ini fwaas enabled True
    16 #### 设置租户的网络类型和私有网络提供的标识范围
    17 crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 tenant_network_types  gre
    18 crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2_type_gre tunnel_id_ranges  1:1000
    19 
    20 #### 添加一个br-ex网桥并将其添加到第二块网卡
    21 ovs-vsctl add-br br-ex
    22 ovs-vsctl add-port br-ex $INTERFACE_NAME 
    23 
    24 #### 使用标准输出和输入覆盖第二块网卡的内容
    25 cat > /etc/sysconfig/network-scripts/ifcfg-$INTERFACE_NAME <<EOF
    26 DEVICE=$INTERFACE_NAME  # 网卡名称
    27 TYPE=Ethernet  # 网络类型
    28 BOOTPROTO=none  # 禁用dhcp
    29 ONBOOT=yes  # 开机自启设备
    30 EOF
    31 systemctl restart network
    32 
    33 #### 将bridge网络转为openvswitch
    34 crudini --set  /etc/neutron/l3_agent.ini DEFAULT  external_network_bridge  br-ex
    35 crudini --set  /etc/neutron/plugins/ml2/openvswitch_agent.ini ovs bridge_mappings  physnet1:br-ex
    36 crudini --set  /etc/neutron/plugins/ml2/openvswitch_agent.ini agent tunnel_types  gre
    37 crudini --set  /etc/neutron/plugins/ml2/openvswitch_agent.ini ovs local_ip $HOST_IP
    38 crudini --set  /etc/neutron/plugins/ml2/openvswitch_agent.ini ovs  enable_tunneling True
    39 crudini --set  /etc/neutron/plugins/ml2/openvswitch_agent.ini ovs bridge_mappings external:br-ex
    40 
    41 neutron-db-manage --service lbaas upgrade head
    42 neutron-db-manage --subproject neutron-fwaas upgrade head
    43 #### 开启neutron服务
    44 systemctl restart neutron-server 
    45 systemctl restart neutron-l3-agent neutron-openvswitch-agent 
    46 #### 开启neutron负载均衡服务
    47 systemctl restart neutron-lbaas-agent
    48 systemctl enabled neutron-lbaas-agent
    iaas-install-neutron-controller-gre.sh

               2. 计算节点

     1 #!/bin/bash
     2 source /etc/xiandian/openrc.sh
     3 
     4 yum install openstack-neutron-linuxbridge ebtables ipset openstack-neutron openstack-neutron-ml2 opens
     5 tack-neutron-openvswitch -y
     6 
     7 #### 配置neutron的消息认证服务
     8 crudini --set /etc/neutron/neutron.conf DEFAULT rpc_backend rabbit
     9 crudini --set /etc/neutron/neutron.conf oslo_messaging_rabbit rabbit_host $HOST_NAME
    10 crudini --set /etc/neutron/neutron.conf oslo_messaging_rabbit rabbit_userid $RABBIT_USER
    11 crudini --set /etc/neutron/neutron.conf oslo_messaging_rabbit rabbit_password  $RABBIT_PASS
    12 
    13 crudini --set /etc/neutron/neutron.conf DEFAULT auth_strategy keystone
    14 
    15 crudini --set /etc/neutron/neutron.conf DEFAULT core_plugin  ml2
    16 crudini --set /etc/neutron/neutron.conf DEFAULT service_plugins  router
    17 crudini --set /etc/neutron/neutron.conf DEFAULT allow_overlapping_ips  True
    18 #### 配置keystone认证服务
    19 crudini --set /etc/neutron/neutron.conf keystone_authtoken auth_uri  http://$HOST_NAME:5000
    20 crudini --set /etc/neutron/neutron.conf keystone_authtoken auth_url  http://$HOST_NAME:35357
    21 crudini --set /etc/neutron/neutron.conf keystone_authtoken memcached_servers  $HOST_NAME:11211
    22 crudini --set /etc/neutron/neutron.conf keystone_authtoken auth_type  password
    23 crudini --set /etc/neutron/neutron.conf keystone_authtoken project_domain_name  $DOMAIN_NAME
    24 crudini --set /etc/neutron/neutron.conf keystone_authtoken user_domain_name $DOMAIN_NAME
    25 crudini --set /etc/neutron/neutron.conf keystone_authtoken project_name  service
    26 crudini --set /etc/neutron/neutron.conf keystone_authtoken username  neutron
    27 crudini --set /etc/neutron/neutron.conf keystone_authtoken password  $NEUTRON_PASS
    28 #### 配置lock的文件路径
    29 crudini --set /etc/neutron/neutron.conf oslo_concurrency lock_path  /var/lib/neutron/tmp
    30 
    31 #### 配置neutron的ml2
    32 crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 type_drivers  flat,vlan,gre,vxlan,local  # 配置类型驱动
    33 crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 tenant_network_types  
    34 crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 mechanism_drivers  openvswitch,l2population  # 配置机制驱动
    35 crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 extension_drivers  port_security
    36 
    37 #### 配置neutron的安全组
    38 crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini securitygroup enable_ipset  True
    39 crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini securitygroup enable_security_group true
    40 crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini securitygroup firewall_driver iptables_hybrid
    41 
    42 #### 配置neutron的配额
    43 crudini --set  /etc/neutron/plugins/ml2/openvswitch_agent.ini agent l2_population True
    44 crudini --set  /etc/neutron/plugins/ml2/openvswitch_agent.ini agent prevent_arp_spoofing True
    45 crudini --set  /etc/neutron/plugins/ml2/openvswitch_agent.ini ovs integration_bridge br-int
    46 crudini --set  /etc/neutron/plugins/ml2/openvswitch_agent.ini securitygroup  firewall_driver iptables_hybrid
    47 
    48 #### 配置nova计算服务
    49 crudini --set  /etc/nova/nova.conf neutron  url  http://$HOST_NAME:9696
    50 crudini --set  /etc/nova/nova.conf neutron  auth_url  http://$HOST_NAME:35357
    51 crudini --set  /etc/nova/nova.conf neutron  auth_type  password
    52 crudini --set  /etc/nova/nova.conf neutron  project_domain_name  $DOMAIN_NAME
    53 crudini --set  /etc/nova/nova.conf neutron  user_domain_name  $DOMAIN_NAME
    54 crudini --set  /etc/nova/nova.conf neutron  region_name  RegionOne
    55 crudini --set  /etc/nova/nova.conf neutron  project_name  service
    56 crudini --set  /etc/nova/nova.conf neutron  username  neutron
    57 crudini --set  /etc/nova/nova.conf neutron  password  $NEUTRON_PASS
    58 crudini --set  /etc/nova/nova.conf DEFAULT use_neutron True
    59 crudini --set  /etc/nova/nova.conf DEFAULT linuxnet_interface_driver  nova.network.linux_net.LinuxOVSInterfaceDriver
    60 crudini --set  /etc/nova/nova.conf DEFAULT firewall_driver  nova.virt.firewall.NoopFirewallDriver
    61 crudini --set  /etc/nova/nova.conf DEFAULT vif_plugging_is_fatal  True
    62 crudini --set  /etc/nova/nova.conf DEFAULT vif_plugging_timeout  300
    63 
    64 #### 配置内核转发
    65 echo 'net.ipv4.ip_forward=1' >> /etc/sysctl.conf
    66 echo 'net.ipv4.conf.default.rp_filter=0' >> /etc/sysctl.conf 
    67 echo 'net.ipv4.conf.all.rp_filter=0' >> /etc/sysctl.conf
    68 sysctl -p 
    69 
    70 ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini
    71 
    72 ### 开启neutron服务
    73 systemctl restart openvswitch
    74 systemctl enable openvswitch
    75 ovs-vsctl add-br br-int  #添加网桥br-int
    76 systemctl restart openstack-nova-compute.service
    77 systemctl restart openstack-nova-compute neutron-metadata-agent
    78 systemctl restart neutron-openvswitch-agent 
    79 systemctl enable neutron-openvswitch-agent neutron-metadata-agent
    iaas-install-neutron-compute.sh
     1 #!/bin/bash
     2 #### 加载配置文件
     3 source /etc/xiandian/openrc.sh
     4 
     5 #### 设置租户的网络类型和私有网络提供的标识范围
     6 crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 tenant_network_types  gre
     7 crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2_type_gre tunnel_id_ranges  1:1000
     8 
     9 #### 添加网桥并且覆盖第二块网卡的内容
    10 ovs-vsctl add-br br-ex
    11 ovs-vsctl add-port br-ex $INTERFACE_NAME
    12 cat > /etc/sysconfig/network-scripts/ifcfg-$INTERFACE_NAME <<EOF
    13 DEVICE=$INTERFACE_NAME
    14 TYPE=Ethernet
    15 BOOTPROTO=none
    16 ONBOOT=yes
    17 EOF
    18 systemctl restart network
    19 
    20 #### 将bridge转为openvswitch
    21 crudini --set  /etc/neutron/plugins/ml2/openvswitch_agent.ini ovs bridge_mappings  physnet1:br-ex
    22 crudini --set  /etc/neutron/plugins/ml2/openvswitch_agent.ini agent tunnel_types  gre
    23 crudini --set  /etc/neutron/plugins/ml2/openvswitch_agent.ini ovs local_ip $HOST_IP_NODE
    24 crudini --set  /etc/neutron/plugins/ml2/openvswitch_agent.ini ovs  enable_tunneling True
    25 crudini --set  /etc/neutron/plugins/ml2/openvswitch_agent.ini ovs bridge_mappings external:br-ex
    26 
    27 #### 开启neutron服务
    28 systemctl restart neutron-openvswitch-agent 
    iaas-install-neutron-compute-gre.sh

           7. web界面服务:iaas-install-dashboard.sh

     1 #!/bin/bash
     2 #### 加载配置文件并安装组件
     3 source /etc/xiandian/openrc.sh
     4 yum install openstack-dashboard -y 
     5 
     6 #### 修改本地设置
     7 sed -i -e "s/^ALLOWED_HOSTS.*/ALLOWED_HOSTS = ['*','localhost']/g"    # 将所有以ALLOWED_HOSTS开头和结尾的串替换为ALLOWED_HOSTS并设置为['*','localhost']
     8 -e "s/^OPENSTACK_HOST.*/OPENSTACK_HOST = "$HOST_NAME"/g" 
     9 -e "s/^TIME_ZONE.*/TIME_ZONE = "UTC"/g" -e '133,138d' 
    10 -e '128,133s/^#//' 
    11 -e "128 i SESSION_ENGINE = 'django.contrib.sessions.backends.cache'" 
    12 -e "s/http://%s:5000/v2.0/http://%s:5000/v3/g" 
    13 -e 's/#OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT = False/OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT = True/g' 
    14 -e '55,60s/^#//'  
    15 -e '56d' 
    16 -e '72s/^#//' 
    17 -e 's/OPENSTACK_KEYSTONE_DEFAULT_ROLE*.*/OPENSTACK_KEYSTONE_DEFAULT_ROLE = "user"/g' /etc/openstack-dashboard/local_settings
    18 
    19 sed -i "s/SITE_BRANDING =.*/SITE_BRANDING = 'XianDian Dashboard'/g"  /usr/share/openstack-dashboard/openstack_dashboard/settings.py
    20 sed -i '/WSGIScriptAlias / /usr/share/openstack-dashboard/openstack_dashboard/wsgi/django.wsgi/d'  /etc/httpd/conf.d/openstack-dashboard.conf
    21 systemctl restart httpd.service memcached.service
    iaas-install-dashboard.sh

           8. 块存储服务脚本:iaas-install-cinder-{controller,compute}.sh

     1 #!/bin/bash
     2 yum install -y openstack-cinder
     3 ####配置页面显示
     4 sed -i -e 's/"consistencygroup:create" : "group:nobody"/"consistencygroup:create" : ""/g' 
     5 -e 's/"consistencygroup:delete": "group:nobody"/"consistencygroup:delete": ""/g' 
     6 -e 's/"consistencygroup:update": "group:nobody"/"consistencygroup:update": ""/g' 
     7 -e  's/"consistencygroup:get": "group:nobody"/"consistencygroup:get": ""/g' 
     8 -e  's/"consistencygroup:get_all": "group:nobody"/"consistencygroup:get_all": ""/g' 
     9 -e  's/"consistencygroup:create_cgsnapshot" : "group:nobody"/"consistencygroup:create_cgsnapshot"
    10  : ""/g' 
    11 -e  's/"consistencygroup:delete_cgsnapshot": "group:nobody"/"consistencygroup:delete_cgsnapshot"
    12 : ""/g'  
    13 -e 's/"consistencygroup:get_cgsnapshot": "group:nobody"/"consistencygroup:get_cgsnapshot": ""/
    14 g' 
    15 -e 's/"consistencygroup:get_all_cgsnapshots": "group:nobody"/"consistencygroup:get_all_cgsnapshot
    16 s": ""/g' /etc/cinder/policy.json 
    17 
    18 ####加载脚本配置文件和keystone的admin的环境配置文件
    19 source /etc/xiandian/openrc.sh
    20 source /etc/keystone/admin-openrc.sh
    21 
    22 #### 创建cinder用户并授予本地和远程登录权限
    23 mysql -uroot -p$DB_PASS -e "create database IF NOT EXISTS cinder ;"
    24 mysql -uroot -p$DB_PASS -e "GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'localhost' IDENTIFIED BY '$C
    25 INDER_DBPASS' ;"
    26 mysql -uroot -p$DB_PASS -e "GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'%' IDENTIFIED BY '$CINDER_DB
    27 PASS' ;"
    28 
    29 #### 创建cinder用户并授予admin角色,创建虚拟卷服务,开启处理外部、内部和admin访问端口
    30 openstack user create --domain $DOMAIN_NAME --password $CINDER_PASS cinder
    31 openstack role add --project service --user cinder admin
    32 openstack service create --name cinder --description "OpenStack Block Storage" volume
    33 openstack service create --name cinderv2 --description "OpenStack Block Storage" volumev2
    34 openstack endpoint create --region RegionOne volume public http://$HOST_NAME:8776/v1/%(tenant_id)s
    35 openstack endpoint create --region RegionOne volume internal http://$HOST_NAME:8776/v1/%(tenant_id)s
    36 openstack endpoint create --region RegionOne volume admin http://$HOST_NAME:8776/v1/%(tenant_id)s
    37 openstack endpoint create --region RegionOne volumev2 public http://$HOST_NAME:8776/v2/%(tenant_id)s
    38 openstack endpoint create --region RegionOne volumev2 internal http://$HOST_NAME:8776/v2/%(tenant_id)s
    39 openstack endpoint create --region RegionOne volumev2 admin http://$HOST_NAME:8776/v2/%(tenant_id)s
    40 
    41 #### 配置cinder的消息队列服务
    42 crudini --set /etc/cinder/cinder.conf database connection mysql+pymysql://cinder:$CINDER_DBPASS@$HOST_NAME/cinder
    43 crudini --set /etc/cinder/cinder.conf DEFAULT rpc_backend rabbit
    44 crudini --set /etc/cinder/cinder.conf oslo_messaging_rabbit rabbit_host $HOST_NAME
    45 crudini --set /etc/cinder/cinder.conf oslo_messaging_rabbit rabbit_userid $RABBIT_USER
    46 crudini --set /etc/cinder/cinder.conf oslo_messaging_rabbit rabbit_password  $RABBIT_PASS
    47 
    48 #### 配置keystone认证服务
    49 crudini --set /etc/cinder/cinder.conf DEFAULT auth_strategy keystone
    50 crudini --set /etc/cinder/cinder.conf keystone_authtoken auth_uri  http://$HOST_NAME:5000
    51 crudini --set /etc/cinder/cinder.conf keystone_authtoken auth_url  http://$HOST_NAME:35357
    52 crudini --set /etc/cinder/cinder.conf keystone_authtoken memcached_servers  $HOST_NAME:11211
    53 crudini --set /etc/cinder/cinder.conf keystone_authtoken auth_type  password
    54 crudini --set /etc/cinder/cinder.conf keystone_authtoken project_domain_name  $DOMAIN_NAME
    55 crudini --set /etc/cinder/cinder.conf keystone_authtoken user_domain_name $DOMAIN_NAME
    56 crudini --set /etc/cinder/cinder.conf keystone_authtoken project_name  service
    57 crudini --set /etc/cinder/cinder.conf keystone_authtoken username  cinder
    58 crudini --set /etc/cinder/cinder.conf keystone_authtoken password  $CINDER_PASS
    59 #### 配置管理ip为主机地址
    60 crudini --set /etc/cinder/cinder.conf DEFAULT my_ip $HOST_IP
    61 crudini --set /etc/cinder/cinder.conf oslo_concurrency lock_path /var/lib/cinder/tmp
    62 
    63 #### 将cinder的信息同步到数据库
    64 su -s /bin/sh -c "cinder-manage db sync" cinder
    65 
    66 crudini --set /etc/nova/nova.conf cinder os_region_name  RegionOne
    67 
    68 #### 开启cinder服务
    69 systemctl restart openstack-nova-api.service
    70 systemctl enable openstack-cinder-api.service openstack-cinder-scheduler.service
    71 systemctl restart openstack-cinder-api.service openstack-cinder-scheduler.service
    iaas-install-cinder-controller.sh
     1 #!/bin/bash
     2 #### 加载脚本配置文件,安装lvm等组件,开启lvm服务
     3 source /etc/xiandian/openrc.sh
     4 yum install lvm2 targetcli python-keystone openstack-cinder  -y
     5 systemctl enable lvm2-lvmetad.service
     6 systemctl restart lvm2-lvmetad.service
     7 
     8 #### 创建pv物理卷和vg卷组
     9 pvcreate -f /dev/$BLOCK_DISK
    10 vgcreate cinder-volumes /dev/$BLOCK_DISK
    11 
    12 #### 
    13 # sed -i  "/$BLOCK_DISK/d"  /etc/lvm/lvm.conf
    14 # sed -i  '/^devices/a        filter = [ "a/sdb/", "r/.*/"]' /etc/lvm/lvm.conf
    15 # sed -i  "s/sdb/$BLOCK_DISK/g" /etc/lvm/lvm.conf
    16 
    17 # 配置数据库连接和消息队列服务
    18 crudini --set /etc/cinder/cinder.conf database connection mysql+pymysql://cinder:$CINDER_DBPASS@$HOST_NAME/cinder
    19 crudini --set /etc/cinder/cinder.conf DEFAULT rpc_backend rabbit
    20 crudini --set /etc/cinder/cinder.conf oslo_messaging_rabbit rabbit_host $HOST_NAME
    21 crudini --set /etc/cinder/cinder.conf oslo_messaging_rabbit rabbit_userid $RABBIT_USER
    22 crudini --set /etc/cinder/cinder.conf oslo_messaging_rabbit rabbit_password  $RABBIT_PASS
    23 
    24 #### 配置keystone认证服务
    25 crudini --set /etc/cinder/cinder.conf DEFAULT auth_strategy keystone
    26 crudini --set /etc/cinder/cinder.conf DEFAULT enabled_backends  lvm
    27 crudini --set /etc/cinder/cinder.conf keystone_authtoken auth_uri  http://$HOST_NAME:5000
    28 crudini --set /etc/cinder/cinder.conf keystone_authtoken auth_url  http://$HOST_NAME:35357
    29 crudini --set /etc/cinder/cinder.conf keystone_authtoken memcached_servers  $HOST_NAME:11211
    30 crudini --set /etc/cinder/cinder.conf keystone_authtoken auth_type  password
    31 crudini --set /etc/cinder/cinder.conf keystone_authtoken project_domain_name  $DOMAIN_NAME
    32 crudini --set /etc/cinder/cinder.conf keystone_authtoken user_domain_name $DOMAIN_NAME
    33 crudini --set /etc/cinder/cinder.conf keystone_authtoken project_name  service
    34 crudini --set /etc/cinder/cinder.conf keystone_authtoken username  cinder
    35 crudini --set /etc/cinder/cinder.conf keystone_authtoken password  $CINDER_PASS
    36 
    37 #### 配置cinder块存储服务
    38 crudini --set /etc/cinder/cinder.conf DEFAULT my_ip $HOST_IP_NODE
    39 crudini --set /etc/cinder/cinder.conf lvm volume_driver cinder.volume.drivers.lvm.LVMVolumeDriver 
    40 crudini --set /etc/cinder/cinder.conf lvm volume_group cinder-volumes
    41 crudini --set /etc/cinder/cinder.conf lvm iscsi_protocol iscsi
    42 crudini --set /etc/cinder/cinder.conf lvm iscsi_helper lioadm
    43 
    44 #### 配置glance镜像服务地址
    45 crudini --set /etc/cinder/cinder.conf DEFAULT glance_api_servers  http://$HOST_NAME:9292
    46 crudini --set /etc/cinder/cinder.conf oslo_concurrency lock_path /var/lib/cinder/tmp
    47 
    48 #### 开启cinder-volume服务
    49 systemctl enable openstack-cinder-volume.service target.service
    50 systemctl restart openstack-cinder-volume.service target.service
    iaas-install-cinder-compute.sh

           9. 对象存储服务:iaas-install-swift-{controller,compute}.sh

      1 #!/bin/bash
      2 #### 加载脚本配置文件和keystone的admin环境变量配置文件,安装swift的核心组件
      3 source /etc/xiandian/openrc.sh
      4 source /etc/keystone/admin-openrc.sh
      5 yum install openstack-swift-proxy python-swiftclient python-keystoneclient python-keystonemiddleware memcached -y
      6 
      7 
      8 #### 创建swift用户并授予admin权限,创建对象存储服务,创建处理外部、内部和admin访问端口
      9 openstack user create --domain $DOMAIN_NAME --password $SWIFT_PASS swift
     10 openstack role add --project service --user swift admin
     11 openstack service create --name swift --description "OpenStack Object Storage" object-store
     12 openstack endpoint create --region RegionOne object-store public http://$HOST_NAME:8080/v1/AUTH_%(tenant_id)s
     13 openstack endpoint create --region RegionOne object-store internal http://$HOST_NAME:8080/v1/AUTH_%(tenant_id)s
     14 openstack endpoint create --region RegionOne object-store admin http://$HOST_NAME:8080/v1
     15 
     16 #### 使用标准输入和输出编写swift的代理服务配置文件
     17 cat <<EOF > /etc/swift/proxy-server.conf
     18 # 配置默认信息
     19 [DEFAULT]
     20 bind_port = 8080  # 配置对象存储服务组件使用的端口
     21 swift_dir = /etc/swift  # 配置对象存储服务组件使用的路径
     22 user = swift  # 配置对象存储服务使用的用户
     23 # 配置安装管道
     24 [pipeline:main]
     25 pipeline = catch_errors gatekeeper healthcheck proxy-logging cache container_sync bulk ratelimit authtoken keystoneauth container-quotas account-quotas slo dlo versioned_writes proxy-logging proxy-server  # 启用相应的模块
     26 # 配置代理服务
     27 [app:proxy-server]
     28 use = egg:swift#proxy  # 使用方法
     29 account_autocreate = True  # 开启自动创建账户
     30 # 配置临时用户角色
     31 [filter:tempauth]
     32 use = egg:swift#tempauth  # 使用方法
     33 user_admin_admin = admin .admin .reseller_admin  # 管理员角色
     34 user_test_tester = testing .admin  # 普通用户角色
     35 user_test2_tester2 = testing2 .admin
     36 user_test_tester3 = testing3
     37 user_test5_tester5 = testing5 service
     38 # 配置访问端口
     39 [filter:authtoken]
     40 paste.filter_factory = keystonemiddleware.auth_token:filter_factory  # Paste过滤器 "authtoken" 添加到Paste管道的适当位置, 完成在OpenStack服务上部署Keystone中间件
     41 auth_uri = http://$HOST_NAME:5000  # 普通用户访问端口
     42 auth_url = http://$HOST_NAME:35357  # 管理员访问端口
     43 memcached_servers = $HOST_NAME:11211  # 缓存服务访问端口
     44 auth_type = password
     45 project_domain_name = $DOMAIN_NAME  # 域
     46 user_domain_name = $DOMAIN_NAME # 域
     47 project_name = service  # 租户
     48 username = swift  # 用户
     49 password = $SWIFT_PASS  # 密码
     50 delay_auth_decision = True
     51 # 配置keystone中间件
     52 [filter:keystoneauth]
     53 use = egg:swift#keystoneauth  # 使用方法
     54 operator_roles = admin,user  # 用户角色
     55 # 配置安全验证
     56 [filter:healthcheck]
     57 use = egg:swift#healthcheck、
     58 # 配置缓存
     59 [filter:cache]
     60 memcache_servers = $HOST_NAME:11211
     61 use = egg:swift#memcache
     62 # 配置速率限制
     63 [filter:ratelimit]
     64 use = egg:swift#ratelimit
     65 # 配置域的重新映射
     66 [filter:domain_remap]
     67 use = egg:swift#domain_remap
     68 [filter:catch_errors]
     69 use = egg:swift#catch_errors
     70 # 配置显示名
     71 [filter:cname_lookup]
     72 use = egg:swift#cname_lookup
     73 # 配置静态网页
     74 [filter:staticweb]
     75 use = egg:swift#staticweb
     76 # 配置临时URL
     77 [filter:tempurl]
     78 use = egg:swift#tempurl
     79 # 配置表单提交方式
     80 [filter:formpost]
     81 use = egg:swift#formpost
     82 # 配置用户名校验
     83 [filter:name_check]
     84 use = egg:swift#name_check
     85 # 配置端口显示
     86 [filter:list-endpoints]
     87 use = egg:swift#list_endpoints
     88 # 配置代理日志
     89 [filter:proxy-logging]
     90 use = egg:swift#proxy_logging
     91 # 配置块
     92 [filter:bulk]
     93 use = egg:swift#bulk
     94 [filter:slo]
     95 use = egg:swift#slo
     96 [filter:dlo]
     97 use = egg:swift#dlo
     98 # 容器配额
     99 [filter:container-quotas]
    100 use = egg:swift#container_quotas
    101 # 用户配额
    102 [filter:account-quotas]
    103 use = egg:swift#account_quotas
    104 # 配置系统卫士
    105 [filter:gatekeeper]
    106 use = egg:swift#gatekeeper
    107 # 配置容器同步
    108 [filter:container_sync]
    109 use = egg:swift#container_sync
    110 [filter:xprofile]
    111 use = egg:swift#xprofile
    112 [filter:versioned_writes]
    113 use = egg:swift#versioned_writes
    114 EOF
    115 
    116 #### swift操作
    117 pushd /etc/swift # 创建目录栈,将当前目录压入栈中(栈顶) 
    118 # 用户环操作
    119 swift-ring-builder account.builder create 18 1 1 # 创建18个分区、1个副本和1频率的用户环构造器文件
    120 swift-ring-builder account.builder add --region 1 --zone 1 --ip $STORAGE_LOCAL_NET_IP --port 6002 --device $OBJECT_DISK --weight 100  # 将$OBJECT_DISK设备添加到用户环 
    121 swift-ring-builder account.builder  # 构建用户环
    122 swift-ring-builder account.builder rebalance  # 重新平衡环,通过重新分配分区最近没有被重新分配的分区
    123 # 容器环操作
    124 swift-ring-builder container.builder create 10 1 1  # 创建10个分区、副本和频率是1的容器环构造文件
    125 swift-ring-builder container.builder add --region 1 --zone 1 --ip $STORAGE_LOCAL_NET_IP --port 6001 --device $OBJECT_DISK --weight 100  # 将$OBJECT_DISK设备添加到容器环
    126 swift-ring-builder container.builder  # 构架容器环
    127 swift-ring-builder container.builder rebalance  # 重新平衡环
    128 # 对象环操作
    129 swift-ring-builder object.builder create 10 1 1  # 创建10个分区、副本和频率是1的对象环构造文件
    130 swift-ring-builder object.builder  add --region 1 --zone 1 --ip $STORAGE_LOCAL_NET_IP --port 6000 --device $OBJECT_DISK --weight 100   # 将$OBJECT_DISK设备添加到容器环
    131 swift-ring-builder object.builder  # 构建对象环
    132 swift-ring-builder object.builder rebalance  # 重新平衡环
    133 
    134 popd # 将栈顶的目录弹出,与pushd相反
    135 
    136 #### 使用标准输入输出编写swift的配置文件
    137 #---------------
    138 cat << EOF > /etc/swift/swift.conf、
    139 # 配置存储路径
    140 [swift-hash]
    141 swift_hash_path_suffix = changeme  # 配置hash路劲的后缀
    142 swift_hash_path_prefix = changeme  # 配置hash路径的前缀
    143 # 配置存储策略
    144 [storage-policy:0]
    145 name = Policy-0  # 配置默认存储策略的名字
    146 default = yes  # 开启默认存储策略
    147 aliases = yellow, orange  # 别名的颜色
    148 [swift-constraints]
    149 EOF
    150 
    151 #### 修改权限,开启swift的代理和缓存服务
    152 chown -R root:swift /etc/swift
    153 systemctl enable openstack-swift-proxy.service memcached.service
    154 systemctl restart openstack-swift-proxy.service memcached.service
    iaas-install-swift-controller.sh
      1 #!/bin/bash
      2 #### 基本配置
      3 source /etc/xiandian/openrc.sh  # 加载配置文件
      4 yum install xfsprogs rsync openstack-swift-account openstack-swift-container openstack-swift-object -y  # 安装swift服务组件
      5 mkfs.xfs -i size=1024 -f /dev/$OBJECT_DISK  # 格式化分区
      6 sed -i '/nodiratime/d' /etc/fstab  # 删除旧挂载
      7 echo "/dev/$OBJECT_DISK /swift/node xfs loop,noatime,nodiratime,nobarrier,logbufs=8 0 0" >> /etc/fstab  # 设置永久挂载
      8 mkdir -p /swift/node  # 创建挂载目录
      9 mount /dev/$OBJECT_DISK /swift/node  # 挂载
     10 scp $HOST_NAME:/etc/swift/*.ring.gz /etc/swift/  # 同步环到集群到当前节点
     11 
     12 #### 配置同步服务器
     13 cat <<EOF > /etc/rsyncd.conf
     14 pid file = /var/run/rsyncd.pid  # 进程号文件路径
     15 log file = /var/log/rsyncd.log  # 日志文件路劲
     16 uid = swift  # 用户号
     17 gid = swift  # 组号
     18 address = 127.0.0.1  # 本机地址
     19 # 用户配置
     20 [account]
     21 path            = /swift/node  # 路劲
     22 read only       = false # 是否只读
     23 write only      = no # 是否只写
     24 list            = yes  # 是否可以查看
     25 incoming chmod  = 0644  # 进入权限
     26 outgoing chmod  = 0644  # 出去权限
     27 max connections = 25  # 最大连接数
     28 lock file =     /var/lock/account.lock  # 锁文件路劲
     29 # 容器配置
     30 [container]
     31 path            = /swift/node
     32 read only       = false
     33 write only      = no
     34 list            = yes
     35 incoming chmod  = 0644
     36 outgoing chmod  = 0644
     37 max connections = 25
     38 lock file =     /var/lock/container.lock
     39 # 对象配置
     40 [object]
     41 path            = /swift/node
     42 read only       = false
     43 write only      = no
     44 list            = yes
     45 incoming chmod  = 0644
     46 outgoing chmod  = 0644
     47 max connections = 25
     48 lock file =     /var/lock/object.lock
     49 # 服务配置
     50 [swift_server]
     51 path            = /etc/swift
     52 read only       = true
     53 write only      = no
     54 list            = yes
     55 incoming chmod  = 0644
     56 outgoing chmod  = 0644
     57 max connections = 5
     58 lock file =     /var/lock/swift_server.lock
     59 EOF
     60 # 开启同步服务
     61 systemctl enable rsyncd.service
     62 systemctl restart rsyncd.service
     63 
     64 #### 配置账户服务
     65 cat <<EOF > /etc/swift/account-server.conf
     66 [DEFAULT]
     67 bind_port = 6002  # 访问端口
     68 user = swift  # 用户
     69 swift_dir = /etc/swift  # 访问路劲
     70 devices = /swift/node  # 设备路径
     71 mount_check = false
     72 [pipeline:main]
     73 pipeline = healthcheck recon account-server
     74 [app:account-server]
     75 use = egg:swift#account
     76 [filter:healthcheck]
     77 use = egg:swift#healthcheck
     78 [filter:recon]
     79 use = egg:swift#recon
     80 recon_cache_path = /var/cache/swift
     81 [account-replicator]
     82 [account-auditor]
     83 [account-reaper]
     84 [filter:xprofile]
     85 use = egg:swift#xprofile
     86 EOF
     87 
     88 #### 配置容器服务
     89 cat <<EOF > /etc/swift/container-server.conf
     90 [DEFAULT]
     91 bind_port = 6001
     92 user = swift
     93 swift_dir = /etc/swift
     94 devices = /swift/node
     95 mount_check = false
     96 [pipeline:main]
     97 pipeline = healthcheck recon container-server
     98 [app:container-server]
     99 use = egg:swift#container
    100 [filter:healthcheck]
    101 use = egg:swift#healthcheck
    102 [filter:recon]
    103 use = egg:swift#recon
    104 recon_cache_path = /var/cache/swift
    105 [container-replicator]
    106 [container-updater]
    107 [container-auditor]
    108 [container-sync]
    109 [filter:xprofile]
    110 use = egg:swift#xprofile
    111 EOF
    112 
    113 #### 配置对象服务
    114 cat <<EOF > /etc/swift/object-server.conf
    115 [DEFAULT]
    116 bind_port = 6000
    117 user = swift
    118 swift_dir = /etc/swift
    119 devices = /swift/node
    120 mount_check = false
    121 [pipeline:main]
    122 pipeline = healthcheck recon object-server
    123 [app:object-server]
    124 use = egg:swift#object
    125 [filter:healthcheck]
    126 use = egg:swift#healthcheck
    127 [filter:recon]
    128 use = egg:swift#recon
    129 recon_cache_path = /var/cache/swift
    130 recon_lock_path = /var/lock
    131 [object-replicator]
    132 [object-reconstructor]
    133 [object-updater]
    134 [object-auditor]
    135 [filter:xprofile]
    136 use = egg:swift#xprofile
    137 EOF
    138 
    139 #### 配置swift
    140 cat <<EOF > /etc/swift/swift.conf
    141 # 配置存储路劲
    142 [swift-hash]
    143 swift_hash_path_suffix = changeme  # 配置hash路径的后缀
    144 swift_hash_path_prefix = changeme # 配置hash路劲的前缀
    145 # 配置存储策略
    146 [storage-policy:0]
    147 name = Policy-0
    148 default = yes
    149 aliases = yellow, orange
    150 [swift-constraints]
    151 EOF
    152 
    153 #### 修改目录访问权限
    154 chown -R swift:swift /swift/node
    155 mkdir -p /var/cache/swift
    156 chown -R root:swift /var/cache/swift
    157 chmod -R 775 /var/cache/swift
    158 chown -R root:swift /etc/swift
    159 
    160 #### 开启swift的账户、容器和对象服务
    161 systemctl enable openstack-swift-account.service openstack-swift-account-auditor.service openstack-swift-account-reaper.service openstack-swift-account-replicator.service
    162 systemctl restart openstack-swift-account.service openstack-swift-account-auditor.service openstack-swift-account-reaper.service openstack-swift-account-replicator.service
    163 systemctl enable openstack-swift-container.service openstack-swift-container-auditor.service openstack-swift-container-replicator.service openstack-swift-container-updater.service
    164 systemctl restart openstack-swift-container.service openstack-swift-container-auditor.service openstack-swift-container-replicator.service openstack-swift-container-updater.service
    165 systemctl enable openstack-swift-object.service openstack-swift-object-auditor.service openstack-swift-object-replicator.service openstack-swift-object-updater.service
    166 systemctl restart openstack-swift-object.service openstack-swift-object-auditor.service openstack-swift-object-replicator.service openstack-swift-object-updater.service
    iaas-install-swift-compute.sh
  • 相关阅读:
    Gson简要使用笔记
    (一)微信开发环境搭建
    Hibernate 注解 字段不映射的注解
    Hibernate 使用注解后没发现建表
    Hibernate 注意命名与数据库关键字的冲突 处理方法
    struts2不能通过ONGL方式取出request中的Atrribute
    Android 两个Activity进行数据传送 发送
    Android 设置隐式意图
    Android 隐式意图 让用户选择一个浏览器访问网址
    Android 判断是否联网 是否打开上网
  • 原文地址:https://www.cnblogs.com/mh20131118/p/12261589.html
Copyright © 2020-2023  润新知