主控节点安装配置 Keystone 认证服务

主控节点 IP:192.168.81.11

  1. yum install centos-release-openstack-newton -y
  2. yum update
  3. yum install mariadb mariadb-server python-PyMySQL -y
  4. vim /etc/my.cnf.d/openstack.cnf
  1. [mysqld]
  2. bind-address=192.168.1.101
  3. default-storage-engine=innodb
  4. innodb_file_per_table
  5. collation-server=utf8_general_ci
  6. character-set-server=utf8
  7.  
  8. 启动mysql并设置密码
    systemctl enable mariadb
    systemctl start mariadb
    mysqladmin -uroot password 123456

Message queue 安装在controller节点

  1. firewall-cmd --add-port=5672/tcp --permanent #rabbitmq用到5672端口
  2. firewall-cmd --reload
    (这里最好是直接关闭firewalld systemctl stop firewalld)
  3. yum install rabbitmq-server -y
  4. hostnamectl set-hostname controller #修改主机名,否则rabbitmq可能启动出错
  5. init 6 #最好重启服务器
  6. systemctl enable rabbitmq-server
  7. systemctl start rabbitmq-server
  8. rabbitmqctl add_user openstack 123456
  9. rabbitmqctl list_users
  10. rabbitmqctl set_permissions openstack ".*" ".*" ".*"

Keystone安装并配置

配置数据库

  1. mysql -uroot -p
  2. mysql> create database keystone; #建立Keystone数据库
  3. mysql> grant all privileges on keystone.* to keystone@localhost identified by '123456' with grant option;
  4. mysql> grant all privileges on keystone.* to keystone@'%' identified by '123456' with grant option;
  5. mysql> exit;

生成乱数Token

  1. openssl rand -hex 24
  2. 3a11081eb34bf14262fdb496d5a2975f2b434d11424e0ef7

组件安装

  1. yum install openstack-keystone httpd mod_wsgi \
  2. python-openstackclient memcached python-memcached

编辑/etc/keystone/keystone.conf,在[ ]对应部分加入下列内容:

  1. [DEFAULT]
  2. admin_token = 3a11081eb34bf14262fdb496d5a2975f2b434d11424e0ef7
  3. [database]
  4. connection = mysql+pymysql://keystone:123456@192.168.81.11/keystone
  5. [memcache]
  6. servers = 127.0.0.1:11211
  7. [token]
  8. provider = fernet

完成后,通过Keystone管理命令同步数据库建立表:

  1. keystone-manage db_sync

接着初始化 fernet keys:

  1. keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone

在控制节点上设置 HTTP服务

编辑 /etc/httpd/conf/httpd.conf 文件

  1. ServerName 192.168.81.11

建立 /etc/httpd/conf.d/wsgi-keystone.conf 來提供 Keystone 服务,并加入以下內容:

  1. Listen 5000
  2. Listen 35357
  3. <VirtualHost *:5000>
  4. WSGIDaemonProcess keystone-public processes=5 threads=1 user=keystone group=keystone display-name=%{GROUP}
  5. WSGIProcessGroup keystone-public
  6. WSGIScriptAlias / /usr/bin/keystone-wsgi-public
  7. WSGIApplicationGroup %{GLOBAL}
  8. WSGIPassAuthorization On
  9. ErrorLogFormat "%{cu}t %M"
  10. ErrorLog /var/log/httpd/keystone-error.log
  11. CustomLog /var/log/httpd/keystone-access.log combined
  12. <Directory /usr/bin>
  13. Require all granted
  14. </Directory>
  15. </VirtualHost>
  16. <VirtualHost *:35357>
  17. WSGIDaemonProcess keystone-admin processes=5 threads=1 user=keystone group=keystone display-name=%{GROUP}
  18. WSGIProcessGroup keystone-admin
  19. WSGIScriptAlias / /usr/bin/keystone-wsgi-admin
  20. WSGIApplicationGroup %{GLOBAL}
  21. WSGIPassAuthorization On
  22. ErrorLogFormat "%{cu}t %M"
  23. ErrorLog /var/log/httpd/keystone-error.log
  24. CustomLog /var/log/httpd/keystone-access.log combined
  25. <Directory /usr/bin>
  26. Require all granted
  27. </Directory>
  28. </VirtualHost>

启动 httpd 和 memcached 服务

  1. systemctl enable httpd
  2. systemctl enable memcached
  3. setenforce 0 #关闭selinux,否则httpd启动可能失败
  4. systemctl start httpd
  5. systemctl start memcached

建立Service 和 API Endpoint

在建立 Keystone service 和 Endpoint 之前,要先导入一些环境变量, OpenStack client 会自动抓取系统某些环境变量來提供 API 的存取:

  1. export OS_TOKEN=3a11081eb34bf14262fdb496d5a2975f2b434d11424e0ef7
  2. export OS_URL=http://192.168.81.11:35357/v3
  3. export OS_IDENTITY_API_VERSION=3
  4. # 其中OS_TOKEN是之前生成的Keystone的Admin Token

建立 Service 实体來提供身份认证:

  1. openstack service create --name keystone --description "OpenStack Identity" identity

成功的话,会看到如下类似结果:

  1. +-------------+----------------------------------+
  2. | Field | Value |
  3. +-------------+----------------------------------+
  4. | description | OpenStack Identity |
  5. | enabled | True |
  6. | id | 4ddaae90388b4ebc9d252ec2252d8d10 |
  7. | name | keystone |
  8. | type | identity |
  9. +-------------+----------------------------------+

Keystone 为了让指定的 API 与 Service 拥有认证机制,故要再新增 API Endpoint 目录给Keystone,这样就能够决定如何与其他服务进行存取,通过以下方式建立:

  1. # 建立 Public API endpoint
  2. $ openstack endpoint create --region RegionOne identity public http://192.168.81.11:5000/v3
  3. # 建立 internal API endpoint
  4. $ openstack endpoint create --region RegionOne identity internal http://192.168.81.11:5000/v3
  5. # 建立 admin API endpoint
  6. $ openstack endpoint create --region RegionOne identity admin http://192.168.81.11:35357/v3

完成后,建立一个default domain:

  1. openstack domain create --description "Default Domain" default
  2. +-------------+----------------------------------+
  3. | Field | Value |
  4. +-------------+----------------------------------+
  5. | description | Default Domain |
  6. | enabled | True |
  7. | id | fb9492511bd1426a861ccbf7ff1d4d9f |
  8. | name | default |
  9. +-------------+----------------------------------+

在后续安裝的 OpenStack 各组件服务都需要建立一个或多个 Service,以及 API Endpoint 目录。

建立Keystone admin 和 user

身份认证服务会通过 Domains、Projects、Roles 与 Users 的组合來进行授权。在大多数部署下都会拥有管理者角色,因此这样通过 OpenStack client 建立一个名称为 admin 的管理者,以及一个专门给所有 OpenStack 套件沟通的Service project:

  1. # 建立 admin Project
  2. $ openstack project create --domain default --description "Admin Project" admin
  3. # 建立 admin User
  4. $ openstack user create --domain default \
  5. --password 123456 --email admin@example.com admin
  6. # 建立 admin Role
  7. $ openstack role create admin
  8. # 将 admin项目与admin用户添加到 admin Role
  9. $ openstack role add --project admin --user admin admin
  10. # 建立 service Project
  11. $ openstack project create --domain default --description "Service Project" service

接着建立一个demo用户的Project,来提供后续的权限验证:

  1. # 建立 demo Project
  2. $ openstack project create --domain default --description "Demo Project" demo
  3. # 建立 demo User
  4. $ openstack user create --domain default --password 123456 --email demo@example.com demo
  5. # 建立 demo Role
  6. $ openstack role create user
  7. # 建立 demo Project
  8. $ openstack role add --project demo --user demo user
  9. # 以上指令可以重复的建立不同的 Project 和 User。

验证 Keystone 服务

在进行其他服务安装之前,一定要确认 Keystone 服务没有任何错误,首先取消上面导入的环境变数:

  1. unset OS_TOKEN OS_URL

直接通过 v3 版本来验证服务,v3 增加了 Domains 的验证。因此 Project 与 User 能够在不同的 Domain 使用相同名称,我们使用预设的 Domain 进行验证:

  1. openstack --os-auth-url http://192.168.81.11:35357/v3 \
  2. --os-project-domain-name default --os-user-domain-name default \
  3. --os-project-name admin --os-username admin token issue
  4. # 其中 default 是当没有指定 Domain 时的预设名称。

成功的话,会看到类似如下结果:

  1. +------------+-------------------------------------------------------------+
  2. | Field | Value |
  3. +------------+-------------------------------------------------------------+
  4. | expires | 2017-01-09 08:33:22+00:00 |
  5. | id | gAAAAABYczzDCC4KVYYSJQF5J5grPgrmqyRGrty178PzOaKTP-YrlTH14P_ |
  6. | | a3VCSS6GvMgdWGJbgBoDs1esitC_zvfe4SDyz1tKEq30GjLc0LeiG_yhZ1j |
  7. | | gXFLbTgIOz58_a5XrT3n8_rRB7diImQl8XIX3Ip- |
  8. | | tnMtOPeyKiLDlwRjV3sLxu4p4 |
  9. | project_id | a84ed1f6ae5d433ca1f84396424eae8c |
  10. | user_id | 22a65abb1c314690b6509e71d1bcca86 |
  11. +------------+-------------------------------------------------------------+

接下来要验证权限是否正常被设定,先使用 admin 用户来进行:

  1. openstack --os-auth-url http://192.168.81.11:35357/v3 \
  2. --os-project-domain-name default \
  3. --os-user-domain-name default \
  4. --os-project-name admin \
  5. --os-username admin project list

成功的话,会看到如下类似结果:

  1. +----------------------------------+---------+
  2. | ID | Name |
  3. +----------------------------------+---------+
  4. | 9d9695050f4241d6945ee97248df3350 | demo |
  5. | a84ed1f6ae5d433ca1f84396424eae8c | admin |
  6. | b10182da8bb44dffa958017c815216d3 | service |
  7. +----------------------------------+---------+

然后再通过 demo 使用者来验证是否有存取权限,利用 v3 来取得 Token:

  1. openstack --os-auth-url http://192.168.81.11:5000/v3 \
  2. --os-project-domain-name default --os-user-domain-name default \
  3. --os-project-name demo --os-username demo token issue

成功的话,会看到类似效果:

  1. +------------+-------------------------------------------------------------+
  2. | Field | Value |
  3. +------------+-------------------------------------------------------------+
  4. | expires | 2017-01-09 08:40:33+00:00 |
  5. | id | gAAAAABYcz5xHmogpErbWQuawqqEciwd4FC28yMiWskqiqGmfZBy-f_NKOR |
  6. | | fQEeBa6QBIPIumZrbCfEktHym4KWvlTRIBC3g8j955bni5NDzJZHlR1GOl_ |
  7. | | YAgA9HKPJNqelr69waNPBT2VCW8IvhvdFdILGZkHXZZVuzpT_Tf- |
  8. | | oKQjbjUVSp3UA |
  9. | project_id | 9d9695050f4241d6945ee97248df3350 |
  10. | user_id | 74f41c0ad19540c6ac2c64cbed0afd4c |
  11. +------------+-------------------------------------------------------------+
  12. # P.S 这里使用的 Port 从 35357 转换成 5000,这边只是为了区别 Admin URL 与 Public URL 中使用的 Port。

最后再通过 demo 来使用拥有管理者权限的 API:

  1. openstack --os-auth-url http://192.168.81.11:5000/v3 \
  2. --os-project-domain-name default \
  3. --os-user-domain-name default \
  4. --os-project-name demo \
  5. --os-username demo user list

成功的話,會看到類似以下結果:

  1. You are not authorized to perform the requested action: identity:list_users (HTTP 403) (Request-ID: req-cb7e4df6-5e2a-4a0e-b263-cb3c16ec488d)

若上述过程都没有错误,表示 Keystone 目前很正常的被执行中。

使用脚本切换用户

由于后续安装可能会切换不同使用者来验证一些服务,因此可以透过建立脚本来导入相关的环境变数,来达到不同使用者的切换,首先建立以下两个文件:

  1. touch ~/admin-openrc ~/demo-openrc

编辑admin-openrc 加入以下内容:

  1. export OS_PROJECT_DOMAIN_NAME=default
  2. export OS_USER_DOMAIN_NAME=default
  3. export OS_PROJECT_NAME=admin
  4. export OS_USERNAME=admin
  5. export OS_PASSWORD=123456
  6. export OS_AUTH_URL=http://192.168.1.101:35357/v3
  7. export OS_IDENTITY_API_VERSION=3
  8. export OS_IMAGE_API_VERSION=2

编辑 demo-openrc 加入以下內容:

  1. export OS_PROJECT_DOMAIN_NAME=default
  2. export OS_USER_DOMAIN_NAME=default
  3. export OS_PROJECT_NAME=demo
  4. export OS_USERNAME=demo
  5. export OS_PASSWORD=123456
  6. export OS_AUTH_URL=http://192.168.1.101:5000/v3
  7. export OS_IDENTITY_API_VERSION=3
  8. export OS_IMAGE_API_VERSION=2

完成后,导入环境变量:

  1. source admin-openrc

完成后,再使用 OpenStack client 就可以省略一些基本参数了,如以下指令:

  1. openstack token issue
  2. +------------+-------------------------------------------------------------+
  3. | Field | Value |
  4. +------------+-------------------------------------------------------------+
  5. | expires | 2017-01-09 09:00:47+00:00 |
  6. | id | gAAAAABYc0Mv-1wUq0jSCtoJ_bVycrQz7rieIy3BmeAcSDXEcikv2EJZNqE |
  7. | | kDNs30gG0e_JFvNEf6J1aTy73IHS0h5_sCFY_A_y3atp-B_Bks0AJ3KzmOf |
  8. | | fqpVkF2Qg9SeHbR3XjFlhQeQD-m3-rO0IroJGQ_E7shQ0XbOMW1A6VnzOH_ |
  9. | | uZObVE |
  10. | project_id | a84ed1f6ae5d433ca1f84396424eae8c |
  11. | user_id | 22a65abb1c314690b6509e71d1bcca86 |
  12. +------------+-------------------------------------------------------------+

Keystone 部分部署完成

部署Swift

在controller节点需要安装swift中的Proxy服务

Swift 与其他服务不同,Controller 节点不使用任何资料库,取而代之是在每个 Storage 节点上安装 SQLite 资料库。
首先要建立 Service 与 API Endpoint,首先导入 admin 环境变量:

  1. source admin-openrc

接着通过以下流程来建立Swift 的使用者、Service 以及 API Endpoint:

  1. # 建立 Swift user
  2. $ openstack user create --domain default \
  3. --password 123456 --email swift@example.com swift
  4. # 新增 Swift 到 Admin Role
  5. $ openstack role add --project service --user swift admin
  6. # 建立 Swift service
  7. $ openstack service create --name swift --description "OpenStack Object Storage" object-store
  8. # 建立 Swift v1 public endpoints
  9. $ openstack endpoint create --region RegionOne \
  10. object-store public http://192.168.81.11:8080/v1/AUTH_%\(tenant_id\)s
  11. # 建立 Swift v1 internal endpoints
  12. $ openstack endpoint create --region RegionOne \
  13. object-store internal http://192.168.81.11:8080/v1/AUTH_%\(tenant_id\)s
  14. # 建立 Swift v1 admin endpoints
  15. $ openstack endpoint create --region RegionOne \
  16. object-store admin http://192.168.81.11:8080/v1

在开始设定swift之前,要安装相关套件与 OpenStack 服务套件,可以通过以下指令进行安装:

  1. yum install openstack-swift-proxy python-swiftclient \
  2. python-keystoneclient python-keystonemiddleware memcached -y

安装完成后,建立用于存放设定档的目录:

  1. mkdir -p /etc/swift

通过网络下载 proxy-server.conf:

  1. curl -o /etc/swift/proxy-server.conf \
  2. https://git.openstack.org/cgit/openstack/swift/plain/etc/proxy-server.conf-sample?h=stable/newton

编辑 /etc/swift/proxy-server.conf,在[ ]相应部分加入以下內容:

  1. [DEFAULT]
  2. bind_port = 8080
  3. user = swift
  4. swift_dir = /etc/swift
  5. [pipeline:main]
  6. pipeline = authtoken keystoneauth catch_errors gatekeeper healthcheck proxy-logging cache container_sync bulk ratelimit container-quotas account-quotas slo dlo versioned_writes proxy-logging proxy-server
  7. #此处要删除原有的tempurl和tempauth,加入authtoken和keystoneauth
  8. [app:proxy-server]
  9. ...
  10. use = egg:swift
  11. account_autocreate = true
  12. [filter:keystoneauth]
  13. ...
  14. use = egg:swift
  15. operator_roles = admin,user
  16. [filter:authtoken]
  17. ...
  18. paste.filter_factory = keystonemiddleware.auth_token:filter_factory
  19. auth_uri = http://192.168.81.11:5000
  20. auth_url = http://192.168.81.11:35357
  21. memcached_servers = 192.168.81.11:11211
  22. auth_type = password
  23. project_domain_name = default
  24. user_domain_name = default
  25. project_name = service
  26. username = swift
  27. password = 123456
  28. delay_auth_decision = True
  29. [filter:cache]
  30. ...
  31. use = egg:swift
  32. memcache_servers = 192.168.81.11:11211

其他的,可以參考 Deployment Guide
== 注意每行开头不要带空格 ==

Storage Node - 存储节点 IP:192.168.81.12

安装与设定完成 Controller 上的 Swift 所有服务后,接着要来设定实际储存资料的 Storage 节点,其中会提供 Account、Container 以及 Object 服务。

Storage 安装前准备

在开始设定之前,首先要安装 Swift 相依的包:
yum install centos-release-openstack-newton
yum update
yum install xfsprogs rsync

该机器上挂载3个分区进行格式化作 为Swift 储存用:

  1. mkfs.xfs -f /dev/sdb
  2. mkfs.xfs -f /dev/sdc
  3. mkfs.xfs -f /dev/sdd
  4. # 若有多个分区则重复操作,

==此处保证至少3个分区,才能做后面的balance==

接着创建目录挂载点

  1. mkdir -p /srv/node/sd{b,c,d}

配置/etc/fstab文件开机自动挂载相应分区:

  1. vim /etc/fstab
  2. ...
  3. /dev/sdb /srv/node/sdb xfs noatime,nodiratime,nobarrier,logbufs=8 0 2
  4. /dev/sdc /srv/node/sdc xfs noatime,nodiratime,nobarrier,logbufs=8 0 2
  5. /dev/sdd /srv/node/sdd xfs noatime,nodiratime,nobarrier,logbufs=8 0 2

手动挂载分区先

  1. mount /srv/node/sdb
  2. mount /srv/node/sdc
  3. mount /srv/node/sdd

配置rsync,加入以下内容:

  1. vim /etc/rsyncd.conf
  2. uid = swift
  3. gid = swift
  4. log file = /var/log/rsyncd.log
  5. pid file = /var/run/rsyncd.pid
  6. address = 192.168.81.12(这个有待确认,似乎其他的IP也可以)
  7. [account]
  8. max connections = 2
  9. path = /srv/node/
  10. read only = false
  11. lock file = /var/lock/account.lock
  12. [container]
  13. max connections = 2
  14. path = /srv/node/
  15. read only = false
  16. lock file = /var/lock/container.lock
  17. [object]
  18. max connections = 2
  19. path = /srv/node/
  20. read only = false
  21. lock file = /var/lock/object.lock

vim /etc/default/rsync ,來进行 rsync 异地备援设定:

  1. RSYNC_ENABLE=true

设置开机运行:

  1. systemctl enable rsyncd

Storage 套件安装与设置

安装相关套件:

  1. yum install openstack-swift-account openstack-swift-container \
  2. openstack-swift-object

安装完成后,要从网上下载 Swift的Account、Container和Object Server的配置文件:

  1. # Account server
  2. $ sudo curl -o /etc/swift/account-server.conf \
  3. https://git.openstack.org/cgit/openstack/swift/plain/etc/account-server.conf-sample?h=stable/newton
  4. # Container server
  5. $ sudo curl -o /etc/swift/container-server.conf \
  6. https://git.openstack.org/cgit/openstack/swift/plain/etc/container-server.conf-sample?h=stable/newton
  7. # Object server
  8. $ sudo curl -o /etc/swift/object-server.conf \
  9. https://git.openstack.org/cgit/openstack/swift/plain/etc/object-server.conf-sample?h=stable/newton

首先编辑/etc/swift/account-server.conf,在[ ]相应部分设置以下内容:

  1. [DEFAULT]
  2. ...
  3. bind_port = 6002
  4. user = swift
  5. swift_dir = /etc/swift
  6. devices = /srv/node
  7. mount_check = True
  8. [pipeline:main]
  9. pipeline = healthcheck recon account-server
  10. [filter:recon]
  11. ...
  12. use = egg:swift
  13. recon_cache_path = /var/cache/swift

编辑/etc/swift/container-server.conf,在[ ]相应部分设置以下内容:

  1. [DEFAULT]
  2. ...
  3. bind_port = 6001
  4. user = swift
  5. swift_dir = /etc/swift
  6. devices = /srv/node
  7. mount_check = true
  8. [pipeline:main]
  9. pipeline = healthcheck recon container-server
  10. [filter:recon]
  11. ...
  12. use = egg:swift
  13. recon_cache_path = /var/cache/swift

编辑/etc/swift/object-server.conf,在[ ]相应部分设置以下内容:

  1. [DEFAULT]
  2. ...
  3. bind_port = 6000
  4. user = swift
  5. swift_dir = /etc/swift
  6. devices = /srv/node
  7. mount_check = true
  8. [pipeline:main]
  9. pipeline = healthcheck recon object-server
  10. [filter:recon]
  11. ...
  12. use = egg:swift
  13. recon_cache_path = /var/cache/swift
  14. recon_lock_path = /var/lock

完成上述所有设定后,要确保 Swift 能够存取挂载目录

  1. chown -R swift:swift /srv/node

接着建立一个目录让 Swift 作为快取时使用:

  1. mkdir -p /var/cache/swift
  2. chown -R root:swift /var/cache/swift
  3. chmod -R 775 /var/cache/swift

创建和分发初始环 Rings

在这个阶段进行之前,要确保 Controller 与各个 Storage 节点都确定设定与安装完成 Swift。若没问题的话,==回到Controller节点==,并进入 /etc/swift 目录来完成以下步骤。

  1. cd /etc/swift

建立Account Ring

Account Server 使用 Account Ring 来维护容器的列表。首先通过以下指令建立一个 account.builder :

  1. swift-ring-builder account.builder create 10 3 1

然后新增每一个 Storage 节点的 Account Server 信息到 Ring 中:

  1. # Object1 sdb sdc
  2. swift-ring-builder account.builder \
  3. add --region 1 --zone 1 --ip 192.168.1.102 \
  4. --port 6002 --device sdb --weight 100
  5. swift-ring-builder account.builder \
  6. add --region 1 --zone 1 --ip 192.168.1.102 \
  7. --port 6002 --device sdc --weight 100
  8. swift-ring-builder account.builder \
  9. add --region 1 --zone 1 --ip 192.168.1.102 \
  10. --port 6002 --device sdd --weight 100
  11. # Object2 sdb sdc
  12. swift-ring-builder account.builder \
  13. add --region 1 --zone 1 --ip 192.168.1.103 \
  14. --port 6002 --device sdb --weight 100
  15. swift-ring-builder account.builder \
  16. add --region 1 --zone 1 --ip 192.168.1.103 \
  17. --port 6002 --device sdc --weight 100
  18. # 以此类推

完成后,通过以下命令验证是否正确:

  1. swift-ring-builder account.builder

若没有任何问题,即可将 Ring 进行重新平衡调整:

  1. swift-ring-builder account.builder rebalance
  2. # 会产生account.ring.gz 文件

建立Container ring

Container Server 使用 Container Ring 来维护列表。通过以下指令建立container.builder文件:

  1. swift-ring-builder container.builder create 10 3 1

然后新增每一个 Storage 节点的 Container Server 信息到 Ring 中:

  1. # Object1 sdb sdc
  2. swift-ring-builder container.builder add --region 1 --zone 1 --ip 192.168.81.12 \
  3. --port 6001 --device sdb --weight 100
  4. swift-ring-builder container.builder add --region 1 --zone 1 --ip 192.168.81.12 \
  5. --port 6001 --device sdc --weight 100
  6. swift-ring-builder container.builder add --region 1 --zone 1 --ip 192.168.81.12 \
  7. --port 6001 --device sdd --weight 100
  8. .....
  9. (以下根据实际需要看是否部署)
  10. # Object2 sdb sdc
  11. swift-ring-builder container.builder add --region 1 --zone 2 --ip 192.168.81.13 \
  12. --port 6001 --device sdb --weight 100
  13. swift-ring-builder container.builder add --region 1 --zone 2 --ip 192.168.81.13 \
  14. --port 6001 --device sdc --weight 100
  15. # 以此类推

完成后,可以用下列命令验证:

  1. swift-ring-builder container.builder

若没有问题,可将Ring重新平衡调整:

  1. swift-ring-builder container.builder rebalance
  2. # 完成后会产生container.ring.gz 文件

建立 Object Ring

Object Server 使用 Object Ring 来维护列表。 通过以下指令建立一个object.builder文件:

  1. swift-ring-builder object.builder create 10 3 1

然后新增每一个 Storage 节点的 Object Server 信息到 Ring 中:

  1. # Object1 sdb sdc sdd
  2. swift-ring-builder object.builder add --region 1 --zone 1 --ip 192.168.81.12 \
  3. --port 6000 --device sdb --weight 100
  4. swift-ring-builder object.builder add --region 1 --zone 1 --ip 192.168.81.12 \
  5. --port 6000 --device sdc --weight 100
  6. swift-ring-builder object.builder add --region 1 --zone 1 --ip 192.168.81.12 \
  7. --port 6000 --device sdd --weight 100
  8. ............
  9. # Object2 sdb sdc
  10. swift-ring-builder object.builder add --region 1 --zone 2 --ip 192.168.81.13 \
  11. --port 6000 --device sdb --weight 100
  12. swift-ring-builder object.builder add --region 1 --zone 2 --ip 192.168.81.13 \
  13. --port 6000 --device sdc --weight 100
  14. # 以此类推

完成后,可以用下列命令验证:

  1. swift-ring-builder object.builder

若没有问题,可将Ring重新平衡调整:

  1. swift-ring-builder object.builder rebalance
  2. # 完成后,会产生object.ring.gz文件

将Rings 分散到Storage节点

接着我们要将上述建立的所有 Ring 分散到所有 Storage 节点以及跑swift proxy服务的节点上的/etc/swift目录:

  1. scp account.ring.gz container.ring.gz object.ring.gz root@192.168.81.12:/etc/swift
  2. #如有其他storage节点,重复上条操作

完成安装

若上面步骤都进行顺利的话,接下来要进入最后阶段,继续在Controller 节点,获取swift.conf文件:

  1. curl -o /etc/swift/swift.conf \
  2. https://git.openstack.org/cgit/openstack/swift/plain/etc/swift.conf-sample?h=stable/mitaka

编辑/etc/swift/swift.conf ,在[swift-hash]部分設定 Path 的 Hash 字首字尾:

  1. [swift-hash]
  2. ...
  3. swift_hash_path_suffix = 1505cb4249801981da86
  4. swift_hash_path_prefix = 42da359c6af55b2e3f7d
  5. #可通过openssl rand -hex 10 产生
  6. [storage-policy:0]
  7. ...
  8. name = Policy-0
  9. default = yes

完成后,复制 /etc/swift/swift.conf 到所有 Storage 节点及其他跑swift proxy服务节点上的/etc/swift/:

  1. scp /etc/swift/swift.conf root@192.168.81.12:/etc/swift
  2. #scp /etc/swift/swift.conf root@192.168.81.13:/etc/swift

在所有节点保证/etc/swift目录的权限:

  1. chown -R swift:swift /etc/swift
  2. # 官方文档中为 root:swift

完成后,在controller节点启动memcached和swift服务:

  1. systemctl enable openstack-swift-proxy memcached
  2. systemctl start openstack-swift-proxy memcached

查看 openstack-swift-proxy 服务状态:

  1. systemctl status -l openstack-swift-proxy

如启动失败,报如下类似错误

  1. liberasurecode[2403]: liberasurecode_instance_create: dynamic linking error libJerasure.so.2: cannot open shared object file: No such file or directory
  2. liberasurecode[2403]: liberasurecode_instance_create: dynamic linking error libisal.so.2: cannot open shared object file: No such file or directory
  3. liberasurecode[2403]: liberasurecode_instance_create: dynamic linking error libshss.so.1: cannot open shared object file: No such file or directory

==如果启动openstack-swift-proxy服务报错,可参照本文最后部分处理,再回到这里继续==

完成后,==在所有Storage节点==设定开机时启动所有 Swift 服务:

  1. systemctl enable openstack-swift-account.service openstack-swift-account-auditor.service \
  2. openstack-swift-account-reaper.service openstack-swift-account-replicator.service
  3. systemctl enable openstack-swift-container.service \
  4. openstack-swift-container-auditor.service openstack-swift-container-replicator.service \
  5. openstack-swift-container-updater.service
  6. systemctl enable openstack-swift-object.service openstack-swift-object-auditor.service \
  7. openstack-swift-object-replicator.service openstack-swift-object-updater.service

完成后==在所有Storage节点==启动Swift所有服务:

  1. systemctl start openstack-swift-account.service openstack-swift-account-auditor.service \
  2. openstack-swift-account-reaper.service openstack-swift-account-replicator.service
  3. systemctl start openstack-swift-container.service \
  4. openstack-swift-container-auditor.service openstack-swift-container-replicator.service \
  5. openstack-swift-container-updater.service
  6. systemctl start openstack-swift-object.service openstack-swift-object-auditor.service \
  7. openstack-swift-object-replicator.service openstack-swift-object-updater.service

==查看上述服务状态,如果出现与controller节点的openstack-swift-proxy服务启动失败同样的报错信息,则可按照本文最后部分的方法解决==

验证 Swift 服务

首先回到 Controller 节点并在admin-openrc和demo-openrc加入 Swift API 使用版本的环境变量:

  1. echo "export OS_AUTH_VERSION=3" | tee -a ~/admin-openrc ~/demo-openrc
  2. #由于 Swift 需要使用到 V3 的版本來進行存取,故这里要记得修改正确。

之后导入 admin 环境变量验证服务:

  1. source ~/admin-openrc

通过swift client 命令查看服务状态:

  1. swift -V 3 stat
  2. Account: AUTH_aa2829b38026474ea4048d4adc807806
  3. Containers: 0
  4. Objects: 0
  5. Bytes: 0
  6. X-Put-Timestamp: 1435852736.76235
  7. Connection: keep-alive
  8. X-Timestamp: 1435852736.76235
  9. X-Trans-Id: tx47d3a78a45fe491eafb27-0055955fc0
  10. Content-Type: text/plain; charset=utf-8

然后通过 Swift client 來来上传文档,如以下方式:

  1. swift -V 3 upload admin-container xxxxxx.xxx

通过 Swift client 來查看所有容器,如以下方式:

  1. swift -V 3 list

然后通过 Swift client 來下载文档,如以下方式:

  1. swift -V 3 download admin-container xxxxxx.xxx
  2. xxxxx.xxx [auth 0.235s, headers 0.400s, total 0.420s, 0.020 MB/

如果有问题,可以修改配置文件后尝试在storage 节点运行 swift-init all start

swift-proxy swift 部署完成

在主控节点上安装Dashboard

Openstack的Dashboard,是基于OpenStack各个组件开发的web管理后台,项目名字是Horizon

安装dashboard

  1. yum install openstack-dashboard

编辑/etc/openstack-dashboard/local_settings 配置文件,修改如下内容:

  1. OPENSTACK_HOST = "127.0.0.1" #设置提供openstack服务的主机IP
  2. AllOWED_HOSTS = ['*', ] #允许所有主机访问dashborad
  3. #让dashboard使用memcached缓存
  4. SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
  5. CACHES = {
  6. 'default': {
  7. 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
  8. 'LOCATION': '127.0.0.1:11211',
  9. }
  10. }
  11. OPENSTACK_KEYSTONE_URL = "http://%s:5000/v3" % OPENSTACK_HOST #启用认证API version 3
  12. OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT = True #启用domains支持
  13. # 设置API版本
  14. OPENSTACK_API_VERSIONS = {
  15. "identity": 3,
  16. "image": 2,
  17. "volume": 2,
  18. }
  19. OPENSTACK_KEYSTONE_DEFAULT_DOMAIN = "default" #设置user为默认的角色权限
  20. TIME_ZONE = "Asia/Shanghai" #设置时区

重新启动httpd和memcached服务

  1. systemctl restart httpd memcached

访问验证 http://主控节点IP/dashboard , 用admin用户及相应密码登陆,点击“项目”->"对象存储"->“容器”,截图如下:

swift_dashboard.jpg

Swift 部署完成

启动openstack-swift-proxy服务报错的解决方法

如报如下错误

  1. liberasurecode[2403]: liberasurecode_instance_create: dynamic linking error libJerasure.so.2: cannot open shared object file: No such file or directory
  2. liberasurecode[2403]: liberasurecode_instance_create: dynamic linking error libisal.so.2: cannot open shared object file: No such file or directory
  3. liberasurecode[2403]: liberasurecode_instance_create: dynamic linking error libshss.so.1: cannot open shared object file: No such file or directory

说明你的CentOS 7 缺少这些库文件,可以通过编译安装相应库搞定。
首先确保系统有基础编译环境

  1. yum install gcc gcc-c++ make automake autoconf libtool yasm

编译安装 gf-complete库 下载

  1. unzip gf-complete.zip
  2. cd gf-complete.git
  3. ./autogen.sh
  4. ./configure
  5. make
  6. make install

编译安装 jerasure库 下载

  1. upzip jerasure.zip
  2. cd jerasure.git
  3. autoreconf --force --install
  4. ./configure&&make&&make install

编译安装 liberasurecode库 下载

  1. unzip liberasurecode-master.zip
  2. cd liberasurecode-master
  3. ./autogen.sh
  4. ./configure&&make &&make install

复制编译好的库文件到/usr/lib64

  1. cp --backup /usr/local/lib/*.so.* /usr/lib64

编译安装libisal库 下载

  1. tar xvf libisal_2.17.0.orig.tar.xz
  2. cd libisal_2.17.0
  3. ./autogen.sh
  4. ./configure --prefix=/usr --libdir=/usr/lib64
  5. make && make install

尝试重启controller节点的openstack-swift-proxy服务或storage节点上的各项服务

Good LUCK!

安装Newton版Swift,配合keystone认证的更多相关文章

  1. 安装Newton版Glance

    Image Service 本文介绍在controller节点上安装.配置Image服务 glance,镜像存储在本地文件系统 安装准备 controller 节点 ip:192.168.81.11 ...

  2. keystone 认证深度研究分析

    一.Keystone Token深度概述 Keystone作为OpenStack项目基础认证模块,目前支持的token类型分别是uuid.pkiz.pki.fernet. 首先,简要叙述一下这四种类型 ...

  3. OpenStack-Ocata版+CentOS7.6 云平台环境搭建 — 3.安装配置OpenStack认证服务(keystone)

    节点配置信息说明: 控制节点:controller: IP:192.168.164.128 hostname&hosts:likeadmin 计算加点:Nova: IP:192.168.164 ...

  4. Ubuntu 14.04 LTS 安装 Juno 版 OpenStack Keystone

    本文介绍如何在Ubuntu 14.04 LTS 上安装Juno版的Keystone, 我们采用的是手动安装的方式, 同时仅针对OpenStack的身份与访问管理系统Keystone. 事实上OpenS ...

  5. openstack安装newton版本keyston部署(一)

    一.部署环境:     两台centos7,  内存2G 控制计算节点: Hostname1:                    ip:172.22.0.218 计算节点及存储节点 Hostnam ...

  6. Deepin环境下安装科学研究版Python和Pytorch--防网卡

    Deepin环境下安装科学研究版Python和Pytorch--防网卡 由于本教程所引起的一切损失作者概不负责,本教程不使用pip和conda命令,因此下载好包后配合U盘可以给某个机器进行离线安装 · ...

  7. centos7下安装MySQL 5.7.26 二进制版本(免安装绿色版)

    MySQL 5.7.26 二进制版本安装(免安装绿色版) 下载地址 https://downloads.mysql.com/archives/community/ https://cdn.mysql. ...

  8. Xamarin Mono For Android 4.6.07004 完整离线安装破解版(C#开发Android、IOS工具)

      Xamarin是由Miguel de Icaza成立的一家新的独立公司,目的是给Mono一个继续奋斗的机会.Mono for Android (原名:MonoDroid)可以让开发人员使用 Mic ...

  9. 抛弃vboot不格盘用grub4dos+firadisk安装Ghost版XP到VHD,轻松RAMOS!

    http://bbs.wuyou.net/forum.php?mod=viewthread&tid=363198&extra=抛弃vboot不格盘用grub4dos+firadisk安 ...

随机推荐

  1. ORCHARD学习教程-安装

    安装说明:测试对象为正式版1.8 安装方法: 使用Microsoft Web Platform Installer 利用Microsoft WebMatrix 来安装 Working with Orc ...

  2. C语言中无符号与有符号问题

    unsigned char a[5] = { 12,36,96,128,182 }; a[]范围为0~256. 数组中数都有效. char a[5] = { 12,36,96,128,182 }; a ...

  3. mvc 高并发解决方案之一---存储过程

    MVC用户访问多线程,一般的lock是无法造成单例的. 存储过程既是一种解决方案,先来看看存储过程优缺点: A. 存储过程允许标准组件式编程 存储过程创建后可以在程序中被多次调用执行,而不必重新编写该 ...

  4. The method identifyUser(Arrays.asList("group001"), String, new HashMap<>()) is undefined for the type AipFace

    在使用百度云的人脸识别sdk时遇到了这个错误,网上百度不到解决的方法,当我浏览百度云的时候发现了这个 于是考虑到版本可能更新,出现了新的函数代替旧的函数,于是去查文档,文档链接如下 https://c ...

  5. Educational Codeforces Round 62 (Rated for Div. 2)E(染色DP,构造,思维,组合数学)

    #include<bits/stdc++.h>using namespace std;const long long mod=998244353;long long f[200007][2 ...

  6. 引用面试官文章 :如何准备Java初级和高级的技术面试

    本人最近几年一直在做java后端方面的技术面试官,而在最近两周,又密集了面试了一些java初级和高级开发的候选人,在面试过程中,我自认为比较慎重,遇到问题回答不好的候选人,我总会再三从不同方面提问,只 ...

  7. rest_framwork中ApiView实现分页

    from rest_framework.pagination import PageNumberPagination from .serializers import BookSerilizer fr ...

  8. mysql设计-基本操作

    mysql 设计 1)服务器管理 2)数据库管理 3)表管理 4)字段管理 5)索引管理 操作 1)sql语句 2)单表操作 3)多表操作 索引 记录 字段 mysam innodb ibdata1 ...

  9. hadoop的maven地址

    https://mvnrepository.com/artifact/org.apache.hadoop

  10. 关于pip无法安装scrapy的问题

    安装scrapy时如果出现下列问题: building ' twisted. test. raiser' extension error: Microsoft Visual C++ 14.0 is r ...