Установка OpenStack Swift (SAIO) на Ubuntu Server

Тестовый стенд объектного хранилища OpenStack Swift «всё в одном» на Ubuntu: диск под XFS, rsync, memcached, конфигурация, проверка загрузки файла.

Актуальность. Инструкция написана для Swift на Python 2 (2016–2018). Последовательность шагов SAIO сохранилась, но пакеты теперь ставятся для Python 3 (python3-*), а rc.local и chkconfig заменены на systemd. Сверяйтесь с актуальной инструкцией «Swift All In One» на docs.openstack.org.

SAIO (Swift All In One) — это учебный стенд объектного хранилища Swift на одной машине: четыре виртуальных узла, кольца и все службы. Для продакшена он не подходит, но удобен для разработки и тестов.

1. Пакеты

sudo apt-get update
sudo apt-get install curl gcc memcached rsync sqlite3 xfsprogs git-core libffi-dev python-setuptools liberasurecode-dev libssl-dev
sudo apt-get install python-coverage python-dev python-nose python-xattr python-eventlet python-greenlet python-pastedeploy python-netifaces python-pip python-dnspython python-mock

2. Диск под хранилище

Вариант А: отдельный раздел

sudo fdisk /dev/sdb
sudo mkfs.xfs /dev/sdb1
echo "/dev/sdb1 /mnt/sdb1 xfs noatime,nodiratime,logbufs=8 0 0" | sudo tee -a /etc/fstab

Вариант Б: файл-образ на существующем диске

sudo mkdir /srv
sudo truncate -s 1GB /srv/swift-disk
sudo mkfs.xfs /srv/swift-disk
echo "/srv/swift-disk /mnt/sdb1 xfs loop,noatime,nodiratime,logbufs=8 0 0" | sudo tee -a /etc/fstab

Точки монтирования (для обоих вариантов)

sudo mkdir /mnt/sdb1 && sudo mount /mnt/sdb1
sudo mkdir /mnt/sdb1/1 /mnt/sdb1/2 /mnt/sdb1/3 /mnt/sdb1/4
sudo chown ${USER}:${USER} /mnt/sdb1/*
for x in {1..4}; do sudo ln -s /mnt/sdb1/$x /srv/$x; done
sudo mkdir -p /srv/1/node/sdb1 /srv/1/node/sdb5 /srv/2/node/sdb2 /srv/2/node/sdb6 \
  /srv/3/node/sdb3 /srv/3/node/sdb7 /srv/4/node/sdb4 /srv/4/node/sdb8 /var/run/swift
sudo chown -R ${USER}:${USER} /var/run/swift
for x in {1..4}; do sudo chown -R ${USER}:${USER} /srv/$x/; done   # слеш в конце обязателен

Каталоги в /var/run и /var/cache пропадают после перезагрузки — создавайте их при старте системы (раньше через /etc/rc.local, сейчас — через tmpfiles.d):

mkdir -p /var/cache/swift /var/cache/swift2 /var/cache/swift3 /var/cache/swift4 /var/run/swift
chown <пользователь>:<группа> /var/cache/swift* /var/run/swift

3. Клиент и сам Swift

cd $HOME; git clone https://github.com/openstack/python-swiftclient.git
cd python-swiftclient; sudo python setup.py develop; cd -
git clone https://github.com/openstack/swift.git
cd swift; sudo python setup.py develop; cd -
sudo pip install -U xattr
sudo pip install -r swift/test-requirements.txt

4. rsync и memcached

sudo cp $HOME/swift/doc/saio/rsyncd.conf /etc/
sudo sed -i "s/<your-user-name>/${USER}/" /etc/rsyncd.conf
# в /etc/default/rsync: RSYNC_ENABLE=true
sudo service rsync restart
rsync rsync://pub@localhost/
sudo systemctl enable --now memcached

Команда rsync rsync://pub@localhost/ должна вывести модули account6012 … object6040.

5. Логи (по желанию)

sudo cp $HOME/swift/doc/saio/rsyslog.d/10-swift.conf /etc/rsyslog.d/
# в /etc/rsyslog.conf, секция GLOBAL DIRECTIVES: $PrivDropToGroup adm
sudo mkdir -p /var/log/swift
sudo chown -R syslog.adm /var/log/swift && sudo chmod -R g+w /var/log/swift
sudo service rsyslog restart

6. Конфигурация и запуск

sudo rm -rf /etc/swift
cd $HOME/swift/doc; sudo cp -r saio/swift /etc/swift; cd -
sudo chown -R ${USER}:${USER} /etc/swift
mkdir -p $HOME/bin
find /etc/swift/ -name \*.conf | xargs sudo sed -i "s/<your-user-name>/${USER}/"
cd $HOME/swift/doc; cp saio/bin/* $HOME/bin; cd -
chmod +x $HOME/bin/*
cp $HOME/swift/test/sample.conf /etc/swift/test.conf
echo "export SWIFT_TEST_CONFIG_FILE=/etc/swift/test.conf" >> $HOME/.bashrc
echo "export PATH=${PATH}:$HOME/bin" >> $HOME/.bashrc
. $HOME/.bashrc
remakerings          # собрать кольца
$HOME/swift/.unittests
startmain            # запустить службы

Если диск сделан из файла-образа, поправьте путь в скрипте сброса: sed -i "s/dev\/sdb1/srv\/swift-disk/" $HOME/bin/resetswift.

7. Проверка

curl -v -H 'X-Storage-User: test:tester' -H 'X-Storage-Pass: testing' http://127.0.0.1:8080/auth/v1.0
swift -A http://127.0.0.1:8080/auth/v1.0 -U test:tester -K testing stat
swift -A http://127.0.0.1:8080/auth/v1.0 -U test:tester -K testing upload images item.jpg
swift -A http://127.0.0.1:8080/auth/v1.0 -U test:tester -K testing post -r '.r:*' images

После последней команды файл доступен без токена по адресу http://127.0.0.1:8080/v1/AUTH_test/images/item.jpg.

Управление службами

  • swift-init main start — запустить (то же, что startmain);
  • swift-init all stop — остановить;
  • resetswift — пересоздать разделы стенда. Все загруженные данные будут удалены.

Все статьи

Расскажите о задаче — подберём платформу и оценим работу

Обсудить проект