部署对象存储服务(swift)
此文章是看Red Hat 的文章进行了一下简单的翻译,有很多地方不多的,请多多指教!
成都创新互联于2013年开始,先为盐都等服务建站,盐都等地企业,进行企业商务咨询服务。为盐都企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。
原文地址:https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux_OpenStack_Platform/2/html/Getting_Started_Guide/ch08s05.html
创建swift ring 文件;
配置keystone认证;
配置swift proxy 代理;
配置swift stroage nodes 存储节点
测试swift
1个swift proxy 节点
6个swift storage 节点包括(accounts, objects, container)
3个zone区域
每份数据复制3份,也就是一份数据保存到3个swift stroage节点,作为存储对象的一个副本;
第一步先安装swift软件包;
$ sudo yum install -y openstack-swift openstack-swift-proxy \openstack-swift-account openstack-swift-container openstack-swift-object \openstack-utils memcached python-keystone
创建swift ring 文件
需要创建三个ring文件包含所有的存储设备细节,这些都是用来推断一个特定的数据存储。
在这个列子中创建part power 为12,那么ring分区就可以达到4096个,具体的分区大小可根据你的生产环境来分配;
2**12=4096
2**18=262144
更多的信息请查看:http://docs.openstack.org/developer/swift/deployment_guide.html(这个是官方的文档)
本文主要介绍swift的安装和部署,假设keystone的部署和配置一完成,并已配置好authentication认证用户文件keystone_admin
$ source ~/keystonerc_admin
$ sudo swift-ring-builder /etc/swift/account.builder create 12 3 1 $ sudo swift-ring-builder /etc/swift/container.builder create 12 3 1 $ sudo swift-ring-builder /etc/swift/object.builder create 12 3 1
#### 12 3 1 解释:
12就是ring的分区是2的12次方,
3是保存数据为3份,
1是1个小时检测一次ring;
注意:这个过程中注意端口别搞错了!!!!
一旦创建ring文件存储设备需要添加到每个ring,从账户中。使用的IP地址swift对象存储服务器的帐户标识符
$ sudo swift-ring-builder /etc/swift/account.builder add z1-192.0.43.10:6002/z1d1 100 $ sudo swift-ring-builder /etc/swift/account.builder add z1-192.0.43.10:6002/z1d2 100 $ sudo swift-ring-builder /etc/swift/account.builder add z2-192.0.43.10:6002/z2d1 100 $ sudo swift-ring-builder /etc/swift/account.builder add z2-192.0.43.10:6002/z2d2 100 $ sudo swift-ring-builder /etc/swift/account.builder add z3-192.0.43.10:6002/z3d1 100 $ sudo swift-ring-builder /etc/swift/account.builder add z3-192.0.43.10:6002/z3d2 100
然后是容器(container)
$ sudo swift-ring-builder /etc/swift/object.builder add z1-192.0.43.10:6000/z1d1 100 $ sudo swift-ring-builder /etc/swift/object.builder add z1-192.0.43.10:6000/z1d2 100 $ sudo swift-ring-builder /etc/swift/object.builder add z2-192.0.43.10:6000/z2d1 100 $ sudo swift-ring-builder /etc/swift/object.builder add z2-192.0.43.10:6000/z2d2 100 $ sudo swift-ring-builder /etc/swift/object.builder add z3-192.0.43.10:6000/z3d1 100 $ sudo swift-ring-builder /etc/swift/object.builder add z3-192.0.43.10:6000/z3d2 100
发送让整个ring重新负载,输入以下命令
$ sudo swift-ring-builder /etc/swift/account.builder rebalance $ sudo swift-ring-builder /etc/swift/container.builder rebalance $ sudo swift-ring-builder /etc/swift/object.builder rebalance
检查一下你现在有3个ring文件,在目录 /etc/swift/,使用以下命令:
$ ls /etc/swift/*gz
应该显示:
/etc/swift/account.ring.gz /etc/swift/container.ring.gz /etc/swift/object.ring.gz
确保/etc/swift/目录中的所有文件包括那些您刚刚创建属于root用户和所属swift组
$ sudo chown -R root:swift /etc/swift
您还需要创建一个私有hash key 对于 swift hash 算法
$ sudo openstack-config --set /etc/swift/swift.conf swift-hash \ swift_hash_path_suffix $(openssl rand -hex 10)
2.配置keystone认证:
在这个例子中假设我们已经创建了admin用户,我们需要创建一个services的租户(如果不存在的话),一个名为swiftand来作为swift用户和拥有admin角色
通过admin来访问:
$ source ~/keystonerc_admin
检查services 租户
$ keystone tenant-list
如果不存在,创建:
$ keystone tenant-create --name services
创建swift用户,设置密码PASSWORD
$ keystone user-create --name swift --pass PASSWORD
查询admin角色的uuid
$ keystone role-list | grep admin
如果没有admin角色,创建
$ keystone role-create --name admin
添加swift用户到service租户中,并给予admin角色的权限;
$ keystone user-role-add --role-id--tenant-id --user-id
创建swift端点,在keystone
$ keystone service-list
如果没有swift endpoint,然后创建;
$ keystone service-create --name swift --type object-store \ --description "Swift Storage Service"$ keystone endpoint-create --service_id\ --publicurl "http://192.0.43.10:8080/v1/AUTH_\$(tenant_id)s" \ --adminurl "http://192.0.43.10:8080/v1/AUTH_\$(tenant_id)s" \ --internalurl "http://192.0.43.10:8080/v1/AUTH_\$(tenant_id)s"
确保publicurl、adminurl internalurl参数包括正确的IP地址swift对象存储服务器。
3,配置swift proxy代理
更新配置文件从swift使用正确的身份验证代理服务器为适当的重点用户详细信息。
$ openstack-config --set /etc/swift/proxy-server.conf \ filter:authtoken admin_tenant_name services $ openstack-config --set /etc/swift/proxy-server.conf \ filter:authtoken admin_user swift $ openstack-config --set /etc/swift/proxy-server.conf \ filter:authtoken admin_password PASSWORD
开启memcached 和openstack-swift-proxy 服务,使用 service 命令;
$ sudo service memcached start $ sudo service openstack-swift-proxy start
memcached 和openstack-swift-proxy 服务,加入到开机启动
$ sudo chkconfig memcached on $ sudo chkconfig openstack-swift-proxy on
运行访问swift proxy server ,添加防火墙规则在/etc/sysconfig/iptables
配置文件中:
-A INPUT -p tcp -m multiport --dports 8080 -j ACCEPT
这条规则运行从远程主机访问swift proxy 的8080端口,其它更加安全的信息请参考redhat enterprise 6 security guide.(红帽企业6安全指南)
使用service命令重新启动iptables,使刚添加的规则生效;
$ sudo service iptables restart
4.配置swift storage nodes 存储节点
对象存储必须支持磁盘存储卷,提供足够的备份存储空间 到目前为止在本文中需要6个存储节点。
如果你有足够多的资源可用用来安装此服务,在本文都是安装在了/srv/node的目录下
这段不翻译了!
If you do not have enough physical devices available to support this setup but still wish to test the object storage facilities provided by OpenStack then it is possible to create test devices using the loopback facility. This is not recommended for production environments
创建对象存储设备使用loopback(回环)
这个列子脚本创建了3个区域和2个设备支持loopback设备给每个区域,总共6个设备,卷镜像创建在/data目录下和挂载到/srv/node目录下使用回环设备
每个设备是50GB大小,你也许希望这个数字低点;
这个脚本需要用root用户执行;
#!/bin/sh # Device size in GB SIZE=50 DATA=/data MOUNT=/srv/node mkdir ${DATA} for ZONE in 1 2 3; do for DEVICE in 1 2; do truncate ${DATA}/swift-z${ZONE}d${DEVICE} --size ${SIZE}G LOOPDEVICE=`losetup --show -f ${DATA}/swift-z${ZONE}d${DEVICE}` mkfs.ext4 -I 1024 ${LOOPDEVICE} mkdir -p ${MOUNT}/z${ZONE}d${DEVICE} mount -o noatime,nodiratime,nobarrier,user_xattr ${LOOPDEVICE} \ ${MOUNT}/z${ZONE}d${DEVICE} done done
这个例子设置对象存储只是作为一种快速而简单的方法尝试持久卷在一个测试环境,这种方法不能用于生产环境。
对象存储中创建这种方式并不会自动保存在系统需要重新启动
恢复对象存储从文件创建这个过程后,必须重新启动
使用losetup创建loopback回环/data/目录
使用mount挂载 loopback回环/srv/node/
目录
使用service命令重启 openstack-swift-account
, openstack-swift-container
, and openstack-swift-object
服务
在生产环境中推荐,把挂载目录这些添加到/etc/fstab,并加入到开机自动挂载项中。
Red Hat Enterprise Linux系统默认有八个(8)环回设备可供使用
如果您已经在使用这些设备,那么你可能会遇到的一些运行脚本时返回的消息:
mount: could not find any free loop device
如果在这种情况下运行lostetup -a 命令来列出所有loopback设备的状态,然后可以使用umount命令来释放一下设备,losetup -d命令或改变脚本需要更少的设备。
sudo chown -R swift:swift /srv/node/
使用restorecon命令确保incron目录中的所有文件都正确的SELinux安全上下文的定义。
$ sudo restorecon -R /srv
未能正确设置安全上下文将导致AVC否认被记录时迅速试图访问的数据存储在/ srv /目录。
启动帐户,容器和对象存储服务:
$ sudo service openstack-swift-account start $ sudo service openstack-swift-container start $ sudo service openstack-swift-object start
加入开机启动
$ sudo chkconfig openstack-swift-account on $ sudo chkconfig openstack-swift-container on $ sudo chkconfig openstack-swift-object on
允许传入的连接向/etc/sysconfig/iptables swift通过添加这个防火墙规则配置文件:
-A INPUT -p tcp -m multiport --dports 6000,6001,6002,873 -j ACCEPT
规则生效,重启iptables服务
sudo service iptables restart
5.测试swift
设置shell访问重点作为一个用户,管理员或SwiftOperator角色,admin用户这个例子所示:
$ source ~/keystonerc_admin $ swift list $ head -c 1024 /dev/urandom > data.file ; swift upload c1 data.file $ head -c 1024 /dev/urandom > data2.file ; swift upload c1 data2.file $ head -c 1024 /dev/urandom > data3.file ; swift upload c2 data3.file $ swift list $ swift list c1 $ swift list c2
现在您已经上传3个文件到2个集装箱。如果你看到在不同的存储设备应该看到9个数据文件(每个文件3份):
$ find /srv/node/ -type f -name "*data"
文章题目:部署对象存储服务(swift)
文章转载:http://hbruida.cn/article/gjcdcj.html