README.provisioning-parameters.md

123 lines | 10.217 kB Blame History Raw Download

Keycloak Performance Testsuite - Provisioning Parameters

Overview of Provisioned Services

Testing

| Deployment | Keycloak Server | Database | Load Balancer | Infinispan Server | |-----------------|------------------------------------------|--------------------|--------------------|--------------------| | Singlenode | 1 instance | 1 instance | - | - | | Cluster | N instances | 1 instance | 1 instance | - | | Cross-DC | K instances in DC1 + L instances in DC2 | 1 instance per DC | 1 instance per DC | 1 instance per DC |

Monitoring

| Deployment | CAdvisor | Influx DB | Grafana | |-----------------|-------------|-------------|-------------| | Monitoring | 1 instance | 1 instance | 1 instance |

Service Parameters

Keycloak Server

| Category | Setting | Property | Default Value | |-------------|-------------------------------|------------------------------------|--------------------------------------------------------------------| | Scaling[1] | Scale for cluster | keycloak.scale | Maximum size[2] of cluster. | | | Scale for DC1 | keycloak.dc1.scale | Maximum size of DC1. | | | Scale for DC2 | keycloak.dc2.scale | Maximum size of DC2. | | Docker | Allocated CPUs | keycloak.docker.cpusets | 2-3 for singlenode, 2 3 for cluster deployment | | | Allocated CPUs for DC1 | keycloak.dc1.docker.cpusets | 2 | | | Allocated CPUs for DC2 | keycloak.dc2.docker.cpusets | 3 | | | Available memory | keycloak.docker.memlimit | 2500m | | JVM | Memory settings | keycloak.jvm.memory | -Xms64m -Xmx2g -XX:MetaspaceSize=96M -XX:MaxMetaspaceSize=256m | | Undertow | HTTP Listener max connections | keycloak.http.max-connections | 50000 | | | AJP Listener max connections | keycloak.ajp.max-connections | 50000 | | IO | Worker IO thread pool | keycloak.worker.io-threads | 2 | | | Worker Task thread pool | keycloak.worker.task-max-threads | 16 | | Datasources | Connection pool min size | keycloak.ds.min-pool-size | 10 | | | Connection pool max size | keycloak.ds.max-pool-size | 100 | | | Connection pool prefill | keycloak.ds.pool-prefill | true | | | Prepared statement cache size | keycloak.ds.ps-cache-size | 100 |

[ 1 ] The scaling parameters are optional. They can be set within interval from 1 to the maximum cluster size]. If not set they are automatically set to the maximum size of the cluster (DC1/DC2 respectively).

[ 2 ] Maximum cluster size is determined by provisioner-specific parameter such as keycloak.docker.cpusets for the default docker-compose provisioner. The maximum cluster size corresponds to the number of cpusets.

Database

| Category | Setting | Property | Default Value | |-------------|-------------------------------|------------------------------------|--------------------------------------------------------------------| | Docker | Allocated CPUs | db.docker.cpusets | 1 | | | Allocated CPUs for DC1 | db.dc1.docker.cpusets | 1 | | | Allocated CPUs for DC2 | db.dc2.docker.cpusets | 1 | | | Available memory | db.docker.memlimit | 2g |

Load Balancer

| Category | Setting | Property | Default Value | |-------------|-------------------------------|------------------------------|--------------------------------------------------------------------| | Docker | Allocated CPUs | lb.docker.cpusets | 1 | | | Allocated CPUs for DC1 | lb.dc1.docker.cpusets | 1 | | | Allocated CPUs for DC2 | lb.dc2.docker.cpusets | 1 | | | Available memory | lb.docker.memlimit | 1g | | JVM | Memory settings | lb.jvm.memory | -Xms64m -Xmx512m -XX:MetaspaceSize=96M -XX:MaxMetaspaceSize=256m | | Undertow | HTTP Listener max connections | lb.http.max-connections | 50000 | | IO | Worker IO thread pool | lb.worker.io-threads | 2 | | | Worker Task thread pool | lb.worker.task-max-threads | 16 |

Infinispan Server

| Category | Setting | Property | Default Value | |-------------|-------------------------------|---------------------------------|-------------------------------------------------------------------------------------------| | Docker | Allocated CPUs for DC1 | infinispan.dc1.docker.cpusets | 1 | | | Allocated CPUs for DC2 | infinispan.dc2.docker.cpusets | 1 | | | Available memory | infinispan.docker.memlimit | 1500m | | JVM | Memory settings | infinispan.jvm.memory | -Xms64m -Xmx1g -XX:MetaspaceSize=96M -XX:MaxMetaspaceSize=256m -XX:+DisableExplicitGC |

Monitoring

| Category | Setting | Property | Default Value | |-------------|-------------------------------|-----------------------------|-----------------| | Docker | Allocated CPUs | monitoring.docker.cpusets | 0 |

Note on Docker settings

By default, there are 4 CPU cores allocated: core 0 for monitoring, core 1 for database (MariaDB), and cores 2 and 3 for Keycloak server. Default memory limits for database and Keycloak server are 2g. The cpuset and memlimit parameters set here are set to cpuset and mem_limit parameters of docker-compose configuration. See docker-compose documentation for meaning of the values. How to set the parameters correctly depends on number of factors - number of cpu cores, NUMA, available memory etc., hence it is out of scope of this document.

Example CPU Settings

| HW | Development Machine | "Fat Box" | |-------------|----------------------|--------------| | Cores | 4 | 48 | | NUMA Nodes | 0-3 | 0-23, 24-47 |

Cluster

| Setting | Development Machine | "Fat Box" | |------------------------------------|----------------------|-----------------------------| | monitoring.docker.cpusets | 0 | 0 | | db.docker.cpusets | 1 | 1 | | lb.docker.cpusets | 1 | 2 | | keycloak.docker.cpusets | 2-3 | 3-6 7-10 11-16 … 43-46 |

Cross-DC

| Setting | Development Machine | "Fat Box" | |------------------------------------|----------------------|--------------------------------| | monitoring.docker.cpusets | 0 | 0 | | db.dc1.docker.cpusets | 1 | 1 | | lb.dc1.docker.cpusets | 1 | 2 | | infinispan.dc1.docker.cpusets | 1 | 3 | | keycloak.dc1.docker.cpusets | 2 | 4-7 8-11 12-15 16-19 20-23 | | db.dc2.docker.cpusets | 1 | 24 | | lb.dc2.docker.cpusets | 1 | 25 | | infinispan.dc2.docker.cpusets | 1 | 26 | | keycloak.dc2.docker.cpusets | 3 | 27-30 31-34 35-38 39-42 43-46 |