热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

OpenStackswift+keystone+glance安装过程总结

这两天在把以前安装的Swift用keystone做鉴权,主要是改了proxy-server.conf的配置,keystone和glance的安装可以参考www.chenshake.com中节点安装中keystone安装的方法,其中的脚本不需要改动。安装成功后,基本命令都可以实现,例如上传下载,查看文件。如果
这两天在把以前安装的Swift用keystone做鉴权,主要是改了proxy-server.conf的配置,keystone和glance的安装可以参考www.chenshake.com 中节点安装中keystone安装的方法,其中的脚本不需要改动。 安装成功后,基本命令都可以实现,例如上传下载,查看文件。 如果有某些命令失败,可能的原因是,上面的脚本没有修改,对某些参数设置有问题,我按照官方文档手动设置,就会出现错误,目前还没有解决。 整理了下swift安装 主要参考http://blog.lightcloud.cn/?p=68 和我自己在安装的时候的一些总结,也可以在这个链接中查看添加多服务的配置,基本和下面的配置类似。

8月14日更新glance配置。

glance 使用swift作为后端配置非常简单

修改/etc/glance/glance-api.conf

#default_store = file

default_store = swift

swift_store_auth_address = http://192.168.4.87:5000/v2.0/

swift_store_user = service:swift

swift_store_key = zhoubing

swift_store_create_container_on_put = True

以上配置需要根据环境的实际情况填写。(配置项在文件中都有,只需要修改,不需要添加).

Swift模块

OpenStack Object Storage (Swift) 是用来创建冗余的、可扩展的对象存储(引擎)的开源软件。 swift使用标准化的服务器存储 PB 级的访问数据。它并不是文件系统或者实时的数据存储系统 ,而是一个用于存储永久类型的静态数据的长期存储系统 ,这些数据可以检索、调整、必要时进行更新。最适合存储的数据类型的首要例子是虚拟机镜像,图片存储,邮件存储,存档备份。因为没有中心单元或者主控结点,swift提供了更强的扩展性、冗余和持久性。

使用主机信息:

|----+----------------+-------------+-----------+--------------|

| ID | Name           | OS          |        IP | Used for     |

|----+----------------+-------------+-----------+--------------|

|  1 | swift-proxy    | ubuntu12.04 |  192.168.4.87 | Proxy Node   |

|  2 | swift-storage1 | ubuntu12.04 |  192.168.4.88| Storage Node |

|  3 | swift-storage2 | ubuntu12.04 | 192.168.4.89| Storage Node |

|  4 | swift-storage3 | ubuntu12.04 | 192.168.4.90| Storage Node |

|----+----------------+-------------+-----------+--------------|

1 安装配置存储节点(Storage Node)  

l 安装需要的软件包

apt-get update

apt-get install swift swift-account swift-container swift-object swift-doc xfsprogs

l 创建loopback设备(假设为sdb1)分出一个分区然后格式化 

fdisk /dev/sdb

mkfs.xfs -i size=1024 /dev/sdb1

上面的方法是官方文档上的方法,也是推荐的方法,我使用的是创建回环设备来存
    dd if=/dev/zero of=/srv/swift-node bs=1024 count=0 seek=1000000
    mkfs.xfs -i size=1024 /srv/swift-node

l 更新fstab文件 

cat >> /etc/fstab <

/srv/swift-node /swift/node xfs loop,noatime,nodiratime,nobarrier,logbufs=8 0 0

EOF

l 挂载 

mkdir /swift/node

mount /swift/node

chown -R swift:swift /swift 注意 没有赋权限,会导致创建失败

l 创建swift的配置文件 

cat >/etc/swift/swift.conf <

[swift-hash]

# random unique string that can never change (DO NOT LOSE)

swift_hash_path_suffix = `od -t x8 -N 8 -A n 

EOF

Note: 这个文件所有的存储节点和代理节点共用,可以用scp拷贝到其它节点

l 安装rsync 

apt-get install rsync

l 创建rsync配置文件 

cat > /etc/rsyncd.conf << EOF

uid = swift

gid = swift

log file = /var/log/rsyncd.log

pid file = /var/run/rsyncd.pid

address = 192.168.4.88

[account]

max connections = 2

path = /swift/node

read only = false

lock file = /var/lock/account.lock

[container]

max connections = 2

path = /swift/node

read only = false

lock file = /var/lock/container.lock

[object]

max connections = 2

path = /swift/node

read only = false

lock file = /var/lock/object.lock

EOF

l 启用rsync 

perl -pi -e 's/RSYNC_ENABLE=false/RSYNC_ENABLE=true/' /etc/default/rsync

l 启动rsync 

service rsync start

l 配置account服务 

cat > /etc/swift/account-server.conf << EOF

[DEFAULT]

devices = /swift/node

mount_check = false

bind_ip = 

bind_port = 6012

workers = 2

log_facility = LOG_LOCAL3

[pipeline:main]

pipeline = account-server

[app:account-server]

use = egg:swift#account

[account-replicator]

[account-auditor]

[account-reaper]

EOF

l 配置container服务 

cat > /etc/swift/container-server.conf << EOF

[DEFAULT]

devices = /swift/node

mount_check = false

bind_ip = 

bind_port = 6011

workers = 2

log_facility = LOG_LOCAL2

[pipeline:main]

pipeline = container-server

[app:container-server]

use = egg:swift#container

[container-replicator]

[container-updater]

[container-auditor]

[container-sync]

EOF

l 配置object服务 

cat > /etc/swift/object-server.conf << EOF

[DEFAULT]

devices = /swift/node/

mount_check = false

bind_ip = 

bind_port = 6010

workers = 2

log_facility = LOG_LOCAL1

[pipeline:main]

pipeline = object-server

[app:object-server]

use = egg:swift#object

[object-replicator]

[object-updater]

[object-auditor]

[object-expirer]

EOF

l 创建swift日志配置文件 

cat > /etc/rsyslog.d/10-swift.conf << EOF

local1,local2,local3.*   /var/log/swift/all.log

local1.*   /var/log/swift/object.log

local2.*   /var/log/swift/container.log

local3.*   /var/log/swift/account.log

EOF

l 创建日志目录 

mkdir -p /var/log/swift

chown -R syslog.adm /var/log/swift

l 重启日志服务进程 

service rsyslog restart

2 安装配置代理节点(Proxy Node)  

l 安装需要的软件包 

apt-get update

apt-get install swift swift-proxy swift-doc memcached

l 修改memcached配置文件 

perl -pi -e "s/-l 127.0.0.1/-l 192.168.4.87/" /etc/memcached.conf

l 重启memcached服务 

service memcached restart

l 从存储节点拷贝swift配置文件 

mkdir /etc/swift

scp root@192.168.4.88:/etc/swift/swift.conf /etc/swift

l 创建proxy-server配置文件 

cat > /etc/swift/proxy-server.conf < EOF

[DEFAULT]

bind_port = 8080

bind_ip = 192.168.4.87

user = swift

log_level = DEBUG

log_facility = LOG_LOCAL1

[pipeline:main]

pipeline = healthcheck cache authtoken keystone proxy-server

[app:proxy-server]

use = egg:swift#proxy

allow_account_management = true

account_autocreate = true

[filter:keystone]

paste.filter_factory = keystone.middleware.swift_auth:filter_factory

operator_roles = admin, swiftoperator

[filter:authtoken]

paste.filter_factory = keystone.middleware.auth_token:filter_factory

delay_auth_decision = 1

auth_port = 35357

auth_host = 192.168.4.87

auth_protocol = http

service_protocol = http

service_host = 192.168.4.87

service_port = 5000

admin_tenant_name = service

admin_user = swift

admin_password = zhoubing

[filter:healthcheck]

use = egg:swift#healthcheck

[filter:cache]

use = egg:swift#memcache

memcache_servers = 192.168.4.87:11211

EOF

l 创建swift日志配置文件 

cat > /etc/rsyslog.d/10-swift.conf << EOF

local1.*   /var/log/swift/proxy.log

l 创建日志目录 

mkdir -p /var/log/swift

chown -R syslog.adm /var/log/swift

l 重启日志服务进程 

service rsyslog restart

l 首先创建环 

cd /etc/swift

swift-ring-builder account.builder create 18 2 1

swift-ring-builder container.builder create 18 2 1

swift-ring-builder object.builder create 18 2 1

Note: 后面的数字第一个为存储分区数,第二个为备份次数,备份次数不能小于ZONE数目,第三个为延迟删除的时间,以小时为单位

向环里添加存储设备我前面配置了两台存储节点: 

|---------+------+-----------+-----------+------+--------|

| Storage | Zone |        IP | Server    | Port | Device |

|---------+------+-----------+-----------+------+--------|

|       1 |    1 |  192.168.4.88| account   | 6012 | sdb1   |

|         |      |           | container | 6011 | sdb1   |

|         |      |           | object    | 6010 | sdb1   |

|---------+------+-----------+-----------+------+--------|

|       2 |    2 | 192.168.4.89 | account   | 6012 | sdb1   |

|         |      |           | container | 6011 | sdb1   |

|         |      |           | object    | 6010 | sdb1   |

|---------+------+-----------+-----------+------+--------|

cd /etc/swift

swift-ring-builder account.builder add z1-192.168.4.88:6012/sdb1 100

swift-ring-builder container.builder add z1-192.168.4.88:6011/sdb1 100

swift-ring-builder object.builder add z1-192.168.4.88:6010/sdb1 100

swift-ring-builder account.builder add z2-192.168.4.89:6012/sdb1 100

swift-ring-builder container.builder add z2-192.168.4.89:6011/sdb1 100

swift-ring-builder object.builder add z2-192.168.4.89:6010/sdb1 100

Note: IP,端口,设备和前面的配置对应

l 检验每个环里的条目 

cd /etc/swift

swift-ring-builder account.builder

swift-ring-builder container.builder

swift-ring-builder object.builder

应该得到类似这样的输出

account.builder, build version 1

262144 partitions, 1 replicas, 1 zones, 1 devices, 0.00 balance

The minimum number of hours before a partition can be reassigned is 1

Devices:    id  zone      ip address  port      name weight partitions balance meta

             0     1        192.168.4.88  6012      sdb1 100.00     262144    0.00

             0     1        192.168.4.89 6012      sdb1 100.00     262144    0.00

l 平衡环 

cd /etc/swift

swift-ring-builder account.builder rebalance

swift-ring-builder container.builder rebalance

swift-ring-builder object.builder rebalance

Note: 这个过程可能需要一些时间

Note: 这三条命令会产生以gz结尾的文件,这些文件就是所有节点要用到的环文件,可以用scp拷贝到其它各节点

Note: 如果创建环的时候指定的副本数大于环的数量,平衡环的时候可能会报类似下面的错误

...

4, in _initial_balance

    while available_devs[index]['zone'] in other_zones:

IndexError: list index out of range

l 分发新生成的环文件 

scp /etc/swift/*.gz root@192.168.4.88:/etc/swift/

scp /etc/swift/*.gz root@192.168.4.89:/etc/swift/

l 启动各节点相关的服务 

# 代理节点

swift-init proxy start

# 存储节点

swift-init all start


推荐阅读
  • 本文介绍如何通过SSH协议使用Xshell远程连接到Ubuntu系统。为了实现这一目标,需要确保Ubuntu系统已安装并配置好SSH服务器,并保证网络连通性。 ... [详细]
  • 在Ubuntu 16.04 LTS上配置Qt Creator开发环境
    本文详细介绍了如何在Ubuntu 16.04 LTS系统中安装和配置Qt Creator,涵盖了从下载到安装的全过程,并提供了常见问题的解决方案。 ... [详细]
  • 本文探讨了在不使用服务器控件的情况下,如何通过多种方法获取并修改页面中的HTML元素值。除了常见的AJAX方式,还介绍了其他可行的技术方案。 ... [详细]
  • 本文详细介绍了如何在 Linux 平台上安装和配置 PostgreSQL 数据库。通过访问官方资源并遵循特定的操作步骤,用户可以在不同发行版(如 Ubuntu 和 Red Hat)上顺利完成 PostgreSQL 的安装。 ... [详细]
  • 解读MySQL查询执行计划的详细指南
    本文旨在帮助开发者和数据库管理员深入了解如何解读MySQL查询执行计划。通过详细的解析,您将掌握优化查询性能的关键技巧,了解各种访问类型和额外信息的含义。 ... [详细]
  • 掌握远程执行Linux脚本和命令的技巧
    本文将详细介绍如何利用Python的Paramiko库实现远程执行Linux脚本和命令,帮助读者快速掌握这一实用技能。通过具体的示例和详尽的解释,让初学者也能轻松上手。 ... [详细]
  • 本文详细分析了Hive在启动过程中遇到的权限拒绝错误,并提供了多种解决方案,包括调整文件权限、用户组设置以及环境变量配置等。 ... [详细]
  • 解决MongoDB Compass远程连接问题
    本文记录了在使用阿里云服务器部署MongoDB后,通过MongoDB Compass进行远程连接时遇到的问题及解决方案。详细介绍了从防火墙配置到安全组设置的各个步骤,帮助读者顺利解决问题。 ... [详细]
  • 本文详细介绍如何使用Samba软件配置CIFS文件共享服务,涵盖安装、配置、权限管理及多用户挂载等关键步骤。通过具体示例和命令行操作,帮助读者快速搭建并优化Samba服务器。 ... [详细]
  • 本文详细探讨了HTTP 500内部服务器错误的成因、解决方案及其在Web开发中的影响。通过对具体案例的分析,帮助读者理解并解决此类问题。 ... [详细]
  • 本文介绍了如何使用PHP代码实现微信平台的媒体素材上传功能,详细解释了API接口的使用方法和注意事项,确保文件路径正确以避免常见的错误。 ... [详细]
  • 使用Vultr云服务器和Namesilo域名搭建个人网站
    本文详细介绍了如何通过Vultr云服务器和Namesilo域名搭建一个功能齐全的个人网站,包括购买、配置服务器以及绑定域名的具体步骤。文章还提供了详细的命令行操作指南,帮助读者顺利完成建站过程。 ... [详细]
  • 解决微信电脑版无法刷朋友圈问题:使用安卓远程投屏方案
    在工作期间想要浏览微信和朋友圈却不太方便?虽然微信电脑版目前不支持直接刷朋友圈,但通过远程投屏技术,可以轻松实现在电脑上操作安卓设备的功能。 ... [详细]
  • 本文详细介绍了VMware的多种认证选项,帮助你根据职业需求和个人技能选择最合适的认证路径,涵盖从基础到高级的不同层次认证。 ... [详细]
  • 本文详细介绍了如何在Ubuntu系统中下载适用于Intel处理器的64位版本,涵盖了不同Linux发行版对64位架构的不同命名方式,并提供了具体的下载链接和步骤。 ... [详细]
author-avatar
僾媙
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有