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

设置仪表板的会话存储

仪表板使用 Django 会话框架 来处理用户会话数据。但是,您可以使用任何可用的会话后端。您可以通过在 local_settings.py 文件中的 SESSION_ENGINE 设置来定制会话后端。

在架构和实现核心 OpenStack 服务和其他必需的服务之后,结合以下仪表板服务步骤,用户和管理员可以使用 OpenStack 仪表板。有关登录仪表板的更多说明,请参阅 OpenStack 最终用户指南的 OpenStack 用户文档 章节。

以下部分描述了每种选项的优缺点,以及它与部署仪表板的关系。

本地内存缓存

本地内存存储是最快速、最简单的会话后端设置,因为它根本没有外部依赖项。它具有以下重大缺点:

  • 进程或工作线程之间没有共享存储。

  • 进程终止后没有持久性。

本地内存后端之所以被 Horizon 默认启用,仅仅是因为它没有依赖项。不建议将其用于生产环境,甚至不建议用于严肃的开发工作。

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

您可以使用诸如 MemcachedRedis 之类的应用程序进行外部缓存。这些应用程序提供持久性和共享存储,对于小型部署和开发非常有用。

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 模块 redisdjango-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. 为新创建的 dash 数据库创建一个 MySQL 用户,该用户对数据库具有完全控制权。将 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. mysql> 提示符下输入 quit 以退出 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 时出现警告,请在仪表板目录中创建一个 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 由用户的浏览器存储。后端使用加密签名技术来确保会话数据在传输过程中不会被篡改。这与加密不同;会话数据仍然可以被攻击者读取。

此引擎的优点是不需要额外的依赖项或基础设施开销,并且只要存储的会话数据量适合正常的 cookie,就可以无限扩展。

最大的缺点是将会话数据放置在用户机器上的存储中并通过网络传输。它还限制了可以存储的会话数据量。

请参阅 Django 基于 cookie 的会话 文档。