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

pull/9005/head
jiangweidong 2 years ago committed by Jiangjie.Bai
parent ead824a03c
commit c295f44d9c

@ -290,6 +290,8 @@ REDIS_PROTOCOL = 'rediss' if REDIS_USE_SSL else 'redis'
# Cache use sentinel
REDIS_SENTINELS_HOST = CONFIG.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
REDIS_OPTIONS = {
@ -310,7 +312,11 @@ if REDIS_SENTINEL_SERVICE_NAME and REDIS_SENTINELS:
}
REDIS_OPTIONS.update({
'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'
else:

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

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

@ -33,15 +33,21 @@ if settings.REDIS_USE_SSL:
REDIS_SENTINEL_SERVICE_NAME = settings.REDIS_SENTINEL_SERVICE_NAME
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:
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)
else:
connection_params['host'] = settings.REDIS_HOST
connection_params['port'] = settings.REDIS_PORT
redis_client = Redis(**connection_params)
print("Connection params: ", connection_params)
scheduler = "django_celery_beat.schedulers:DatabaseScheduler"
processes = []

Loading…
Cancel
Save