对于想了解OpenStackSwiftAccountReaper的读者,本文将提供新的信息,并且为您提供关于AukletOpenStackSwift海量小文件解决方案、Django-account.m
对于想了解OpenStack Swift Account Reaper的读者,本文将提供新的信息,并且为您提供关于Auklet OpenStack Swift 海量小文件解决方案、Django - account.models.Account 未声明显式 app_label 并且在使用 pinax 通知时不在 INSTALLED_APPS 中的应用程序中、git push 错误:对“{present Account}/repo.git/”的权限被拒绝给 {before account}、OpenStack iaas-install-swift-controller.sh的有价值信息。
本文目录一览:- OpenStack Swift Account Reaper
- Auklet OpenStack Swift 海量小文件解决方案
- Django - account.models.Account 未声明显式 app_label 并且在使用 pinax 通知时不在 INSTALLED_APPS 中的应用程序中
- git push 错误:对“{present Account}/repo.git/”的权限被拒绝给 {before account}
- OpenStack iaas-install-swift-controller.sh
OpenStack Swift Account Reaper
翻译Swift官方文档 Account Reaper介绍,Swift中acconut的删除使用了那些策略和方法,看了这篇文档相信会有帮助。
The Account Reaper 账户收割器
账户收割器在后台移除被删除账户的数据。
一个账户被被标记为删除通过一个reseller发出的DELETE请求在账户的存储URL。这个简单的将值DELETE放到表account_stat中的状态栏在账户数据库中(和副本),指明这个账户的数据应该在稍后被删除。
通常下不会设置保留时间和复原。假设reseller实现了这些特性,只要调用DELETE在账户上一次就真的会得到账户的数据被移除。然而,为了保护Swift集群账户从一个不正常的或者是错误的删除请求。你可以设置delay_reaping值在[account-reaper]部分在account-erver.conf去延迟真是的数据删除。在这时,这没有时间的工具删除一个账户;必须直接更新账户数据库副本,设置状态栏位空字符串,然后更新put_timestamp 大于delete_timestamp。(在TODO列表正在写一个工具去执行这项任务,较好的通过一个ReST 调用)。
账户收割器运行在每一个账户服务器然后不定期的扫描服务器内被标记为删除的的账户数据库。它只会触发账户,服务器是主要的节点,为了让账户服务器不是所有的都尝试去做同样的工作在同一个时刻。使用多个服务器删除一个账户可能提升删除的速度。但是需要协调他们不去重复劳动。数据删除时的速度并没有过多的担心,因为大账户没有被频繁的删除。
账号的删除过程是相等直接的。账户中的每一个容器,每一个对象被删除然后容器被删除。所有删除请求失败不会停止整个的删除过程,但是会导正这个那个过程最终失败(例如,如果一个对象删除超时,容器将不会被删除,因此账户也不会被删除)。整个处理过程既是失败也要继续执行,以便于它不会因为麻烦的问题而打断恢复集群空间。账户收割器将持续的尝试删除账户直到最终变成空,数据库在db_replicator中收回,最终移除数据库文件。
History
起初,一个简单的完全通过外部调用来删除账户的方法被考虑,因为它不需要改变这个系统。所有的数据将会被简单的删除在同一种方式,在真实的用户,通过公用的ReST的API,然而,负面的是它将使用代理资源和记录所有的信息,尽管可能不需要那么做。因此,它需要一个专用的服务器或者是两台,只是为了发起删除的请求。
一个完全自下而上的途径也被考虑,对象和容器的服务器将不定期的扫描数据,它们掌握和检查是否账户已经被删除了,如果是这样的话,就移除数据。好处是对回收的速度没有影响在代理和日志,但是坏处将近100%的扫描导致没有目的的活动造成大量的I/O负载。
一个容器服务器中心途径也被考虑过,账户务器可以标记所有的容器来为删除,然后容器服务器将删除对象在每一个容器和它们自己。这对于有大量账户的容器很有益处,但是有负面的是由相当大的负载峰值。这个过程可能将会慢下来去缓和这个负载峰值,但是快速回收的益处将消失然后会留下更复杂的过程。因此,扫描所有被标记为删除的容器当大多数的不会被视为是浪费的。 db_replicator可以做这份工作同时执行它的复制扫描,但是它将不得不产生和记录删除过程,啃起来不必要的复复杂性。
最后,账户服务器中心法看起来是最佳的。
Auklet OpenStack Swift 海量小文件解决方案
Auklet 介绍
Auklet 是 OpenSwift Swift 对象服务器的重新实现,旨在解决在 OpenStack Swift 中存储大量小文件时的问题。Auklet
基于 OpenStack Swift 和 Hummingbird,由爱奇艺开源。
功能特性
-
保留大部分 OpenStack Swift 特性
-
有效解决 LOSF 问题
-
对大型的对象存储进行优化
-
针对复制引擎的惰性迁移(lazy migration),可从现有的 Swift 复制引擎进行零迁移工作。不过仍处于实验性阶段
限制
- 不支持 EC
OpenStack Swift 是一个开源的分布式对象存储系统,爱奇艺自从2012年便开始使用
Swift,其所具有的简单易运维等特点,非常适合爱奇艺的业务,因此其在爱奇艺发挥了非常重要的作用。
爱奇艺作为一家视频公司,自然而然的 Swift
一开始主要也是用来存储视频文件,随着公司业务的高速发展,除了视频之外,一些其他的类型的存储需求也大了起来,比如说图片,文本等。当这些类型的图片存得越来越多的时候,一些对性能非常敏感的业务就反映性能变得很差。究其原因,是由于
OpenStack Swift 底层持久层的架构所致,对于每个上传的对象,在 Swift 后台都会单独保存成一个 POSIX
文件,更糟糕的是,每个对象都会有一个多级目录,因此每次上传一个对象,都要先创建相关目录,再创建新的文件来保存对象。当文件系统上的对象越来越多,这些操作就会越来越耗时,如果对象很大,那么这部分开销相对于整个读写过程来说是可以忽略的,但是当对象很小的时候,这个问题就会被凸显出来。
Auklet 通过以下方式来解决问题:
-
对象数据存在大文件上
-
对象元数据保存在 RocksDB 中
-
对象在大文件中的偏移量保存到 RocksDB 中
-
每个 Swift partition 对应一个大文件,这样通过 hash 计算就能知道对象所在大文件的位置,避免了通过中心节点去查询大文件的位置
-
对象删除采用文件打洞的方式,因此删除一个对象时,空间能够实现即时回收。
Auklet pack engine(打包引擎)架构:
性能比较
项目介绍整理自:爱奇艺技术产品团队
Auklet 官网
https://github.com/iqiyi/auklet
Django - account.models.Account 未声明显式 app_label 并且在使用 pinax 通知时不在 INSTALLED_APPS 中的应用程序中
如何解决Django - account.models.Account 未声明显式 app_label 并且在使用 pinax 通知时不在 INSTALLED_APPS 中的应用程序中
将客户端项目与 pinax-notifications 集成以实现通知类型的功能。
*File "/home/user/Shwetha/ramble/ramble/rambleapp/urls.py",line 56,in <module>
url(r"^notifications/",include("pinax.notifications.urls",namespace="pinax_notifications")),File "/home/user/.local/lib/python3.6/site-packages/django/urls/conf.py",line 34,in include
URLconf_module = import_module(URLconf_module)
File "/usr/lib/python3.6/importlib/__init__.py",line 126,in import_module
return _bootstrap._gcd_import(name[level:],package,level)
File "<frozen importlib._bootstrap>",line 994,in _gcd_import
File "<frozen importlib._bootstrap>",line 971,in _find_and_load
File "<frozen importlib._bootstrap>",line 955,in _find_and_load_unlocked
File "<frozen importlib._bootstrap>",line 665,in _load_unlocked
File "<frozen importlib._bootstrap_external>",line 678,in exec_module
File "<frozen importlib._bootstrap>",line 219,in _call_with_frames_removed
File "/home/user/.local/lib/python3.6/site-packages/pinax/notifications/urls.py",line 3,in <module>
from .views import NoticeSettingsView
File "/home/user/.local/lib/python3.6/site-packages/pinax/notifications/views.py",line 5,in <module>
from .compat import login_required
File "/home/user/.local/lib/python3.6/site-packages/pinax/notifications/compat.py",line 12,in <module>
from account.decorators import login_required
File "/home/user/.local/lib/python3.6/site-packages/account/decorators.py",in <module>
from account.utils import handle_redirect_to_login
File "/home/user/.local/lib/python3.6/site-packages/account/utils.py",line 13,in <module>
from .models import PasswordHistory
File "/home/user/.local/lib/python3.6/site-packages/account/models.py",line 26,in <module>
class Account(models.Model):
File "/home/user/.local/lib/python3.6/site-packages/django/db/models/base.py",line 116,in __new__
"INSTALLED_APPS." % (module,name)
RuntimeError: Model class account.models.Account doesn''t declare an explicit app_label and isn''t in an application in INSTALLED_APPS.*
根据 https://github.com/pinax/pinax-notifications#documentation 文档,它已安装和配置。配置时遇到上述错误。
已经尝试过:
- 在 settings.py 中,INSTALLED_APPS 部分添加 pinax 和 pinax-notifications。
- 在 INSTALLED_APPS 中添加了站点,并在 settings.py 中设置了 SITE_ID=1。
- 在 apps.py 中添加了verbose_name。
以上似乎都不能解决问题。请指教。
git push 错误:对“{present Account}/repo.git/”的权限被拒绝给 {before account}
如何解决git push 错误:对“{present Account}/repo.git/”的权限被拒绝给 {before account}
我最近更改了我的 github 帐户。
我在使用 Git 时突然出现推送错误。 我尝试使用 SSH 解决问题,但结果并不好。因此,SSH 似乎很难解决这个问题。 另外,删除Git并重新安装它。但没有解决。
错误代码如下。
remote: Permission to xxxx/first-site.git denied to xxxx
fatal: unable to access ''https://github.com/iliana-belita/first-site.git/'': The requested URL returned error: 403
我尝试了所有搜索并更改了控制面板凭据管理器。 我讨厌用 SSH 解决这个问题。请帮帮我
OpenStack iaas-install-swift-controller.sh
#!/bin/bash
source /etc/xiandian/openrc.sh
source /etc/keystone/admin-openrc.sh
安装软件包
yum install openstack-swift-proxy python-swiftclient python-keystoneclient python-keystonemiddleware memcached -y
创建用户
openstack user create --domain $DOMAIN_NAME --password SWIFTPASSswiftopenstackroleadd−−projectservice−−userswiftadmin创建endpoint和api端点openstackservicecreate−−nameswift−−description"OpenStackObjectStorage"object−storeopenstackendpointcreate−−regionRegionOneobject−storepublichttp://HOST_NAME:8080/v1/AUTH_%(tenant_id)s
openstack endpoint create --region RegionOne object-store internal http://HOSTNAME:8080/v1/AUTHopenstackendpointcreate−−regionRegionOneobject−storeadminhttp://HOST_NAME:8080/v1
编辑文件
cat < /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://HOSTNAME:5000authurl=http://HOST_NAME:35357
memcached_servers = $HOST_NAME:11211
auth_type = password
project_domain_name = $DOMAIN_NAME
user_domain_name = $DOMAIN_NAME
project_name = service
username = swift
password = $SWIFT_PASS
delay_auth_decision = True
[filter:keystoneauth]
use = egg:swift#keystoneauth
operator_roles = admin,user
[filter:healthcheck]
use = egg:swift#healthcheck
[filter:cache]
memcache_servers = $HOST_NAME: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
EOF
创建账号和容器和对象
pushd /etc/swift
swift-ring-builder account.builder create 18 1 1
swift-ring-builder account.builder add --region 1 --zone 1 --ip $STORAGE_LOCAL_NET_IP --port 6002 --device $OBJECT_disK --weight 100
swift-ring-builder account.builder
swift-ring-builder account.builder rebalance
swift-ring-builder container.builder create 10 1 1
swift-ring-builder container.builder add --region 1 --zone 1 --ip $STORAGE_LOCAL_NET_IP --port 6001 --device $OBJECT_disK --weight 100
swift-ring-builder container.builder
swift-ring-builder container.builder rebalance
swift-ring-builder object.builder create 10 1 1
swift-ring-builder object.builder add --region 1 --zone 1 --ip $STORAGE_LOCAL_NET_IP --port 6000 --device $OBJECT_disK --weight 100
swift-ring-builder object.builder
swift-ring-builder object.builder rebalance
popd
#---------------
修改/etc/swift/swift.conf文件
cat << EOF > /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]
EOF
启动服务和赋予权限
chown -R root:swift /etc/swift
systemctl enable openstack-swift-proxy.service memcached.service
systemctl restart openstack-swift-proxy.service memcached.service
关于OpenStack Swift Account Reaper的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于Auklet OpenStack Swift 海量小文件解决方案、Django - account.models.Account 未声明显式 app_label 并且在使用 pinax 通知时不在 INSTALLED_APPS 中的应用程序中、git push 错误:对“{present Account}/repo.git/”的权限被拒绝给 {before account}、OpenStack iaas-install-swift-controller.sh的相关知识,请在本站寻找。
本文标签: