OpenStack私有云部署
 
 
Controller Node:       em1(10.6.17.11),em2()
 
Computer Node:         em1(10.6.17.12),em2()
 
Block Storage Node:    em1(10.6.17.13)
 
Object Storage Node:   em1(10.6.17.14)
 
 
 
 
 
1. Controller 修改网络配置
 
 
em1  =  
 
IPADDR=10.6.17.11
NETMASK=255.255.255.0
GATEWAY=10.6.17.1
 
 
em2  =   (HWADDR  与  UUID 不变)
 
BOOTPROTO=none
ONBOOT=yes
 
 
 
Computer 修改网络配置
 
 
em1  =  
 
IPADDR=10.6.17.12
NETMASK=255.255.255.0
GATEWAY=10.6.17.1
 
 
em2  =   (HWADDR  与  UUID 不变)
 
BOOTPROTO=none
ONBOOT=yes
 
 
 
 
2. 修改节点 主机名 方便后续查看
 
centos 7 使用如下命令修改:
 
hostnamectl --static set-hostname <主机名>
 
-----------------------------------------------------
 
3. 修改 host 文件  四台主机分别修改
 
vi /etc/hosts
 
10.6.17.11 controller
10.6.17.12 computer1
10.6.17.13 block1
10.6.17.14 object1
 
----------------------------------------------------
 
修改完毕,使用 ping -c 4 openstack.org   以及    controller   computer1   block1   object1 是否可以通
 
 
4. controller 安装ntp服务!
 
centos 7 使用 chrony 来做时间服务器.
 
[root@controller ~]#  yum install chrony
 
##修改配置文件
[root@controller ~]# vi /etc/chrony.conf
 
server cn.pool.ntp.org iburst
 
 
allow 10.6.17.0/24
 
 
 
[root@controller ~]# systemctl enable chronyd.service
[root@controller ~]# systemctl start chronyd.service
[root@controller ~]# systemctl stop firewalld.service
[root@controller ~]# systemctl disable firewalld.service
 
##其他节点 也分别安装 chrony
 
yum install chrony
 
 
##修改 配置文件
 
vi /etc/chrony.conf
 
server controller iburst
 
 
systemctl enable chronyd.service
systemctl start chronyd.service
systemctl stop firewalld.service
systemctl disable firewalld.service
 
 
##验证时间
 
 
[root@controller ~]# chronyc sources
210 Number of sources = 1
MS Name/IP address         Stratum Poll Reach LastRx Last sample
===============================================================================
^* news.neu.edu.cn               2   6    17    44   -795us[ -812us] +/-   31ms
 
 
 
 
[root@computer1 ~]# chronyc sources
210 Number of sources = 1
MS Name/IP address         Stratum Poll Reach LastRx Last sample
===============================================================================
^* controller                    3   6    17    35  -1007ns[ -300us] +/-   33ms
 
 
 
[root@block1 ~]# chronyc sources 
210 Number of sources = 1
MS Name/IP address         Stratum Poll Reach LastRx Last sample
===============================================================================
^* controller                    3   6    37     5     -8ns[ -385us] +/-   30ms
 
 
 
[root@object1 ~]# chronyc sources 
210 Number of sources = 1
MS Name/IP address         Stratum Poll Reach LastRx Last sample
===============================================================================
^* controller                    3   6    37     6   -707ns[ -548us] +/-   31ms
 
 
 
 
 
 
5. 添加 yum ELPL 源 以及 openstack-liberty 源
 
 
# yum install http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm
 
# yum install centos-release-openstack-liberty
 
 
# yum upgrade
 
# reboot
 
# yum install python-openstackclient
 
# yum install openstack-selinux
 
 
 
 
6. controller 安装 mariadb 数据库
 
使用 yum 安装,或者使用 源码安装
 
[root@controller ~]# yum install mariadb mariadb-server MySQL-python
 
 
my.conf 中添加如下配置 以支持 utf8 
 
[mysqld]
...
bind-address = 10.6.17.11
 
 
 
[mysqld]
...
default-storage-engine = innodb
innodb_file_per_table
collation-server = utf8_general_ci
init-connect = 'SET NAMES utf8'
character-set-server = utf8
 
 
 
# systemctl enable mariadb.service
# systemctl start mariadb.service
 
 
 
7. controller 安装 rabbitMQ 消息队列
 
[root@controller ~]# yum install rabbitmq-server
 
[root@controller ~]# systemctl enable rabbitmq-server.service
[root@controller ~]# systemctl start rabbitmq-server.service
 
## 添加 openstack 用户 ( RABBIT_PASS 替换为 自己的密码 )
 
[root@controller ~]# rabbitmqctl add_user openstack RABBIT_PASS
Creating user "openstack" ...
...done.
 
 
 
## 授权帐号
 
[root@controller ~]# rabbitmqctl set_permissions openstack ".*" ".*" ".*"
Setting permissions for user "openstack" in vhost "/" ...
...done.
 
 
 
二、 配置 Identity service 服务
 
## 创建 OpenStack Identity service 的 管理员 帐号
 
[root@controller ~]# mysql -u root -p
 
MariaDB [(none)]> CREATE DATABASE keystone;
MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' \
    -> IDENTIFIED BY 'keystone';
 
MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' \
    -> IDENTIFIED BY 'keystone';
 
 
## 创建 管理员 token 
[root@controller ~]# openssl rand -hex 10
d22ea88344b5d4fa864f
 
 
## 安装openstack-keystone 组件
 
[root@controller ~]# yum install openstack-keystone httpd mod_wsgi memcached python-memcached
 
[root@controller ~]# systemctl enable memcached.service
[root@controller ~]# systemctl start memcached.service
 
 
## 编辑 /etc/keystone/keystone.conf 文件 修改 token
 
[root@controller ~]# vim /etc/keystone/keystone.conf
 
#admin_token = ADMIN
 
修改为 刚才生成的 token
 
admin_token = d22ea88344b5d4fa864f
 
 
[database]
...
connection = mysql://keystone:keystone@controller/keystone
 
 
[memcache]
...
servers = localhost:11211
 
 
[token]
...
provider = uuid
driver = memcache
 
 
[revoke]
...
driver = sql
 
 
[DEFAULT]
...
verbose = True
 
 
## 同步Identity service 数据库
 
[root@controller ~]# su -s /bin/sh -c "keystone-manage db_sync" keystone
 
提示 No handlers could be found for logger "oslo_config.cfg"   但是查看keystone.log 日志,发现已经同步完成。
 
 
 
 
## 配置 httpd 文件
 
[root@controller ~]# vim /etc/httpd/conf/httpd.conf            修改如下:
 
 
ServerName controller
 
 
## 创建一个 wsgi-keystone.conf 文件
 
[root@controller ~]# vim /etc/httpd/conf.d/wsgi-keystone.conf        内容如下:
 
 
-------------------------------------------------------------------------------------------------------------------------------------
 
Listen 5000
Listen 35357
 
<VirtualHost *:5000>
    WSGIDaemonProcess keystone-public processes=5 threads=1 user=keystone group=keystone display-name=%{GROUP}
    WSGIProcessGroup keystone-public
    WSGIScriptAlias / /usr/bin/keystone-wsgi-public
    WSGIApplicationGroup %{GLOBAL}
    WSGIPassAuthorization On
    <IfVersion >= 2.4>
      ErrorLogFormat "%{cu}t %M"
    </IfVersion>
    ErrorLog /var/log/httpd/keystone-error.log
    CustomLog /var/log/httpd/keystone-access.log combined
 
    <Directory /usr/bin>
        <IfVersion >= 2.4>
            Require all granted
        </IfVersion>
        <IfVersion < 2.4>
            Order allow,deny
            Allow from all
        </IfVersion>
    </Directory>
</VirtualHost>
 
<VirtualHost *:35357>
    WSGIDaemonProcess keystone-admin processes=5 threads=1 user=keystone group=keystone display-name=%{GROUP}
    WSGIProcessGroup keystone-admin
    WSGIScriptAlias / /usr/bin/keystone-wsgi-admin
    WSGIApplicationGroup %{GLOBAL}
    WSGIPassAuthorization On
    <IfVersion >= 2.4>
      ErrorLogFormat "%{cu}t %M"
    </IfVersion>
    ErrorLog /var/log/httpd/keystone-error.log
    CustomLog /var/log/httpd/keystone-access.log combined
 
    <Directory /usr/bin>
        <IfVersion >= 2.4>
            Require all granted
        </IfVersion>
        <IfVersion < 2.4>
            Order allow,deny
            Allow from all
        </IfVersion>
    </Directory>
</VirtualHost>
 
 
------------------------------------------------------------------------------------------------------------------------------------
 
## 启动 httpd 
[root@controller ~]# systemctl enable httpd.service
[root@controller ~]# systemctl start httpd.service
 
 
 
 
## 配置 身份验证 token:              
 
[root@controller ~]# export OS_TOKEN=d22ea88344b5d4fa864f
[root@controller ~]# export OS_URL=http://controller:35357/v3
[root@controller ~]# export OS_IDENTITY_API_VERSION=3
 
 
## 创建API用户
 
[root@controller ~]# openstack service create \
> --name keystone --description "OpenStack Identity" identity
 
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | OpenStack Identity               |
| enabled     | True                             |
| id          | 528702ea888749d8b91cdf303cbec285 |
| name        | keystone                         |
| type        | identity                         |
+-------------+----------------------------------+
 
 
## 创建 API访问节点
 
[root@controller ~]# openstack endpoint create --region RegionOne \
> identity public http://controller:5000/v2.0
 
+--------------+----------------------------------+
| Field        | Value                            |
+--------------+----------------------------------+
| enabled      | True                             |
| id           | 6d1d13e2a74940338337e2faeb404291 |
| interface    | public                           |
| region       | RegionOne                        |
| region_id    | RegionOne                        |
| service_id   | 528702ea888749d8b91cdf303cbec285 |
| service_name | keystone                         |
| service_type | identity                         |
| url          | http://controller:5000/v2.0      |
+--------------+----------------------------------+
 
 
[root@controller ~]# openstack endpoint create --region RegionOne \
> identity internal http://controller:5000/v2.0
+--------------+----------------------------------+
| Field        | Value                            |
+--------------+----------------------------------+
| enabled      | True                             |
| id           | 1a6e4df9f7fb444f98da5274c4b45916 |
| interface    | internal                         |
| region       | RegionOne                        |
| region_id    | RegionOne                        |
| service_id   | 528702ea888749d8b91cdf303cbec285 |
| service_name | keystone                         |
| service_type | identity                         |
| url          | http://controller:5000/v2.0      |
+--------------+----------------------------------+
 
 
[root@controller ~]# openstack endpoint create --region RegionOne \
> identity admin http://controller:35357/v2.0
+--------------+----------------------------------+
| Field        | Value                            |
+--------------+----------------------------------+
| enabled      | True                             |
| id           | 08e839319e5143229abc893e413e0dcc |
| interface    | admin                            |
| region       | RegionOne                        |
| region_id    | RegionOne                        |
| service_id   | 528702ea888749d8b91cdf303cbec285 |
| service_name | keystone                         |
| service_type | identity                         |
| url          | http://controller:35357/v2.0     |
+--------------+----------------------------------+
 
 
## 创建 admin 项目
 
[root@controller ~]# openstack project create --domain default \
> --description "Admin Project" admin
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | Admin Project                    |
| domain_id   | default                          |
| enabled     | True                             |
| id          | 0d1a69b17e444cb3b4884529b6bdb372 |
| is_domain   | False                            |
| name        | admin                            |
| parent_id   | None                             |
+-------------+----------------------------------+
 
 
## 创建 管理员 用户
 
[root@controller ~]# openstack user create --domain default \
> --password-prompt admin
User Password:
Repeat User Password:
+-----------+----------------------------------+
| Field     | Value                            |
+-----------+----------------------------------+
| domain_id | default                          |
| enabled   | True                             |
| id        | 28c24be804a649cb825a8349ca3e6ce3 |
| name      | admin                            |
+-----------+----------------------------------+
 
 
## 创建 管理员 role
 
[root@controller ~]# openstack role create admin
+-------+----------------------------------+
| Field | Value                            |
+-------+----------------------------------+
| id    | c378be38e9574421a54d90e62ee2d0aa |
| name  | admin                            |
+-------+----------------------------------+
 
 
## 关联 管理员用户 到 项目与role 中
 
[root@controller ~]# openstack role add --project admin --user admin admin
 
 
 
## 创建 service 项目
 
[root@controller ~]# openstack project create --domain default \
> --description "Service Project" service
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | Service Project                  |
| domain_id   | default                          |
| enabled     | True                             |
| id          | 90b44e1c63104b92a1fadccc2258bbd1 |
| is_domain   | False                            |
| name        | service                          |
| parent_id   | None                             |
+-------------+----------------------------------+
 
 
 
 
 
## 验证账户
 
编辑 /usr/share/keystone/keystone-dist-paste.ini 文件
 
[root@controller ~]# vim /usr/share/keystone/keystone-dist-paste.ini
 
将
 
[pipeline:public_api]
 
[pipeline:admin_api]
 
[pipeline:api_v3]
 
中的
 
admin_token_auth   删除
 
 
 
## 清除环境变量
[root@controller ~]# unset OS_TOKEN OS_URL
 
 
## 以管理员身份 创建一个 token
 
[root@controller ~]# openstack --os-auth-url http://controller:35357/v3 \
> --os-project-domain-id default --os-user-domain-id default \
> --os-project-name admin --os-username admin --os-auth-type password \
> token issue
Password: 
+------------+----------------------------------+
| Field      | Value                            |
+------------+----------------------------------+
| expires    | 2015-12-03T04:03:34.754196Z      |
| id         | cba3fce8d9dc4bc7956f3b4aa566051c |
| project_id | 0d1a69b17e444cb3b4884529b6bdb372 |
| user_id    | 28c24be804a649cb825a8349ca3e6ce3 |
+------------+----------------------------------+
 
 
 
## 创建完成,表示验证通过
 
 
 
## 创建一个 客户端 脚本,方便操作
 
[root@controller ~]# vim admin-openrc.sh
 
添加如下环境变量:
 
 
export OS_PROJECT_DOMAIN_ID=default
export OS_USER_DOMAIN_ID=default
export OS_PROJECT_NAME=admin
export OS_TENANT_NAME=admin
export OS_USERNAME=admin
export OS_PASSWORD=admin
export OS_AUTH_URL=http://controller:35357/v3
export OS_IDENTITY_API_VERSION=3
 
 
 
## 导入 脚本,并测试
 
[root@controller ~]# source admin-openrc.sh
 
[root@controller ~]# openstack token issue
+------------+----------------------------------+
| Field      | Value                            |
+------------+----------------------------------+
| expires    | 2015-12-03T04:07:26.391998Z      |
| id         | 24a890cc24b443dc9658a34aba8462d8 |
| project_id | 0d1a69b17e444cb3b4884529b6bdb372 |
| user_id    | 28c24be804a649cb825a8349ca3e6ce3 |
+------------+----------------------------------+
 
 
## 验证通过
 
 
 
三、安装配置 image server 
 
## 创建并导入数据库
 
[root@controller ~]# mysql -u root -p
Enter password: 
 
MariaDB [(none)]> CREATE DATABASE glance;
MariaDB [(none)]> GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' \
    -> IDENTIFIED BY 'glance'; 
 
MariaDB [(none)]> GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' \
    -> IDENTIFIED BY 'glance';
 
 
## 导入 脚本 创建用户
 
[root@controller ~]# source admin-openrc.sh
 
 
## 创建 glance  用户
 
[root@controller ~]# openstack user create --domain default --password-prompt glance
User Password:
Repeat User Password:
+-----------+----------------------------------+
| Field     | Value                            |
+-----------+----------------------------------+
| domain_id | default                          |
| enabled   | True                             |
| id        | 19121c440d77403e8b66f197381c68e9 |
| name      | glance                           |
+-----------+----------------------------------+
 
 
 
## 关联到 项目 与 admin 用户
 
[root@controller ~]# openstack role add --project service --user glance admin
 
 
 
## 创建 glance 服务
 
[root@controller ~]# openstack service create --name glance \
> --description "OpenStack Image service" image
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | OpenStack Image service          |
| enabled     | True                             |
| id          | bb8f3d6386cb423eb682147cf2b5ab92 |
| name        | glance                           |
| type        | image                            |
+-------------+----------------------------------+
 
 
## 创建 image API
 
[root@controller ~]# openstack endpoint create --region RegionOne \
> image public http://controller:9292
+--------------+----------------------------------+
| Field        | Value                            |
+--------------+----------------------------------+
| enabled      | True                             |
| id           | ac858877305542679883df3afb974a95 |
| interface    | public                           |
| region       | RegionOne                        |
| region_id    | RegionOne                        |
| service_id   | bb8f3d6386cb423eb682147cf2b5ab92 |
| service_name | glance                           |
| service_type | image                            |
| url          | http://controller:9292           |
+--------------+----------------------------------+
 
 
[root@controller ~]# openstack endpoint create --region RegionOne \
> image internal http://controller:9292
+--------------+----------------------------------+
| Field        | Value                            |
+--------------+----------------------------------+
| enabled      | True                             |
| id           | 290dc30efb6b45c9bb654252aaf8b878 |
| interface    | internal                         |
| region       | RegionOne                        |
| region_id    | RegionOne                        |
| service_id   | bb8f3d6386cb423eb682147cf2b5ab92 |
| service_name | glance                           |
| service_type | image                            |
| url          | http://controller:9292           |
+--------------+----------------------------------+
 
 
[root@controller ~]# openstack endpoint create --region RegionOne \
> image admin http://controller:9292
+--------------+----------------------------------+
| Field        | Value                            |
+--------------+----------------------------------+
| enabled      | True                             |
| id           | 04fac23ce557445d92d77ca53cf4c620 |
| interface    | admin                            |
| region       | RegionOne                        |
| region_id    | RegionOne                        |
| service_id   | bb8f3d6386cb423eb682147cf2b5ab92 |
| service_name | glance                           |
| service_type | image                            |
| url          | http://controller:9292           |
+--------------+----------------------------------+
 
 
 
## 安装配置 glance 相关软件
 
[root@controller ~]# yum install openstack-glance python-glance python-glanceclient -y
 
 
 
## 编辑 /etc/glance/glance-api.conf 配置文件
 
[root@controller ~]# vim /etc/glance/glance-api.conf
 
[database]
...
connection = mysql://glance:glance@controller/glance
 
 
[keystone_authtoken]
...
auth_uri = http://controller:5000
auth_url = http://controller:35357
auth_plugin = password
project_domain_id = default
user_domain_id = default
project_name = service
username = glance
password = glance
 
[paste_deploy]
...
flavor = keystone
 
 
[glance_store]
...
default_store = file
filesystem_store_datadir = /opt/glance/images/
 
 
[DEFAULT]
...
notification_driver = noop
 
 
[DEFAULT]
...
verbose = True
 
 
 
## 编辑 /etc/glance/glance-registry.conf 配置文件
 
[root@controller ~]# vim /etc/glance/glance-registry.conf
 
 
[database]
...
connection = mysql://glance:glance@controller/glance
 
 
[keystone_authtoken]
...
auth_uri = http://controller:5000
auth_url = http://controller:35357
auth_plugin = password
project_domain_id = default
user_domain_id = default
project_name = service
username = glance
password = glance
 
 
[paste_deploy]
...
flavor = keystone
 
 
[DEFAULT]
...
notification_driver = noop
 
 
[DEFAULT]
...
verbose = True
 
 
## 同步 glance 数据库 
 
[root@controller ~]# su -s /bin/sh -c "glance-manage db_sync" glance
 
 
 
## 启动服务
 
[root@controller ~]# systemctl enable openstack-glance-api.service \
> openstack-glance-registry.service
 
[root@controller ~]# systemctl start openstack-glance-api.service \
> openstack-glance-registry.service
 
 
 
## 验证 glance 服务
 
添加一个环境变量到 脚本中
 
[root@controller ~]# echo "export OS_IMAGE_API_VERSION=2" \
> | tee -a admin-openrc.sh
 
[root@controller ~]# source admin-openrc.sh 
 
 
## 下载一个测试镜像
 
wget http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-disk.img
 
 
## 上传镜像到 服务中
[root@controller ~]# glance image-create --name "cirros" \
> --file cirros-0.3.4-x86_64-disk.img \
> --disk-format qcow2 --container-format bare \
> --visibility public --progress
 
[=============================>] 100%
+------------------+--------------------------------------+
| Property         | Value                                |
+------------------+--------------------------------------+
| checksum         | ee1eca47dc88f4879d8a229cc70a07c6     |
| container_format | bare                                 |
| created_at       | 2015-12-03T05:05:33Z                 |
| disk_format      | qcow2                                |
| id               | 3846ec1a-ad85-4b4d-88d9-17f2374ed41d |
| min_disk         | 0                                    |
| min_ram          | 0                                    |
| name             | cirros                               |
| owner            | 0d1a69b17e444cb3b4884529b6bdb372     |
| protected        | False                                |
| size             | 13287936                             |
| status           | active                               |
| tags             | []                                   |
| updated_at       | 2015-12-03T05:05:33Z                 |
| virtual_size     | None                                 |
| visibility       | public                               |
+------------------+--------------------------------------+
 
 
[root@controller ~]# glance image-list
+--------------------------------------+--------+
| ID                                   | Name   |
+--------------------------------------+--------+
| 3846ec1a-ad85-4b4d-88d9-17f2374ed41d | cirros |
+--------------------------------------+--------+
 
 
 
 
 
四、安装配置 Computer server 
 
 
## 添加数据库 与 用户
 
[root@controller ~]# mysql -u root -p
Enter password: 
 
MariaDB [(none)]> CREATE DATABASE nova;
 
MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' \
    -> IDENTIFIED BY 'nova'; 
 
MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' \
    -> IDENTIFIED BY 'nova'; 
 
 
## 创建 nova 用户
 
[root@controller ~]# source admin-openrc.sh
 
[root@controller ~]# openstack user create --domain default --password-prompt nova
User Password:
Repeat User Password:
+-----------+----------------------------------+
| Field     | Value                            |
+-----------+----------------------------------+
| domain_id | default                          |
| enabled   | True                             |
| id        | 05dfb9b8091b4d708455281540a030d1 |
| name      | nova                             |
+-----------+----------------------------------+
 
## 关联 到 role
 
[root@controller ~]# openstack role add --project service --user nova admin
 
 
## 创建 nova service 
[root@controller ~]# openstack service create --name nova \
> --description "OpenStack Compute" compute
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | OpenStack Compute                |
| enabled     | True                             |
| id          | 1f73377bd0bc4f208ca6c904a71e6279 |
| name        | nova                             |
| type        | compute                          |
+-------------+----------------------------------+
 
 
## 创建 Compute service API 
 
[root@controller ~]# openstack endpoint create --region RegionOne \
> compute public http://controller:8774/v2/%\(tenant_id\)s
+--------------+-----------------------------------------+
| Field        | Value                                   |
+--------------+-----------------------------------------+
| enabled      | True                                    |
| id           | b545b7bd81ed4b64b559b905dd3b4532        |
| interface    | public                                  |
| region       | RegionOne                               |
| region_id    | RegionOne                               |
| service_id   | 1f73377bd0bc4f208ca6c904a71e6279        |
| service_name | nova                                    |
| service_type | compute                                 |
| url          | http://controller:8774/v2/%(tenant_id)s |
+--------------+-----------------------------------------+
 
 
[root@controller ~]# openstack endpoint create --region RegionOne \
> compute internal http://controller:8774/v2/%\(tenant_id\)s
+--------------+-----------------------------------------+
| Field        | Value                                   |
+--------------+-----------------------------------------+
| enabled      | True                                    |
| id           | 5b23e9f26e094f8f99a4416a085b6fc8        |
| interface    | internal                                |
| region       | RegionOne                               |
| region_id    | RegionOne                               |
| service_id   | 1f73377bd0bc4f208ca6c904a71e6279        |
| service_name | nova                                    |
| service_type | compute                                 |
| url          | http://controller:8774/v2/%(tenant_id)s |
+--------------+-----------------------------------------+
 
 
 
[root@controller ~]# openstack endpoint create --region RegionOne \
> compute admin http://controller:8774/v2/%\(tenant_id\)s
+--------------+-----------------------------------------+
| Field        | Value                                   |
+--------------+-----------------------------------------+
| enabled      | True                                    |
| id           | 77638cfde23049cd9bf1c06347385562        |
| interface    | admin                                   |
| region       | RegionOne                               |
| region_id    | RegionOne                               |
| service_id   | 1f73377bd0bc4f208ca6c904a71e6279        |
| service_name | nova                                    |
| service_type | compute                                 |
| url          | http://controller:8774/v2/%(tenant_id)s |
+--------------+-----------------------------------------+
 
 
 
##  controller 安装软件
 
[root@computer1 ~]# yum install openstack-nova-api openstack-nova-cert \
> openstack-nova-conductor openstack-nova-console \
> openstack-nova-novncproxy openstack-nova-scheduler \
> python-novaclient
 
 
## 编辑 /etc/nova/nova.conf  配置文件
 
 
[database]
...
connection = mysql://nova:nova@controller/nova
 
 
[DEFAULT]
...
rpc_backend = rabbit
my_ip = 10.6.17.11
auth_strategy = keystone
network_api_class = nova.network.neutronv2.api.API
security_group_api = neutron
linuxnet_interface_driver = nova.network.linux_net.NeutronLinuxBridgeInterfaceDriver
firewall_driver = nova.virt.firewall.NoopFirewallDriver
enabled_apis=osapi_compute,metadata
verbose = True
 
 
[oslo_messaging_rabbit]
...
rabbit_host = controller
rabbit_userid = openstack
rabbit_password = openstack
 
 
[keystone_authtoken]
...
auth_uri = http://controller:5000
auth_url = http://controller:35357
auth_plugin = password
project_domain_id = default
user_domain_id = default
project_name = service
username = nova
password = nova
 
 
 
[glance]
...
host = controller
 
 
 
[oslo_concurrency]
...
lock_path = /var/lib/nova/tmp
 
 
 
 
 
## 同步数据库
 
su -s /bin/sh -c "nova-manage db sync" nova
 
 
## 启动服务
 
[root@controller ~]# systemctl enable openstack-nova-api.service \
> openstack-nova-cert.service openstack-nova-consoleauth.service \
> openstack-nova-scheduler.service openstack-nova-conductor.service \
> openstack-nova-novncproxy.service
 
 
[root@controller ~]# systemctl start openstack-nova-api.service \
> openstack-nova-cert.service openstack-nova-consoleauth.service \
> openstack-nova-scheduler.service openstack-nova-conductor.service \
> openstack-nova-novncproxy.service
 
 
 
 
## 安装配置 计算机节点 Compute 节点
 
yum install openstack-nova-compute sysfsutils
 
 
## 编辑 /etc/nova/nova.conf 配置文件
 
 
 
[DEFAULT]
...
rpc_backend = rabbit
auth_strategy = keystone
my_ip = 10.6.17.12
network_api_class = nova.network.neutronv2.api.API
security_group_api = neutron
linuxnet_interface_driver = nova.network.linux_net.NeutronLinuxBridgeInterfaceDriver
firewall_driver = nova.virt.firewall.NoopFirewallDriver
verbose = True
 
 
[oslo_messaging_rabbit]
...
rabbit_host = controller
rabbit_userid = openstack
rabbit_password = openstack
 
 
[keystone_authtoken]
...
auth_uri = http://controller:5000
auth_url = http://controller:35357
auth_plugin = password
project_domain_id = default
user_domain_id = default
project_name = service
username = nova
password = nova
 
 
[glance]
...
host = controller
 
 
[oslo_concurrency]
...
lock_path = /var/lib/nova/tmp
 
 
 
## 查看否支持 虚拟化 大于0 表示支持, 大于0 不需要添加配置支持
 
[root@computer1 ~]# egrep -c '(vmx|svm)' /proc/cpuinfo
8
 
 
## 如果 硬件不支持虚拟化 则添加虚拟化支持
 
[root@computer1 ~]# vim /etc/nova/nova.conf
 
[libvirt]
...
virt_type = qemu
 
 
 
 
## 启动服务
 
[root@computer1 ~]# systemctl enable libvirtd.service openstack-nova-compute.service
[root@computer1 ~]# systemctl start libvirtd.service openstack-nova-compute.service
 
 
 
## 验证 服务 
 
[root@controller ~]# nova service-list
+----+------------------+------------+----------+---------+-------+----------------------------+-----------------+
| Id | Binary           | Host       | Zone     | Status  | State | Updated_at                 | Disabled Reason |
+----+------------------+------------+----------+---------+-------+----------------------------+-----------------+
| 1  | nova-consoleauth | controller | internal | enabled | up    | 2015-12-03T07:06:27.000000 | -               |
| 2  | nova-conductor   | controller | internal | enabled | up    | 2015-12-03T07:06:27.000000 | -               |
| 5  | nova-cert        | controller | internal | enabled | up    | 2015-12-03T07:06:27.000000 | -               |
| 6  | nova-scheduler   | controller | internal | enabled | up    | 2015-12-03T07:06:27.000000 | -               |
| 7  | nova-compute     | computer1  | nova     | enabled | up    | 2015-12-03T07:06:31.000000 | -               |
+----+------------------+------------+----------+---------+-------+----------------------------+-----------------+
 
 
[root@controller ~]# nova endpoints
 
+-----------+------------------------------------------------------------+
| nova      | Value                                                      |
+-----------+------------------------------------------------------------+
| id        | 5b23e9f26e094f8f99a4416a085b6fc8                           |
| interface | internal                                                   |
| region    | RegionOne                                                  |
| region_id | RegionOne                                                  |
| url       | http://controller:8774/v2/0d1a69b17e444cb3b4884529b6bdb372 |
+-----------+------------------------------------------------------------+
+-----------+------------------------------------------------------------+
| nova      | Value                                                      |
+-----------+------------------------------------------------------------+
| id        | 77638cfde23049cd9bf1c06347385562                           |
| interface | admin                                                      |
| region    | RegionOne                                                  |
| region_id | RegionOne                                                  |
| url       | http://controller:8774/v2/0d1a69b17e444cb3b4884529b6bdb372 |
+-----------+------------------------------------------------------------+
+-----------+------------------------------------------------------------+
| nova      | Value                                                      |
+-----------+------------------------------------------------------------+
| id        | b545b7bd81ed4b64b559b905dd3b4532                           |
| interface | public                                                     |
| region    | RegionOne                                                  |
| region_id | RegionOne                                                  |
| url       | http://controller:8774/v2/0d1a69b17e444cb3b4884529b6bdb372 |
+-----------+------------------------------------------------------------+
 
 
+-----------+----------------------------------+
| keystone  | Value                            |
+-----------+----------------------------------+
| id        | 08e839319e5143229abc893e413e0dcc |
| interface | admin                            |
| region    | RegionOne                        |
| region_id | RegionOne                        |
| url       | http://controller:35357/v2.0     |
+-----------+----------------------------------+
+-----------+----------------------------------+
| keystone  | Value                            |
+-----------+----------------------------------+
| id        | 1a6e4df9f7fb444f98da5274c4b45916 |
| interface | internal                         |
| region    | RegionOne                        |
| region_id | RegionOne                        |
| url       | http://controller:5000/v2.0      |
+-----------+----------------------------------+
+-----------+----------------------------------+
| keystone  | Value                            |
+-----------+----------------------------------+
| id        | 6d1d13e2a74940338337e2faeb404291 |
| interface | public                           |
| region    | RegionOne                        |
| region_id | RegionOne                        |
| url       | http://controller:5000/v2.0      |
+-----------+----------------------------------+
 
 
+-----------+----------------------------------+
| glance    | Value                            |
+-----------+----------------------------------+
| id        | 04fac23ce557445d92d77ca53cf4c620 |
| interface | admin                            |
| region    | RegionOne                        |
| region_id | RegionOne                        |
| url       | http://controller:9292           |
+-----------+----------------------------------+
+-----------+----------------------------------+
| glance    | Value                            |
+-----------+----------------------------------+
| id        | 290dc30efb6b45c9bb654252aaf8b878 |
| interface | internal                         |
| region    | RegionOne                        |
| region_id | RegionOne                        |
| url       | http://controller:9292           |
+-----------+----------------------------------+
+-----------+----------------------------------+
| glance    | Value                            |
+-----------+----------------------------------+
| id        | ac858877305542679883df3afb974a95 |
| interface | public                           |
| region    | RegionOne                        |
| region_id | RegionOne                        |
| url       | http://controller:9292           |
+-----------+----------------------------------+
 
 
[root@controller ~]# nova image-list
+--------------------------------------+--------+--------+--------+
| ID                                   | Name   | Status | Server |
+--------------------------------------+--------+--------+--------+
| 3846ec1a-ad85-4b4d-88d9-17f2374ed41d | cirros | ACTIVE |        |
+--------------------------------------+--------+--------+--------+
 
 
 
 
 
五、安装配置 Network server 
 
## 添加数据库、用户
 
[root@controller ~]# mysql -u root -p
Enter password: 
 
MariaDB [(none)]> CREATE DATABASE neutron;
 
MariaDB [(none)]> GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost' \
    -> IDENTIFIED BY 'neutron'; 
 
MariaDB [(none)]> GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' \
    -> IDENTIFIED BY 'neutron';
 
 
## 添加 openstack 用户
 
[root@controller ~]# openstack user create --domain default --password-prompt neutron
User Password:
Repeat User Password:
+-----------+----------------------------------+
| Field     | Value                            |
+-----------+----------------------------------+
| domain_id | default                          |
| enabled   | True                             |
| id        | 04b2950e0b96451494a4391c5c7bcd2e |
| name      | neutron                          |
+-----------+----------------------------------+
 
 
[root@controller ~]# openstack role add --project service --user neutron admin
 
 
 
## 添加 neutron service
 
[root@controller ~]# openstack service create --name neutron \
> --description "OpenStack Networking" network
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | OpenStack Networking             |
| enabled     | True                             |
| id          | b9ca3cbea4df4966bbfff153e676d404 |
| name        | neutron                          |
| type        | network                          |
+-------------+----------------------------------+
 
 
## 添加 network server API
 
[root@controller ~]# openstack endpoint create --region RegionOne \
> network public http://controller:9696
+--------------+----------------------------------+
| Field        | Value                            |
+--------------+----------------------------------+
| enabled      | True                             |
| id           | e741a15b8f4f424d8ac605083d079911 |
| interface    | public                           |
| region       | RegionOne                        |
| region_id    | RegionOne                        |
| service_id   | b9ca3cbea4df4966bbfff153e676d404 |
| service_name | neutron                          |
| service_type | network                          |
| url          | http://controller:9696           |
+--------------+----------------------------------+
 
 
[root@controller ~]# openstack endpoint create --region RegionOne \
> network internal http://controller:9696
+--------------+----------------------------------+
| Field        | Value                            |
+--------------+----------------------------------+
| enabled      | True                             |
| id           | ba9df6bd296f4f42bd24588b292ed54b |
| interface    | internal                         |
| region       | RegionOne                        |
| region_id    | RegionOne                        |
| service_id   | b9ca3cbea4df4966bbfff153e676d404 |
| service_name | neutron                          |
| service_type | network                          |
| url          | http://controller:9696           |
+--------------+----------------------------------+
 
 
[root@controller ~]# openstack endpoint create --region RegionOne \
> network admin http://controller:9696
+--------------+----------------------------------+
| Field        | Value                            |
+--------------+----------------------------------+
| enabled      | True                             |
| id           | ba86430058a243da8c50ab9d42178eab |
| interface    | admin                            |
| region       | RegionOne                        |
| region_id    | RegionOne                        |
| service_id   | b9ca3cbea4df4966bbfff153e676d404 |
| service_name | neutron                          |
| service_type | network                          |
| url          | http://controller:9696           |
+--------------+----------------------------------+
 
 
## 安装配置 network 软件  ( 我这里选择的是 Networking Option 1: Provider networks  这种网络方式 )
 
 
[root@controller ~]# yum install openstack-neutron openstack-neutron-ml2 \
> openstack-neutron-linuxbridge python-neutronclient ebtables ipset
 
 
## 修改配置文件 /etc/neutron/neutron.conf 
 
 
[database]
...
connection = mysql://neutron:neutron@controller/neutron
 
 
 
[DEFAULT]
...
core_plugin = ml2
service_plugins =
rpc_backend = rabbit
auth_strategy = keystone
notify_nova_on_port_status_changes = True
notify_nova_on_port_data_changes = True
nova_url = http://controller:8774/v2
verbose = True
 
 
[oslo_messaging_rabbit]
...
rabbit_host = controller
rabbit_userid = openstack
rabbit_password = openstack
 
 
 
## 检查 [keystone_authtoken] 下面配置,注释掉其他所有的选项只使用下面
 
[keystone_authtoken]
...
auth_uri = http://controller:5000
auth_url = http://controller:35357
auth_plugin = password
project_domain_id = default
user_domain_id = default
project_name = service
username = neutron
password = neutron
 
 
 
 
[nova]
...
auth_url = http://controller:35357
auth_plugin = password
project_domain_id = default
user_domain_id = default
region_name = RegionOne
project_name = service
username = nova
password = nova
 
 
 
[oslo_concurrency]
...
lock_path = /var/lib/neutron/tmp
 
 
 
##  配置 Layer 2 (ML2) 插件
 
编辑 /etc/neutron/plugins/ml2/ml2_conf.ini  配置文件
 
[root@controller ~]# vim /etc/neutron/plugins/ml2/ml2_conf.ini
 
 
[ml2]
...
type_drivers = flat,vlan
tenant_network_types =
mechanism_drivers = linuxbridge
extension_drivers = port_security
 
 
[ml2_type_flat]
...
flat_networks = public
 
 
 
[securitygroup]
...
enable_ipset = True
 
 
 
## 配置Linux bridge
 
编辑 /etc/neutron/plugins/ml2/linuxbridge_agent.ini  配置文件
 
 
 
[linux_bridge]
physical_interface_mappings = public:em2
 
 
 
[vxlan]
enable_vxlan = False
 
 
 
[agent]
...
prevent_arp_spoofing = True
 
 
 
[securitygroup]
...
enable_security_group = True
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
 
 
 
## 配置 DHCP 服务
 
编辑 /etc/neutron/dhcp_agent.ini 配置文件
 
 
[DEFAULT]
...
interface_driver = neutron.agent.linux.interface.BridgeInterfaceDriver
dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq
enable_isolated_metadata = True
verbose = True
 
 
 
## 配置 metadata 服务
 
编辑 /etc/neutron/metadata_agent.ini 配置文件  注释掉 [DEFAULT] 下面的选项,添加如下选项
[metadata_proxy_shared_secret = METADATA_SECRET   # METADATA_SECRET 替换为自己的密码 ]
 
[DEFAULT]
...
auth_uri = http://controller:5000
auth_url = http://controller:35357
auth_region = RegionOne
auth_plugin = password
project_domain_id = default
user_domain_id = default
project_name = service
username = neutron
password = neutron
nova_metadata_ip = controller
metadata_proxy_shared_secret = metadata
verbose = True
 
 
 
## 配置 Networking 服务
 
编辑 /etc/nova/nova.conf 配置文件
[metadata_proxy_shared_secret = METADATA_SECRET   # METADATA_SECRET 替换为自己的密码 ]
 
 
[neutron]
...
url = http://controller:9696
auth_url = http://controller:35357
auth_plugin = password
project_domain_id = default
user_domain_id = default
region_name = RegionOne
project_name = service
username = neutron
password = neutron
 
service_metadata_proxy = True
metadata_proxy_shared_secret = metadata
 
 
 
## 创建一些链接
 
[root@controller ~]# ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini
 
 
## 同步数据库
 
[root@controller ~]# 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
 
 
INFO  [alembic.runtime.migration] Context impl MySQLImpl.
........
  OK
  
 
  
## 重启 api 服务
 
[root@controller ~]# systemctl restart openstack-nova-api.service
 
 
## 启动 network 服务
 
 
[root@controller ~]# systemctl enable neutron-server.service \
> neutron-linuxbridge-agent.service neutron-dhcp-agent.service \
> neutron-metadata-agent.service
 
 
[root@controller ~]# systemctl start neutron-server.service \
> neutron-linuxbridge-agent.service neutron-dhcp-agent.service \
> neutron-metadata-agent.service
 
 
 
## 配置 Compute 节点的 network 服务
 
## 安装 network 软件
 
[root@computer1 ~]# yum install openstack-neutron openstack-neutron-linuxbridge ebtables ipset
 
 
 
## 编辑 /etc/neutron/neutron.conf 配置文件
 
注释掉 [database] 部分的所有选项,计算节点 不连接 数据库
 
 
[DEFAULT]
...
rpc_backend = rabbit
auth_strategy = keystone
verbose = True
 
 
[oslo_messaging_rabbit]
...
rabbit_host = controller
rabbit_userid = openstack
rabbit_password = openstack
 
 
 
[keystone_authtoken]
...
auth_uri = http://controller:5000
auth_url = http://controller:35357
auth_plugin = password
project_domain_id = default
user_domain_id = default
project_name = service
username = neutron
password = neutron
 
 
注释掉 [keystone_authtoken]  其他部分的选项。
 
 
[oslo_concurrency]
...
lock_path = /var/lib/neutron/tmp
 
 
 
##  安装 network 服务
 
## 配置 Linux bridge 服务
 
编辑  /etc/neutron/plugins/ml2/linuxbridge_agent.ini 配置文件
 
 
[linux_bridge]
physical_interface_mappings = public:em2
 
 
[vxlan]
enable_vxlan = False
 
 
[agent]
...
prevent_arp_spoofing = True
 
 
[securitygroup]
...
enable_security_group = True
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
 
 
 
## 配置 Networking 服务
 
## 编辑 /etc/nova/nova.conf 配置文件
 
 
[neutron]
...
url = http://controller:9696
auth_url = http://controller:35357
auth_plugin = password
project_domain_id = default
user_domain_id = default
region_name = RegionOne
project_name = service
username = neutron
password = neutron
 
 
 
 
## 配置链接, 并启动服务
 
[root@computer1 ~]# ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini
[root@computer1 ~]# systemctl restart openstack-nova-compute.service
[root@computer1 ~]# systemctl enable neutron-linuxbridge-agent.service
[root@computer1 ~]# systemctl start neutron-linuxbridge-agent.service
 
 
 
## 最后 验证服务
 
[root@controller ~]# source admin-openrc.sh
 
[root@controller ~]# neutron ext-list
+-----------------------+--------------------------+
| alias                 | name                     |
+-----------------------+--------------------------+
| flavors               | Neutron Service Flavors  |
| security-group        | security-group           |
| dns-integration       | DNS Integration          |
| net-mtu               | Network MTU              |
| port-security         | Port Security            |
| binding               | Port Binding             |
| provider              | Provider Network         |
| agent                 | agent                    |
| quotas                | Quota management support |
| subnet_allocation     | Subnet Allocation        |
| dhcp_agent_scheduler  | DHCP Agent Scheduler     |
| rbac-policies         | RBAC Policies            |
| external-net          | Neutron external network |
| multi-provider        | Multi Provider Network   |
| allowed-address-pairs | Allowed Address Pairs    |
| extra_dhcp_opt        | Neutron Extra DHCP opts  |
+-----------------------+--------------------------+
 
 
[root@controller ~]# neutron agent-list
+--------------------------------------+--------------------+------------+-------+----------------+---------------------------+
| id                                   | agent_type         | host       | alive | admin_state_up | binary                    |
+--------------------------------------+--------------------+------------+-------+----------------+---------------------------+
| 3083cb45-f248-4de5-828e-38d9bc961814 | Linux bridge agent | controller | :-)   | True           | neutron-linuxbridge-agent |
| 3b2564c7-e797-4e20-a257-166ade425655 | Linux bridge agent | computer1  | :-)   | True           | neutron-linuxbridge-agent |
| b61a8667-416d-4ed5-b14d-87d568bab59f | Metadata agent     | controller | :-)   | True           | neutron-metadata-agent    |
| f87d6cc0-4277-4259-96ed-638294503236 | DHCP agent         | controller | :-)   | True           | neutron-dhcp-agent        |
+--------------------------------------+--------------------+------------+-------+----------------+---------------------------+
 
 
 
 
 
六、安装配置 dashboard
 
[root@controller ~]# yum install openstack-dashboard -y
 
## 编辑/etc/openstack-dashboard/local_settings 配置文件
 
[root@controller ~]# vim /etc/openstack-dashboard/local_settings 
 
OPENSTACK_HOST = "controller"
 
ALLOWED_HOSTS = ['*', ]
 
CACHES = {
    'default': {
         'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
         'LOCATION': '127.0.0.1:11211',
    }
}
 
 
OPENSTACK_KEYSTONE_DEFAULT_ROLE = "user"
 
TIME_ZONE = "Asia/Shanghai"
 
 
## 启动服务
[root@controller ~]# systemctl enable httpd.service memcached.service
 
[root@controller ~]# systemctl restart httpd.service memcached.service
 
 
## 验证服务
 
浏览器 访问 http://controller/dashboard 
 
帐号密码为 admin 
 
 
 
 
七、 安装配置 Block Storage service
 
控制端
 
## 添加数据库
 
[root@controller ~]# mysql -u root -p
Enter password: 
 
MariaDB [(none)]> CREATE DATABASE cinder;
 
MariaDB [(none)]> GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'localhost' \
    -> IDENTIFIED BY 'cinder'; 
 
MariaDB [(none)]> GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'%' \
    -> IDENTIFIED BY 'cinder';
 
 
## 添加 openstack  cinder用户
 
[root@controller ~]# source admin-openrc.sh
 
[root@controller ~]# openstack user create --domain default --password-prompt cinder
User Password:
Repeat User Password:
+-----------+----------------------------------+
| Field     | Value                            |
+-----------+----------------------------------+
| domain_id | default                          |
| enabled   | True                             |
| id        | 212ced82b0a844f099a80a712786740c |
| name      | cinder                           |
+-----------+----------------------------------+
 
 
[root@controller ~]# openstack role add --project service --user cinder admin
 
 
## 添加 cinder v2 service 服务
 
[root@controller ~]# openstack service create --name cinder \
> --description "OpenStack Block Storage" volume
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | OpenStack Block Storage          |
| enabled     | True                             |
| id          | 6af1b2a1843f42058b03368960ae6b09 |
| name        | cinder                           |
| type        | volume                           |
+-------------+----------------------------------+
 
 
[root@controller ~]# openstack service create --name cinderv2 \
> --description "OpenStack Block Storage" volumev2
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | OpenStack Block Storage          |
| enabled     | True                             |
| id          | 3e42f0d7868745579ce658d88eef4c67 |
| name        | cinderv2                         |
| type        | volumev2                         |
+-------------+----------------------------------+
 
 
## 添加 Block Storage service API
 
[root@controller ~]# openstack endpoint create --region RegionOne \
> volume public http://controller:8776/v1/%\(tenant_id\)s
+--------------+-----------------------------------------+
| Field        | Value                                   |
+--------------+-----------------------------------------+
| enabled      | True                                    |
| id           | 14ee6bd40f08489bb314e5cc5fa39a80        |
| interface    | public                                  |
| region       | RegionOne                               |
| region_id    | RegionOne                               |
| service_id   | 6af1b2a1843f42058b03368960ae6b09        |
| service_name | cinder                                  |
| service_type | volume                                  |
| url          | http://controller:8776/v1/%(tenant_id)s |
+--------------+-----------------------------------------+
 
 
 
[root@controller ~]# openstack endpoint create --region RegionOne \
> volume internal http://controller:8776/v1/%\(tenant_id\)s
+--------------+-----------------------------------------+
| Field        | Value                                   |
+--------------+-----------------------------------------+
| enabled      | True                                    |
| id           | 5895f13f971a4ee390ef104ddbe7422b        |
| interface    | internal                                |
| region       | RegionOne                               |
| region_id    | RegionOne                               |
| service_id   | 6af1b2a1843f42058b03368960ae6b09        |
| service_name | cinder                                  |
| service_type | volume                                  |
| url          | http://controller:8776/v1/%(tenant_id)s |
+--------------+-----------------------------------------+
 
 
 
[root@controller ~]# openstack endpoint create --region RegionOne \
> volume admin http://controller:8776/v1/%\(tenant_id\)s
+--------------+-----------------------------------------+
| Field        | Value                                   |
+--------------+-----------------------------------------+
| enabled      | True                                    |
| id           | e4993535c6504f95862cab4f7ab7cccb        |
| interface    | admin                                   |
| region       | RegionOne                               |
| region_id    | RegionOne                               |
| service_id   | 6af1b2a1843f42058b03368960ae6b09        |
| service_name | cinder                                  |
| service_type | volume                                  |
| url          | http://controller:8776/v1/%(tenant_id)s |
+--------------+-----------------------------------------+
 
 
 
[root@controller ~]# openstack endpoint create --region RegionOne \
> volumev2 public http://controller:8776/v2/%\(tenant_id\)s
+--------------+-----------------------------------------+
| Field        | Value                                   |
+--------------+-----------------------------------------+
| enabled      | True                                    |
| id           | 8696e7142c17488e973c653713c14379        |
| interface    | public                                  |
| region       | RegionOne                               |
| region_id    | RegionOne                               |
| service_id   | 3e42f0d7868745579ce658d88eef4c67        |
| service_name | cinderv2                                |
| service_type | volumev2                                |
| url          | http://controller:8776/v2/%(tenant_id)s |
+--------------+-----------------------------------------+
 
 
 
[root@controller ~]# openstack endpoint create --region RegionOne \
> volumev2 internal http://controller:8776/v2/%\(tenant_id\)s
+--------------+-----------------------------------------+
| Field        | Value                                   |
+--------------+-----------------------------------------+
| enabled      | True                                    |
| id           | da6b9e902a4d413dadd951ec751b1082        |
| interface    | internal                                |
| region       | RegionOne                               |
| region_id    | RegionOne                               |
| service_id   | 3e42f0d7868745579ce658d88eef4c67        |
| service_name | cinderv2                                |
| service_type | volumev2                                |
| url          | http://controller:8776/v2/%(tenant_id)s |
+--------------+-----------------------------------------+
 
 
 
[root@controller ~]# openstack endpoint create --region RegionOne \
> volumev2 admin http://controller:8776/v2/%\(tenant_id\)s
+--------------+-----------------------------------------+
| Field        | Value                                   |
+--------------+-----------------------------------------+
| enabled      | True                                    |
| id           | 0cfa27d0a5b946e8b35901d242ac165f        |
| interface    | admin                                   |
| region       | RegionOne                               |
| region_id    | RegionOne                               |
| service_id   | 3e42f0d7868745579ce658d88eef4c67        |
| service_name | cinderv2                                |
| service_type | volumev2                                |
| url          | http://controller:8776/v2/%(tenant_id)s |
+--------------+-----------------------------------------+
 
 
 
## 安装以及配置
 
[root@controller ~]# yum install openstack-cinder python-cinderclient -y
 
 
## 编辑 /etc/cinder/cinder.conf 配置文件
 
[root@controller ~]# vim /etc/cinder/cinder.conf
 
 
 
[database]
...
connection = mysql://cinder:cinder@controller/cinder
 
 
 
[DEFAULT]
...
rpc_backend = rabbit
auth_strategy = keystone
my_ip = 10.6.17.11
verbose = True
 
 
 
[oslo_messaging_rabbit]
...
rabbit_host = controller
rabbit_userid = openstack
rabbit_password = openstack
 
 
 
注释掉 [keystone_authtoken] 其他部分的选项。添加如下内容:
 
[keystone_authtoken]
...
auth_uri = http://controller:5000
auth_url = http://controller:35357
auth_plugin = password
project_domain_id = default
user_domain_id = default
project_name = service
username = cinder
password = cinder
 
 
 
[oslo_concurrency]
...
lock_path = /var/lib/cinder/tmp
 
 
 
 
 
## 同步数据库
 
[root@controller ~]# su -s /bin/sh -c "cinder-manage db sync" cinder
 
 
 
## 编辑  /etc/nova/nova.conf 配置文件
 
[cinder]
os_region_name = RegionOne
 
 
 
## 启动服务
 
[root@controller ~]# systemctl restart openstack-nova-api.service
 
 
[root@controller ~]# systemctl enable openstack-cinder-api.service openstack-cinder-scheduler.service
[root@controller ~]# systemctl start openstack-cinder-api.service openstack-cinder-scheduler.service
 
 
 
 
## Storage 节点操作
 
## 安装软件
[root@block1 ~]# yum install lvm2
 
 
 
## 启动 LVM2 服务
[root@block1 ~]# systemctl enable lvm2-lvmetad.service
[root@block1 ~]# systemctl start lvm2-lvmetad.service
 
 
## 创建分区
 
[root@block1 ~]# fdisk -l
 
磁盘 /dev/sda:599.6 GB, 599550590976 字节,1170997248 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x000e0185
 
   设备 Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     2099199     1048576   83  Linux
/dev/sda2         2099200   211814399   104857600   83  Linux
/dev/sda3       211814400   211830783        8192   82  Linux swap / Solaris
 
 
## 使用 parted 软件,查看分区
[root@block1 ~]# parted /dev/sda
GNU Parted 3.1
使用 /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) p                                                                
Model: Dell Virtual Disk (scsi)
Disk /dev/sda: 600GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags: 
 
Number  Start   End     Size    Type     File system     标志
 1      1049kB  1075MB  1074MB  primary  xfs             启动
 2      1075MB  108GB   107GB   primary  xfs
 3      108GB   108GB   8389kB  primary  linux-swap(v1)
 
 
## 使用 parted 软件, 创建分区
 
(parted) mkpart primary 108GB 208GB                                       
(parted) p                                                                
Model: Dell Virtual Disk (scsi)
Disk /dev/sda: 600GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags: 
 
Number  Start   End     Size    Type     File system     标志
 1      1049kB  1075MB  1074MB  primary  xfs             启动
 2      1075MB  108GB   107GB   primary  xfs
 3      108GB   108GB   8389kB  primary  linux-swap(v1)
 4      108GB   208GB   99.5GB  primary
 
 
[root@block1 ~]# fdisk -l
 
磁盘 /dev/sda:599.6 GB, 599550590976 字节,1170997248 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x000e0185
 
   设备 Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     2099199     1048576   83  Linux
/dev/sda2         2099200   211814399   104857600   83  Linux
/dev/sda3       211814400   211830783        8192   82  Linux swap / Solaris
/dev/sda4       211830784   406249471    97209344   83  Linux
 
 
[root@block1 ~]# pvcreate /dev/sda4 
  Physical volume "/dev/sda4" successfully created
  
 
[root@block1 ~]# vgcreate cinder-volumes /dev/sda4
  Volume group "cinder-volumes" successfully created
 
 
## 编辑 /etc/lvm/lvm.conf  配置文件,添加分区
 
devices {
...
filter = [ "a/sda4/", "r/.*/"]
 
 
 
 
 
## 安装 openstack 软件
 
[root@block1 ~]# yum install openstack-cinder targetcli python-oslo-policy -y
 
 
 
## 编辑 /etc/cinder/cinder.conf 配置文件
 
 
 
[database]
...
connection = mysql://cinder:cinder@controller/cinder
 
 
[DEFAULT]
...
rpc_backend = rabbit
auth_strategy = keystone
my_ip = 10.6.17.13
enabled_backends = lvm
glance_host = controller
verbose = True
volume_driver = cinder.volume.drivers.lvm.LVMVolumeDriver
volume_group = cinder-volumes
iscsi_protocol = iscsi
iscsi_helper = lioadm
 
 
[oslo_messaging_rabbit]
...
rabbit_host = controller
rabbit_userid = openstack
rabbit_password = openstack
 
 
 
# 注释掉[keystone_authtoken]下其他所有的选项 只使用下面
 
[keystone_authtoken]
...
auth_uri = http://controller:5000
auth_url = http://controller:35357
auth_plugin = password
project_domain_id = default
user_domain_id = default
project_name = service
username = cinder
password = cinder
 
 
 
 
[oslo_concurrency]
...
lock_path = /var/lib/cinder/tmp
 
 
 
 
## 启动 服务
 
[root@block1 ~]# systemctl enable openstack-cinder-volume.service target.service
 
[root@block1 ~]# systemctl start openstack-cinder-volume.service target.service
 
 
 
## 验证服务
 
[root@controller ~]# source admin-openrc.sh
 
[root@controller ~]# cinder service-list
+------------------+------------+------+---------+-------+----------------------------+-----------------+
|      Binary      |    Host    | Zone |  Status | State |         Updated_at         | Disabled Reason |
+------------------+------------+------+---------+-------+----------------------------+-----------------+
| cinder-scheduler | controller | nova | enabled |   up  | 2015-12-04T07:35:57.000000 |        -        |
|  cinder-volume   | block1@lvm | nova | enabled |   up  | 2015-12-04T07:36:03.000000 |        -        |
+------------------+------------+------+---------+-------+----------------------------+-----------------+
 
 
 
八、 安装配置 Object Storage 服务
 
 
## 创建 openstack 帐号
 
[root@controller ~]# openstack user create --domain default --password-prompt swift
User Password:
Repeat User Password:
+-----------+----------------------------------+
| Field     | Value                            |
+-----------+----------------------------------+
| domain_id | default                          |
| enabled   | True                             |
| id        | 7a2915af03464268ab80ef732aa5ba93 |
| name      | swift                            |
+-----------+----------------------------------+
 
 
[root@controller ~]# openstack role add --project service --user swift admin
 
 
## 创建 swift service 
 
[root@controller ~]# openstack service create --name swift \
> --description "OpenStack Object Storage" object-store
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | OpenStack Object Storage         |
| enabled     | True                             |
| id          | f7b97bc04bd24d67b12694bb3004843b |
| name        | swift                            |
| type        | object-store                     |
+-------------+----------------------------------+
 
 
## 创建 Object Storage service API 
 
[root@controller ~]# openstack endpoint create --region RegionOne \
> object-store public http://controller:8080/v1/AUTH_%\(tenant_id\)s
+--------------+----------------------------------------------+
| Field        | Value                                        |
+--------------+----------------------------------------------+
| enabled      | True                                         |
| id           | f8d7a017753947d981e0f42aa5fe4bde             |
| interface    | public                                       |
| region       | RegionOne                                    |
| region_id    | RegionOne                                    |
| service_id   | f7b97bc04bd24d67b12694bb3004843b             |
| service_name | swift                                        |
| service_type | object-store                                 |
| url          | http://controller:8080/v1/AUTH_%(tenant_id)s |
+--------------+----------------------------------------------+
 
 
 
[root@controller ~]# openstack endpoint create --region RegionOne \
> object-store internal http://controller:8080/v1/AUTH_%\(tenant_id\)s
+--------------+----------------------------------------------+
| Field        | Value                                        |
+--------------+----------------------------------------------+
| enabled      | True                                         |
| id           | 6d125e48860b4f948300b412f744b23f             |
| interface    | internal                                     |
| region       | RegionOne                                    |
| region_id    | RegionOne                                    |
| service_id   | f7b97bc04bd24d67b12694bb3004843b             |
| service_name | swift                                        |
| service_type | object-store                                 |
| url          | http://controller:8080/v1/AUTH_%(tenant_id)s |
+--------------+----------------------------------------------+
 
 
 
[root@controller ~]# openstack endpoint create --region RegionOne \
> object-store admin http://controller:8080/v1
+--------------+----------------------------------+
| Field        | Value                            |
+--------------+----------------------------------+
| enabled      | True                             |
| id           | cdbea58743c946cca41c98682ea98793 |
| interface    | admin                            |
| region       | RegionOne                        |
| region_id    | RegionOne                        |
| service_id   | f7b97bc04bd24d67b12694bb3004843b |
| service_name | swift                            |
| service_type | object-store                     |
| url          | http://controller:8080/v1        |
+--------------+----------------------------------+
 
 
 
## 安装配置软件
 
[root@controller ~]# yum install openstack-swift-proxy python-swiftclient \
> python-keystoneclient python-keystonemiddleware \
> memcached
 
 
 
## 下载swift配置文件
 
[root@controller ~]# curl -o /etc/swift/proxy-server.conf https://git.openstack.org/cgit/openstack/swift/plain/etc/proxy-server.conf-sample?h=stable/liberty
 
 
##编辑 /etc/swift/proxy-server.conf 配置文件
 
 
[DEFAULT]
...
bind_port = 8080
user = swift
swift_dir = /etc/swift
 
 
[pipeline:main]
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
 
 
[app:proxy-server]
use = egg:swift#proxy
...
account_autocreate = true
 
 
[filter:keystoneauth]
use = egg:swift#keystoneauth
...
operator_roles = admin,user
 
 
#注释掉[filter:authtoken] 其他所有的选项只使用下面
 
[filter:authtoken]
paste.filter_factory = keystonemiddleware.auth_token:filter_factory
...
auth_uri = http://controller:5000
auth_url = http://controller:35357
auth_plugin = password
project_domain_id = default
user_domain_id = default
project_name = service
username = swift
password = swift
delay_auth_decision = true
 
 
 
[filter:cache]
use = egg:swift#memcache
...
memcache_servers = 127.0.0.1:11211
 
 
 
## Object storage 节点配置
 
## 安装配置软件
 
[root@object1 ~]# yum install xfsprogs rsync -y
 
 
[root@object1 ~]# fdisk -l
 
磁盘 /dev/sda:599.6 GB, 599550590976 字节,1170997248 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x000bbc86
 
   设备 Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048   204802047   102400000   83  Linux
/dev/sda2       204802048   221186047     8192000   82  Linux swap / Solaris
/dev/sda3       221186048   611327999   195070976   83  Linux
/dev/sda4       611328000  1170997247   279834624   83  Linux
 
 
[root@object1 ~]# mkfs.xfs -f /dev/sda3
[root@object1 ~]# mkfs.xfs -f /dev/sda4
 
[root@object1 ~]# mkdir -p /opt/node/sda3
[root@object1 ~]# mkdir -p /opt/node/sda4
 
 
## 编辑 /etc/fstab  让系统启动自动加载
 
/dev/sda3 /opt/node/sda3 xfs noatime,nodiratime,nobarrier,logbufs=8 0 2
/dev/sda4 /opt/node/sda4 xfs noatime,nodiratime,nobarrier,logbufs=8 0 2
 
 
## 挂载硬盘
[root@object1 ~]# mount -a
 
 
 
[root@object1 ~]# df -h
文件系统        容量  已用  可用 已用% 挂载点
/dev/sda1        98G  1.2G   97G    2% /
devtmpfs        7.8G     0  7.8G    0% /dev
tmpfs           7.8G     0  7.8G    0% /dev/shm
tmpfs           7.8G  8.4M  7.8G    1% /run
tmpfs           7.8G     0  7.8G    0% /sys/fs/cgroup
/dev/sda3       186G   33M  186G    1% /opt/node/sda3
/dev/sda4       267G   33M  267G    1% /opt/node/sda4
 
 
 
 
## 编辑 /etc/rsyncd.conf 配置文件
 
[root@object1 ~]# vim /etc/rsyncd.conf
 
--------------------------------------------------------
uid = swift
gid = swift
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
address = 10.6.17.14
 
[account]
max connections = 2
path = /opt/node/
read only = false
lock file = /var/lock/account.lock
 
[container]
max connections = 2
path = /opt/node/
read only = false
lock file = /var/lock/container.lock
 
[object]
max connections = 2
path = /opt/node/
read only = false
lock file = /var/lock/object.lock
 
--------------------------------------------------------
 
 
 
 
## 启动服务
 
[root@object1 ~]# systemctl enable rsyncd.service
[root@object1 ~]# systemctl start rsyncd.service
 
 
 
## 安装配置软件
[root@object1 ~]# yum install openstack-swift-account openstack-swift-container \
> openstack-swift-object
 
 
## 下载配置文件
[root@object1 ~]# curl -o /etc/swift/account-server.conf https://git.openstack.org/cgit/openstack/swift/plain/etc/account-server.conf-sample?h=stable/liberty
 
[root@object1 ~]# curl -o /etc/swift/container-server.conf https://git.openstack.org/cgit/openstack/swift/plain/etc/container-server.conf-sample?h=stable/liberty
 
[root@object1 ~]# curl -o /etc/swift/object-server.conf https://git.openstack.org/cgit/openstack/swift/plain/etc/object-server.conf-sample?h=stable/liberty
 
 
## 编辑/etc/swift/account-server.conf 配置文件
 
 
[DEFAULT]
...
bind_ip = 10.6.17.14
bind_port = 6002
user = swift
swift_dir = /etc/swift
devices = /opt/node
mount_check = true
 
 
[pipeline:main]
pipeline = healthcheck recon account-server
 
 
[filter:recon]
use = egg:swift#recon
...
recon_cache_path = /var/cache/swift
 
 
 
 
## 编辑/etc/swift/container-server.conf 配置文件
 
 
[DEFAULT]
...
bind_ip = 10.6.17.14
bind_port = 6001
user = swift
swift_dir = /etc/swift
devices = /opt/node
mount_check = true
 
 
 
[pipeline:main]
pipeline = healthcheck recon container-server
 
 
 
[filter:recon]
use = egg:swift#recon
...
recon_cache_path = /var/cache/swift
 
 
 
 
 
## 编辑/etc/swift/object-server.conf 配置文件
 
 
[DEFAULT]
...
bind_ip = 10.6.17.14
bind_port = 6000
user = swift
swift_dir = /etc/swift
devices = /opt/node
mount_check = true
 
 
[pipeline:main]
pipeline = healthcheck recon object-server
 
 
[filter:recon]
use = egg:swift#recon
...
recon_cache_path = /var/cache/swift
recon_lock_path = /var/lock
 
 
 
## 授权目录
 
[root@object1 ~]# chown -R swift:swift /opt/node
 
 
 
## 创建 swift 缓存 目录 cache/swift
 
[root@object1 ~]# mkdir -p /var/cache/swift
[root@object1 ~]# chown -R swift:swift /var/cache/swift
 
 
 
## 在controller 上创建 ring 帐号
 
 
## 创建 account.builder 文件
 
[root@controller ~]# cd /etc/swift/
 
[root@controller swift]# swift-ring-builder account.builder create 10 2 1
 
 
 
 
 
## 添加 object 节点
 
[root@controller swift]# swift-ring-builder account.builder add \
> --region 1 --zone 1 --ip 10.6.17.14 --port 6002 --device sda3 --weight 100
 
输出:
Device d0r1z1-10.6.17.14:6002R10.6.17.14:6002/sda3_"" with 100.0 weight got id 0
 
 
[root@controller swift]# swift-ring-builder account.builder add \
> --region 1 --zone 2 --ip 10.6.17.14 --port 6002 --device sda4 --weight 100
 
输出:
Device d1r1z2-10.6.17.14:6002R10.6.17.14:6002/sda4_"" with 100.0 weight got id 1
 
 
 
## 验证ring
 
[root@controller swift]# swift-ring-builder account.builder
 
account.builder, build version 2
1024 partitions, 3.000000 replicas, 1 regions, 2 zones, 2 devices, 100.00 balance, 0.00 dispersion
The minimum number of hours before a partition can be reassigned is 1
The overload factor is 0.00% (0.000000)
Devices:    id  region  zone      ip address  port  replication ip  replication port      name weight partitions balance meta
             0       1     1      10.6.17.14  6002      10.6.17.14              6002      sda3 100.00          0 -100.00 
             1       1     2      10.6.17.14  6002      10.6.17.14              6002      sda4 100.00          0 -100.00 
 
 
# 平衡 ring
[root@controller swift]# swift-ring-builder account.builder rebalance
 
.......
Reassigned 1024 (100.00%) partitions. Balance is now 0.00.  Dispersion is now 0.00
 
 
 
 
## 创建容器 ring
 
 
[root@controller ~]# cd /etc/swift/
 
[root@controller swift]# swift-ring-builder container.builder create 10 2 1
 
 
 
## 创建存储节点ring
 
[root@controller swift]# swift-ring-builder container.builder add \
> --region 1 --zone 1 --ip 10.6.17.14 --port 6001 --device sda3 --weight 100
 
输出:
Device d0r1z1-10.6.17.14:6001R10.6.17.14:6001/sda3_"" with 100.0 weight got id 0
 
 
 
 
 
[root@controller swift]# swift-ring-builder container.builder add \
> --region 1 --zone 2 --ip 10.6.17.14 --port 6001 --device sda4 --weight 100
 
输出:
Device d1r1z2-10.6.17.14:6001R10.6.17.14:6001/sda4_"" with 100.0 weight got id 1
 
 
 
## 验证容器 ring
 
[root@controller swift]# swift-ring-builder container.builder
 
container.builder, build version 2
1024 partitions, 3.000000 replicas, 1 regions, 2 zones, 2 devices, 100.00 balance, 0.00 dispersion
The minimum number of hours before a partition can be reassigned is 1
The overload factor is 0.00% (0.000000)
Devices:    id  region  zone      ip address  port  replication ip  replication port      name weight partitions balance meta
             0       1     1      10.6.17.14  6001      10.6.17.14              6001      sda3 100.00          0 -100.00 
             1       1     2      10.6.17.14  6001      10.6.17.14              6001      sda4 100.00          0 -100.00 
 
 
# 平衡 容器 ring
[root@controller swift]# swift-ring-builder container.builder rebalance
 
....
Reassigned 1024 (100.00%) partitions. Balance is now 0.00.  Dispersion is now 0.00
 
 
 
 
## 创建 object ring
 
[root@controller ~]# cd /etc/swift/
 
[root@controller swift]# swift-ring-builder object.builder create 10 2 1
 
[root@controller swift]# swift-ring-builder object.builder add \
> --region 1 --zone 1 --ip 10.6.17.14 --port 6001 --device sda3 --weight 100
 
 
输出:
Device d0r1z1-10.6.17.14:6001R10.6.17.14:6001/sda3_"" with 100.0 weight got id 0
 
 
 
 
 
[root@controller swift]# swift-ring-builder object.builder add \
> --region 1 --zone 2 --ip 10.6.17.14 --port 6001 --device sda4 --weight 100
 
 
输出:
Device d1r1z2-10.6.17.14:6001R10.6.17.14:6001/sda4_"" with 100.0 weight got id 1
 
 
 
 
## 验证 object ring
 
[root@controller swift]# swift-ring-builder object.builder
 
object.builder, build version 2
1024 partitions, 3.000000 replicas, 1 regions, 2 zones, 2 devices, 100.00 balance, 0.00 dispersion
The minimum number of hours before a partition can be reassigned is 1
The overload factor is 0.00% (0.000000)
Devices:    id  region  zone      ip address  port  replication ip  replication port      name weight partitions balance meta
             0       1     1      10.6.17.14  6001      10.6.17.14              6001      sda3 100.00          0 -100.00 
             1       1     2      10.6.17.14  6001      10.6.17.14              6001      sda4 100.00          0 -100.00
 
 
 
 
 
## 平衡 object ring
 
[root@controller swift]# swift-ring-builder object.builder rebalance
 
...
Reassigned 1024 (100.00%) partitions. Balance is now 0.00.  Dispersion is now 0.00
 
 
 
## 查看生成的文件
 
[root@controller swift]# ls
account.builder  backups            container-reconciler.conf  container-server       object.builder       object.ring.gz  proxy-server.conf
account.ring.gz  container.builder  container.ring.gz          container-server.conf  object-expirer.conf  proxy-server    swift.conf
 
 
 
## 复制 account.ring.gz  container.ring.gz    object.ring.gz  到 其他 运行 代理服务 的节点/etc/swift 目录中  ,然后启动 openstack-swift-proxy.service 服务
 
 
 
 
 
## Object Storage 下载 swift.conf 配置文件
 
[root@object1 swift]# curl -o /etc/swift/swift.conf \
> https://git.openstack.org/cgit/openstack/swift/plain/etc/swift.conf-sample?h=stable/liberty
 
 
 
## 编辑 /etc/swift/swift.conf 配置文件
 
[root@object1 swift]# vim /etc/swift/swift.conf
 
 
 
[swift-hash]
...
swift_hash_path_suffix = changeme
swift_hash_path_prefix = changeme
 
 
[storage-policy:0]
...
name = Policy-0
default = yes
 
 
 
 
## 授权 目录
 
[root@object1 swift]# chown -R root:swift /etc/swift
 
 
 
 
## 在controller 以及 其他代理节点中 启动 代理服务
 
 
[root@controller ~]# systemctl enable openstack-swift-proxy.service memcached.service
 
[root@controller ~]# systemctl start openstack-swift-proxy.service memcached.service
 
 
 
## 在 Object Storage 节点中 启动服务
 
[root@object1 ~]# systemctl enable openstack-swift-account.service openstack-swift-account-auditor.service \
> openstack-swift-account-reaper.service openstack-swift-account-replicator.service
 
 
[root@object1 ~]# systemctl start openstack-swift-account.service openstack-swift-account-auditor.service \
> openstack-swift-account-reaper.service openstack-swift-account-replicator.service
 
 
[root@object1 ~]# systemctl enable openstack-swift-container.service \
> openstack-swift-container-auditor.service openstack-swift-container-replicator.service \
> openstack-swift-container-updater.service
 
 
[root@object1 ~]# systemctl start openstack-swift-container.service \
> openstack-swift-container-auditor.service openstack-swift-container-replicator.service \
> openstack-swift-container-updater.service
 
 
 
[root@object1 ~]# systemctl enable openstack-swift-object.service openstack-swift-object-auditor.service \
> openstack-swift-object-replicator.service openstack-swift-object-updater.service
 
[root@object1 ~]# systemctl start openstack-swift-object.service openstack-swift-object-auditor.service \
> openstack-swift-object-replicator.service openstack-swift-object-updater.service
 
 
 
 
## 验证服务
 
[root@controller ~]# echo "export OS_AUTH_VERSION=3" \
> | tee -a admin-openrc.sh
 
[root@controller ~]# source admin-openrc.sh
 
 
## 查看 swift 状态
 
[root@controller ~]# swift stat
 
 
        Account: AUTH_0d1a69b17e444cb3b4884529b6bdb372
     Containers: 0
        Objects: 0
          Bytes: 0
X-Put-Timestamp: 1449222121.42343
    X-Timestamp: 1449222121.42343
     X-Trans-Id: tx20d0064672a74cd88723f-0056615fe9
   Content-Type: text/plain; charset=utf-8
   
  
## 测试 上传 文件
 
[root@controller ~]# touch FILE
 
 
[root@controller ~]# swift upload container1 FILE