10

Ho un'app Node.js su Elastic Beanstalk in esecuzione su più istanze ec2 dietro un bilanciamento del carico (elb).Amazon ELB - Sessione persistente di cookie persi

Causa della necessità della mia app, ho dovuto attivare la stickiness della sessione. Ho attivato la "AppCookieStickinessPolicy" usando il mio cookie personalizzato "sails.sid" come riferimento.

Il problema è che la mia applicazione ha bisogno di questo biscotto al lavoro proprely, ma come il momento in cui ho attivare la stickness sessione (tramite Durata-Based Session viscosità o nel mio caso: Application-Controlled Session collosità), le intestazioni di andare al mio server vengono modificati e ho perso il mio cookie personalizzato, che viene sostituito dal cookie AWSELB (amazon ELB).

Come configurare il loadbalancer per non sostituire il mio cookie?

Se ho capito bene, l'AppCookieStickinessPolicies deve conservare il mio cookie personalizzato ma non è il caso. Sto sbagliando da qualche parte?

Grazie in anticipo

descrizione della mia bilanciamento del carico:

{ 
    "LoadBalancerDescriptions": [ 
     { 
      "AvailabilityZones": [ 
       "us-east-1b" 
      ], 

      .... 

      "Policies": { 
       "AppCookieStickinessPolicies": [ 
        { 
         "PolicyName": "AWSConsole-AppCookieStickinessPolicy-awseb-e-y-AWSEBLoa-175QRBIZFH0I8-1452531192664", 
         "CookieName": "sails.sid" 
        } 
       ], 
       "LBCookieStickinessPolicies": [ 
        { 
         "PolicyName": "awseb-elb-stickinesspolicy", 
         "CookieExpirationPeriod": 0 
        } 
       ], 
       "OtherPolicies": [] 
      }, 
      "ListenerDescriptions": [ 
       { 
        "Listener": { 
         "InstancePort": 80, 
         "LoadBalancerPort": 80, 
         "InstanceProtocol": "HTTP", 
         "Protocol": "HTTP" 
        }, 
        "PolicyNames": [ 
         "AWSConsole-AppCookieStickinessPolicy-awseb-e-y-AWSEBLoa-175QRBIZFH0I8-1452531192664" 
        ] 
       } 
      ] 

      .... 

     } 
    ] 
} 
+1

Hai aggiornato la console di Amazon EC2 per aggiungere il tuo nome cookie e la politica cookie personalizzati? Inoltre, hai provato a utilizzare un nome di cookie diverso (ad esempio, uno che non ha un periodo in esso)? – Cahit

risposta

1

La sessione appiccicoso biscotto stabilito dal ELB viene utilizzato per identificare ciò nodo del cluster alla richiesta rotta verso.

Se si imposta un cookie nell'applicazione su cui è necessario fare affidamento, quindi si aspetta che l'ELB utilizzi quel cookie, sovrascriverà il valore impostato.

Provare semplicemente a consentire all'ELB di gestire il cookie di sessione.

1

Ho dedicato molto tempo a provare le caratteristiche di viscosità ELB e le richieste di routing dallo stesso client alla stessa macchina in un server cluster back-end.

Il problema è che non sempre funziona al 100%, quindi ho dovuto scrivere una procedura di backup utilizzando le sessioni memorizzate in MySQL. Ma poi, ho capito che non avevo bisogno della funzionalità di stickiness ELB, potevo semplicemente usare il sistema di sessione MySQL.

È più complesso scrivere un sistema di sessione di database, e ovviamente c'è un sovraccarico nel fatto che ogni chiamata http implicherà inevitabilmente una query di database. Tuttavia, se questa query utilizza un indice primario, non è così male.

Il grande vantaggio è che qualsiasi richiesta può essere inviata a qualsiasi server. O se uno dei tuoi server muore, il prossimo può gestire il lavoro altrettanto bene. Per applicazioni veramente resilienti, un sistema di sessione del database è inevitabile.

+0

Oppure puoi usare qualcosa come memcached o redis per le tue sessioni. Accesso rapido, nessun carico aggiuntivo sul tuo database. – chris