尝试基于centos7搭建openstack的keystone+swift服务

按照官网教程搭建swift+keystone服务
系统: CentOS7
linux内核: 3.10.0-693.el7.x86_64
controller节点ip: 192.168.3.241
object3节点ip: 192.168.3.202
object4节点ip: 192.168.3.203
搭建服务所需的环境
https://docs.openstack.org/install-guide/
配置域名解析
控制节点
#vi /etc/hosts 添加如下:
192.168.3.2 controller1
192.168.3.202 object3
192.168.3.203 object4
#scp -r /etc/hosts 192.168.3.202:/etc/hosts
#scp -r /etc/hosts 192.168.3.203:/etc/hosts 更换存储节点的主机解析文件
问题:controller节点 scp -r /etc/hosts 192.168.3.202:/etc/hosts提示找不到命令。
解决方法:下载openssh-clients,如果仍然找不到命令,则因为B机器也没有openssh-clients,也下载一个。
如下图1
在这里插入图片描述

设置ntp时间同步
#vi /etc/chrony.conf
注释下面4个
server 0.centos.pool.ntp.org iburst
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
server 3.centos.pool.ntp.org iburst

添加国家ntp服务器
server 210.72.145.44 iburst
允许object节点连接controller节点chrony后台进程
allow 192.168.3.202/24
allow 192.168.3.203/24
设置如下图2
在这里插入图片描述

启动chrony并使能开机自启动,并查看状态
#systemctl restart chronyd && systemctl enable chronyd && systemctl status chronyd
结果如下图3
在这里插入图片描述

2个存储节点
都配置如下图4
在这里插入图片描述

#systemctl restart chronyd && systemctl enable chronyd && systemctl status
控制节点执行#chronyc sources 如下图5
在这里插入图片描述

存储节点执行#chronyc sources 如下图6
在这里插入图片描述

不出意外,另一个存储节点也是如上图
openstack软件包安装
note1:从Ussuri版本开始需要使用Centos8,我centos7用的queens版本。
版本顺序如下图7
在这里插入图片描述

note2:所有节点都执行这些操作
note3:禁用或删除自动更新服务,不然会影响openstack环境。我没有
warning1:我们建议在使用RDO软件包时禁用EPEL,因为EPEL中的更新会破坏向后兼容性。或者,最好是使用yum-versionlock插件固定封装版本。到时候安装数据库的时候会有perl。
https://www.jb51.net/os/RedHat/154256.html
#yum install centos-release-openstack-queens 安装这个包以启用openstack存储库(queens,其他版本改后缀即可)。
#yum install python-openstackclient 安装openstack软件包。controller节点安装时出现如下错误
Delta RPMs disabled because /usr/bin/applydeltarpm not installed,并导致下载python2-netaddr-0.7.19-5.el7.n FAILED。
解决办法
#yum install deltarpm
#yum update
具体参考下面链接。 https://www.cyberciti.biz/faq/delta-rpms-disabled-because-applydeltarpm-not-installed/
#yum install openstack-selinux 安装这个自动管理openstack服务的安全策略,即不需要对selinux关闭了吧!
安装mariadb数据库
#yum install mariadb mariadb-server python2-PyMySQL 安装mariadb及其相关软件包
贼拉慢!
加速参考如下: https://blog.csdn.net/p__csdn/article/details/72675840
加速后很快,但有个错误如下图8
在这里插入图片描述

解决方法:#yum remove yum mariadb-config-3:10.1.20-2.el7.x86_64 mariadb-common-3:10.1.20-2.el7.x86_64(作为依赖被一起移除了)
#vi /etc/my.cnf.d/openstack.cnf 新建文件,添加如下内容:
[mysqld]
bind-address = 192.168.3.2 #/controller节点ip/
default-storage-engine = innodb
innodb_file_per_table = on
max_connections = 4096
collation-server = utf8_general_ci
character-set-server = utf8
IP本来是192.168.3.241,被挤掉了。重新设置IP为192.168.3.2并绑定MAC地址。
#systemctl enable mariadb && systemctl start mariadb 启动失败,报错如下图9:
在这里插入图片描述

解决办法:因为vi里识别不出/**/符号,所以/etc/my.cnf.d/openstack.cnf识别不出IP了,注释用#号。
bind-address = 192.168.3.2 #/控制节点ip/
note:当出现此类错误时,首先查看IP是否正确,或者有一些其他符号!

消息队列rabbitmq
控制节点

#yum install rabbitmq-server 安装rabbitmq消息队列(太慢了),快速下载参考如下:
https://blog.csdn.net/weixin_43367366/article/details/90512075
开机启动
#chkconfig rabbitmq-server on

开启管理页面
#rabbitmq-plugins enable rabbitmq_management

运行
#/sbin/service rabbitmq-server start

添加用户openstack,密码为RABBIT_PASS
#rabbitmqctl add_user openstack RABBIT_PASS

允许用户配置,写入和读取访问权限 openstack
#rabbitmqctl set_permissions openstack “.” “.” “.*”
错误:Error: unable to perform an operation on node ‘rabbit@controller’. Please see diagnostics information and suggestions below
解决办法:yum install openstack-selinux 之前安装的这个selinux策略没了,再装一次就好了。
错误:netstat -ntulp | grep 5672 找不到端口15672
解决办法:#reboot 刷新一下
错误:从浏览器输入http://192.168.3.2:15672时间过长无法进入
解决办法:controller节点的防火墙没开放端口,
firewall-cmd --permanent --zone=public --add-port=5672/tcp
firewall-cmd --permanent --zone=public --add-port=15672/tcp
firewall-cmd --permanent --zone=public --add-port=25672/tcp
firewall-cmd --reload 更新防火墙

从浏览器进入如下图10:
在这里插入图片描述

账号:guest 密码:guest 登录不进去。原因:3.3.0版本后的rabbitmq禁止guest通过localhost外访问。
修改配置文件参考链接:https://blog.csdn.net/qq_18671415/article/details/103956179

安装memcached快速存取
#yum install memcached python-memcached 安装包
#vi /etc/sysconfig/memcached 编辑文件,改变下面这行
OPTIONS="-l 127.0.0.1,::1,192.168.3.2" 增加controller1的IP地址,即192.168.3.2

设置开机自启,并启动
#systemctl enable memcached.service
#systemctl start memcached.service
基础环境安装完毕!

keystone服务安装教程
https://docs.openstack.org/keystone/queens/install/

keystone的安装和配置(控制节点)
#mysql -u root -p root身份进入数据库服务器

创建keystone数据库
MariaDB [(none)]> CREATE DATABASE keystone;

赋予ALL权限
MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO ‘keystone’@‘localhost’
IDENTIFIED BY ‘KEYSTONE_DBPASS’;
MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO ‘keystone’@’%’
IDENTIFIED BY ‘KEYSTONE_DBPASS’;

安装所需包
#yum install openstack-keystone httpd mod_wsgi
note:#…不要删除
#/etc/keystone/keystone.conf 编辑配置文件如下:
[database]
#…
connection = mysql+pymysql://keystone:KEYSTONE_DBPASS@controller1/keystone

[token]
#…
provider = fernet

填充身份认证数据库
#su -s /bin/sh -c “keystone-manage db_sync” keystone

初始化fernet密钥仓库
#keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
#keystone-manage credential_setup --keystone-user keystone --keystone-group keystone
执行命令后/etc/keystone/路径出现如下图11文件夹:
在这里插入图片描述

文件夹里有0和1文件,里面是密钥。

note:queens之前的版本,为了适应V2 API,keystone会需要2个端口,一个5000用于public和internal,一个35357专用于admin。而我使用的queens版本和V3 API,因此5000端口就ok啦!
#keystone-manage bootstrap --bootstrap-password ADMIN_PASS
–bootstrap-admin-url http://controller1:5000/v3/
–bootstrap-internal-url http://controller1:5000/v3/
–bootstrap-public-url http://controller1:5000/v3/
–bootstrap-region-id RegionOne

bootstrap引导会创建默认domian“default”,project”admin“,user”admin“,region“RegionOne”,3个端点(即admin和internal以及public3个url)

#vi /etc/httpd/conf/httpd.conf 编辑文件,添加如下内容:
ServerName controller1
note:如果controller1未注册为域名,则改为IP地址

创建/usr/share/keystone/wsgi-keystone.conf的软连接
#ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/

启动apache服务器并设置开机启动
#systemctl enable httpd.service
#systemctl start httpd.service

配置临时环境变量(后面会创建脚本,添加永久环境变量,他们的区别在于现在OS_PASSWORD用的ADMIN_PASS,后面创建认证服务时会要求设置一个密码,提高安全性)
#export OS_USERNAME=admin
#export OS_PASSWORD=ADMIN_PASS
#export OS_PROJECT_NAME=admin
#export OS_USER_DOMAIN_NAME=Default
#export OS_PROJECT_DOMAIN_NAME=Default
#export OS_AUTH_URL=http://controller1:5000/v3
#export OS_IDENTITY_API_VERSION=3
执行完环境变量后,会有default默认域

创建domian,projects,users,roles
创建domain(域)
#openstack domain create --description “An Example Domain” example
bootstrap引导会创建默认域“default”,项目”admin“,用户”admin“,我使用默认域,创建service项目
#openstack project create --domain default
–description “Service Project” service
报错如下
Failed to discover available identity versions when contacting http://controller1:5000/v3. Attempting to parse version from URL.
Unable to establish connection to http://controller1:5000/v3/auth/tokens: HTTPConnectionPool(host=‘controller1’, port=5000): Max retries exceeded with url: /v3/auth/tokens (Caused by NewConnectionError(’<requests.packages.urllib3.connection.HTTPConnection object at 0x7f9f53575ad0>: Failed to establish a new connection: [Errno 111] \xe6\x8b\x92\xe7\xbb\x9d\xe8\xbf\x9e\xe6\x8e\xa5’,))
参考链接
https://bugs.launchpad.net/ubuntu/+source/heat/+bug/1786405
https://bugzilla.redhat.com/show_bug.cgi?id=1490883
解决办法
#keystone-manage bootstrap --bootstrap-password ADMIN_PASS
–bootstrap-admin-url http://controller1:5000/v3/
–bootstrap-internal-url http://controller1:5000/v3/
–bootstrap-public-url http://controller1:5000/v3/
–bootstrap-region-id RegionOne
基本引导时,主机名controller忘记有个1,后来重新引导也没用。还是删掉keystone数据库重新执行一边操作,成功!

创建project(项目),项目名“service”,“service”项目处于“default”域,项目简介“Service Project”
#openstack project create --domain default
–description “Service Project” service
在这里插入图片描述图12

创建demo项目,项目名”demo“,”demo“项目处于”default“域,项目简介”Demo Project“
#openstack project create --domain default
–description “Demo Project” demo
在这里插入图片描述图13

创建user(用户),用户名“demo,”提示创建密码,我用默认密码DEMO_PASS
#openstack user create --domain default
–password-prompt demo
错误:Missing value auth-url required for auth plugin password
解决办法:环境变量没了,重新配置环境变量。
#export OS_USERNAME=admin
#export OS_PASSWORD=ADMIN_PASS
#export OS_PROJECT_NAME=admin
#export OS_USER_DOMAIN_NAME=Default
#export OS_PROJECT_DOMAIN_NAME=Default
#export OS_AUTH_URL=http://controller1:5000/v3
#export OS_IDENTITY_API_VERSION=3
在这里插入图片描述图14

创建role(角色),角色名“user“
#openstack role create user
赋予demo用户以user角色
#openstack role add --project demo --user demo user

验证操作
撤销下面2个环境变量
#unset OS_AUTH_URL OS_PASSWORD

作为admin用户请求认证令牌,认证端口”http://controller1:35357/v3“,admin项目和admin用户所在的域名”Default“,admin项目名”admin“,admin用户名”admin“
#openstack --os-auth-url http://controller1:35357/v3
–os-project-domain-name Default --os-user-domain-name Default
–os-project-name admin --os-username admin token issue
提示输入密码:ADMIN_PASS。如下图15在这里插入图片描述
然而,官网讲过,queens版本之后,keystone的认证统一用5000端口,因此用以上命令,但端口改为5000,同样可以认证,如下图16。后面的脚本创建验证了我的想法!
在这里插入图片描述

作为demo用户请求令牌,认证端口”http://controller1:5000/v3“,demo项目和demo用户所在的域名”Default“,demo项目名”demo“,demo用户名”demo“
#openstack --os-auth-url http://controller1:5000/v3
–os-project-domain-name Default --os-user-domain-name Default
–os-project-name demo --os-username demo token issue
错误:The request you have made requires authentication. (HTTP 401) (Request-ID: req-7169f35a-0099-4ee5-8f36-3cda42dd76c0)
解决办法:因为环境变量有OS_AUTH_URL OS_PASSWORD,与认证命令行的–os-auth-url冲突。
#unset OS_AUTH_URL OS_PASSWORD
结果如下图17
在这里插入图片描述

创建admin和demo的环境变量脚本(方便他们转换)
note:注重安全的话,脚本最好放在隐秘的地方。
#vi 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=ADMIN_PASS
export OS_AUTH_URL=http://controller1:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2

#vi demo-openrc 内容如下:
export OS_PROJECT_DOMAIN_NAME=Default
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_NAME=demo
export OS_USERNAME=demo
export OS_PASSWORD=DEMO_PASS
export OS_AUTH_URL=http://controller1:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2

使用admin的环境变量
#source admin-openrc
demo同理。

然后请求认证令牌
#openstack token issue
keystone服务安装完成!

swift服务安装教程
https://docs.openstack.org/swift/queens/install/
控制节点的安装和配置
#source admin-openrc 配置为admin环境变量
创建认证服务凭据:通俗讲就是swift存储请求认证,认证通过后,keystone服务会开个证明,证明认证已通过。

创建user(用户),用户名”swift“,输入新密码:SWIFT_PASS(我的)
#openstack user create --domain default --password-prompt swift
在这里插入图片描述图18

把admin角色添加给swift用户
#openstack role add --project service --user swift admin

创建swift服务实体,服务名“swift”,服务类型“object-store”,其他服务类型有“compute”,“identity”,“image”,“volume”等。
#openstack service create --name swift
–description “OpenStack Object Storage” object-store
在这里插入图片描述图19

创建对象存储服务API端点,区域“RegionOne”,类型“object-store”,接口“public“,端口”8080“
#openstack endpoint create --region RegionOne
object-store public http://controller1:8080/v1/AUTH_%(project_id)s
在这里插入图片描述图20

同上类似,区别在于接口”internal“
#openstack endpoint create --region RegionOne
object-store internal http://controller1:8080/v1/AUTH_%(project_id)s
在这里插入图片描述图21

同上类似,区别在于接口”admin“
#openstack endpoint create --region RegionOne
object-store admin http://controller1:8080/v1
在这里插入图片描述图22

控制节点安装和配置组件

安装软件包,依次是swift代理,swift客户端,keystone客户端,keystone中间组件
#yum install openstack-swift-proxy python-swiftclient
python-keystoneclient python-keystonemiddleware
memcached

获取swift代理配置文件
#curl -o /etc/swift/proxy-server.conf https://opendev.org/openstack/swift/raw/branch/stable/queens/etc/proxy-server.conf-sample
note:默认配置文件因分发而异。

编辑/etc/swift/proxy-server.conf
#vi /etc/swift/proxy-server.conf 内容如下:
配置绑定端口,用户,配置路径
[DEFAULT]

bind_port = 8080
user = swift
swift_dir = /etc/swift

在这里插入图片描述如上图23,
移除tempurl和tempauth,添加authtoken和keystoneauth
我的tempurl和tempauth位置,那么pipeline中的模块应该按照下面的顺序
[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
上图23注释内容大概意思是默认的pipeline内容用于SAIO设备和测试,要注释掉。把下面默认注释的pipeline给它解注释,用下面的pipeline模块。
?????待验证:
然而下面的比官网内容多了tempurl和copy和symlink,先删掉,后面出错了再加上试试。
note:不要改变模块顺序

使能自动创建账户
[app:proxy-server]
use = egg:swift#proxy

account_autocreate = True

配置操作者的角色
[filter:keystoneauth]
use = egg:swift#keystoneauth

operator_roles = admin,user

配置认证服务入口
[filter:authtoken]
paste.filter_factory = keystonemiddleware.auth_token:filter_factory

www_authenticate_uri = http://controller1:5000
auth_url = http://controller1:35357
memcached_servers = controller1:11211
auth_type = password
project_domain_id = default
user_domain_id = default
project_name = service
username = swift
password = SWIFT_PASS
delay_auth_decision = True
note:注释或删除[filter:authtoken]内的其他选项

配置memcached位置
[filter:cache]
use = egg:swift#memcache

memcache_servers = controller:11211

存储节点先决条件
note:每个存储结点都执行以下步骤
安装软件包
#yum install xfsprogs rsync

将sdb和sdc格式化为xfs文件系统
#mkfs.xfs /dev/sdb
#mkfs.xfs /dev/sdc
如下图24
在这里插入图片描述

创建挂载点路径
#mkdir -p /srv/node/sdb
#mkdir -p /srv/node/sdc

编辑/etc/fstab文件,添加如下内容:
#vi /etc/fs
/dev/sdb /srv/node/sdb xfs noatime,nodiratime,nobarrier,logbufs=8 0 2
/dev/sdc /srv/node/sdc xfs noatime,nodiratime,nobarrier,logbufs=8 0 2

把sdb和sdc磁盘分别挂载到/srv/node/sdb和sdv/node/sdc
#mount /dev/sdb /srv/node/sdb
#mount /dev/sdc /srv/node/sdc

创建并编辑/etc/rsyncd.conf,note:复制以下内容记得改相应存储节点IP。
添加如下内容:
uid = swift
gid = swift
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
address = MANAGEMENT_INTERFACE_IP_ADDRESS#为存储结点的IP地址

[account]
max connections = 2
path = /srv/node/
read only = False
lock file = /var/lock/account.lock

[container]
max connections = 2
path = /srv/node/
read only = False
lock file = /var/lock/container.lock

[object]
max connections = 2
path = /srv/node/
read only = False
lock file = /var/lock/object.lock
note:rsync服务需要无验证,因此考虑在内网生产环境运行它。

启动并使能开机自启
#systemctl start rsyncd.service
#systemctl enable rsyncd.service

存储结点安装和配置组件
note:每个存储结点都执行以下步骤
安装软件包
#yum install openstack-swift-account openstack-swift-container openstack-swift-object

获取account,container,object服务配置文件
#curl -o /etc/swift/account-server.conf https://opendev.org/openstack/swift/raw/branch/stable/queens/etc/account-server.conf-sample
#curl -o /etc/swift/container-server.conf https://opendev.org/openstack/swift/raw/branch/stable/queens/etc/container-server.conf-sample
#curl -o /etc/swift/object-server.conf https://opendev.org/openstack/swift/raw/branch/stable/queens/etc/object-server.conf-sample

编辑/etc/swift/account-server.conf文件并添加以下内容:
配置绑定IP,绑定端口,用户,swift路径,挂载路径
[DEFAULT]

bind_ip = MANAGEMENT_INTERFACE_IP_ADDRESS #替换为存储节点IP
bind_port = 6202
user = swift
swift_dir = /etc/swift
devices = /srv/node
mount_check = True

使能[pipeline:main]适当模块
[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 = MANAGEMENT_INTERFACE_IP_ADDRESS
bind_port = 6201
user = swift
swift_dir = /etc/swift
devices = /srv/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 = MANAGEMENT_INTERFACE_IP_ADDRESS
bind_port = 6200
user = swift
swift_dir = /etc/swift
devices = /srv/node
mount_check = True

[pipeline:main]
pipeline = healthcheck recon container-server

[filter:recon]
use = egg:swift#recon

recon_cache_path = /var/cache/swift

确保挂载点及其目录下具有权限
#chown -R swift:swift /srv/node

创建缓存路径并确保权限
#mkdir -p /var/cache/swift
#chown -R root:swift /var/cache/swift
#chmod -R 775 /var/cache/swift

创建和分发初始化环
note:控制节点执行以下步骤
介绍:启动对象存储服务之前,必须创建初始化的account,container,object环。通过account-ring-builder、container-ring-builder、object-ring-builder创建配置文件,这些配置文件作用:在每个节点决定和配置存储结构。而官网指南为了简单起见,使用了1个region和2个zone,它们有2^10(1024)最大分区,每个存储实体(object)具有3个副本,移动分区的时间间隔是1小时。对于存储节点,1个分区相当于存储节点上挂载的磁盘路径,而不是传统意义上的分区表。

创建account环
切换路径到/etc/swift。
创建基础的account.builder文件,
#swift-ring-builder account.builder create 10 3 1

把每个存储节点添加到环,192.168.3.202是我存储节点的IP,sdb是存储节点上的磁盘名,100是所占权重。因为每个存储节点分配了2个磁盘,所以要执行如下:

note:192.168.3.202上的sdb
#swift-ring-builder account.builder add --region 1 --zone 1 --ip 192.168.3.202 --port 6202 --device sdb --weight 100

note:192.168.3.202上的sdc
#swift-ring-builder account.builder add --region 1 --zone 1 --ip 192.168.3.202 --port 6202 --device sdc --weight 100

note:192.168.3.203的sdb
#swift-ring-builder account.builder add --region 1 --zone 2 --ip 192.168.3.203 --port 6202 --device sdb --weight 100

note:192.168.3.203的sdc
#swift-ring-builder account.builder add --region 1 --zone 2 --ip 192.168.3.203 --port 6202 --device sdc --weight 100

验证account环内容
#swift-ring-builder account.builder
在这里插入图片描述图25

重新平衡account环
#swift-ring-builder account.builder rebalance
在这里插入图片描述图26

创建container环
进入/etc/swift路径
创建container环文件
#swift-ring-builder container.builder create 10 3 1

与account类似
#swift-ring-builder container.builder add --region 1 --zone 1 --ip 192.168.3.202 --port 6201 --device sdb --weight 100

#swift-ring-builder container.builder add --region 1 --zone 1 --ip 192.168.3.202 --port 6201 --device sdc --weight 100

#swift-ring-builder container.builder add --region 1 --zone 2 --ip 192.168.3.203 --port 6201 --device sdb --weight 100

#swift-ring-builder container.builder add --region 1 --zone 2 --ip 192.168.3.203 --port 6201 --device sdc --weight 100

验证container环
#swift-ring-builder container.builder
在这里插入图片描述图27

重新平衡container环
#swift-ring-builder container.builder rebalance
在这里插入图片描述图28

创建object环
创建object环文件
进入/etc/swift路径
#swift-ring-builder object.builder create 10 3 1

与account类似
#swift-ring-builder object.builder add --region 1 --zone 1 --ip 192.168.3.202 --port 6200 --device sdb --weight 100

#swift-ring-builder object.builder add --region 1 --zone 1 --ip 192.168.3.202 --port 6200 --device sdc --weight 100

#swift-ring-builder object.builder add --region 1 --zone 2 --ip 192.168.3.203 --port 6200 --device sdb --weight 100

#swift-ring-builder object.builder add --region 1 --zone 2 --ip 192.168.3.203 --port 6201 --device sdc --weight 100

验证object环
#swift-ring-builder object.builder
在这里插入图片描述图29

重新平衡环
#swift-ring-builder object.builder rebalance
在这里插入图片描述图30

分发环配置文件
account.ring.gz,container.ring.gz,object.ring.gz分发到所有存储节点和运行存储代理服务的节点。我控制节点运行的代理服务,因此只需要分发至存储节点了。
在/etc/swfit路径,执行
#scp account.ring.gz container.ring.gz object.ring.gz 192.168.3.202:/etc/swift
#scp account.ring.gz container.ring.gz object.ring.gz 192.168.3.203:/etc/swift
在这里插入图片描述图31

获得/etc/swift/swift.conf文件
curl -o /etc/swift/swift.conf https://opendev.org/openstack/swift/raw/branch/stable/queens/etc/swift.conf-sample

编辑/etc/swift/swift.conf如下内容:
[swift-hash]

swift_hash_path_suffix = HASH_PATH_SUFFIX
swift_hash_path_prefix = HASH_PATH_PREFIX
将HASH_PATH_SUFFIX和HASH_PATH_PREFIX替换成随机数。
warning:这2个值藏好,不要改变或丢失。
随机数获得方法:输出9位 16进制数。
#openssl rand -hex 9
在这里插入图片描述
图32

配置默认存储策略
[storage-policy:0]

name = Policy-0
default = yes

将swift.conf复制到所有存储节点和运行存储代理服务的节点
#scp /etc/swift/swift.conf 192.168.3.202:/etc/swift
#scp /etc/swift/swift.conf 192.168.3.203:/etc/swift

确保所有节点/etc/swift的权限,所有节点运行以下命令
#chown -R root:swift /etc/swift

在控制节点和运行存储代理服务的节点执行如下命令,启动并设置开机启动
#systemctl enable openstack-swift-proxy memcached
#systemctl start openstack-swift-proxy memcached

在所有存储结点执行,启动对象存储服务并配置开机启动
#systemctl enable openstack-swift-account openstack-swift-account-auditor openstack-swift-account-reaper openstack-swift-account-replicator
#systemctl start openstack-swift-account openstack-swift-account-auditor openstack-swift-account-reaper openstack-swift-account-replicator

#systemctl enable openstack-swift-container openstack-swift-container-auditor openstack-swift-container-replicator openstack-swift-container-updater
#systemctl start openstack-swift-container openstack-swift-container-auditor openstack-swift-container-replicator openstack-swift-container-updater

#systemctl enable openstack-swift-object openstack-swift-object-auditor openstack-swift-object-replicator openstack-swift-object-updater
#systemctl start openstack-swift-object openstack-swift-object-auditor openstack-swift-object-replicator openstack-swift-object-updater

执行如下命令查看服务状态
#systemctl start openstack-swift-account openstack-swift-account-auditor openstack-swift-account-reaper openstack-swift-account-replicator
报错如下图33
在这里插入图片描述

解决办法:查看错误日志,提示没有权限,首先查看了/srv/node的拥有者和所属组#ls -la /srv/node,
都是swift没错。然后查看端口是否打开,#netstat -ntulp | grep 62,发现只有6202端口没开,这就奇怪了!于是打开account-server.conf文件发现如下图,应是bind_ip把红色方框也算作IP内容了,删掉了红色框内容,重启服务,服务都是active了!
在这里插入图片描述
图34

结果又还出现如下图35错误
在这里插入图片描述

查看错误日志,仍然提示OSError: [Errno 13] Permission denied: '/srv/node/sdb/objects
https://support.huaweicloud.com/trouble-kunpengcpfs/kunpengopenstackstein_09_0010kunpengopenstackstein_09_0010.html
华为云openstack stein故障案例
参考上面链接,执行#restorecon -R /srv,然后重启服务,终于完全行了!
在这里插入图片描述图36

验证操作
note:以下操作在控制节点执行
warning:如果下面有步骤不起作用,查看/var/log/audit/audit.log的内容,若有内容表明swift进程被拒绝,那么改变/srv/node的selinux安全上下文为最低级别。命令如下:
#chcon -R system_u:object_r:swift_data_t:s0 /srv/node
查看安全上下文
#ll -dZ /srv/node

重新挂载一下
环境变量设为demo
#source ~/demo-openrc

显示swift服务状态
#swift stat
报错如下图37:
在这里插入图片描述

ConnectionError: HTTPConnectionPool(host=‘controller1’, port=8080): Max retries exceeded with url: /v1/AUTH_4bd96244b1474bf0897e9a24bbbebedb (Caused by NewConnectionError(’<requests.packages.urllib3.connection.HTTPConnection object at 0x7f1553af6290>: Failed to establish a new connection: [Errno 111] Connection refused’,))
HTTPConnectionPool(host=‘controller1’, port=8080): Max retries exceeded with url: /v1/AUTH_4bd96244b1474bf0897e9a24bbbebedb (Caused by NewConnectionError(’<requests.packages.urllib3.connection.HTTPConnection object at 0x7f1553af6290>: Failed to establish a new connection: [Errno 111] Connection refused’,))
解决办法:#netstat -ntulp | grep 8080,发现端口都没活动。防火墙打开端口也没用。可能是swift-proxy.conf文件出错,#systemctl status openstack-swift-proxy查看服务状态,发现如下图38
在这里插入图片描述

我特么顿时就傻了啊,模块名打错了(我自己都不信),改好,重启swift代理服务,再重启httpd服务确保一下,没有错误了!

错误:#swift stat --debug特么卡住不动了啊,如下图39:
在这里插入图片描述

解决方法:#cat /var/log/messages | tail -n 50,如下图40:
在这里插入图片描述

UnicodeDecodeError: ‘ascii’ codec can’t decode byte 0xe6 in position 41: ordinal not in range(128) 淦!解码错误!python编码相关的,科学上网查了也没解决,不玩了!卒!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CentOS 7是一种流行的Linux操作系统,而OpenStack是一个开源的云计算平台。在CentOS 7上安装和配置OpenStack可以提供强大的云计算功能。下面是CentOS 7上安装和配置OpenStack的一般步骤: 1. 配置控制节点的yum源: - 进入`/etc/yum.repos.d`目录:`cd /etc/yum.repos.d` - 清空该目录下的所有文件:`rm -rf *` - 创建并编辑`centos.repo`文件:`vi centos.repo` - 在文件中添加以下内容: ``` [centos] name=centos baseurl=file:///opt/centos gpgcheck=0 enabled=1 [iaas] name=iaas baseurl=file:///opt/iaas/iaas-repo gpgcheck=0 enabled=1 ``` - 保存并退出文件。 2. 挂载CentOS 7安装光盘: - 使用以下命令挂载ISO文件到`/mnt/`目录:`mount -o loop /root/CentOS-7-x86_64-DVD-1804.iso /mnt/` - 创建一个目录用于存放挂载的文件:`mkdir /opt/centos` - 将光盘中的文件复制到新创建的目录中:`cp -rvf /mnt/* /opt/centos` - 卸载ISO文件:`umount /mnt/` 3. 安装和配置OpenStack: - 安装OpenStack所需的软件包和依赖项。 - 配置网络和主机名。 - 配置数据库和消息队列。 - 配置认证服务Keystone)。 - 配置计算服务(Nova)。 - 配置网络服务(Neutron)。 - 配置镜像服务(Glance)。 - 配置块存储服务(Cinder)。 - 配置对象存储服务Swift)。 - 配置仪表板服务(Horizon)。 请注意,以上只是一般的步骤,实际安装和配置OpenStack可能会有所不同,具体步骤和配置取决于你的需求和环境。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值