Просмотр исходного кода

Merge pull request #59 from overleaf/ho-redis-natmap-sentinel

Move pubsub to seperate connection
Henry Oswald 7 лет назад
Родитель
Сommit
eadef7b133

+ 12 - 6
services/real-time/app.coffee

@@ -2,6 +2,7 @@ Metrics = require("metrics-sharelatex")
 Settings = require "settings-sharelatex"
 Metrics.initialize(Settings.appName or "real-time")
 async = require("async")
+_ = require "underscore"
 
 logger = require "logger-sharelatex"
 logger.initialize("real-time")
@@ -60,6 +61,7 @@ app.get "/debug/events", (req, res, next) ->
 	res.send "debug mode will log next #{Settings.debugEvents} events"
 
 rclient = require("redis-sharelatex").createClient(Settings.redis.realtime)
+
 app.get "/health_check/redis", (req, res, next) ->
 	rclient.healthCheck (error) ->
 		if error?
@@ -132,16 +134,20 @@ if Settings.forceDrainMsDelay?
 if Settings.continualPubsubTraffic
 	console.log "continualPubsubTraffic enabled"
 
-	pubSubClient = redis.createClient(Settings.redis.documentupdater)
+	redisClients = [redis.createClient(Settings.redis.documentupdater), redis.createClient(Settings.redis.realtime)]
 
-	publishJob = (channel, cb)->
+	publishJob = (channel, callback)->
 		checker = new HealthCheckManager(channel)
 		logger.debug {channel:channel}, "sending pub to keep connection alive"
 		json = JSON.stringify({health_check:true, key: checker.id, date: new Date().toString()})
-		pubSubClient.publish channel, json, (err)->
-			if err?
-				logger.err {err, channel}, "error publishing pubsub traffic to redis"
-			cb(err)
+		jobs = _.map redisClients, (rclient)->
+			return (cb)->
+				rclient.publish channel, json, (err)->
+					if err?
+						logger.err {err, channel}, "error publishing pubsub traffic to redis"
+					return cb(err)
+
+		async.series jobs, callback
 
 	runPubSubTraffic = ->
 		async.map ["applied-ops", "editor-events"], publishJob, (err)->

+ 1 - 1
services/real-time/app/coffee/DocumentUpdaterController.coffee

@@ -1,7 +1,7 @@
 logger = require "logger-sharelatex"
 settings = require 'settings-sharelatex'
 redis = require("redis-sharelatex")
-rclient = redis.createClient(settings.redis.documentupdater)
+rclient = redis.createClient(settings.redis.pubsub)
 SafeJsonParse = require "./SafeJsonParse"
 EventLogger = require "./EventLogger"
 HealthCheckManager = require "./HealthCheckManager"

+ 2 - 2
services/real-time/app/coffee/WebsocketLoadBalancer.coffee

@@ -2,8 +2,8 @@ Settings = require 'settings-sharelatex'
 logger = require 'logger-sharelatex'
 redis = require("redis-sharelatex")
 SafeJsonParse = require "./SafeJsonParse"
-rclientPub = redis.createClient(Settings.redis.realtime)
-rclientSub = redis.createClient(Settings.redis.realtime)
+rclientPub = redis.createClient(Settings.redis.pubsub)
+rclientSub = redis.createClient(Settings.redis.pubsub)
 EventLogger = require "./EventLogger"
 HealthCheckManager = require "./HealthCheckManager"
 

+ 6 - 0
services/real-time/config/settings.defaults.coffee

@@ -1,5 +1,11 @@
 settings =
 	redis:
+
+		pubsub:
+			host: process.env['PUBSUB_REDIS_HOST'] or process.env['REDIS_HOST'] or "localhost"
+			port: process.env['PUBSUB_REDIS_PORT'] or process.env['REDIS_PORT'] or "6379"
+			password: process.env["PUBSUB_REDIS_PASSWORD"] or process.env["REDIS_PASSWORD"] or ""
+
 		realtime:
 			host: process.env['REAL_TIME_REDIS_HOST'] or process.env['REDIS_HOST'] or "localhost"
 			port: process.env['REAL_TIME_REDIS_PORT'] or process.env['REDIS_PORT'] or "6379"