mirror of https://github.com/Chocobozzz/PeerTube
feat(server): add redis sentinel support (#5593)
* feat(server): add redis sentinel support closes #5141 * Styling --------- Co-authored-by: Chocobozzz <me@florianbigard.com>pull/5746/head
parent
5170f492b9
commit
674f8ddd41
|
@ -65,8 +65,15 @@ database:
|
||||||
redis:
|
redis:
|
||||||
hostname: 'localhost'
|
hostname: 'localhost'
|
||||||
port: 6379
|
port: 6379
|
||||||
auth: null
|
auth: null # Used by both standalone and sentinel
|
||||||
db: 0
|
db: 0
|
||||||
|
sentinel:
|
||||||
|
enabled: false
|
||||||
|
enable_tls: false
|
||||||
|
master_name: ''
|
||||||
|
sentinels:
|
||||||
|
- hostname: ''
|
||||||
|
port: 26379
|
||||||
|
|
||||||
# SMTP server to send emails
|
# SMTP server to send emails
|
||||||
smtp:
|
smtp:
|
||||||
|
|
|
@ -63,8 +63,15 @@ database:
|
||||||
redis:
|
redis:
|
||||||
hostname: 'localhost'
|
hostname: 'localhost'
|
||||||
port: 6379
|
port: 6379
|
||||||
auth: null
|
auth: null # Used by both standalone and sentinel
|
||||||
db: 0
|
db: 0
|
||||||
|
sentinel:
|
||||||
|
enabled: false
|
||||||
|
enable_tls: false
|
||||||
|
master_name: ''
|
||||||
|
sentinels:
|
||||||
|
- hostname: ''
|
||||||
|
port: 26379
|
||||||
|
|
||||||
# SMTP server to send emails
|
# SMTP server to send emails
|
||||||
smtp:
|
smtp:
|
||||||
|
|
|
@ -84,7 +84,8 @@ function checkMissedConfig () {
|
||||||
const requiredAlternatives = [
|
const requiredAlternatives = [
|
||||||
[ // set
|
[ // set
|
||||||
[ 'redis.hostname', 'redis.port' ], // alternative
|
[ 'redis.hostname', 'redis.port' ], // alternative
|
||||||
[ 'redis.socket' ]
|
[ 'redis.socket' ],
|
||||||
|
[ 'redis.sentinel.master_name', 'redis.sentinel.sentinels[0].hostname', 'redis.sentinel.sentinels[0].port' ]
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
const miss: string[] = []
|
const miss: string[] = []
|
||||||
|
|
|
@ -39,7 +39,13 @@ const CONFIG = {
|
||||||
PORT: config.has('redis.port') ? config.get<number>('redis.port') : null,
|
PORT: config.has('redis.port') ? config.get<number>('redis.port') : null,
|
||||||
SOCKET: config.has('redis.socket') ? config.get<string>('redis.socket') : null,
|
SOCKET: config.has('redis.socket') ? config.get<string>('redis.socket') : null,
|
||||||
AUTH: config.has('redis.auth') ? config.get<string>('redis.auth') : null,
|
AUTH: config.has('redis.auth') ? config.get<string>('redis.auth') : null,
|
||||||
DB: config.has('redis.db') ? config.get<number>('redis.db') : null
|
DB: config.has('redis.db') ? config.get<number>('redis.db') : null,
|
||||||
|
SENTINEL: {
|
||||||
|
ENABLED: config.has('redis.sentinel.enabled') ? config.get<boolean>('redis.sentinel.enabled') : false,
|
||||||
|
ENABLE_TLS: config.has('redis.sentinel.enable_tls') ? config.get<boolean>('redis.sentinel.enable_tls') : false,
|
||||||
|
SENTINELS: config.has('redis.sentinel.sentinels') ? config.get<{ hostname: string, port: number }[]>('redis.sentinel.sentinels') : [],
|
||||||
|
MASTER_NAME: config.has('redis.sentinel.master_name') ? config.get<string>('redis.sentinel.master_name') : null
|
||||||
|
}
|
||||||
},
|
},
|
||||||
SMTP: {
|
SMTP: {
|
||||||
TRANSPORT: config.has('smtp.transport') ? config.get<string>('smtp.transport') : 'smtp',
|
TRANSPORT: config.has('smtp.transport') ? config.get<string>('smtp.transport') : 'smtp',
|
||||||
|
|
|
@ -32,7 +32,8 @@ class Redis {
|
||||||
if (this.initialized === true) return
|
if (this.initialized === true) return
|
||||||
this.initialized = true
|
this.initialized = true
|
||||||
|
|
||||||
logger.info('Connecting to redis...')
|
const redisMode = CONFIG.REDIS.SENTINEL.ENABLED ? 'sentinel' : 'standalone'
|
||||||
|
logger.info('Connecting to redis ' + redisMode + '...')
|
||||||
|
|
||||||
this.client = new IoRedis(Redis.getRedisClientOptions('', { enableAutoPipelining: true }))
|
this.client = new IoRedis(Redis.getRedisClientOptions('', { enableAutoPipelining: true }))
|
||||||
this.client.on('error', err => logger.error('Redis failed to connect', { err }))
|
this.client.on('error', err => logger.error('Redis failed to connect', { err }))
|
||||||
|
@ -56,10 +57,25 @@ class Redis {
|
||||||
this.prefix = 'redis-' + WEBSERVER.HOST + '-'
|
this.prefix = 'redis-' + WEBSERVER.HOST + '-'
|
||||||
}
|
}
|
||||||
|
|
||||||
static getRedisClientOptions (connectionName?: string, options: RedisOptions = {}): RedisOptions {
|
static getRedisClientOptions (name?: string, options: RedisOptions = {}): RedisOptions {
|
||||||
|
const connectionName = [ 'PeerTube', name ].join('')
|
||||||
|
const connectTimeout = 20000 // Could be slow since node use sync call to compile PeerTube
|
||||||
|
|
||||||
|
if (CONFIG.REDIS.SENTINEL.ENABLED) {
|
||||||
|
return {
|
||||||
|
connectionName,
|
||||||
|
connectTimeout,
|
||||||
|
enableTLSForSentinelMode: CONFIG.REDIS.SENTINEL.ENABLE_TLS,
|
||||||
|
sentinelPassword: CONFIG.REDIS.AUTH,
|
||||||
|
sentinels: CONFIG.REDIS.SENTINEL.SENTINELS,
|
||||||
|
name: CONFIG.REDIS.SENTINEL.MASTER_NAME,
|
||||||
|
...options
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
connectionName: [ 'PeerTube', connectionName ].join(''),
|
connectionName,
|
||||||
connectTimeout: 20000, // Could be slow since node use sync call to compile PeerTube
|
connectTimeout,
|
||||||
password: CONFIG.REDIS.AUTH,
|
password: CONFIG.REDIS.AUTH,
|
||||||
db: CONFIG.REDIS.DB,
|
db: CONFIG.REDIS.DB,
|
||||||
host: CONFIG.REDIS.HOSTNAME,
|
host: CONFIG.REDIS.HOSTNAME,
|
||||||
|
|
Loading…
Reference in New Issue