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

تنظیم فضای ذخیره‌سازی session (جلسه) برای داشبورد

داشبورد از فریم‌ورک session های جنگو برای مدیریت داده‌های session کاربر استفاده می‌کند. با این حال، می‌توانید از هر session back end موجود استفاده کنید. می‌توانید session back end را از طریق تنظیم SESSION_ENGINE` در فایل local_settings.py` خود سفارشی کنید.

پس از معماری و پیاده‌سازی سرویس‌های اصلی OpenStack و سایر سرویس‌های مورد نیاز، همراه با مراحل سرویس داشبورد که در زیر آمده است، کاربران و مدیران می‌توانند از داشبورد OpenStack استفاده کنند. برای دستورالعمل‌های بیشتر در مورد ورود به داشبورد، به فصل مستندات کاربر OpenStack از راهنمای کاربر نهایی OpenStack مراجعه کنید.

بخش‌های زیر مزایا و معایب هر گزینه را در رابطه با استقرار داشبورد شرح می‌دهند.

Local memory cache (حافظه کش لوکال)

ذخیره‌سازی حافظه محلی (Local memory storage) سریع‌ترین و آسان‌ترین روش برای راه‌اندازی بک‌اند session (سشن) است، زیرا هیچ وابستگی خارجی ندارد. اما معایب قابل توجه زیر را دارد:

  • هیچ فضای ذخیره‌سازی مشترکی بین فرآیندها یا ورکرها وجود ندارد.

  • پس از خاتمه یک فرآیند، هیچ گونه ماندگاری وجود ندارد.

حافظه محلی backend به عنوان پیش‌فرض برای Horizon فعال شده است، صرفاً به این دلیل که هیچ وابستگی ندارد. این مورد برای استفاده در محیط عملیاتی(پروداکشن) یا حتی برای کارهای توسعه جدی توصیه نمی‌شود.

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

شما می‌توانید از برنامه‌هایی مانند «Memcached» یا «Redis» برای ذخیره‌سازی خارجی (اکسترنال) استفاده کنید. این برنامه‌ها پایداری و فضای ذخیره‌سازی مشترک را ارائه می‌دهند و برای استقرار و توسعه در مقیاس کوچک مفید هستند.

Memcached

Memcached یک سیستم ذخیره‌سازی اشیاء(آبجکت) در حافظه توزیع‌شده و با کارایی بالا است که امکان ذخیره‌سازی کلید-مقدار درون حافظه‌ای را برای تکه‌های کوچک داده‌های دلخواه فراهم می‌کند.

الزامات:

  • سرویس Memcached در حال اجرا و قابل دسترسی است.

  • ماژول پایتون 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 در حال اجرا و قابل دسترسی است.

  • ماژول‌های پایتون 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",
        }
    }
}

مقداردهی اولیه و پیکربندی پایگاه داده (دیتابیس)

جلسات (سشن‌ها) پشتیبانی‌شده توسط پایگاه داده، مقیاس‌پذیر و پایدار هستند و می‌توانند همزمانی بالا و دسترسی‌پذیری بالایی داشته باشند.

با این حال، session های پشتیبانی شده توسط پایگاه داده یکی از کندترین حافظه‌های session هستند و در صورت استفاده زیاد، سربار زیادی را متحمل می‌شوند. پیکربندی صحیح استقرار پایگاه داده شما نیز می‌تواند یک کار قابل توجه باشد و بسیار فراتر از محدوده این مستندات است.

  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. برای خروج از MySQL، در اعلان mysql>، عبارت quit را وارد کنید.

  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. سرویس آپاچی را مجدداً راه‌اندازی کنید.

  10. در اوبونتو، سرویس nova-api را مجدداً راه‌اندازی کنید تا مطمئن شوید که سرور API می‌تواند بدون خطا به داشبورد متصل شود.

    # service nova-api restart
    

پایگاه داده ذخیره شده (کش شده)

برای کاهش مشکلات عملکرد کوئری‌های پایگاه داده، می‌توانید از بک‌اند سشن cached_db` جنگو استفاده کنید، که از هر دو زیرساخت پایگاه داده و ذخیره‌سازی (کش کردن) شما برای انجام ذخیره‌سازی از طریق نوشتن و بازیابی کارآمد استفاده می‌کند.

این تنظیم ترکیبی را با پیکربندی پایگاه داده و حافظه پنهان خود (کش)، همانطور که قبلاً بحث شد، فعال کنید. سپس، مقدار زیر را تنظیم کنید:

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

Cookies (کوکی‌ها)

اگر از جنگو ۱.۴ یا بالاتر استفاده می‌کنید، بک‌اند «signed_cookies» از مشکلات بارگذاری سرور و مقیاس‌پذیری جلوگیری می‌کند.

این backend داده‌های session را در یک کوکی ذخیره می‌کند که توسط مرورگر کاربر ذخیره می‌شود. backend از یک تکنیک امضای رمزنگاری برای اطمینان از عدم دستکاری داده‌های session در حین انتقال استفاده می‌کند. این با رمزگذاری متفاوت است؛ داده‌های session همچنان توسط یک مهاجم قابل خواندن هستند.

از مزایای این موتور این است که به هیچ وابستگی یا سربار زیرساختی اضافی نیاز ندارد و تا زمانی که مقدار داده‌های session ذخیره شده در یک کوکی معمولی جا شود، به طور نامحدود مقیاس‌پذیر است.

بزرگترین عیب آن این است که داده‌های session را در دستگاه کاربر ذخیره کرده و از طریق سیم منتقل می‌کند. همچنین مقدار داده‌های session ای که می‌توان ذخیره کرد را محدود می‌کند.

مستندات مربوط به جلسات مبتنی بر کوکی جنگو <https://docs.djangoproject.com/en/dev/topics/http/sessions/#using-cookie-based-sessions>`__ را ببینید.