赞
踩
# 配置静态 IP
vim /etc/network/interfaces
# 修改以下内容
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static # 将此行 dhcp 修改为 static
address 192.168.100.100 # IP 设置为 192.168.100.100
netmask 255.255.255.0 # 设置子网掩码
gateway 192.168.100.2 # 设置网关
dns-nameservers 8.8.8.8 # 设置dns服务器
# 修改完成后重启即可完成IP修改
# 关闭防火墙
ufw disable
# 打开 sshd 服务配置文件
vim /etc/ssh/sshd_config
# 修改允许使用密码登录
PasswordAuthentication yes
# 添加运行 root 登陆
PermitRootLogin yes
即可使用 ssh 工具连接
# 设置主机名为 compute
hostnamectl set-hostname compute
# 输入 su - 刷新
su -
# 设置域名解析
# 因为是 Swift 单组件部署 所以将 controller 和 compute 合在一起
vim /etc/hosts
127.0.0.1 localhost
127.0.1.1 ubuntu
# The following lines are desirable for IPv6 capable hosts
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
# 在最后添加本机ip 与 域名映射
192.168.100.100 controller
192.168.100.100 compute
# 测试是否配置是否成功
# 因为受网络影响,需要配置国内镜像源
vim /etc/apt/sources.list
#
# deb cdrom:[Ubuntu-Server 14.04.6 LTS _Trusty Tahr_ - Release amd64 (20190304.2)]/ trusty main restricted
#deb cdrom:[Ubuntu-Server 14.04.6 LTS _Trusty Tahr_ - Release amd64 (20190304.2)]/ trusty main restricted
# See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to
# newer versions of the distribution.
deb http://us.archive.ubuntu.com/ubuntu/ trusty main restricted
deb-src http://us.archive.ubuntu.com/ubuntu/ trusty main restricted
## Major bug fix updates produced after the final release of the
## distribution.
deb http://us.archive.ubuntu.com/ubuntu/ trusty-updates main restricted
deb-src http://us.archive.ubuntu.com/ubuntu/ trusty-updates main restricted
## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu
## team. Also, please note that software in universe WILL NOT receive any
## review or updates from the Ubuntu security team.
deb http://us.archive.ubuntu.com/ubuntu/ trusty universe
deb-src http://us.archive.ubuntu.com/ubuntu/ trusty universe
deb http://us.archive.ubuntu.com/ubuntu/ trusty-updates universe
deb-src http://us.archive.ubuntu.com/ubuntu/ trusty-updates universe
## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu
## team, and may not be under a free licence. Please satisfy yourself as to
## your rights to use the software. Also, please note that software in
## multiverse WILL NOT receive any review or updates from the Ubuntu
## security team.
deb http://us.archive.ubuntu.com/ubuntu/ trusty multiverse
deb-src http://us.archive.ubuntu.com/ubuntu/ trusty multiverse
deb http://us.archive.ubuntu.com/ubuntu/ trusty-updates multiverse
deb-src http://us.archive.ubuntu.com/ubuntu/ trusty-updates multiverse
## N.B. software from this repository may not have been tested as
## extensively as that contained in the main release, although it includes
## newer versions of some applications which may provide useful features.
## Also, please note that software in backports WILL NOT receive any review
## or updates from the Ubuntu security team.
deb http://us.archive.ubuntu.com/ubuntu/ trusty-backports main restricted universe multiverse
deb-src http://us.archive.ubuntu.com/ubuntu/ trusty-backports main restricted universe multiverse
deb http://security.ubuntu.com/ubuntu trusty-security main restricted
deb-src http://security.ubuntu.com/ubuntu trusty-security main restricted
deb http://security.ubuntu.com/ubuntu trusty-security universe
deb-src http://security.ubuntu.com/ubuntu trusty-security universe
deb http://security.ubuntu.com/ubuntu trusty-security multiverse
deb-src http://security.ubuntu.com/ubuntu trusty-security multiverse
## Uncomment the following two lines to add software from Canonical's
## 'partner' repository.
## This software is not part of Ubuntu, but is offered by Canonical and the
## respective vendors as a service to Ubuntu users.
# deb http://archive.canonical.com/ubuntu trusty partner
# deb-src http://archive.canonical.com/ubuntu trusty partner
## Uncomment the following two lines to add software from Ubuntu's
## 'extras' repository.
## This software is not part of Ubuntu, but is offered by third-party
## developers who want to ship their latest software.
# deb http://extras.ubuntu.com/ubuntu trusty main
# deb-src http://extras.ubuntu.com/ubuntu trusty main
# 删除所有的内容,添加清华源
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ trusty main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ trusty main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ trusty-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ trusty-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ trusty-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ trusty-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ trusty-security main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ trusty-security main restricted universe multiverse
# 预发布软件源,不建议启用
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ trusty-proposed main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ trusty-proposed main restricted universe multiverse
# 启用 OpenStack 库
apt-get install software-properties-common
add-apt-repository cloud-archive:mitaka
# 更新软件包
apt-get update && apt-get dist-upgrade
# 安装 OpenStack 客户端
apt-get install python-openstackclient
# 同步阿里云 ntp 服务器
ntpdate ntp1.aliyun.com
# 安装 MariaDB 服务
apt-get install mariadb-server python-pymysql
# 为了方便,设置密码为 000000
vim /etc/mysql/conf.d/openstack.cnf
# 在这个文件内添加以下内容
[mysqld]
bind-address = 192.168.100.100
default-storage-engine = innodb
innodb_file_per_table
max_connections = 4096
collation-server = utf8_general_ci
character-set-server = utf8
# 重启数据库服务
service mysql restart
# 安全初始化
mysql_secure_installation
# 连接数据库进行测试
mysql -u root -p000000
# 输入命令检查数据库
SHOW DATABASES;
# 安装 RabbitMQ 消息队列服务
apt-get install rabbitmq-server
# 添加用户
rabbitmqctl add_user openstack 000000
# 设置权限
rabbitmqctl set_permissions openstack ".*" ".*" ".*"
# 安装 Memcached 缓存服务
apt-get install memcached python-memcache
# 配置高速缓存服务
vim /etc/memcached.conf
# 在 35 行左右 -l 配置为 本机IP
-l 192.168.100.100
# 配置完成后重启服务
service memcached restart
因为 OpenStack 部署任何组件的前提是需要部署 keystone 组件,所以需要先安装 keystone 组件
# 进入数据库创建 keystone 认证库
mysql -u root -p000000
# 创建 keystone 库
CREATE DATABASE keystone;
# 授权
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY '000000';
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY '000000';
# 执行结果
# 生成一个随机初始值作为管理员的临时令牌,即 token
openssl rand -hex 10
# 输出结果
root@compute:~# openssl rand -hex 10
5f0bb3f89a48dd07f295
# 这个 token 值要存起来,后期需要使用
# 安装 keystone 组件
# 禁用Keystone服务在安装完成后自启(不禁用的话安装完成后会提示端口被占用)
echo "manual" > /etc/init/keystone.override
# 安装
apt-get install keystone apache2 libapache2-mod-wsgi
# 配置 keystone 组件
vim /etc/keystone/keystone.conf
# 在[DEFAULT]部分,定义初始管理令牌的值:
[DEFAULT]
admin_token = ADMIN_TOKEN
# 使用前面步骤生成的随机数替换 ADMIN_TOKEN 值,即使用 5f0bb3f89a48dd07f295 来替换
# 在 [database] 部分,配置数据库访问:
[database]
connection = mysql+pymysql://keystone:000000@controller/keystone
# 在 [token] 部分,配置Fernet UUID令牌的提供者
[token]
provider = fernet
# 保存后同步数据库
su -s /bin/sh -c "keystone-manage db_sync" keystone
# 初始化 Fernet keys
keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
# 输出
# 编辑 /etc/apache2/apache2.conf 文件,为控制节点配置 ServerName 选项
vim /etc/apache2/apache2.conf
# 在最后一行添加
ServerName controller
# 配置虚拟主机
vim /etc/apache2/sites-available/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
ErrorLogFormat "%{cu}t %M"
ErrorLog /var/log/apache2/keystone.log
CustomLog /var/log/apache2/keystone_access.log combined
<Directory /usr/bin>
Require all granted
</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
ErrorLogFormat "%{cu}t %M"
ErrorLog /var/log/apache2/keystone.log
CustomLog /var/log/apache2/keystone_access.log combined
<Directory /usr/bin>
Require all granted
</Directory>
</VirtualHost>
# 开启认证服务虚拟主机
ln -s /etc/apache2/sites-available/wsgi-keystone.conf /etc/apache2/sites-enabled
# 重启Apache服务
service apache2 restart
# 删除默认的SQLite数据库
rm -f /var/lib/keystone/keystone.db
# 配置认证令牌
export OS_TOKEN=ADMIN_TOKEN
# 将 ADMIN_TOKEN 替换为前面步骤生成的认证令牌 token,即使用 5f0bb3f89a48dd07f295 来替换
# 配置端点URL
export OS_URL=http://controller:35357/v3
# 配置认证 API 版本
export OS_IDENTITY_API_VERSION=3
# 创建服务实体和身份认证服务:
openstack service create --name keystone --description "OpenStack Identity" identity
# 如果报以下错误
root@compute:~# openstack service create --name keystone --description "OpenStack Identity" identity
An unexpected error prevented the server from fulfilling your request. (HTTP 500) (Request-ID: req-f4f2c47d-28f6-4998-8101-8fb9cb9ecd24)
# 则需要重新同步数据库
su -s /bin/sh -c "keystone-manage db_sync" keystone
# 同步之后即可
root@compute:~# openstack service create --name keystone --description "OpenStack Identity" identity
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | OpenStack Identity |
| enabled | True |
| id | 98e2b3ca435f43e498b790dab05cc8be |
| name | keystone |
| type | identity |
+-------------+----------------------------------+
# 创建认证服务的 API 端点:
openstack endpoint create --region RegionOne identity public http://controller:5000/v3
openstack endpoint create --region RegionOne identity internal http://controller:5000/v3
openstack endpoint create --region RegionOne identity admin http://controller:35357/v3
# 创建域`default`
openstack domain create --description "Default Domain" default
# 创建项目`admin`
openstack project create --domain default --description "Admin Project" admin
# 创建用户`admin`
openstack user create --domain default --password-prompt admin
User Password: # 设置密码为 000000
Repeat User Password:
# 创建角色`admin`
openstack role create admin
# 为项目`admin`与用户`admin`添加角色`admin`
openstack role add --project admin --user admin admin
# 创建项目`service`
openstack project create --domain default --description "Service Project" service
# 因为安全性的原因,关闭临时认证令牌机制
vim /etc/keystone/keystone-paste.ini
# 从 [pipeline:public_api] ,[pipeline:admin_api] 和 [pipeline:api_v3] 部分删除 admin_token_auth
# 移除临时令牌`token`与访问URL
unset OS_TOKEN OS_URL
# 使用`amdin`用户请求令牌`token`
openstack --os-auth-url http://controller:35357/v3 \ --os-project-domain-name default --os-user-domain-name default --os-project-name admin --os-username admin token issue
Password:
# 为`admin`用户创建脚本
vim admin-openrc
export OS_PROJECT_DOMAIN_NAME=default
export OS_USER_DOMAIN_NAME=default
export OS_PROJECT_NAME=admin
export OS_USERNAME=admin
export OS_PASSWORD=000000
export OS_AUTH_URL=http://controller:35357/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
# 请求令牌`token`
source admin-openrc
openstack token issue
# 获得凭证并创建身份认证服务的凭证
source admin-openrc
openstack user create --domain default --password 000000 swift
openstack role add --project service --user swift admin
openstack service create --name swift --description "OpenStack Object Storage" object-store
# 创建对象存储服务 API 端点
openstack endpoint create --region RegionOne object-store public http://controller:8080/v1/AUTH_%
openstack endpoint create --region RegionOne object-store internal http://controller:8080/v1/AUTH_%
openstack endpoint create --region RegionOne object-store admin http://controller:8080/v1
# 安装软件包
apt-get install swift swift-proxy python-swiftclient python-keystoneclient python-keystonemiddleware memcached
# 创建 swift 目录
mkdir /etc/swift
# 配置文件
vim /etc/swift/proxy-server.conf
# 删除原有文件,直接添加如下内容
[DEFAULT]
bind_port = 8080
swift_dir = /etc/swift
user = 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:tempauth]
use = egg:swift#tempauth
user_admin_admin = admin .admin .reseller_admin
user_test_tester = testing .admin
user_test2_tester2 = testing2 .admin
user_test_tester3 = testing3
user_test5_tester5 = testing5 service
[filter:authtoken]
paste.filter_factory = keystonemiddleware.auth_token:filter_factory
auth_uri = http://controller:5000
auth_url = http://controller:35357
memcached_servers = controller:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = swift
password = 000000
delay_auth_decision = True
[filter:keystoneauth]
use = egg:swift#keystoneauth
operator_roles = admin,user
[filter:healthcheck]
use = egg:swift#healthcheck
[filter:cache]
memcache_servers = controller:11211
use = egg:swift#memcache
[filter:ratelimit]
use = egg:swift#ratelimit
[filter:domain_remap]
use = egg:swift#domain_remap
[filter:catch_errors]
use = egg:swift#catch_errors
[filter:cname_lookup]
use = egg:swift#cname_lookup
[filter:staticweb]
use = egg:swift#staticweb
[filter:tempurl]
use = egg:swift#tempurl
[filter:formpost]
use = egg:swift#formpost
[filter:name_check]
use = egg:swift#name_check
[filter:list-endpoints]
use = egg:swift#list_endpoints
[filter:proxy-logging]
use = egg:swift#proxy_logging
[filter:bulk]
use = egg:swift#bulk
[filter:slo]
use = egg:swift#slo
[filter:dlo]
use = egg:swift#dlo
[filter:container-quotas]
use = egg:swift#container_quotas
[filter:account-quotas]
use = egg:swift#account_quotas
[filter:gatekeeper]
use = egg:swift#gatekeeper
[filter:container_sync]
use = egg:swift#container_sync
[filter:xprofile]
use = egg:swift#xprofile
[filter:versioned_writes]
use = egg:swift#versioned_writes
# 配置文件
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
aliases = yellow, orange
[swift-constraints]
# 添加权限
chown -R root:swift /etc/swift
# 安装工具包:
apt-get install xfsprogs rsync
# 使用XFS格式化``/dev/sdb``设备:
在这一步需要将虚拟机关闭然后添加一块硬盘
mkfs.xfs /dev/sdb
# 创建挂载点目录结构:
mkdir -p /srv/node/sdb
# 编辑``/etc/fstab``文件并添加以下内容:
/dev/sdb1 /swift/node xfs noatime,nodiratime,nobarrier,logbufs=8 0 0
# 挂载设备
mount /dev/sdb /srv/node/sdb
# 编辑/etc/rsyncd.conf文件并添加以下内容
pid file = /var/run/rsyncd.pid
log file = /var/log/rsyncd.log
uid = swift
gid = swift
address = 127.0.0.1
[account]
path = /swift/node
read only = false
write only = no
list = yes
incoming chmod = 0644
outgoing chmod = 0644
max connections = 25
lock file = /var/lock/account.lock
[container]
path = /swift/node
read only = false
write only = no
list = yes
incoming chmod = 0644
outgoing chmod = 0644
max connections = 25
lock file = /var/lock/container.lock
[object]
path = /swift/node
read only = false
write only = no
list = yes
incoming chmod = 0644
outgoing chmod = 0644
max connections = 25
lock file = /var/lock/object.lock
[swift_server]
path = /etc/swift
read only = true
write only = no
list = yes
incoming chmod = 0644
outgoing chmod = 0644
max connections = 5
lock file = /var/lock/swift_server.lock
# 编辑 “/etc/default/rsync” 文件和启用 “rsync” 服务:
RSYNC_ENABLE=true
# 启动 “rsync” 服务:
service rsync start
# 编辑 /etc/swift/account-server.conf 文件,删除原有内容,直接添加以下内容
[DEFAULT]
bind_port = 6002
user = swift
swift_dir = /etc/swift
devices = /swift/node
mount_check = false
[pipeline:main]
pipeline = healthcheck recon account-server
[app:account-server]
use = egg:swift#account
[filter:healthcheck]
use = egg:swift#healthcheck
[filter:recon]
use = egg:swift#recon
recon_cache_path = /var/cache/swift
[account-replicator]
[account-auditor]
[account-reaper]
[filter:xprofile]
use = egg:swift#xprofile
# 编辑/etc/swift/container-server.conf文件,删除原有内容,直接添加以下内容:
[DEFAULT]
bind_port = 6001
user = swift
swift_dir = /etc/swift
devices = /swift/node
mount_check = false
[pipeline:main]
pipeline = healthcheck recon container-server
[app:container-server]
use = egg:swift#container
[filter:healthcheck]
use = egg:swift#healthcheck
[filter:recon]
use = egg:swift#recon
recon_cache_path = /var/cache/swift
[container-replicator]
[container-updater]
[container-auditor]
[container-sync]
[filter:xprofile]
use = egg:swift#xprofile
# 编辑/etc/swift/object-server.conf文件,删除原有内容,直接添加以下内容:
[DEFAULT]
bind_port = 6000
user = swift
swift_dir = /etc/swift
devices = /swift/node
mount_check = false
[pipeline:main]
pipeline = healthcheck recon object-server
[app:object-server]
use = egg:swift#object
[filter:healthcheck]
use = egg:swift#healthcheck
[filter:recon]
use = egg:swift#recon
recon_cache_path = /var/cache/swift
recon_lock_path = /var/lock
[object-replicator]
[object-reconstructor]
[object-updater]
[object-auditor]
[filter:xprofile]
use = egg:swift#xprofile
# 编辑文件/etc/swift/swift.conf 删除原有内容,添加如下内容:
[swift-hash]
swift_hash_path_suffix = changeme
swift_hash_path_prefix = changeme
[storage-policy:0]
name = Policy-0
default = yes
aliases = yellow, orange
[swift-constraints]
# 确认挂载点目录结构是否有合适的所有权:
chown -R swift:swift /etc/swift/node
# 创建 “recon” 目录和确保它有合适的所有权:
mkdir -p /var/cache/swift
chown -R root:swift /var/cache/swift
chmod -R 775 /var/cache/swift
chown -R root:swift /etc/swift
# 创建账户ring、切换到 ``/etc/swift``目录。创建基本 account.builder 文件:
cd /etc/swift
swift-ring-builder account.builder create 18 1 1
# 添加每个节点到 ring 中:
swift-ring-builder account.builder add --region 1 --zone 1 --ip 192.168.100.100 --port 6002 --device sdc1 --weight 100
Device d0r1z1-192.168.100.100:6002R192.168.100.100:6002/sdc1_"" with 100.0 weight got id 0
# 验证ring内容
swift-ring-builder account.builder
# 平衡ring
swift-ring-builder account.builder rebalance
# 创建ring容器、切换到 ``/etc/swift``目录。创建基本``container.builder``文件:
cd /etc/swift
swift-ring-builder container.builder create 10 1 1
# 添加每个节点到 ring 中:
swift-ring-builder container.builder add --region 1 --zone 1 --ip 192.168.100.100 --port 6001 --device sdc1 --weight 100
Device d0r1z1-192.168.100.100:6001R192.168.100.100:6001/sdc1_"" with 100.0 weight got id 0
# 验证 ring 的内容:
swift-ring-builder container.builder
# 平衡 ring:
swift-ring-builder container.builder rebalance
# 创建Ring对象、切换到 ``/etc/swift``目录。创建基本``object.builder``文件:
swift-ring-builder object.builder create 10 1 1
# 添加每个节点到 ring 中:
swift-ring-builder object.builder add --region 1 --zone 1 --ip 192.168.100.100 --port 6000 --device sdc1 --weight 100
Device d0r1z1-192.168.100.100:6000R192.168.100.100:6000/sdc1_"" with 100.0 weight got id 0
# 验证 ring 的内容:
swift-ring-builder object.builder
# 平衡 ring:
swift-ring-builder object.builder rebalance
service memcached restart
service swift-proxy restart
swift-init all start
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。