session-replicationsakai

How do I setup session replication in Sakai 10?


The recent Open Apereo 14 conference had a session about distributed caching and session replication in Sakai 10:

http://lanyrd.com/2014/apereo/sdbbct/

What are the steps I need to take with Sakai 10 to allow for session replication?


Solution

  • Session replication is part of Sakai 10, but is turned off by default. To enable it, you will need:

    1. Terracotta installed, configured, and running (version 3.7.6 is required currently http://fossies.org/linux/misc/terracotta-3.7.6.tar.gz)
    2. Multiple Tomcat servers behind a load balancer
    3. The following sakai.properties settings set (found here https://source.sakaiproject.org/svn/config/trunk/configuration/bundles/src/bundle/org/sakaiproject/config/bundle/default.sakai.properties):

      # CLUSTER CACHING (KNL-1184)
      # WARNING: this requires an external distributed caching server
      # Enable distributed caching
      # DEFAULT: false
      #memory.cluster.enabled=true
      
      # The URLs of the distributed cache servers
      #memory.cluster.server.urls.count=2
      #memory.cluster.server.urls.1={CACHE_SERVER_URL_1}:9510
      #memory.cluster.server.urls.2={CACHE_SERVER_URL_2}:9511
      
      ## The caches that will be using the distributed cache.
      ## SESSION failover: org.sakaiproject.tool.impl.RebuildBreakdownService.cache
      #memory.cluster.names.count=1
      #memory.cluster.names.1=org.sakaiproject.tool.impl.RebuildBreakdownService.cache
      
      ## Any Cache properties below that are not set will use the default values
      # Valid properties include: maxEntries(int>0), timeToIdle(int>0, seconds), timeToLive(int>0, seconds), eternal(true|false)
      # Defaults: maxEntries=10000, timeToIdle=600, timeToLive=600, eternal=false
      # Configure cluster caches using: memory.cluster.{cacheName}.{property)={value}
      
      # Session replication caching properties
      #memory.cluster.org.sakaiproject.tool.impl.RebuildBreakdownService.cache.maxEntries=50000
      #memory.cluster.org.sakaiproject.tool.impl.RebuildBreakdownService.cache.timeToIdle=3600
      #memory.cluster.org.sakaiproject.tool.impl.RebuildBreakdownService.cache.timeToLive=10800
      
      ## Session Replication settings
      ## WARNING: This requires a distribution mechanism of some kind (currently requires a distributed cache)
      ## NOTES:
      ## cache: org.sakaiproject.tool.impl.RebuildBreakdownService.cache must be set to a distributed cache (see memory.cluster)
      ## cache: org.sakaiproject.tool.impl.RebuildBreakdownService.stash should be configured to last as long
      ##        as your user might need to navigate to JSF or other on-demand session tools after landing on a new server
      # Enable session cluster replication (see notes above)
      # Default: false
      #session.cluster.replication=true
      ## Performance tuning settings below - be careful with these numbers as adjusting them downward can create heavy load
      # Tuning setting, minimum seconds old the session must be before it will be replicated
      # Default: 20
      #session.cluster.minSecsOldToStore=20
      # Tuning setting, minimum seconds that must pass before session data is updated (since last store)
      # NOTE: certain events will cause the session data to be updated in the store regardless of this setting
      # Default: 10
      #session.cluster.minSecsBetweenStores=10
      # Tuning setting, minimum seconds after a session has been rebuilt from the store before it can be updated in the storage again
      # Default: 30
      #session.cluster.minSecsAfterRebuild=30
      

    Note that most tools in Sakai store items in the session for page state. JSF, Wicket, and Velocity are definite examples. In most cases, the user will be sent back to the tool's home, but they will stay logged in, in the current site, and in the current tool.