I am aware of maglev as a potential alternative lb_policy, and also there 
are problems if the cluster configuration is changed while there are 
outstand connections through envoy.

On Monday, February 22, 2021 at 11:40:36 AM UTC-5 Rob Cecil wrote:

> Just some follow up - in case anyone else is looking for solutions.
>
> There are no obvious usage scenarios documented, but I found a solution 
> using a lb_policy of "ring_hash" where the client provides a header that is 
> unique the client. Just generate a unique, stable identifier throughout the 
> lifetime of the client (browser) and inject that as a header (here using 
> "x-session-hash", but it could be anything) into every request.
>
> I'm using nanoid to generate unique strings in Javascript. I simply 
> generate one and store in local storage.
>
> Here's the relevant .yaml for an example configuration that defines a 
> two-host upstream cluster:
>
> admin:
>   access_log_path: /tmp/admin_access.log
>   address:
>     socket_address: { address: 0.0.0.0, port_value: 9901 }
>
> static_resources:
>   listeners:
>   - name: listener_0
>     address:
>       socket_address: { address: 0.0.0.0, port_value: 8080 }
>     filter_chains:
>     - filters:
>       - name: envoy.filters.network.http_connection_manager
>         typed_config:
>           "@type": 
> type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
>           codec_type: auto
>           stat_prefix: ingress_http
>           route_config:
>             name: local_route
>             virtual_hosts:
>             - name: local_service
>               domains: ["*"]
>               routes:
>               - match: { prefix: "/" }
>                 route:
>                   cluster: controlweb_backendservice
>                   hash_policy:
>                     - header:
>                         header_name: x-session-hash
>                   max_stream_duration:
>                     grpc_timeout_header_max: 0s
>               cors:
>                 allow_origin_string_match:
>                 - prefix: "*"
>                 allow_methods: GET, PUT, DELETE, POST, OPTIONS
>
>                 allow_headers: 
> keep-alive,user-agent,cache-control,content-type,content-transfer-encoding,access-token,x-accept-content-transfer-encoding,x-accept-response-streaming,x-user-agent,x-grpc-web,grpc-timeout,x-session-hash
>                 max_age: "1728000"
>                 expose_headers: access-token,grpc-status,grpc-message
>           http_filters:
>           - name: envoy.filters.http.grpc_web
>           - name: envoy.filters.http.cors
>           - name: envoy.filters.http.router
>   clusters:
>   - name: controlweb_backendservice
>     connect_timeout: 0.25s
>     type: strict_dns
>     http2_protocol_options: {}
>     lb_policy: ring_hash
>     
>     load_assignment:
>       cluster_name: cluster_0
>       endpoints:
>         - lb_endpoints:
>             - endpoint:
>                 address:
>                   socket_address:
>                     address: 172.16.0.219
>                     port_value: 50251
>               load_balancing_weight: 10
>             - endpoint:
>                 address:
>                   socket_address:
>                     address: 172.16.0.132
>                     port_value: 50251
>               load_balancing_weight: 1
>
> On Sunday, February 14, 2021 at 12:43:42 PM UTC-5 Rob Cecil wrote:
>
>> Looking for an example of an Envoy configuration that implements session 
>> affinity (stickiness) to load balance a cluster of backend servers.  Thanks!
>>
>> I'm open to using the source IP or something in the header, but probably 
>> not cookie.
>>
>> Thanks
>>
>

-- 
You received this message because you are subscribed to the Google Groups 
"grpc.io" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/grpc-io/95bfe438-a9b6-4a6d-8a48-94fe0b99cb75n%40googlegroups.com.

Reply via email to