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

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

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

After architecting and implementing the core OpenStack services and other required services, combined with the Dashboard service steps below, users and administrators can use the OpenStack dashboard. Refer to the Вход в панель управления.

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

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

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

  • Никакого общего хранилища для процессов или 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. Введите пароль root пользователя MySQL, когда появится запрос.

  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.