perf: 支持部署在开启认证的Redis Sentinel

pull/9005/head
jiangweidong 2022-11-01 10:59:04 +08:00 committed by Jiangjie.Bai
parent ead824a03c
commit c295f44d9c
4 changed files with 31 additions and 9 deletions

View File

@ -290,6 +290,8 @@ REDIS_PROTOCOL = 'rediss' if REDIS_USE_SSL else 'redis'
# Cache use sentinel # Cache use sentinel
REDIS_SENTINELS_HOST = CONFIG.REDIS_SENTINELS_HOST REDIS_SENTINELS_HOST = CONFIG.REDIS_SENTINELS_HOST
REDIS_SENTINEL_SERVICE_NAME, REDIS_SENTINELS = parse_sentinels_host(REDIS_SENTINELS_HOST) REDIS_SENTINEL_SERVICE_NAME, REDIS_SENTINELS = parse_sentinels_host(REDIS_SENTINELS_HOST)
REDIS_SENTINEL_PASSWORD = CONFIG.REDIS_SENTINEL_PASSWORD
REDIS_SENTINEL_SOCKET_TIMEOUT = CONFIG.REDIS_SENTINEL_SOCKET_TIMEOUT
# Cache config # Cache config
REDIS_OPTIONS = { REDIS_OPTIONS = {
@ -310,7 +312,11 @@ if REDIS_SENTINEL_SERVICE_NAME and REDIS_SENTINELS:
} }
REDIS_OPTIONS.update({ REDIS_OPTIONS.update({
'CLIENT_CLASS': 'django_redis.client.SentinelClient', 'CLIENT_CLASS': 'django_redis.client.SentinelClient',
'SENTINELS': REDIS_SENTINELS, 'PASSWORD': CONFIG.REDIS_PASSWORD 'SENTINELS': REDIS_SENTINELS, 'PASSWORD': CONFIG.REDIS_PASSWORD,
'SENTINEL_KWARGS': {
'password': REDIS_SENTINEL_PASSWORD,
'socket_timeout': REDIS_SENTINEL_SOCKET_TIMEOUT
}
}) })
DJANGO_REDIS_CONNECTION_FACTORY = 'django_redis.pool.SentinelConnectionFactory' DJANGO_REDIS_CONNECTION_FACTORY = 'django_redis.pool.SentinelConnectionFactory'
else: else:

View File

@ -4,9 +4,9 @@ import os
import ssl import ssl
from .base import ( from .base import (
REDIS_SSL_CA, REDIS_SSL_CERT, REDIS_SSL_KEY, REDIS_SSL_CA, REDIS_SSL_CERT, REDIS_SSL_KEY, REDIS_SSL_REQUIRED, REDIS_USE_SSL,
REDIS_SSL_REQUIRED, REDIS_USE_SSL, REDIS_SENTINEL_SERVICE_NAME, REDIS_SENTINELS, REDIS_SENTINEL_PASSWORD,
REDIS_SENTINEL_SERVICE_NAME, REDIS_SENTINELS, REDIS_SENTINEL_SOCKET_TIMEOUT
) )
from ..const import CONFIG, PROJECT_DIR from ..const import CONFIG, PROJECT_DIR
@ -100,6 +100,10 @@ REDIS_HOST = {
if REDIS_SENTINEL_SERVICE_NAME and REDIS_SENTINELS: if REDIS_SENTINEL_SERVICE_NAME and REDIS_SENTINELS:
REDIS_HOST['sentinels'] = REDIS_SENTINELS REDIS_HOST['sentinels'] = REDIS_SENTINELS
REDIS_HOST['master_name'] = REDIS_SENTINEL_SERVICE_NAME REDIS_HOST['master_name'] = REDIS_SENTINEL_SERVICE_NAME
REDIS_HOST['sentinel_kwargs'] = {
'password': REDIS_SENTINEL_PASSWORD,
'socket_timeout': REDIS_SENTINEL_SOCKET_TIMEOUT
}
else: else:
REDIS_HOST['address'] = (CONFIG.REDIS_HOST, CONFIG.REDIS_PORT) REDIS_HOST['address'] = (CONFIG.REDIS_HOST, CONFIG.REDIS_PORT)
@ -124,8 +128,14 @@ if REDIS_SENTINEL_SERVICE_NAME and REDIS_SENTINELS:
'protocol': 'sentinel', 'password': CONFIG.REDIS_PASSWORD, 'protocol': 'sentinel', 'password': CONFIG.REDIS_PASSWORD,
'host': item[0], 'port': item[1], 'db': CONFIG.REDIS_DB_CELERY 'host': item[0], 'port': item[1], 'db': CONFIG.REDIS_DB_CELERY
} for item in REDIS_SENTINELS]) } for item in REDIS_SENTINELS])
CELERY_BROKER_TRANSPORT_OPTIONS = {"master_name": REDIS_SENTINEL_SERVICE_NAME} SENTINEL_OPTIONS = {
CELERY_RESULT_BACKEND_TRANSPORT_OPTIONS = {"master_name": REDIS_SENTINEL_SERVICE_NAME} 'master_name': REDIS_SENTINEL_SERVICE_NAME,
'sentinel_kwargs': {
'password': REDIS_SENTINEL_PASSWORD,
'socket_timeout': REDIS_SENTINEL_SOCKET_TIMEOUT
}
}
CELERY_BROKER_TRANSPORT_OPTIONS = CELERY_RESULT_BACKEND_TRANSPORT_OPTIONS = SENTINEL_OPTIONS
else: else:
CELERY_BROKER_URL = CELERY_BROKER_URL_FORMAT % { CELERY_BROKER_URL = CELERY_BROKER_URL_FORMAT % {
'protocol': 'rediss' if REDIS_USE_SSL else 'redis', 'protocol': 'rediss' if REDIS_USE_SSL else 'redis',

View File

@ -83,7 +83,7 @@ Pillow==9.1.1
pytz==2022.1 pytz==2022.1
# Runtime # Runtime
django-proxy==1.2.1 django-proxy==1.2.1
channels-redis==3.4.0 channels-redis==4.0.0
channels==3.0.4 channels==3.0.4
daphne==3.0.2 daphne==3.0.2
python-daemon==2.3.0 python-daemon==2.3.0

View File

@ -33,15 +33,21 @@ if settings.REDIS_USE_SSL:
REDIS_SENTINEL_SERVICE_NAME = settings.REDIS_SENTINEL_SERVICE_NAME REDIS_SENTINEL_SERVICE_NAME = settings.REDIS_SENTINEL_SERVICE_NAME
REDIS_SENTINELS = settings.REDIS_SENTINELS REDIS_SENTINELS = settings.REDIS_SENTINELS
REDIS_SENTINEL_PASSWORD = settings.REDIS_SENTINEL_PASSWORD
REDIS_SENTINEL_SOCKET_TIMEOUT = settings.REDIS_SENTINEL_SOCKET_TIMEOUT
if REDIS_SENTINEL_SERVICE_NAME and REDIS_SENTINELS: if REDIS_SENTINEL_SERVICE_NAME and REDIS_SENTINELS:
connection_params['sentinels'] = REDIS_SENTINELS connection_params['sentinels'] = REDIS_SENTINELS
sentinel_client = Sentinel(**connection_params) sentinel_client = Sentinel(
**connection_params, sentinel_kwargs={
'password': REDIS_SENTINEL_PASSWORD,
'socket_timeout': REDIS_SENTINEL_SOCKET_TIMEOUT
}
)
redis_client = sentinel_client.master_for(REDIS_SENTINEL_SERVICE_NAME) redis_client = sentinel_client.master_for(REDIS_SENTINEL_SERVICE_NAME)
else: else:
connection_params['host'] = settings.REDIS_HOST connection_params['host'] = settings.REDIS_HOST
connection_params['port'] = settings.REDIS_PORT connection_params['port'] = settings.REDIS_PORT
redis_client = Redis(**connection_params) redis_client = Redis(**connection_params)
print("Connection params: ", connection_params)
scheduler = "django_celery_beat.schedulers:DatabaseScheduler" scheduler = "django_celery_beat.schedulers:DatabaseScheduler"
processes = [] processes = []