# How to configure standalone external infinispan server to domain cluster keycloak

**URL:** <https://forum.keycloak.org/t/how-to-configure-standalone-external-infinispan-server-to-domain-cluster-keycloak/8838>\
**Category:** Getting advice\
**Created:** [May 2, 2021, 3:55pm UTC](https://forum.keycloak.org/t/how-to-configure-standalone-external-infinispan-server-to-domain-cluster-keycloak/8838 "2021-05-02T15:55:43Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![firefox](https://avatars.discourse-cdn.com/v4/letter/f/9de053/32.png) [@firefox](https://forum.keycloak.org/u/firefox)\
**Post date:** [May 2, 2021, 3:55pm UTC](https://forum.keycloak.org/t/how-to-configure-standalone-external-infinispan-server-to-domain-cluster-keycloak/8838/1 "2021-05-02T15:55:43Z")

</div>

any suggestions  
FYI -  
keycloak domain cluster is done using JDBC\_PING

---

<div class="post-metadata">

**Author:** ![SoerenSilkjaer](https://yyz2.discourse-cdn.com/free1/user_avatar/forum.keycloak.org/soerensilkjaer/32/1945_2.png) [@SoerenSilkjaer](https://forum.keycloak.org/u/SoerenSilkjaer)\
**Post date:** [May 2, 2021, 5:42pm UTC](https://forum.keycloak.org/t/how-to-configure-standalone-external-infinispan-server-to-domain-cluster-keycloak/8838/2 "2021-05-02T17:42:56Z")

</div>

You will need this startup script for your keycloak instances. It will setup a remote cache in your keycloak:

> <https://github.com/keycloak/keycloak/blob/master/testsuite/performance/keycloak/src/main/scripts/jboss-cli/add-remote-cache-stores.cli>

Then you will have to setup one or more infinispan servers. We set infinispan up on AWS EC2 using docker and basically edited the dedicated infinispan “clustered.xml” file for our needs. I can paste our configuration and terraform code here for you if you think that would be helpful. We are currently using keycloak 11.0.1, infinispan 9.4.11 and the database is postgres. I dont know if the infinispan configurations look the same in the newer versions.

---

<div class="post-metadata">

**Author:** ![firefox](https://avatars.discourse-cdn.com/v4/letter/f/9de053/32.png) [@firefox](https://forum.keycloak.org/u/firefox)\
**Post date:** [May 7, 2021, 9:18am UTC](https://forum.keycloak.org/t/how-to-configure-standalone-external-infinispan-server-to-domain-cluster-keycloak/8838/3 "2021-05-07T09:18:50Z")

</div>

hey @SoerenSilkjaer

can you please paste your terraform code of spinning a infinispan and configuration of clustered.xml.  
it will be helpful for me to configure it for domain cluster keycloak.

Thank you for helping.

---

<div class="post-metadata">

**Author:** ![SoerenSilkjaer](https://yyz2.discourse-cdn.com/free1/user_avatar/forum.keycloak.org/soerensilkjaer/32/1945_2.png) [@SoerenSilkjaer](https://forum.keycloak.org/u/SoerenSilkjaer)\
**Post date:** [May 11, 2021, 2:01pm UTC](https://forum.keycloak.org/t/how-to-configure-standalone-external-infinispan-server-to-domain-cluster-keycloak/8838/4 "2021-05-11T14:01:54Z")

</div>

Terraform

```
resource "aws_instance" "infinispan" {
  ami = "ami-3bfab942" # Amazon Linux
  instance_type = var.infinispan_instance_type
  availability_zone = "eu-west-1a"
  vpc_security_group_ids = var.ec2_securitygroup_id
  subnet_id = var.private_subnet_ids[0]
  iam_instance_profile = aws_iam_instance_profile.infinispan_instance_profile.name
  key_name = var.ec2_keyname

  tags = merge(var.required_tags,
    {
      Name = "${var.environment_name}-${var.infinispan_project_name}",
      DB_ADDR = module.rds.hostname,
      DB_DATABASE = var.ENV_DB_DATABASE
      DB_USER = var.ENV_DB_USER,
      DB_PASSWORD = data.aws_ssm_parameter.rds_db_password.value,
      ENV_NAME = lower(var.environment_name)
    }
  )

  user_data = data.template_file.user_data.rendered
}

data "template_file" "user_data" {
  template = file("Scripts/InfinispanEC2UserData")
  vars = {
    DB_ADDR = module.rds.hostname,
    DB_DATABASE = var.ENV_DB_DATABASE
    DB_USER = var.ENV_DB_USER,
    DB_PASSWORD = data.aws_ssm_parameter.rds_db_password.value,
    ENV_NAME = lower(var.environment_name)
  }
}

resource "aws_eip" "ip" {
  instance = aws_instance.infinispan.id
  vpc = true
}

resource "aws_iam_instance_profile" "infinispan_instance_profile" {
  name = "${var.environment_name}-infinispan-instance-profile"
  role = aws_iam_role.infinispan_iam_role.name
}

resource "aws_iam_role" "infinispan_iam_role" {
  name = "${var.environment_name}-infinispan"

  assume_role_policy = <<EOF
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": "sts:AssumeRole",
      "Principal": {
        "Service": "ec2.amazonaws.com"
      },
      "Effect": "Allow",
      "Sid": ""
    }
  ]
}
EOF
}

resource "aws_iam_role_policy" "read_only_ecr" {
  name = "${var.environment_name}-infinispan-read-only-ecr"
  role = aws_iam_role.infinispan_iam_role.id

  policy = <<EOF
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ecr:GetDownloadUrlForLayer",
                "ecr:BatchGetImage",
                "ecr:GetAuthorizationToken"
            ],
            "Resource": "*"
        }
    ]
}
EOF
}
```

---

<div class="post-metadata">

**Author:** ![SoerenSilkjaer](https://yyz2.discourse-cdn.com/free1/user_avatar/forum.keycloak.org/soerensilkjaer/32/1945_2.png) [@SoerenSilkjaer](https://forum.keycloak.org/u/SoerenSilkjaer)\
**Post date:** [May 11, 2021, 2:03pm UTC](https://forum.keycloak.org/t/how-to-configure-standalone-external-infinispan-server-to-domain-cluster-keycloak/8838/5 "2021-05-11T14:03:59Z")

</div>

Userdata file

```
Content-Type: multipart/mixed; boundary="==BOUNDARY=="
MIME-Version: 1.0
--==BOUNDARY==
MIME-Version: 1.0
Content-Type: text/cloud-boothook; charset="us-ascii"
#!/bin/bash -xe

# Redirect all logging in userdata to /var/log/user-data.log
exec > >(tee /var/log/user-data.log|logger -t user-data -s 2>/dev/console) 2>&1

sudo yum update -y
sudo yum install -y docker
sudo service docker start

aws ecr get-login-password --region eu-west-1 | docker login --username AWS --password-stdin ${INSERT_ECR_REPO_HERE}

echo "docker pull ${INSERT_INFINISPAN_IMAGE_TAG_HERE}" >> /etc/rc.local
echo "docker run --net=host -e DB_ADDR=${DB_ADDR} -e DB_DATABASE=${DB_DATABASE} -e DB_USER=${DB_USER} -e DB_PASSWORD=${DB_PASSWORD} ${INSERT_INFINISPAN_IMAGE_TAG_HERE}" >> /etc/rc.local

echo "UserData finished"

--==BOUNDARY==--
```
