[ English | 한국어 (대한민국) | Esperanto | Deutsch | français | português (Brasil) | español | русский | Indonesia | नेपाली | 中文 (简体, 中国) | English (United Kingdom) ]

Настройка хранения сеансов для панели управления

Панель управления использует фреймворк сессий Django <https://docs.djangoproject.com/en/dev/topics/http/sessions/>`__ для обработки данных пользовательских сессий. Однако вы можете использовать любой доступный бэк-энд сессий. Вы настраиваете бекэнд сессии с помощью параметра SESSION_ENGINE в вашем файле local_settings.py.

После разработки архитектуры и внедрения основных служб OpenStack и других необходимых служб, а также выполнения описанных ниже шагов по работе с службами панели управления, пользователи и администраторы могут использовать панель управления OpenStack. Дополнительные инструкции по входу в панель см. в главе OpenStack User Documentation руководства для пользователей OpenStack.

В следующих разделах описаны плюсы и минусы каждого варианта развертывания панели управления.

Локальный кэш памяти

Хранение в оперативной памяти - это самый быстрый и простой в настройке бекэнд сессии, поскольку он не имеет внешних зависимостей. У него есть следующие существенные недостатки:

  • Никакого общего хранилища для процессов или worker’ов.

  • Не сохраняется после завершения процесса.

Использование внутренней памяти включено по умолчанию для Horizon только потому, что у нее нет зависимостей. Она не рекомендуется для использования в рабочих окружениях или даже для серьезной разработки.

SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
CACHES = {
  'default' : {
    'BACKEND': 'django.core.cache.backends.locmem.LocMemCache'
  }
}

Для внешнего кэширования можно использовать такие приложения, как Memcached или Redis. Эти приложения обеспечивают постоянство и совместное хранение данных и полезны для небольших развертываний и разработок.

Memcached

Memcached - это высокопроизводительная система кэширования объектов распределенной памяти, обеспечивающая хранение в памяти ключей-значений для небольших фрагментов произвольных данных.

Требования:

  • Служба Memcached запущена и доступна.

  • Python модуль python-memcached установлен.

SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
CACHES = {
  'default': {
    'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
    'LOCATION': 'my_memcached_host:11211',
  }
}

Redis

Redis - это расширенное хранилище данных в формате ключ-значение с открытым исходным кодом и лицензией BSD. Его часто называют сервером структур данных.

Требования:

  • Служба Redis запущена и доступна.

  • Python модули redis и django-redis установлены.

SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
CACHES = {
    "default": {
        "BACKEND": "redis_cache.cache.RedisCache",
        "LOCATION": "127.0.0.1:6379:1",
        "OPTIONS": {
            "CLIENT_CLASS": "redis_cache.client.DefaultClient",
        }
    }
}

Инициализируйте и настройте базу данных

Сессии, основанные на базе данных, масштабируемы, постоянны, их можно сделать высокопараллельными и высокодоступными.

Однако сеансы, основанные на базе данных, являются одним из самых медленных хранилищ сеансов и при интенсивном использовании несут большие накладные расходы. Правильная настройка развертывания базы данных также может стать серьезной задачей и выходит далеко за рамки данной документации.

  1. Запустите клиент MySQL из командной строки.

    # mysql
    
  2. Введите пароль пользователя MySQL root, когда появится запрос.

  3. Чтобы настроить базу данных MySQL, создайте базу данных dash.

    mysql> CREATE DATABASE dash;
    
  4. Создайте пользователя MySQL для вновь созданной базы данных dash, который будет иметь полный контроль над базой данных. Замените DASH_DBPASS на пароль для нового пользователя.

    mysql> GRANT ALL PRIVILEGES ON dash.* TO 'dash'@'%' IDENTIFIED BY 'DASH_DBPASS';
    mysql> GRANT ALL PRIVILEGES ON dash.* TO 'dash'@'localhost' IDENTIFIED BY 'DASH_DBPASS';
    
  5. Введите quit в приглашении mysql>, чтобы выйти из MySQL.

  6. В файле local_settings.py измените эти параметры:

    SESSION_ENGINE = 'django.contrib.sessions.backends.db'
    DATABASES = {
        'default': {
            # Database configuration here
            'ENGINE': 'django.db.backends.mysql',
            'NAME': 'dash',
            'USER': 'dash',
            'PASSWORD': 'DASH_DBPASS',
            'HOST': 'localhost',
            'default-character-set': 'utf8'
        }
    }
    
  7. После настройки файла local_settings.py, как показано на рисунке, вы можете выполнить команду manage.py migrate`, чтобы заполнить эту вновь созданную базу данных.

    # /usr/share/openstack-dashboard/manage.py migrate
    
  8. Чтобы избежать предупреждения при перезапуске Apache на Ubuntu, создайте каталог blackhole в каталоге панели управления, как показано ниже.

    # mkdir -p /var/lib/dash/.blackhole
    
  9. Перезапустите службу Apache.

  10. В Ubuntu перезапустите службу nova-api, чтобы убедиться, что сервер API может подключаться к панели управления без ошибок.

    # service nova-api restart
    

Кэшированная база данных

Чтобы уменьшить проблемы с производительностью запросов к базе данных, вы можете использовать сессионный бэкэнд Django cached_db, который использует как вашу базу данных, так и инфраструктуру кэширования для выполнения сквозного кэширования и эффективного извлечения данных.

Включите этот гибридный параметр, настроив базу данных и кэш, как обсуждалось ранее. Затем установите следующее значение:

SESSION_ENGINE = "django.contrib.sessions.backends.cached_db"

Cookies

Если вы используете Django 1.4 или более позднюю версию, то бекэнд ``signed_cookies` позволяет избежать проблем с нагрузкой на сервер и масштабированием.

Этот бекэнд хранит данные сеанса в файле cookie, который сохраняется браузером пользователя. Чтобы гарантировать, что данные сеанса не будут подделаны во время передачи, бэкэнд использует технику криптографической подписи. Это не то же самое, что шифрование: данные сеанса все равно могут быть прочитаны злоумышленником.

Плюсы этого механизма в том, что он не требует дополнительных зависимостей и инфраструктурных накладных расходов, а также масштабируется неограниченно долго, пока количество хранимых данных сессии помещается в обычный cookie.

Самый большой недостаток заключается в том, что данные сеанса помещаются в хранилище на машине пользователя и передаются по проводам. Это также ограничивает количество данных сессии, которые могут быть сохранены.

См. документацию по Django cookie-based sessions.