Test Setup

Clustered Servers

  1. Start up four AWS instances configured for clustering via the Puppet script
    1. Each server has the following configuration

      aws_region = us-east-1
      aws_ami = ami-e995e380
      aws_instance_type = m1.large
      aws_block_device_mapping = '/dev/sda1=:10::io1:100'
      aws_ebs_optimized = true

      System Properties

      JAVA_OPTS="-server -Xmx2048m -XX:MaxPermSize=256m -Djava.awt.headless=true -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled  -XX:+CMSPermGenSweepingEnabled"
      JAVA_OPTS="${JAVA_OPTS} -Dfcrepo.modeshape.index.location=/opt/fcrepo4-data/mode/indexes"
      JAVA_OPTS="${JAVA_OPTS} -Dfcrepo.ispn.CacheDirPath=/opt/fcrepo4-data/ispn"
      JAVA_OPTS="${JAVA_OPTS} -Dfcrepo.ispn.alternative.CacheDirPath=/opt/fcrepo4-data/ispn-alt"
      JAVA_OPTS="${JAVA_OPTS} -Dfcrepo.ispn.binary.CacheDirPath=/opt/fcrepo4-data/ispn-binary"
      JAVA_OPTS="${JAVA_OPTS} -Dfcrepo.ispn.binary.alternative.CacheDirPath=/opt/fcrepo4-data/ispn-binary-alt"
      JAVA_OPTS="${JAVA_OPTS} -Dfcrepo.activemq.dir=/opt/fcrepo4-data/active-mq"
      JAVA_OPTS="${JAVA_OPTS} -Dcom.arjuna.ats.arjuna.common.ObjectStoreEnvironmentBean.default.objectStoreDir=/opt/fcrepo4-data/object-store-default"
      JAVA_OPTS="${JAVA_OPTS} -Dcom.arjuna.ats.arjuna.objectstore.objectStoreDir=/opt/fcrepo4-data/object-store"
      JAVA_OPTS="${JAVA_OPTS} -Dfcrepo.modeshape.configuration=classpath:/config/clustered/repository.json"
      
      ###
      # Clustering
      ###
      JAVA_OPTS="${JAVA_OPTS} -Dfcrepo.infinispan.cache_configuration=config/infinispan/clustered/infinispan.xml"
      JAVA_OPTS="${JAVA_OPTS} -Djgroups.tcp.address=<aws-private-ip>"
      JAVA_OPTS="${JAVA_OPTS} -Dfcrepo.ispn.numOwners=2 -Djava.net.PreferIPv4Stack=true"
      
      # The jgroups-ec2.xml file is included in ispn's jars
      JAVA_OPTS="${JAVA_OPTS} -Dfcrepo.ispn.jgroups.configuration=jgroups-ec2.xml"
      
      # This property overwrites the S3 bucketname variable in jgroups-ec2.xml
      JAVA_OPTS="${JAVA_OPTS} -Djgroups.s3.bucket=fcrepo4-cluster-0"
    2. Note: The clustered servers must be started one at a time in order for the cluster to properly form.
  2. Once the cluster has been established, an Elastic Load Balancer was configured over the four instances.

Client Instance

  1. Via the AWS console, start a small instance to act as the client to the cluster
    1. Instance configuration

      aws_region = us-east-1
      aws_ami = ami-e995e380
      aws_instance_type = m1.small
    2. SSH into the client instance and install the following packages and utilities:

      # Packages
      sudo apt-get install git tree default-jre-headless -y
       
      # Git repos
      sudo git clone https://github.com/futures/ff-jmeter-testResults.git /opt/ff-jmeter-testResults
      sudo git clone https://github.com/futures/ff-jmeter-madness.git /opt/ff-jmeter-madness
       
      # Copy the lastest /opt/ff-jmeter-testResults/<date> directory to today's date within /opt/ff-jmeter-testResults
      # Update /opt/ff-jmeter-madness/plans/fedora.jmx as appropriate
      # Update /opt/ff-jmeter-testResults/<today>/fedora4Test.sh as appropriate
      
      # Run test
      time sudo ./fedora4Test.sh

Test Results

A box plot of Thread count vs Time taken to complete a response

The plot shows the results of two test runs against the 4-node cluster:

  1. A single thread looping 10,000 times calling jcr:new
    • 10,000 requests
  2. Four threads each looping 10,000 times calling jcr:new
    • 40,000 requests

  • No labels