系列导航

一、swift对象存储环境搭建

二、swift添加存储策略

三、swift大对象--动态大对象

四、swift大对象--静态态大对象

五、java操作swift对象存储(官网样例)

六、java操作swift对象存储(resultful方式实现)

七、java操作swift对象存储(动态大对象)

八、java操作swift对象存储(静态大对象)

关于swift对象存储,国内的资料太少了,网上能找到的可用的寥寥无几,大都是只言片语,官网个人觉得写得也不是特别好,不是很好理解,本人不才

打算把这些年使用swift对象存储的经验慢慢整理分享给大家,本篇先从基础环境搭建开始,最后会写到java对swift对象存储的使用。所有分享出来的都是
我亲身实验过的,有问题欢迎大家留言。关于swift对象存储是什么网上有写的比较好的文章我就不再复述了,如下开始搭建一个实验环境。
   
    
 
三台服务器的ip
192.168.0.101
192.168.0.102
192.168.0.103
注:三台服务器每台服务器使用一块硬盘,搭建一个对象存储集群。如果是生产环境可能需要更多的服务器和磁盘  

一、配置yum源
    [root@kangvcar ~]# cd /etc/yum.repos.d/
 
    [root@kangvcar ~]# cat /etc/redhat-release        //查看系统的版本
        CentOS Linux release 7.2.1511 (Core)
    [root@kangvcar ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
        --2017-06-20 06:43:08--  http://mirrors.aliyun.com/repo/Centos-7.repo
        Resolving mirrors.aliyun.com (mirrors.aliyun.com)... 112.124.140.210, 115.28.122.210
        Connecting to mirrors.aliyun.com (mirrors.aliyun.com)|112.124.140.210|:80... connected.
        HTTP request sent, awaiting response... 200 OK
        Length: 2573 (2.5K) [application/octet-stream]
        Saving to: ‘/etc/yum.repos.d/CentOS-Base.repo’
        100%[=======================================================================================================>] 2,573       --.-K/s   in 0s      
        2017-06-20 06:43:08 (118 MB/s) - ‘/etc/yum.repos.d/CentOS-Base.repo’ saved [2573/2573]
 
 
       [root@kangvcar ~]# yum clean all
        Loaded plugins: fastestmirror
        Cleaning repos: base extras updates
        Cleaning up everything
        Cleaning up list of fastest mirrors
    [root@kangvcar ~]# yum makecache        //把yum源缓存到本地,加快软件的搜索好安装速度
    [root@kangvcar ~]# yum list        //总共列出了9954个包
 
 
二、安装各种依赖
    sudo yum install curl gcc memcached rsync sqlite xfsprogs git-core \
    libffi-devel xinetd liberasurecode-devel \
    python-setuptools \
    python-coverage python-devel python-nose \
    pyxattr python-eventlet \
    python-greenlet python-paste-deploy \
    python-netifaces python-pip python-dns \
    python-mock
 
三、查看磁盘类型是不是xfs 是就不用管,不是需要重新分区格式化成xfs
    [root@node01 opt]# parted -l
 
    --大磁盘分区请参照如下链接地址
        http://www.blogjava.net/haha1903/archive/2011/12/21/366942.html
    
四、下载swift-client、swift
        git clone https://github.com/openstack/python-swiftclient.git
    git checkout 2.4.0    
    
    git clone https://github.com/openstack/swift.git
    git checkout 2.4.0

五、创建目录
        mkdir -p /opt/soft
    mkdir -p /opt/swift-disk/sdb1
    
    将上一步下载的两个文件放到/opt/soft目录下
    
六、安装    
     cd /opt/soft/python-swiftclient
    [root@node01 opt]# python setup.py develop;
 
    cd  /opt/soft/swift
    [root@node01 swift]# pip install -r requirements.txt;
    [root@node01 swift]# pip install --upgrade pip
    [root@node01 swift]# sudo python setup.py develop;
    
七、配置 /etc/rc.local  当前也要执行
    sudo mkdir -p /var/run/swift
    sudo mkdir -p /var/cache/swift
    
八、配置 rsync
    vi /etc/rsyncd.conf
    
    # /etc/rsyncd: configuration file for rsync daemon mode
    uid = root
    gid = root
    log file = /var/log/rsyncd.log
    pid file = /var/run/rsyncd.pid
    address = 0.0.0.0

    [account]
    max connections = 25
    path = /opt/swift-disk/
    read only = false
    lock file = /var/lock/account.lock

    [container]
    max connections = 25
    path = /opt/swift-disk/
    read only = false
    lock file = /var/lock/container.lock

    [object]
    max connections = 25
    path = /opt/swift-disk/
    read only = false
    lock file = /var/lock/object.lock
    
九、启动 rsync 并设置开机启动    
    systemctl start rsyncd.service
    systemctl enable rsyncd.service
 
十、启动 memcached 并设置开机启动   
    systemctl start memcached.service
    systemctl enable memcached.service
    
十一、配置swift相关的配置文件
    (1)创建 swift 配置文件 /etc/swift/swift.conf
     vi /etc/swift/swift.conf
        [swift-hash]
        #echo `od -t x8 -N 8 -A n </dev/random` 生成随机数填写
        swift_hash_path_suffix= EvjucvFN5aX1oAdjlQiw5+HV0JUqSSWwzoiem+fLAZE=
        
    (2)配置 account 服务 /etc/swift/account-server.conf
       vi /etc/swift/account-server.conf
        [DEFAULT]
        devices = /opt/swift-disk
        mount_check = false
        bind_ip = 0.0.0.0
        bind_port = 6002
        workers = 4
        user = root
        log_facility = LOG_LOCAL4

        [pipeline:main]
        pipeline = account-server

        [app:account-server]
        use = egg:swift#account

        [account-replicator]
        [account-auditor]
        [account-reaper]
    (3)配置 container 服务 /etc/swift/container-server.conf
        vi /etc/swift/container-server.conf
        [DEFAULT]
        devices = /opt/swift-disk
        mount_check = false
        bind_ip = 0.0.0.0
        bind_port = 6001
        workers = 4
        user = root
        log_facility = LOG_LOCAL3
        [pipeline:main]
        pipeline = container-server
        [app:container-server]
        use = egg:swift#container
        [container-replicator]
        [container-updater]
        [container-auditor]
        [container-sync]
    (4)配置 object 服务 /etc/swift/object-server.conf
       vi  /etc/swift/object-server.conf
       [DEFAULT]
        devices = /opt/swift-disk
        mount_check = false
        bind_ip = 0.0.0.0
        bind_port = 6000
        workers = 4
        user = root
        log_facility = LOG_LOCAL2
        [pipeline:main]
        pipeline = object-server
        [app:object-server]
        use = egg:swift#object
        [object-replicator]
        [object-updater]
        [object-auditor]
    (5)配置 proxy 服务 /etc/swift/proxy-server.conf
    vi /etc/swift/proxy-server.conf
    [DEFAULT]
    bind_port = 8080
    user = root
    workers = 8
    log_facility = LOG_LOCAL1

    [pipeline:main]
    pipeline = healthcheck cache tempauth proxy-logging proxy-server

    [app:proxy-server]
    use = egg:swift#proxy
    allow_account_management = true
    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
    reseller_prefix = AUTH
    token_life = 86400
    # account和token的命名前缀,注意此处不可以加"_"。
    # 例如X-Storage-Ur可能l为http://127.0.0.1:8080/v1/AUTH_test
    # 例如X-Auth-Token为AUTH_tk440e9bd9a9cb46d6be07a5b6a585f7d1# token的有效期,单位:秒。

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

    [filter:cache]
    use = egg:swift#memcache

    # 这里可以是多个memcache server,proxy会自动当作一个集群来使用# 例如 memcache_servers = 192.168.2.129:11211,192.168.2.130:11211,192.168.2.131
         memcache_servers = 192.168.0.101:11211,192.168.0.102:11211,192.168.0.103:11211
    
    [filter:proxy-logging]
    use = egg:swift#proxy_logging
        
十二、创建 ring 文件    
        cd /etc/swift
    swift-ring-builder account.builder create 18 3 1
    swift-ring-builder container.builder create 18 3 1
    swift-ring-builder object.builder create 18 3 1    
    注:需要事先创建好3个 ring,18 表示 partition 数为2的18次方,3表示 replication 数为3,1 表示分区数据的最短迁移间隔时间为1小时。(官网说明里如果移除设备的话不在这个限制内)
    
十三、向ring 中加入设备   后面的100是权重建议使用磁盘的实际大小,如果磁盘上100G权重就设置100
    swift-ring-builder account.builder add z1-192.168.0.101:6002/sdb1 100
    swift-ring-builder container.builder add z1-192.168.0.101:6001/sdb1 100
    swift-ring-builder object.builder add z1-192.168.0.101:6000/sdb1 100

    swift-ring-builder account.builder add z2-192.168.0.102:6002/sdb1 100
    swift-ring-builder container.builder add z2-192.168.0.102:6001/sdb1 100
    swift-ring-builder object.builder add z2-192.168.0.102:6000/sdb1 100

    swift-ring-builder account.builder add z3-192.168.0.103:6002/sdb1 100
    swift-ring-builder container.builder add z3-192.168.0.103:6001/sdb1 100
    swift-ring-builder object.builder add z3-192.168.0.103:6000/sdb1 100

    注:z1 和 z2 表示 zone1 和 zone2(zone 这个概念是虚拟的,可以将一个 device 划定到一个 zone,在分配 partition 的时候会考虑到这个因素,尽量划分到不同的 zone 中)。
    sdb1 为 swift 所使用的存储空间。
    100 代表设备的权重,也是在分配 partition 的时候会考虑的因素。    
    
 
    
十四、确认ring 的内容是否正确:
    swift-ring-builder account.builder
    swift-ring-builder container.builder
    swift-ring-builder object.builder
    
十五、平衡(Rebalance) ring
    swift-ring-builder account.builder rebalance
    swift-ring-builder container.builder rebalance
    swift-ring-builder object.builder rebalance
    
    
    一键启动 swift 的所有服务。
    #!/bin/bash
    swift-init proxy start
    swift-init account-server start
    swift-init account-replicator start
    swift-init account-auditor start
    swift-init container-server start
    swift-init container-replicator start
    swift-init container-updater start
    swift-init container-auditor start
    swift-init object-server start
    swift-init object-replicator start
    swift-init object-updater start
    swift-init object-auditor start
 
    
    关闭服务
    #!/bin/bash
    swift-init proxy stop
    swift-init account-server stop
    swift-init account-replicator stop
    swift-init account-auditor stop
    swift-init container-server stop
    swift-init container-replicator stop
    swift-init container-updater stop
    swift-init container-auditor stop
    swift-init object-server stop
    swift-init object-replicator stop
    swift-init object-updater stop
    swift-init object-auditor stop        
    
    
        
    
十六、常用语句
    1、直接使用 swift 客户端程序进行操作(帮助文档[root@node01]# swift --help)
        (1)查看账户信息(账户是/etc/swift/proxy-server.conf里配置的)
            swift -A http://127.0.0.1:8080/auth/v1.0 -U admin:admin -K admin stat    
    
        (2)创建 container
            swift -A http://127.0.0.1:8080/auth/v1.0 -U admin:admin -K admin post container1    
        
        (3)查看 test 用户的 container 列表
            swift -A http://127.0.0.1:8080/auth/v1.0 -U admin:admin -K admin list

        (4)查看容器中的内容
            swift -A http://127.0.0.1:8080/auth/v1.0 -U admin:admin -K admin list container1
 
        (5)上传Object(文件),上传 3.txt 文件到 container1 容器中
            swift -A http://127.0.0.1:8080/auth/v1.0 -U admin:admin -K admin upload container1 3.txt
            
            上传其他路径的文件
            swift -A http://127.0.0.1:8080/auth/v1.0 -U admin:admin -K admin upload container1 /opt/4.txt  --object-name 4.txt
        
        (6)下载Object(文件)
            swift -A http://127.0.0.1:8080/auth/v1.0 -U admin:admin -K admin download container1 3.txt
            
            将文件下载到其他路径
            swift -A http://127.0.0.1:8080/auth/v1.0 -U admin:admin -K admin download container1 3.txt --output /opt/3.txt
            
            下载该用户下所有文件
            [root@node01 swift-disk]# swift -A http://127.0.0.1:8080/auth/v1.0 -U admin:admin -K admin download  --all
    
        (7)删除文件
             swift -A http://127.0.0.1:8080/auth/v1.0 -U admin:admin -K admin delete container1  3.txt    
    
        (8)查看集群的基本信息(List cluster capabilities)    
            swift -A http://127.0.0.1:8080/auth/v1.0 -U admin:admin -K admin  capabilities
            
            
        (9)查看文件存储的物理位置(查看其它用法 swift-get-nodes --help)
             查看账户信息在哪里:swift-get-nodes -a /etc/swift/account.ring.gz AUTH_admin   
             查看容器信息在哪里:swift-get-nodes -a /etc/swift/container.ring.gz AUTH_admin container1
             查看文件信息在哪里:swift-get-nodes -a /etc/swift/object.ring.gz AUTH_admin container1 1.txt    
            
    2、RESTful API(账户是/etc/swift/proxy-server.conf里配置的)
        所有的操作都需要先获取一个 auth-token,之后的所有操作都需要在 header 中附加上 X-Auth-Token 字段的信息进行权限认证。有一定时效性,过期后需要再次获取。    
    (1)获取 X-Storage-Url 和 X-Auth-Token    
        curl http://127.0.0.1:8080/auth/v1.0 -v -H 'X-Storage-User: admin:admin' -H 'X-Storage-Pass: admin'
        或:curl http://192.168.0.102:8080/auth/v1.0 -v -H 'X-Storage-User: admin:admin' -H 'X-Storage-Pass: admin'
        
        
        * About to connect() to 127.0.0.1 port 8080 (#0)
        *   Trying 127.0.0.1...
        * Connected to 127.0.0.1 (127.0.0.1) port 8080 (#0)
        > GET /auth/v1.0 HTTP/1.1
        > User-Agent: curl/7.29.0
        > Host: 127.0.0.1:8080
        > Accept: */*
        > X-Storage-User: admin:admin
        > X-Storage-Pass: admin
        < HTTP/1.1 200 OK
        < X-Storage-Url: http://127.0.0.1:8080/v1/AUTH_admin
        < X-Auth-Token: AUTH_tkf44c48c200e34f14850f6a8e3bc63f36
        < Content-Type: text/html; charset=UTF-8
        < X-Storage-Token: AUTH_tkf44c48c200e34f14850f6a8e3bc63f36
        < X-Trans-Id: tx703a6ebfbfca46a49f605-005c1878e0
        < Content-Length: 0
        < Date: Tue, 18 Dec 2018 04:34:40 GMT
        <
        * Connection #0 to host 127.0.0.1 left intact
    (2)查看账户信息    
        curl http://127.0.0.1:8080/v1/AUTH_admin -v -H 'X-Auth-Token: AUTH_tkf44c48c200e34f14850f6a8e3bc63f36'
        
        * About to connect() to 127.0.0.1 port 8080 (#0)
        *   Trying 127.0.0.1...
        * Connected to 127.0.0.1 (127.0.0.1) port 8080 (#0)
        > GET /v1/AUTH_admin HTTP/1.1
        > User-Agent: curl/7.29.0
        > Host: 127.0.0.1:8080
        > Accept: */*
        > X-Auth-Token: AUTH_tkf44c48c200e34f14850f6a8e3bc63f36
        >
        < HTTP/1.1 200 OK
        < Content-Length: 11
        < X-Account-Object-Count: 2
        < X-Account-Storage-Policy-Policy-0-Bytes-Used: 11
        < X-Account-Storage-Policy-Policy-0-Container-Count: 1
        < X-Timestamp: 1545104875.82331
        < X-Account-Storage-Policy-Policy-0-Object-Count: 2
        < X-Account-Bytes-Used: 11
        < X-Account-Container-Count: 1
        < Content-Type: text/plain; charset=utf-8
        < Accept-Ranges: bytes
        < X-Trans-Id: txea708b3ecf3047099ea6f-005c187945
        < Date: Tue, 18 Dec 2018 04:36:21 GMT
        <
        container1
    (3) 创建 container(container2为创建的容器名称)
        curl http://127.0.0.1:8080/v1/AUTH_admin/container2 -X PUT -H "X-Auth_Token: AUTH_tkf44c48c200e34f14850f6a8e3bc63f36"
        
 
     (4)各种操作总结(参考网页https://blog.csdn.net/ztejiagn/article/details/8905782)
        例如:
        <1>获取AUTH_admin账户下的容器列表
            curl http://127.0.0.1:8080/v1/AUTH_admin/ -X GET -H "X-Auth_Token: AUTH_tkf44c48c200e34f14850f6a8e3bc63f36"
 
        <2>获取AUTH_admin账户下的容器container1的对象列表
            curl http://127.0.0.1:8080/v1/AUTH_admin/container1 -X GET -H "X-Auth_Token: AUTH_tkf44c48c200e34f14850f6a8e3bc63f36"
        
        <3>创建、更新或拷贝对象
            curl http://127.0.0.1:8080/v1/AUTH_admin/container1/1.txt  -X PUT -T 1.txt -H "X-Auth_Token: AUTH_tkf44c48c200e34f14850f6a8e3bc63f36"
        
            其他路径下的文件
            curl http://127.0.0.1:8080/v1/AUTH_admin/container1/2.txt  -X PUT -T /opt/node/2.txt -H "X-Auth_Token: AUTH_tkf44c48c200e34f14850f6a8e3bc63f36"
        <4>获取对象内容和元数据
            curl http://127.0.0.1:8080/v1/AUTH_admin/container1/2.txt  -X GET  -H "X-Auth_Token: AUTH_tkf44c48c200e34f14850f6a8e3bc63f36"
        
        <5>删除对象
            curl http://127.0.0.1:8080/v1/AUTH_admin/container1/2.txt  -X DELETE -H "X-Auth_Token: AUTH_tkf44c48c200e34f14850f6a8e3bc63f36"        
          
                 
        
其他有用
CentOS7使用firewalld打开关闭防火墙与端口
1、firewalld的基本使用
启动: systemctl start firewalld
关闭: systemctl stop firewalld
查看状态: systemctl status firewalld
开机禁用  : systemctl disable firewalld
开机启用  : systemctl enable firewalld
        
2、日志在
swift日志
    /var/log/messages    
同步日志
   /var/log/rsyncd.log            
        
        
                                                            

一、swift对象存储环境搭建的更多相关文章

  1. openstack-r版(rocky)搭建基于centos7.4 的openstack swift对象存储服务 一

    openstack-r版(rocky)搭建基于centos7.4 的openstack swift对象存储服务 一 openstack-r版(rocky)搭建基于centos7.4 的openstac ...

  2. openstack-r版(rocky)搭建基于centos7.4 的openstack swift对象存储服务 四

    openstack-r版(rocky)搭建基于centos7.4 的openstack swift对象存储服务 一 openstack-r版(rocky)搭建基于centos7.4 的openstac ...

  3. openstack-r版(rocky)搭建基于centos7.4 的openstack swift对象存储服务 三

    openstack-r版(rocky)搭建基于centos7.4 的openstack swift对象存储服务 一 openstack-r版(rocky)搭建基于centos7.4 的openstac ...

  4. openstack-r版(rocky)搭建基于centos7.4 的openstack swift对象存储服务 二

    openstack-r版(rocky)搭建基于centos7.4 的openstack swift对象存储服务 一 openstack-r版(rocky)搭建基于centos7.4 的openstac ...

  5. 九、Swift对象存储服务(双节点搭建)

    九.Swift对象存储服务(双节点搭建) 要求:Controoler节点需要2块空盘 Compute节点需要再加2块空盘 本次搭建采用Controller 和 Compute双节点节点做swift组件 ...

  6. swift对象存储

    swift对象存储 简介 OpenStack Object Storage(Swift)是OpenStack开源云计算项目的子项目之一,被称为对象存储,提供了强大的扩展性.冗余和持久性.对象存储,用于 ...

  7. 腾讯云对象存储 COS搭建个人网站

    腾讯云对象存储 COS搭建个人网站,简单易操作,方便快捷.   只需要将你的网站资源上传即可,然后设置上你的自定义 CDN 加速域名,一个个人网站就上线啦!当然,你也可以不用设置自定义 CDN 加速域 ...

  8. swift对象存储安装

    对象存储服务概览 OpenStack对象存储是一个多租户的对象存储系统,它支持大规模扩展,可以以低成本来管理大型的非结构化数据,通过RESTful HTTP 应用程序接口. 它包含下列组件: 代理服务 ...

  9. RGW/SWIFT对象存储性能测试工具--COSBench安装

    Cosbench是Intel的开源云存储性能测试软件,COSBench目前已经广泛使用与云存储测试,并作为云存储的基准测试工具使用 https://github.com/intel-cloud/cos ...

  10. 对象存储 - Swift 原理 及 Swift+keystone+dashboard 架构搭建

    1. 原理介绍 Swift 架构.原理及功能: http://www.cnblogs.com/sammyliu/p/4955241.html 总结的很详细也很全面,受益匪浅,感谢分享. 2. keys ...

随机推荐

  1. c语言实现this指针效果

    概要 由于目前在做一个比较复杂的嵌入式项目,想要借此提升一下代码的结构设计能力,所以想要以面向对象的思想来完成这个项目,即把每个板载外设资源视为一个对象,采用msp+bsp的模式,对每个bsp外设实现 ...

  2. idea常用快捷键使用

    idea常用快捷键使用:1.shift+u 大小写2.alt+shift+u 驼峰命名(插件:CamelCase)3.ctrl+alt 点击跳转实现类4.ctrl 点击跳转接口类5.Alt+F7 查看 ...

  3. Cocos内存管理解析 CCRef/retain/release/autorelease

    Cocos内存管理源码(autorelease解析) 背景 这段时间在做项目的时候,需求需要往spine动作的挂点上绑定按钮节点,由于按钮在编辑器中是加在已有节点上的,所以在往spine上添加挂点时, ...

  4. Pytorch实现YOLOv3训练自己的数据集

    1.说明: 最近一直在研究深度学习框架PyTorch,就想使用pytorch去实现YOLOv3的object detection.在这个过程中也在各大论坛.贴吧.CSDN等中看了前辈们写的文章,在这里 ...

  5. bash shell笔记整理——tail命令

    作用 Print the last 10 lines of each FILE to standard output. With more than one FILE, precede each wi ...

  6. 23年底,我出齐了Spring boot,Spring cloud和案例方面的书,正在写一本面试书(代年终总结)

    年末了,再来总结一下吧,希望本人明年的年终总结文还能在博客园发. 这次总结的主题是本人出的java书.这几年本人出了不少书,其中有python.redis和Java方面的. 姑且不说其它,java方面 ...

  7. URL编码揭秘:为什么要进行URL编码?

    URL(Uniform Resource Locator,统一资源定位符)是互联网上资源地址的唯一标识符.在网络请求和数据传输过程中,URL编码起着至关重要的作用. URL编码解码 | 一个覆盖广泛主 ...

  8. [Luogu 4998 信号塔] 题解报告

    估计没人看的简化版题意: 给定一个数轴,以及数轴上的 \(n\) 个点(这些点可能坐落在同一坐标上),第 \(i\) 个点的坐标为 \(a_i\) .现在要在数轴上找 \(k\) 个点,第 \(i\) ...

  9. 如何应对Spark-Redis行海量数据插入、查询作业时碰到的问题

    摘要:由于redis是基于内存的数据库,稳定性并不是很高,尤其是standalone模式下的redis.于是工作中在使用Spark-Redis时也会碰到很多问题,尤其是执行海量数据插入与查询的场景中. ...

  10. Java的这个强大功能,很多人都不知道

    摘要:大多数框架采用单一的语言所开发.JNI这项Java中提供的强大功能,却逐渐的被人遗忘了. 本文分享自华为云社区<Java中一个逐渐被遗忘的强大功能,强到你难以置信!!>,作者:冰 河 ...