Difference: InstallingAndConfiguringSwift (2 vs. 3)

Revision 32012-10-15 - EnricoFattibene

Line: 1 to 1
 
META TOPICPARENT name="MarcheCloud"

Installazione e configurazione del servizio Object Storage (Swift)

Line: 9 to 9
 # yum install openstack-swift-account openstack-swift-container openstack-swift-object xfsprogs
Changed:
<
<
  • Create and populate configuration directories on all nodes:
>
>
  • Creare la directory di configurazione e settate i proprietari:
 
# mkdir -p /etc/swift
# chown -R swift:swift /etc/swift/    
Changed:
<
<
  • Create /etc/swift/swift.conf:
>
>
  • Creare il file /etc/swift/swift.conf:
 
[swift-hash]
# random unique string that can never change (DO NOT LOSE)
swift_hash_path_suffix = fLIbertYgibbitZ
Added:
>
>
Creare e montare un volume logico attraverso i seguenti passi:
 
  1. Creare un volume logico di 800 Gigabyte sul server:
    # lvcreate -L 800G -n lv_swift <VOLUME_NAME>
Line: 54 to 56
 # chown -R swift:swift /srv/node
Added:
>
>
  • Creare il file di configuarazione per rsync /etc/rsyncd.conf:
    uid = swift
    gid = swift
    log file = /var/log/rsyncd.log
    pid file = /var/run/rsyncd.pid
    address = <STORAGE_LOCAL_NET_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
    
    Dove <STORAGE_LOCAL_NET_IP> l'indirizzo IP dello Storage node.

  • Editare la seguente riga nel file /etc/default/rsync:
    RSYNC_ENABLE = true
    

  • Creare uno script /etc/rc.d/init.d/rsyncd che possa far partire il servizio rsync:
    #!/bin/bash
    
    # Source function library.
    . /etc/rc.d/init.d/functions
    
    [ -f /usr/bin/rsync ] || exit 0
    
    case "$1" in
    start)
    action "Starting rsyncd: " /usr/bin/rsync --daemon
    ;;
    stop)
    action "Stopping rsyncd: " killall rsync
    ;;
    *)
    echo "Usage: rsyncd {start|stop}"
    exit 1
    esac
    exit 0
    

  • Cambiare i proprietari di file e directory in maniera ricorsiva:
    # restorecon -R -v /etc/rc.d/init.d/rsyncd
    

  • Lanciare rsyncd attraverso il nuovo script creato:
    # service rsyncd start
    

  • Creare il file /etc/swift/account-server.conf:
    [DEFAULT]
    bind_ip = <STORAGE_LOCAL_NET_IP>
    workers = 1
    
    [pipeline:main]
    pipeline = account-server
    
    [app:account-server]
    use = egg:swift#account
    
    [account-replicator]
    
    [account-auditor]
    
    [account-reaper]
    

  • Creare il file /etc/swift/container-server.conf:
    [DEFAULT]
    bind_ip = <STORAGE_LOCAL_NET_IP>
    workers = 1
    
    [pipeline:main]
    pipeline = container-server
    
    [app:container-server]
    use = egg:swift#container
    
    [container-replicator]
    
    [container-updater]
    
    [container-auditor]
    
    [container-sync]
    

  • Creare il file /etc/swift/object-server.conf:
    [DEFAULT]
    bind_ip = <STORAGE_LOCAL_NET_IP>
    workers = 1
    
    [pipeline:main]
    pipeline = object-server
    
    [app:object-server]
    use = egg:swift#object
    
    [object-replicator]
    
    [object-updater]
    
    [object-auditor]
    
    [object-expirer]
    
 

Installazione e configurazione di Proxy server

  • Installare i pacchetti del Proxy server
Line: 67 to 196
 

  • Creare un certificato auto-firmato per SSL:
Changed:
<
<
cd /etc/swift openssl req -new -x509 -nodes -out cert.crt -keyout cert.key

  • Modify memcached to listen on the default interfaces. Preferably this should be on a local, non-public network. Edit the following line in /etc/memcached.conf, changing:
-l 127.0.0.1 to -l
>
>
# cd /etc/swift
# openssl req -new -x509 -nodes -out cert.crt -keyout cert.key
 
  • Far partire il servizio memcached

Line: 83 to 209
 
  • Create /etc/swift/proxy-server.conf:
    [DEFAULT]
Changed:
<
<
bind_port = 8888
>
>
bind_port = 8080
 user =

[pipeline:main]

Line: 108 to 234
 auth_host = auth_token = admin_token =
Added:
>
>
auth_protocol = http
  [filter:cache] use = egg:swift#memcache
Line: 120 to 247
 use = egg:swift#healthcheck
Changed:
<
<
  • Create the account, container and object rings. The builder command is basically creating a builder file with a few parameters. The parameter with the value of 18 represents 2 ^ 18th, the value that the partition will be sized to. Set this partition power value based on the total amount of storage you expect your entire ring to use. The value of 3 represents the number of replicas of each object, with the last value being the number of hours to restrict moving a partition more than once.
>
>
  • Creare i ring per account, container e oggetti:
 
Changed:
<
<
cd /etc/swift swift-ring-builder account.builder create 7 1 24 swift-ring-builder container.builder create 7 1 24 swift-ring-builder object.builder create 7 1 24 Nota bene: il numero di repliche non pu essere superiore al numero di nodi storage.

  • Su ognuno degli storage node lanciare i seguenti comandi:
    swift-ring-builder account.builder add z<ZONE>-<STORAGE_LOCAL_NET_IP>:6002/<DEVICE> 100
    swift-ring-builder container.builder add z<ZONE>-<STORAGE_LOCAL_NET_IP_1>:6001/<DEVICE> 100
    swift-ring-builder object.builder add z<ZONE>-<STORAGE_LOCAL_NET_IP_1>:6000/<DEVICE> 100
>
>
# cd /etc/swift # swift-ring-builder account.builder create 7 1 24 # swift-ring-builder container.builder create 7 1 24 # swift-ring-builder object.builder create 7 1 24 Dove:
    • Il primo valore numerico (7 nell'esempio) calcolato come segue: considerata la potenza in base 2 appena superiore al valore della partizione di storage in Gigabyte diviso 10, il valore da riportare l'esponente di tale potenza. Nell'esempio riportato la partizione di 800 GB, 2^7 (128) la potenza di 2 appena superiore a 800/10=80.
    • Il secondo valore numerico (1 nell'esempio) il numero di repliche di ogni oggetto. Nota bene: tale numero non pu essere superiore al numero di nodi storage.
    • Il terzo valore numerico (24 nell'esempio) indica che la prtizione pu essere spostata una volta ogni 24 ore.

  • Su ognuno degli Storage node lanciare i seguenti comandi:
    swift-ring-builder account.builder add z<ZONE>-<STORAGE_LOCAL_NET_IP>:6002/<DEVICE> <NUM>
    swift-ring-builder container.builder add z<ZONE>-<STORAGE_LOCAL_NET_IP_1>:6001/<DEVICE> <NUM>
    swift-ring-builder object.builder add z<ZONE>-<STORAGE_LOCAL_NET_IP_1>:6000/<DEVICE> <NUM>
  Per esempio sul nodo openstack-04.cnaf.infn.it si setta uno storage node con una partizione in Zona 1 sull'IP del server (131.154.100.113). Il mount point di questa partizione /srv/node/swift, la partizione il volume logico "swift", e 80 il numero di Terabyte della partizione moltiplicato per 100. I comandi da lanciare sono:

Line: 145 to 275
 Device z1-131.154.100.113:6000/swift_"" with 80.0 weight got id 0
Changed:
<
<
  • Verify the ring contents for each ring:
>
>
  • Verificare il contenuto di ogni ring:
 
# swift-ring-builder account.builder
account.builder, build version 1
Line: 169 to 299
  0 1 131.154.100.113 6000 swift 80.00 0 -100.00
Changed:
<
<
*Rebalance the rings:
>
>
  • Ri-bilanciare i ring:
 
# swift-ring-builder account.builder rebalance
Reassigned 128 (100.00%) partitions. Balance is now 0.00.
Line: 181 to 311
 Reassigned 128 (100.00%) partitions. Balance is now 0.00.
Changed:
<
<
>
>
  • Verificare nuovamente il contenuto di ogni ring:
 
# swift-ring-builder container.builder
container.builder, build version 1
Line: 205 to 335
  0 1 131.154.100.113 6002 swift 80.00 128 0.00
Changed:
<
<
Copy the account.ring.gz, container.ring.gz, and object.ring.gz files to each of the Proxy and Storage nodes in /etc/swift.

Make sure all the config files are owned by the swift user:

>
>
  • Copiare i file account.ring.gz, container.ring.gz e object.ring.gz su ognuno dei server Proxy e Storage node in /etc/swift.
 
Added:
>
>
  • Assicurarsi che i file di configurazione abbiano i seguenti proprietari:

 chown -R swift:swift /etc/swift
Added:
>
>
 
  • Su tutti gli Storage node far partire i servizi di Swift:

Line: 225 to 356
 # swift-init account-replicator start # swift-init account-auditor start
Added:
>
>
Si possono usare i seguenti comandi compatti:
# swift-init main start
# swift-init rest start
 
  • Sul server Proxy far partire il servizio proxy:

Line: 232 to 368
 
Changed:
<
<
Verifica: # export ADMINPASS=secretword # swift -V 2 -A http://:5000/v2.0 -U adminUser:admin -K $ADMINPASS stat [root@openstack-04 etc]# swift -V 2 -A http://openstack-01.cnaf.infn.it:5000/v2.0 -U adminUser:adminUser -K $ADMINPASS stat There is no object-store endpoint on this auth server.
>
>

Troubleshooting

  • Da linea di comando usare il comando swift per mostrare informationi su account, container o oggetti.
    # swift -V 2 -A http://<KEYSTONE_HOSTNAME>:5000/v2.0 -U <SERVICE_TENANT>:<SWIFT_USER> -K <ADMIN_PASSWORD> stat
    
    Dove:
    • <KEYSTONE_HOSTNAME> l'hostname del server Keystone (nel prototipo in esempio openstack-01.cnaf.infn.it)
    • <SERVICE_TENANT> il tenant del DB di Keystone che racchiude gli utenti dei servizi OpenStack
    • <SWIFT_USER> il nome dell'utente del servizio Swift nel DB di Keystone
    • <ADMIN_PASSWORD> la password dell'utente del servizio Swift nel DB di Keystone
 
Added:
>
>
  • Caricare un file (viene creato automaticamente il container):
    # swift -V 2 -A http://<KEYSTONE_HOSTNAME>:5000/v2.0 -U <SERVICE_TENANT>:<SWIFT_USER> -K <ADMIN_PASSWORD> upload <CONTAINER_NAME> <FILE_NAME>
    
    Dove
    • <CONTAINER_NAME> il nome del container che si intende creare
    • <FILE_NAME> il nome del file che si intende caricare

  • Scaricare un file:
    # swift -V 2 -A http://<KEYSTONE_HOSTNAME>:5000/v2.0 -U <SERVICE_TENANT>:<SWIFT_USER> -K <ADMIN_PASSWORD> download <CONTAINER_NAME> <FILE_NAME>
    
 
Added:
>
>
  • Mostrare i container esistenti:
    # swift -V 2 -A http://<KEYSTONE_HOSTNAME>:5000/v2.0 -U <SERVICE_TENANT>:<SWIFT_USER> -K <ADMIN_PASSWORD> list
    


  -- EnricoFattibene - 2012-10-12
 
This site is powered by the TWiki collaboration platformCopyright © 2008-2021 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback