검색

OpenShift에서 Data Grid 실행

download PDF
Red Hat Data Grid 8.1

OpenShift에서 Data Grid 서비스 구성 및 실행

Red Hat Customer Content Services

초록

Data Grid Operator는 운영 인텔리전스를 제공하고 OpenShift에 Data Grid를 배포하기 위한 관리 복잡성을 줄입니다.

Red Hat Data Grid

Data Grid는 고성능 분산 메모리 내 데이터 저장소입니다.

스키마리스 데이터 구조
다양한 오브젝트를 키-값 쌍으로 저장할 수 있는 유연성.
그리드 기반 데이터 스토리지
클러스터 간에 데이터를 배포하고 복제하도록 설계되었습니다.
탄력적 확장
서비스 중단 없이 수요를 충족하도록 노드 수를 동적으로 조정합니다.
데이터 상호 운용성
다른 엔드포인트의 그리드에 데이터를 저장, 검색 및 쿼리합니다.

Data Grid 문서

Data Grid 문서는 Red Hat 고객 포털에서 제공됩니다.

데이터 그리드 다운로드

Red Hat 고객 포털에서 Data Grid Software Downloads 에 액세스합니다.

참고

Data Grid 소프트웨어에 액세스하고 다운로드하려면 Red Hat 계정이 있어야 합니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 용어를 교체하기 위해 최선을 다하고 있습니다. 먼저 마스터(master), 슬레이브(slave), 블랙리스트(blacklist), 화이트리스트(whitelist) 등 네 가지 용어를 교체하고 있습니다. 이러한 변경 작업은 작업 범위가 크므로 향후 여러 릴리스에 걸쳐 점차 구현할 예정입니다. 자세한 내용은 CTO Chris Wright의 메시지를 참조하십시오.

1장. Data Grid Operator 설치

Data Grid Operator를 OpenShift 네임스페이스에 설치하여 Data Grid 클러스터를 생성하고 관리합니다.

1.1. Red Hat OpenShift에 Data Grid Operator 설치

OpenShift에서 Data Grid Operator에 대한 서브스크립션을 생성하여 다른 Data Grid 버전을 설치하고 자동 업데이트를 수신할 수 있습니다.

자동 업데이트는 Data Grid Operator에 먼저 적용되는 다음 각 Data Grid 노드에 적용됩니다. Data Grid Operator는 클러스터를 한 번에 하나씩 업데이트하여 각 노드를 정상적으로 종료한 다음 다음 노드로 진행하기 전에 업데이트된 버전으로 다시 온라인 상태가 됩니다.

사전 요구 사항

  • OpenShift에서 실행되는 OperatorHub 에 액세스할 수 있습니다. OpenShift Container Platform과 같은 일부 OpenShift 환경에는 관리자 인증 정보가 필요할 수 있습니다.
  • 특정 네임스페이스에 설치하려는 경우 Data Grid Operator에 대한 OpenShift 프로젝트를 준비합니다.

프로세스

  1. OpenShift 웹 콘솔에 로그인합니다.
  2. OperatorHub 로 이동합니다.
  3. Data Grid Operator를 찾아 선택합니다.
  4. 설치를 선택하고 Operator 서브스크립션 생성 을 계속합니다.
  5. 서브스크립션 옵션을 지정합니다.

    설치 모드
    Data Grid Operator를 특정 네임스페이스 또는 모든 네임스페이스에 설치할 수 있습니다.
    업데이트 채널
    Data Grid Operator 8.1.x에 대한 업데이트를 가져옵니다.
    승인 전략
    8.1.x 채널에서 자동으로 업데이트를 설치하거나 설치 전에 승인이 필요합니다.
  6. 서브스크립션을 선택하여 Data Grid Operator를 설치합니다.
  7. Installed Operators 로 이동하여 Data Grid Operator 설치를 확인합니다.

1.2. 명령줄에서 Data Grid Operator 설치

OpenShift에서 OperatorHub 를 통해 Data Grid Operator를 설치하는 대신 oc 클라이언트를 사용하여 서브스크립션을 생성합니다.

사전 요구 사항

  • oc 클라이언트가 있어야 합니다.

프로세스

  1. 프로젝트를 설정합니다.

    1. Data Grid Operator에 대한 프로젝트를 생성합니다.
    2. Data Grid Operator에서 특정 Data Grid 클러스터만 제어하려면 해당 클러스터에 대한 프로젝트를 생성합니다.

      $ oc new-project ${INSTALL_NAMESPACE} 1
      $ oc new-project ${WATCH_NAMESPACE} 2
      1
      Data Grid Operator를 설치하는 프로젝트를 생성합니다.
      2
      Data Grid Operator가 모든 프로젝트를 조사하지 않으려면 선택적으로 특정 Data Grid 클러스터에 대한 프로젝트를 생성합니다.
  2. OperatorGroup 리소스를 생성합니다.

    모든 데이터 그리드 클러스터 제어

    $ oc apply -f - << EOF
    apiVersion: operators.coreos.com/v1
    kind: OperatorGroup
    metadata:
     name: datagrid
     namespace: ${INSTALL_NAMESPACE}
    EOF

    특정 Data Grid 클러스터 제어

    $ oc apply -f - << EOF
    apiVersion: operators.coreos.com/v1
    kind: OperatorGroup
    metadata:
     name: datagrid
     namespace: ${INSTALL_NAMESPACE}
    spec:
     targetNamespaces:
     - ${WATCH_NAMESPACE}
    EOF

  3. Data Grid Operator에 대한 서브스크립션을 생성합니다.

    $ oc apply -f - << EOF
    apiVersion: operators.coreos.com/v1alpha1
    kind: Subscription
    metadata:
     name: datagrid-operator
     namespace: ${INSTALL_NAMESPACE}
    spec:
     channel: 8.1.x
     installPlanApproval: Automatic 1
     name: datagrid
     source: redhat-operators
     sourceNamespace: openshift-marketplace
    EOF
    1
    8.1.x 채널에서 업데이트를 수동으로 승인하려면 Manual 을 지정합니다.
  4. 설치를 확인합니다.

    $ oc get pods -n ${INSTALL_NAMESPACE}
    NAME                                   READY   STATUS
    infinispan-operator-<id>               1/1     Running

2장. Data Grid Operator 시작하기

Data Grid Operator를 사용하면 Data Grid 클러스터를 생성, 구성 및 관리할 수 있습니다.

사전 요구 사항

  • Data Grid Operator를 설치합니다.
  • oc 클라이언트가 있어야 합니다.

2.1. Infinispan 사용자 정의 리소스(CR)

Data Grid Operator는 OpenShift에서 Data Grid 클러스터를 복잡한 단위로 처리할 수 있는 Infinispan 유형의 새 CR(사용자 정의 리소스)을 추가합니다.

Data Grid Operator는 Data Grid 클러스터를 인스턴스화 및 구성하고 StatefulSets 및 Service와 같은 OpenShift 리소스를 관리하는 데 사용하는 Infinispan CR(사용자 정의 리소스)을 감시합니다. 이러한 방식으로 Infinispan CR은 OpenShift의 Data Grid에 대한 기본 인터페이스입니다.

최소 Infinispan CR은 다음과 같습니다.

apiVersion: infinispan.org/v1 1
kind: Infinispan 2
metadata:
  name: example-infinispan 3
spec:
  replicas: 2 4
1
Infinispan API 버전을 선언합니다.
2
Infinispan CR을 선언합니다.
3
Data Grid 클러스터의 이름을 지정합니다.
4
Data Grid 클러스터의 노드 수를 지정합니다.

2.2. 데이터 그리드 클러스터 생성

Data Grid Operator를 사용하여 두 개 이상의 Data Grid 노드로 구성된 클러스터를 생성합니다.

프로세스

  1. Infinispan CR에 spec.replicas 를 사용하여 클러스터에서 Data Grid 노드 수를 지정합니다.

    예를 들어 다음과 같이 cr_minimal.yaml 파일을 생성합니다.

    $ cat > cr_minimal.yaml<<EOF
    apiVersion: infinispan.org/v1
    kind: Infinispan
    metadata:
      name: example-infinispan
    spec:
      replicas: 2
    EOF
  2. Infinispan CR을 적용합니다.

    $ oc apply -f cr_minimal.yaml
  3. Data Grid Operator에서 Data Grid 노드를 생성합니다.

    $ oc get pods -w
    
    NAME                        READY  STATUS              RESTARTS   AGE
    example-infinispan-1        0/1    ContainerCreating   0          4s
    example-infinispan-2        0/1    ContainerCreating   0          4s
    example-infinispan-3        0/1    ContainerCreating   0          5s
    infinispan-operator-0       1/1    Running             0          3m
    example-infinispan-3        1/1    Running             0          8s
    example-infinispan-2        1/1    Running             0          8s
    example-infinispan-1        1/1    Running             0          8s

다음 단계

replicas 값을 변경하고 Data Grid Operator가 클러스터를 확장 또는 축소하는지 확인합니다.

2.3. 데이터 그리드 클러스터 확인

로그 메시지를 검토하여 Data Grid 노드가 클러스터형 뷰를 수신하는지 확인합니다.

프로세스

  • 다음 중 하나를 수행합니다.

    • 로그에서 클러스터 보기를 검색합니다.

      $ oc logs example-infinispan-0 | grep ISPN000094
      
      INFO  [org.infinispan.CLUSTER] (MSC service thread 1-2) \
      ISPN000094: Received new cluster view for channel infinispan: \
      [example-infinispan-0|0] (1) [example-infinispan-0]
      
      INFO  [org.infinispan.CLUSTER] (jgroups-3,example-infinispan-0) \
      ISPN000094: Received new cluster view for channel infinispan: \
      [example-infinispan-0|1] (2) [example-infinispan-0, example-infinispan-1]
    • Data Grid Operator의 Infinispan CR을 검색합니다.

      $ oc get infinispan -o yaml

      응답은 Data Grid Pod에 클러스터형 뷰가 수신되었음을 나타냅니다.

      conditions:
          - message: 'View: [example-infinispan-0, example-infinispan-1]'
            status: "True"
            type: wellFormed
작은 정보

자동화된 스크립트의 wellFormed 조건과 함께 oc wait 을 사용합니다.

$ oc wait --for condition=wellFormed --timeout=240s infinispan/example-infinispan

3장. Data Grid 서비스 설정

Data Grid Operator를 사용하여 Cache 서비스 또는 Data Grid 서비스 노드의 클러스터를 생성합니다.

3.1. 서비스 유형

서비스는 유연하고 강력한 인메모리 데이터 스토리지를 제공하는 Data Grid 서버 이미지를 기반으로 하는 상태 저장 애플리케이션입니다.

캐시 서비스

최소한의 구성으로 휘발성, 대기 시간이 짧은 데이터 저장소를 사용하려면 캐시 서비스를 사용합니다. 캐시 서비스 노드:

  • 데이터 스토리지 요구 사항이 확장되거나 축소될 때 용량을 자동으로 확장합니다.
  • 일관성을 보장하기 위해 데이터를 동기적으로 배포합니다.
  • 클러스터 전체에서 캐시의 각 항목을 복제합니다.
  • 캐시 항목을 오프 타임으로 저장하고 JVM 효율성을 위해 제거를 사용합니다.
  • 기본 파티션 처리 구성으로 데이터 일관성을 보장합니다.
중요

캐시 서비스 노드는 휘발성이므로 Infinispan CR을 사용하여 클러스터에 변경 사항을 적용하거나 Data Grid 버전을 업데이트할 때 모든 데이터가 손실됩니다.

Data Grid 서비스

다음과 같은 경우 Data Grid 서비스를 사용하십시오.

  • 사이트 간 복제를 통해 글로벌 클러스터에서 데이터를 백업합니다.
  • 유효한 구성으로 캐시를 생성합니다.
  • 파일 기반 캐시 저장소를 추가하여 영구 볼륨에 데이터를 저장합니다.
  • Data Grid 검색 및 기타 고급 기능을 사용합니다.

3.2. 캐시 서비스 노드 생성

기본적으로 Data Grid Operator는 캐시 서비스 노드를 사용하여 Data Grid 클러스터를 생성합니다.

프로세스

  1. Infinispan CR을 생성합니다.

    apiVersion: infinispan.org/v1
    kind: Infinispan
    metadata:
      name: example-infinispan
    spec:
      replicas: 2
      service:
        type: Cache 1
    1
    노드 캐시 서비스 노드를 생성합니다. 이는 Infinispan CR의 기본값입니다.
  2. Infinispan CR을 적용하여 클러스터를 생성합니다.

3.2.1. 자동 확장 구성

캐시 서비스 노드를 사용하여 클러스터를 생성하는 경우 Data Grid Operator는 기본 캐시의 메모리 사용량에 따라 노드를 자동으로 확장하거나 축소할 수 있습니다.

Data Grid Operator는 캐시 서비스 노드의 기본 캐시를 모니터링합니다. 캐시에 데이터를 추가하면 메모리 사용량이 증가합니다. 클러스터에 추가 용량이 필요하다는 것을 감지하면 Data Grid Operator는 항목을 제거하지 않고 새 노드를 생성합니다. 마찬가지로 메모리 사용량이 특정 임계값 미만인 것을 감지하면 Data Grid Operator가 노드를 종료합니다.

중요

자동 확장은 기본 캐시에서만 작동합니다. 다른 캐시를 클러스터에 추가하려면 Infinispan CR에 autoscale 필드를 포함하지 않아야 합니다. 이 경우 제거를 사용하여 각 노드의 데이터 컨테이너 크기를 제어해야 합니다.

프로세스

  1. spec.autoscale 리소스를 Infinispan CR에 추가하여 자동 확장을 활성화합니다.
  2. autoscale 필드를 사용하여 클러스터의 메모리 사용량 임계값 및 노드 수를 구성합니다.

    spec:
      ...
      service:
        type: Cache
      autoscale:
        maxMemUsagePercent: 70 1
        maxReplicas: 5 2
        minMemUsagePercent: 30 3
        minReplicas: 2 4
    1
    각 노드의 메모리 사용량에 대한 최대 임계값을 백분율로 구성합니다. Data Grid Operator에서 클러스터의 모든 노드가 임계값에 도달하도록 탐지하면 가능한 경우 새 노드가 생성됩니다. Data Grid Operator가 새 노드를 생성할 수 없는 경우 메모리 사용량이 100%에 도달하면 제거를 수행합니다.
    2
    클러스터의 최대 노드 수를 정의합니다.
    3
    클러스터 전체에서 메모리 사용량에 대해 최소 임계값을 백분율로 구성합니다. Data Grid Operator에서 메모리 사용량이 최소 아래로 떨어지면 노드를 종료합니다.
    4
    클러스터에 대한 최소 노드 수를 정의합니다.
  3. 변경 사항을 적용합니다.

3.2.2. 소유자 수 구성

소유자 수는 Data Grid 클러스터에 복제되는 각 캐시 항목의 사본 수를 제어합니다. 캐시 서비스 노드의 기본값은 두 개로, 데이터 손실을 방지하기 위해 각 항목을 복제합니다.

프로세스

  1. 다음과 같이 Infinispan CR에서 spec.service.replicationFactor 리소스가 있는 소유자 수를 지정합니다.

    spec:
      ...
      service:
        type: Cache
        replicationFactor: 3 1
    1
    각 캐시 항목에 대해 세 개의 복제본을 구성합니다.
  2. 변경 사항을 적용합니다.

3.2.3. 캐시 서비스 리소스

apiVersion: infinispan.org/v1
kind: Infinispan
metadata:
  # Names the cluster.
  name: example-infinispan
spec:
  # Specifies the number of nodes in the cluster.
  replicas: 4
  service:
    # Configures the service type as Cache.
    type: Cache
    # Sets the number of replicas for each entry across the cluster.
    replicationFactor: 2
  # Enables and configures automatic scaling.
  autoscale:
    maxMemUsagePercent: 70
    maxReplicas: 5
    minMemUsagePercent: 30
    minReplicas: 2
  # Configures authentication and encryption.
  security:
    # Defines a secret with custom credentials.
    endpointSecretName: endpoint-identities
    # Adds a custom TLS certificate to encrypt client connections.
    endpointEncryption:
        type: Secret
        certSecretName: tls-secret
  # Sets container resources.
  container:
    extraJvmOpts: "-XX:NativeMemoryTracking=summary"
    cpu: "2000m"
    memory: 1Gi
  # Configures logging levels.
  logging:
    categories:
      org.infinispan: trace
      org.jgroups: trace
  # Configures how the cluster is exposed on the network.
  expose:
    type: LoadBalancer
  affinity:
    podAntiAffinity:
      preferredDuringSchedulingIgnoredDuringExecution:
      - weight: 100
        podAffinityTerm:
          labelSelector:
            matchLabels:
              app: infinispan-pod
              clusterName: example-infinispan
              infinispan_cr: example-infinispan
          topologyKey: "kubernetes.io/hostname"

3.3. 데이터 그리드 서비스 노드 생성

사이트 간 복제와 같은 Data Grid 기능과 함께 사용자 정의 캐시 정의를 사용하려면 Data Grid 서비스 노드의 클러스터를 생성합니다.

프로세스

  1. Infinispan CR의 spec.service.type 값으로 Data Cryostat를 지정합니다.

    apiVersion: infinispan.org/v1
    kind: Infinispan
    metadata:
      name: example-infinispan
    spec:
      replicas: 2
      service:
        type: DataGrid
    참고

    노드를 생성한 후에는 spec.service.type 필드를 변경할 수 없습니다. 서비스 유형을 변경하려면 기존 노드를 삭제하고 새 노드를 생성해야 합니다.

  2. 다른 Data Grid 서비스 리소스를 사용하여 노드를 구성합니다.
  3. Infinispan CR을 적용하여 클러스터를 생성합니다.

3.3.1. Data Grid 서비스 리소스

apiVersion: infinispan.org/v1
kind: Infinispan
metadata:
  # Names the cluster.
  name: example-infinispan
spec:
  # Specifies the number of nodes in the cluster.
  replicas: 6
  service:
    # Configures the service type as Data Grid.
    type: DataGrid
    # Configures storage resources.
    container:
      storage: 2Gi
      storageClassName: my-storage-class
    # Configures cross-site replication.
    sites:
      local:
      name: azure
      expose:
        type: LoadBalancer
      locations:
      - name: azure
        url: openshift://api.azure.host:6443
        secretName: azure-token
      - name: aws
        url: openshift://api.aws.host:6443
        secretName: aws-token
  # Configures authentication and encryption.
  security:
    # Defines a secret with custom credentials.
    endpointSecretName: endpoint-identities
    # Adds a custom TLS certificate to encrypt client connections.
    endpointEncryption:
        type: Secret
        certSecretName: tls-secret
  # Sets container resources.
  container:
    extraJvmOpts: "-XX:NativeMemoryTracking=summary"
    cpu: "1000m"
    memory: 1Gi
  # Configures logging levels.
  logging:
    categories:
      org.infinispan: debug
      org.jgroups: debug
      org.jgroups.protocols.TCP: error
      org.jgroups.protocols.relay.RELAY2: fatal
  # Configures how the cluster is exposed on the network.
  expose:
    type: LoadBalancer
  # Configures affinity and anti-affinity strategies.
  affinity:
    podAntiAffinity:
      preferredDuringSchedulingIgnoredDuringExecution:
      - weight: 100
        podAffinityTerm:
          labelSelector:
            matchLabels:
              app: infinispan-pod
              clusterName: example-infinispan
              infinispan_cr: example-infinispan
          topologyKey: "kubernetes.io/hostname"

3.4. 데이터 그리드 리소스에 레이블 추가

Data Grid Operator가 생성 및 관리하는 Pod 및 서비스에 키/값 레이블을 연결합니다. 이러한 레이블을 사용하면 데이터 그리드 리소스를 보다 효과적으로 구성하고 모니터링하기 위해 오브젝트 간 관계를 식별할 수 있습니다.

참고

Red Hat 서브스크립션 레이블은 Data Grid Pod에 자동으로 적용됩니다.

프로세스

  1. 편집을 위해 Infinispan CR을 엽니다.
  2. Data Grid Operator가 metadata.annotations 를 사용하여 리소스에 연결할 레이블을 추가합니다.
  3. metadata.labels 를 사용하여 라벨 값을 추가합니다.

    apiVersion: infinispan.org/v1
    kind: Infinispan
    metadata:
      annotations:
        # Add labels that you want to attach to services.
        infinispan.org/targetLabels: svc-label1, svc-label2
        # Add labels that you want to attach to pods.
        infinispan.org/podTargetLabels: pod-label1, pod-label2
      labels:
        # Add values for your labels.
        svc-label1: svc-value1
        svc-label2: svc-value2
        pod-label1: pod-value1
        pod-label2: pod-value2
        # The operator does not attach these labels to resources.
        my-label: my-value
        environment: development
  4. Infinispan CR을 적용합니다.

4장. 컨테이너 사양 조정

CPU 및 메모리 리소스를 할당하고 JVM 옵션을 지정하고 데이터 그리드 노드에 대한 스토리지를 구성할 수 있습니다.

4.1. JVM, CPU 및 메모리 리소스

spec:
  ...
  container:
    extraJvmOpts: "-XX:NativeMemoryTracking=summary" 1
    cpu: "1000m" 2
    memory: 1Gi 3
1
JVM 옵션을 지정합니다.
2
CPU 단위로 측정된 노드에 호스트 CPU 리소스를 할당합니다.
3
바이트 단위로 측정된 노드에 호스트 메모리 리소스를 할당합니다.

Data Grid Operator가 Data Grid 클러스터를 생성할 때 spec.container.cpuspec.container.memory 를 사용하여 다음을 수행합니다.

  • OpenShift에 Data Grid 노드를 실행할 수 있는 충분한 용량이 있는지 확인합니다. 기본적으로 Data Grid Operator는 OpenShift 스케줄러에서 512Mi메모리0.5 cpu 를 요청합니다.
  • 노드 리소스 사용량 제한. Data Grid Operator는 cpumemory 의 값을 리소스 제한으로 설정합니다.

가비지 컬렉션 로깅

기본적으로 Data Grid Operator는 가비지 수집(GC) 메시지를 기록하지 않습니다. 필요한 경우 다음 JVM 옵션을 추가하여 GC 메시지를 stdout에 보낼 수 있습니다.

extraJvmOpts: "-Xlog:gc*:stdout:time,level,tags"

4.2. 스토리지 리소스

기본적으로 Data Grid Operator는 Cache 서비스 및 Data Grid 서비스 노드 모두에 1Gi 를 할당합니다. 서비스 노드를 캐시하지 않고 Data Grid 서비스 노드에 대해 스토리지 리소스를 구성할 수 있습니다.

spec:
  ...
  service:
    type: DataGrid
    container:
      storage: 2Gi 1
      storageClassName: my-storage-class 2
1
Data Grid 서비스 노드의 스토리지 크기를 구성합니다.
2
영구 볼륨 클레임에 사용할 StorageClass 오브젝트의 이름을 지정합니다. 이 필드를 포함하는 경우 기존 스토리지 클래스를 값으로 지정해야 합니다. 이 필드를 포함하지 않으면 영구 볼륨 클레임은 storageclass.kubernetes.io/is-default-class 주석이 true 로 설정된 스토리지 클래스를 사용합니다.

영구 볼륨 클레임

Data Grid Operator는 영구 볼륨을 다음에 마운트합니다.
/opt/infinispan/server/data

참고

영구 볼륨 클레임은 RWO(ReadWriteOnce) 액세스 모드를 사용합니다.

5장. 데이터 그리드 클러스터 중지 및 시작

Data Grid Operator를 사용하여 Data Grid 클러스터를 중지하고 시작합니다.

캐시 정의

캐시 서비스와 Data Grid 서비스 모두 영구 볼륨에 영구 캐시 정의를 저장하므로 클러스터를 다시 시작한 후에도 계속 사용할 수 있습니다.

data

파일 기반 캐시 저장소를 추가하는 경우 데이터 그리드 서비스 노드는 클러스터 종료 중에 모든 캐시 항목을 영구 스토리지에 작성할 수 있습니다.

5.1. 데이터 그리드 클러스터 종료

캐시 서비스 노드를 종료하면 캐시의 모든 데이터가 제거됩니다. Data Grid 서비스 노드의 경우 영구 볼륨에서 모든 데이터를 보유할 수 있도록 Data Grid 서비스 노드의 스토리지 크기를 구성해야 합니다.

사용 가능한 컨테이너 스토리지가 Data Grid 서비스 노드에서 사용할 수 있는 메모리 양보다 작으면 Data Grid는 종료 중에 로그 및 데이터 손실에 다음 예외를 씁니다.

WARNING: persistent volume size is less than memory size. Graceful shutdown may not work.

프로세스

  • 복제본 값을 0 으로 설정하고 변경 사항을 적용합니다.
spec:
  replicas: 0

5.2. 데이터 그리드 클러스터 다시 시작

종료 후 Data Grid 클러스터를 다시 시작하려면 다음 절차를 완료합니다.

사전 요구 사항

Data Grid 서비스 노드의 경우 종료하기 전에 동일한 수의 노드로 클러스터를 다시 시작해야 합니다. 예를 들어 6개의 노드로 구성된 클러스터를 종료합니다. 해당 클러스터를 다시 시작할 때 spec.replicas 값으로 6을 지정해야 합니다.

이를 통해 Data Grid는 클러스터 전체에서 데이터 배포를 복원할 수 있습니다. 클러스터의 모든 노드가 실행 중인 경우 노드를 추가하거나 제거할 수 있습니다.

다음과 같이 Data Grid 클러스터에 대한 올바른 노드 수를 찾을 수 있습니다.

$ oc get infinispan example-infinispan -o=jsonpath='{.status.replicasWantedAtRestart}'

프로세스

  • spec.replicas 의 값을 클러스터의 적절한 노드 수로 설정합니다. 예를 들면 다음과 같습니다.

    spec:
      replicas: 6

6장. 데이터 그리드에 대한 네트워크 액세스 구성

Data Grid 클러스터 노출을 통해 Data Grid Console, Data Grid CLI(명령줄 인터페이스), REST API 및 핫 Rod 엔드포인트에 액세스할 수 있습니다.

6.1. 내부 연결에 대한 서비스 가져오기

기본적으로 Data Grid Operator는 OpenShift에서 실행되는 클라이언트에서 Data Grid 클러스터에 대한 액세스를 제공하는 서비스를 생성합니다.

이 내부 서비스의 이름은 Data Grid 클러스터와 동일합니다. 예를 들면 다음과 같습니다.

metadata:
  name: example-infinispan

프로세스

  • 다음과 같이 내부 서비스를 사용할 수 있는지 확인합니다.

    $ oc get services
    
    NAME               TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)
    example-infinispan ClusterIP   192.0.2.0        <none>        11222/TCP

추가 리소스

6.2. 로드 밸런서를 통해 데이터 그리드 노출

로드 밸런서 서비스를 사용하여 OpenShift 외부에서 실행되는 클라이언트에서 Data Grid 클러스터를 사용할 수 있도록 합니다.

참고

암호화되지 않은 Hot Rod 클라이언트 연결을 사용하여 Data Grid에 액세스하려면 로드 밸런서 서비스를 사용해야 합니다.

프로세스

  1. Infinispan CR에 spec.expose 를 포함합니다.
  2. spec.expose.type 을 사용하여 LoadBalancer 를 서비스 유형으로 지정합니다.

    spec:
      ...
      expose:
        type: LoadBalancer 1
        nodePort: 30000 2
    1
    포트 11222 의 로드 밸런서 서비스를 통해 네트워크에 데이터 그리드를 노출합니다.
    2
    선택적으로 로드 밸런서 서비스가 트래픽을 전달하는 노드 포트를 정의합니다.
  3. 변경 사항을 적용합니다.
  4. -external 서비스를 사용할 수 있는지 확인합니다.

    $ oc get services | grep external
    
    NAME                         TYPE            CLUSTER-IP    EXTERNAL-IP   PORT(S)
    example-infinispan-external  LoadBalancer    192.0.2.24    hostname.com  11222/TCP

6.3. 노드 포트를 통해 데이터 그리드 노출

노드 포트 서비스를 사용하여 네트워크에 데이터 그리드 클러스터를 노출합니다.

프로세스

  1. Infinispan CR에 spec.expose 를 포함합니다.
  2. spec.expose.type 을 사용하여 서비스 유형으로 NodePort 를 지정합니다.

    spec:
      ...
      expose:
        type: NodePort 1
        nodePort: 30000 2
    1
    노드 포트 서비스를 통해 네트워크에 데이터 그리드를 노출합니다.
    2
    Data Grid가 노출되는 포트를 정의합니다. 포트를 정의하지 않으면 플랫폼에서 포트를 선택합니다.
  3. 변경 사항을 적용합니다.
  4. -external 서비스를 사용할 수 있는지 확인합니다.

    $ oc get services | grep external
    
    NAME                         TYPE            CLUSTER-IP       EXTERNAL-IP   PORT(S)
    example-infinispan-external  NodePort        192.0.2.24       <none>        11222:30000/TCP

6.4. 경로를 통해 데이터 그리드 노출

패스스루 암호화와 함께 OpenShift 경로를 사용하여 네트워크에서 Data Grid 클러스터를 사용할 수 있도록 합니다.

프로세스

  1. Infinispan CR에 spec.expose 를 포함합니다.
  2. spec.expose.type 을 사용하여 Route 를 서비스 유형으로 지정합니다.
  3. 선택적으로 spec.expose.host 를 사용하여 호스트 이름을 추가합니다.

    spec:
      ...
      expose:
        type: Route 1
        host: www.example.org 2
    1
    OpenShift 경로를 통해 네트워크에 데이터 그리드를 노출합니다.
    2
    선택적으로 Data Grid가 노출되는 호스트 이름을 지정합니다.
  4. 변경 사항을 적용합니다.
  5. 경로를 사용할 수 있는지 확인합니다.

    $ oc get routes
    
    NAME                 CLASS    HOSTS   ADDRESS   PORTS   AGE
    example-infinispan   <none>   *                 443     73s

라우팅 포트

경로를 생성할 때 클라이언트 연결을 수락하고 포트 11222 에서 수신 대기하는 Data Grid 서비스로 트래픽을 리디렉션하는 네트워크의 포트를 노출합니다.

경로를 사용할 수 있는 포트는 암호화를 사용하는지 여부에 따라 다릅니다.

포트설명

80

암호화는 비활성화되어 있습니다.

443

암호화가 활성화됩니다.

7장. 데이터 그리드 연결 보안

인증 및 암호화로 클라이언트 연결을 보호하여 네트워크 침입을 방지하고 데이터를 보호합니다.

7.1. 인증 구성

애플리케이션 사용자에게는 데이터 그리드 클러스터에 액세스하려면 인증 정보가 필요합니다. default, generated 인증 정보를 사용하거나 자체 자격 증명을 추가할 수 있습니다.

7.1.1. 기본 인증 정보

Data Grid Operator는 example-infinispan-generated-secret이라는 인증 보안에 저장된 base64로 인코딩된 기본 인증 정보를 생성합니다.

사용자 이름설명

개발자

기본 애플리케이션 사용자.

operator

Data Grid 클러스터와 상호 작용하는 내부 사용자입니다.

7.1.2. 인증 정보 검색

인증 시크릿에서 인증 정보를 가져와서 데이터 그리드 클러스터에 액세스합니다.

프로세스

  • 다음 예와 같이 인증 보안에서 인증 정보를 검색합니다.

    $ oc get secret example-infinispan-generated-secret

    Base64-decode 자격 증명입니다.

    $ oc get secret example-infinispan-generated-secret \
    -o jsonpath="{.data.identities\.yaml}" | base64 --decode
    
    credentials:
    - username: developer
      password: dIRs5cAAsHIeeRIL
    - username: operator
      password: uMBo9CmEdEduYk24

7.1.3. 사용자 정의 인증 정보 추가

사용자 지정 인증 정보를 사용하여 Data Grid 클러스터 끝점에 대한 액세스를 구성합니다.

프로세스

  1. 추가할 인증 정보를 사용하여 identities.yaml 파일을 생성합니다.

    credentials:
    - username: testuser
      password: testpassword
    - username: operator
      password: supersecretoperatorpassword
    중요

    identity.yaml 에는 operator 사용자가 포함되어야 합니다.

  2. identity.yaml 에서 인증 시크릿을 생성합니다.

    $ oc create secret generic --from-file=identities.yaml connect-secret
  3. Infinispan CR에서 spec.security.endpointSecretName 을 사용하여 인증 보안을 지정한 다음 변경 사항을 적용합니다.

    spec:
      ...
      security:
        endpointSecretName: connect-secret 1
    1
    인증 정보가 포함된 인증 보안의 이름을 지정합니다.

spec.security.endpointSecretName 을 수정하면 클러스터 재시작이 트리거됩니다. Data Grid Operator가 변경 사항을 적용할 때 Data Grid 클러스터를 확인할 수 있습니다.

$ oc get pods -w

7.2. 암호화 구성

Red Hat OpenShift 서비스 인증서 또는 사용자 정의 TLS 인증서를 사용하여 클라이언트와 Data Grid 노드 간의 연결을 암호화합니다.

7.2.1. Red Hat OpenShift Service 인증서로 암호화

Data Grid Operator는 Red Hat OpenShift 서비스 CA에서 서명한 TLS 인증서를 자동으로 생성합니다. 그런 다음 Data Grid Operator는 인증서와 키를 시크릿에 저장하므로 이를 검색하고 원격 클라이언트와 함께 사용할 수 있습니다.

Red Hat OpenShift 서비스 CA를 사용할 수 있는 경우 Data Grid Operator는 다음 spec.security.endpointEncryption 구성을 Infinispan CR에 추가합니다.

spec:
  ...
  security:
    endpointEncryption:
      type: Service
      certServiceName: service.beta.openshift.io 1
      certSecretName: example-infinispan-cert-secret 2
1
Red Hat OpenShift 서비스를 지정합니다.
2
서비스 인증서, tls.crt, 키, tls.key 가 포함된 시크릿의 이름을 PEM 형식으로 지정합니다. 이름을 지정하지 않으면 Data Grid Operator는 < cluster_name>-cert-secret을 사용합니다.
참고

서비스 인증서는 Data Grid 클러스터의 내부 DNS 이름을 CN(일반 이름)으로 사용합니다. 예를 들면 다음과 같습니다.

제목: CN = example-infinispan.mynamespace.svc

이러한 이유로 서비스 인증서는 OpenShift 내에서만 완전히 신뢰할 수 있습니다. OpenShift 외부에서 실행 중인 클라이언트와의 연결을 암호화하려면 사용자 지정 TLS 인증서를 사용해야 합니다.

서비스 인증서는 1년 동안 유효하며 만료되기 전에 자동으로 교체됩니다.

7.2.2. TLS 인증서 검색

암호화 시크릿에서 TLS 인증서를 가져와 클라이언트 신뢰 저장소를 생성합니다.

  • 다음과 같이 암호화 보안에서 tls.crt 를 검색합니다.
$ oc get secret example-infinispan-cert-secret \
-o jsonpath='{.data.tls\.crt}' | base64 --decode > tls.crt

7.2.3. 암호화 비활성화

클라이언트가 Data Grid로 연결을 설정하는 데 TLS 인증서가 필요하지 않도록 암호화를 비활성화할 수 있습니다.

중요

Data Grid는 spec.expose.type 을 통해 OpenShift 클러스터 외부에 끝점이 노출되는 프로덕션 환경에서 암호화를 비활성화하는 것을 권장하지 않습니다.

프로세스

  • Infinispan CR의 spec.security.endpointEncryption.type 필드 값으로 None 을 설정한 다음 변경 사항을 적용합니다.

    spec:
      ...
      security:
        endpointEncryption:
                type: None 1
    1
    Data Grid 엔드포인트에 대한 암호화를 비활성화합니다.

7.2.4. 사용자 정의 TLS 인증서 사용

사용자 지정 PKCS12 키 저장소 또는 TLS 인증서/키 쌍을 사용하여 클라이언트와 데이터 그리드 클러스터 간의 연결을 암호화합니다.

사전 요구 사항

프로세스

  1. OpenShift 네임스페이스에 암호화 보안을 추가합니다. 예를 들면 다음과 같습니다.

    $ oc apply -f tls_secret.yaml
  2. Infinispan CR에서 spec.security.endpointEncryption 을 사용하여 암호화 보안을 지정한 다음 변경 사항을 적용합니다.

    spec:
      ...
      security:
        endpointEncryption: 1
                type: Secret 2
                certSecretName: tls-secret 3
    1
    Data Grid 엔드포인트로의 트래픽을 암호화합니다.
    2
    암호화 인증서가 포함된 시크릿을 사용하도록 Data Grid를 구성합니다.
    3
    암호화 보안의 이름을 지정합니다.
7.2.4.1. 인증서 보안
apiVersion: v1
kind: Secret
metadata:
  name: tls-secret
type: Opaque
data:
    tls.key:  "LS0tLS1CRUdJTiBQUk ..." 1
    tls.crt: "LS0tLS1CRUdJTiBDRVl ..." 2
1
base64로 인코딩된 TLS 키를 추가합니다.
2
base64로 인코딩된 TLS 인증서를 추가합니다.
7.2.4.2. 키 저장소 보안
apiVersion: v1
kind: Secret
metadata:
  name: tls-secret
type: Opaque
stringData:
    alias: server 1
    password: password 2
data:
    keystore.p12:  "MIIKDgIBAzCCCdQGCSqGSIb3DQEHA..." 3
1
키 저장소의 별칭을 지정합니다.
2
키 저장소의 암호를 지정합니다.
3
base64로 인코딩된 키 저장소를 추가합니다.

8장. 교차 사이트 복제 구성

글로벌 데이터 그리드 클러스터를 설정하여 사이트 전체에서 데이터를 백업합니다.

8.1. Data Grid Operator를 사용한 교차 사이트 복제

별도의 위치에서 실행되는 Data Grid 클러스터가 있는 경우 Data Grid Operator를 사용하여 사이트 간에 데이터를 백업할 수 있습니다.

예를 들어 다음 그림에서 Data Grid Operator는 New gold city, CryostatC의 데이터 센터에서 Data Grid 클러스터를 관리합니다. LON( LON )의 또 다른 데이터 센터에서 Data Grid Operator도 Data Grid 클러스터를 관리합니다.

Data Grid Operator는 Kubernetes API를 사용하여 CryostatC와 LON 의 OpenShift Container Platform 클러스터 간에 보안 연결을 설정합니다. 그러면 Data Grid Operator가 교차 사이트 복제 서비스를 생성하여 데이터 그리드 클러스터에서 위치 간에 데이터를 백업할 수 있습니다.

각 Data Grid 클러스터에는 모든 백업 요청을 조정하는 하나의 사이트 마스터 노드가 있습니다. Data Grid Operator는 사이트 마스터 노드를 식별하여 사이트 간 복제 서비스를 통한 모든 트래픽이 사이트 마스터로 이동합니다.

현재 사이트 마스터 노드가 오프라인 상태가 되면 새 노드가 사이트 마스터가 됩니다. Data Grid Operator는 새 사이트 마스터 노드를 자동으로 찾고 교차 사이트 복제 서비스를 업데이트하여 백업 요청을 전달합니다.

8.2. 서비스 계정 토큰 생성

백업 위치 역할을 하는 각 OpenShift 클러스터에서 서비스 계정 토큰을 생성합니다. 클러스터는 이러한 토큰을 사용하여 서로 인증하므로 Data Grid Operator가 사이트 간 복제 서비스를 생성할 수 있습니다.

프로세스

  1. OpenShift 클러스터에 로그인합니다.
  2. 서비스 계정을 생성합니다.

    예를 들어 LON 에서 서비스 계정을 생성합니다.

    $ oc create sa lon
    serviceaccount/lon created
  3. 다음 명령을 사용하여 서비스 계정에 view 역할을 추가합니다.

    $ oc policy add-role-to-user view system:serviceaccount:<namespace>:lon
  4. 다른 OpenShift 클러스터에서 이전 단계를 반복합니다.

8.3. 서비스 계정 토큰 교환

OpenShift 클러스터에서 서비스 계정 토큰을 생성한 후 각 백업 위치의 시크릿에 추가합니다. 예를 들어 LON 에서 CryostatC에 대한 서비스 계정 토큰을 추가합니다. Cryo stat C에서 LON 에 대한 서비스 계정 토큰을 추가합니다.

사전 요구 사항

  • 각 서비스 계정에서 토큰을 가져옵니다.

    다음 명령을 사용하거나 OpenShift 웹 콘솔에서 토큰을 가져옵니다.

    $ oc sa get-token lon
    
    eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9...

프로세스

  1. OpenShift 클러스터에 로그인합니다.
  2. 다음 명령을 사용하여 백업 위치에 대한 서비스 계정 토큰을 추가합니다.

    $ oc create secret generic <token-name> --from-literal=token=<token>

    예를 들어, CryostatC에서 OpenShift 클러스터에 로그인하고 다음과 같이 lon-token 시크릿을 생성합니다.

    $ oc create secret generic lon-token --from-literal=token=eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9...
  3. 다른 OpenShift 클러스터에서 이전 단계를 반복합니다.

8.4. 사이트 간 복제를 위한 데이터 그리드 클러스터 구성

데이터를 복제하기 위한 전용 Cryostat 전송 채널을 통해 통신할 수 있도록 Data Grid 클러스터를 백업 위치로 구성합니다.

사전 요구 사항

  • 각 백업 위치에 대한 서비스 계정 토큰이 포함된 보안을 생성합니다.
  • 모든 클러스터가 Data Grid 서비스 노드인지 확인합니다.
  • OpenShift 프로젝트 이름이 일치하는지 확인합니다.

    중요

    데이터 그리드 Operator는 사이트 간 복제를 수행하려면 Data Grid 클러스터가 동일한 이름을 가지며 일치하는 네임스페이스에서 실행해야 합니다.

    예를 들어 xsite-cluster 라는 프로젝트에서 LON 에 클러스터를 생성합니다. CryostatC 클러스터는 xsite-cluster 라는 프로젝트에서도 실행되어야 합니다.

프로세스

  1. 각 Data Grid 클러스터에 대한 Infinispan CR을 생성합니다.
  2. metadata.name 을 사용하여 각 Data Grid 클러스터에 일치하는 이름을 지정합니다.
  3. spec.service.sites.local.name 을 사용하여 로컬 사이트의 이름을 지정합니다.
  4. spec.service.sites.local.expose.type 을 사용하여 로컬 사이트의 expose 서비스 유형을 설정합니다.
  5. spec.service.sites.locations 의 백업 위치 역할을 하는 각 Data Grid 클러스터에 대해 이름, URL, 시크릿을 제공합니다.

    다음은 LON 및 CryostatC에 대한 Infinispan CR 정의의 예입니다.

    • LON

      apiVersion: infinispan.org/v1
      kind: Infinispan
      metadata:
        name: example-infinispan
      spec:
        replicas: 3
        service:
          type: DataGrid
          sites:
            local:
              name: LON
              expose:
                type: LoadBalancer
            locations:
              - name: LON
                url: openshift://api.rhdg-lon.openshift-aws.myhost.com:6443
                secretName: lon-token
              - name: NYC
                url: openshift://api.rhdg-nyc.openshift-aws.myhost.com:6443
                secretName: nyc-token
    • NYC

      apiVersion: infinispan.org/v1
      kind: Infinispan
      metadata:
        name: example-infinispan
      spec:
        replicas: 2
        service:
          type: DataGrid
          sites:
            local:
              name: NYC
              expose:
                type: LoadBalancer
            locations:
              - name: NYC
                url: openshift://api.rhdg-nyc.openshift-aws.myhost.com:6443
                secretName: nyc-token
              - name: LON
                url: openshift://api.rhdg-lon.openshift-aws.myhost.com:6443
                secretName: lon-token
  6. 다음과 같이 교차 사이트 복제의 로깅 수준을 조정합니다.

    ...
      logging:
        categories:
          org.jgroups.protocols.TCP: error
          org.jgroups.protocols.relay.RELAY2: fatal

    이전 구성에서는 클러스터 백업 작업에 대한 과도한 메시지를 줄이기 위해 Cryostat TCP 및 RELAY2 프로토콜의 로깅을 줄임으로써 컨테이너 스토리지를 사용하는 많은 로그 파일이 발생할 수 있습니다.

  7. 다른 Data Grid 서비스 리소스를 사용하여 노드를 구성합니다.
  8. Infinispan CR을 적용합니다.
  9. 노드 로그를 확인하여 Data Grid 클러스터가 교차 사이트 뷰를 형성하는지 확인합니다. 예를 들면 다음과 같습니다.

    $ oc logs example-infinispan-0 | grep x-site
    
    INFO  [org.infinispan.XSITE] (jgroups-5,example-infinispan-0-<id>) ISPN000439: Received new x-site view: [NYC]
    INFO  [org.infinispan.XSITE] (jgroups-7,example-infinispan-0-<id>) ISPN000439: Received new x-site view: [NYC, LON]

다음 단계

클러스터가 사이트 간 보기를 구성한 경우 캐시에 백업 위치를 추가할 수 있습니다.

8.4.1. 사이트 복제 리소스Cross-Site Replication Resources

spec:
  ...
  service:
    type: DataGrid 1
    sites:
      local:
        name: LON 2
        expose:
          type: LoadBalancer 3
      locations: 4
      - name: LON 5
        url: openshift://api.site-a.devcluster.openshift.com:6443 6
        secretName: lon-token 7
      - name: NYC
        url: openshift://api.site-b.devcluster.openshift.com:6443
        secretName: nyc-token
  logging:
    categories:
      org.jgroups.protocols.TCP: error 8
      org.jgroups.protocols.relay.RELAY2: fatal 9
1
Data Grid 서비스를 지정합니다. 데이터 그리드는 Data Grid 서비스 클러스터를 사용하는 사이트 간 복제만 지원합니다.
2
Data Grid 클러스터의 로컬 사이트 이름을 지정합니다.
3
백업 위치 간 통신을 처리하는 service LoadBalancer 를 지정합니다.
4
모든 백업 위치에 대한 연결 정보를 제공합니다.
5
spec.service.sites.local.name 과 일치하는 백업 위치를 지정합니다.
6
백업 위치에 대한 OpenShift API의 URL을 지정합니다.
7
백업 사이트의 서비스 계정 토큰이 포함된 시크릿을 지정합니다.
8
Cryostat TCP 프로토콜에 대한 오류 메시지를 기록합니다.
9
Cryostat RELAY2 프로토콜의 치명적인 메시지를 기록합니다.

9장. Data Grid Operator를 사용하여 캐시 생성

Cache CR을 사용하여 Data Grid Operator를 사용하여 캐시 구성을 추가하고 Data Grid가 데이터를 저장하는 방법을 제어합니다.

중요

Data Grid Operator를 사용하여 캐시 생성은 기술 프리뷰로 사용할 수 있습니다.

기술 프리뷰 기능 또는 기능은 Red Hat 프로덕션 SLA(서비스 수준 계약)에서 지원되지 않으며 기능적으로 완전하지 않을 수 있습니다. Red Hat은 프로덕션에 사용하지 않는 것이 좋습니다. 이러한 기능을 사용하면 향후 제품 기능을 조기에 이용할 수 있어 개발 과정에서 고객이 기능을 테스트하고 피드백을 제공할 수 있습니다.

Red Hat 기술 프리뷰 기능 지원 범위

Cache CR을 사용하는 경우 다음 규칙이 적용됩니다.

  • 캐시 CR은 Data Grid 서비스 노드에만 적용됩니다.
  • Cache CR에 대해 단일 캐시를 만들 수 있습니다.
  • Cache CR에 템플릿과 XML 구성이 모두 포함된 경우 Data Grid Operator는 템플릿을 사용합니다.
  • OpenShift 웹 콘솔에서 캐시를 편집하는 경우 변경 사항은 사용자 인터페이스를 통해 반영되지만 Data Grid 클러스터에는 적용되지 않습니다. 캐시를 편집할 수 없습니다. 캐시 구성을 변경하려면 먼저 콘솔 또는 CLI를 통해 캐시를 삭제한 다음 캐시를 다시 생성해야 합니다.
  • OpenShift 웹 콘솔에서 캐시 CR을 삭제해도 데이터 그리드 클러스터에서 캐시는 제거되지 않습니다. 콘솔 또는 CLI를 통해 캐시를 삭제해야 합니다.

9.1. Data Grid Operator에 대한 인증 정보 추가

Data Grid Operator는 캐시를 생성하려면 Data Grid 서비스 클러스터로 인증해야 합니다. 캐시를 생성할 때 Data Grid Operator가 클러스터에 액세스할 수 있도록 시크릿에 인증 정보를 추가합니다.

다음 절차에서는 새 보안에 인증 정보를 추가하는 방법을 설명합니다. 인증 정보가 포함된 사용자 정의 시크릿이 이미 있는 경우 새 보안을 생성하는 대신 사용할 수 있습니다.

프로세스

  1. StringData 맵에서 Data Grid 서비스 클러스터에 액세스하기 위한 유효한 사용자 자격 증명을 제공하는 Secret 오브젝트 유형을 정의합니다.

    예를 들어 다음과 같이 developer 사용자에게 자격 증명을 제공하는 basic-auth.yaml 파일을 생성합니다.

    apiVersion: v1
    stringData:
      username: developer 1
      password: G8ZdJvSaY3lOOwfM 2
    kind: Secret
    metadata:
      name: basic-auth 3
    type: Opaque
    1
    캐시를 생성할 수 있는 사용자의 이름을 지정합니다.
    2
    사용자에게 해당하는 암호를 지정합니다.
    3
    보안의 이름을 지정합니다.
  2. 다음 예와 같이 파일에서 시크릿을 생성합니다.

    $ oc apply -f basic-auth.yaml

9.1.1. 사용자 정의 인증 정보 시크릿 사용

Data Grid Operator를 사용하려면 해당 인증 정보가 시크릿에 사용자 이름암호 키 값으로 있어야 합니다. Data Grid 인증 정보가 포함된 사용자 정의 시크릿이 있지만 다른 키 이름을 사용하는 경우 Cache CR에서 해당 이름을 덮어쓸 수 있습니다.

예를 들어 다음과 같이 Data Grid 사용자 목록과 해당 암호를 보유하는 "my-credentials"라는 시크릿이 있습니다.

stringData:
  app_user1: spock
  app_user1_pw: G8ZdJvSaY3lOOwfM
  app_user2: jim
  app_user2_pw: zTzz2gVyyF4JsYsH

프로세스

  • Cache CR에서 다음과 같이 사용자 이름 및 암호를 사용하여 사용자 정의 키 이름을 재정의합니다.
spec:
  adminAuth:
    username:
      key: app_user1 1
      name: my-credentials 2
    password:
      key: app_user1_pw 3
      name: my-credentials
1
사용자 이름으로 app_user1 키 이름을 재정의합니다.
2
사용자 정의 인증 정보 시크릿의 이름을 지정합니다.
3
암호로 app_user1_pw 키 이름을 재정의합니다.

9.2. XML에서 데이터 그리드 캐시 생성

유효한 infinispan.xml 캐시 정의를 사용하여 Data Grid 서비스 클러스터에서 캐시를 생성하려면 다음 단계를 완료합니다.

사전 요구 사항

  • Data Grid 클러스터에 액세스하기 위한 유효한 사용자 인증 정보가 포함된 시크릿을 생성합니다.

프로세스

  1. 만들 XML 캐시 정의가 포함된 캐시 CR을 만듭니다.

    apiVersion: infinispan.org/v2alpha1
    kind: Cache
    metadata:
      name: mycachedefinition 1
    spec:
      adminAuth: 2
        secretName: basic-auth
      clusterName: example-infinispan 3
      name: mycache 4
      template: <infinispan><cache-container><distributed-cache name="mycache" mode="SYNC"><persistence><file-store/></persistence></distributed-cache></cache-container></infinispan> 5
    1
    Cache CR의 이름을 지정합니다.
    2
    사용자 이름 및 암호 키가 포함된 인증 정보 또는 사용자 정의 인증 정보 시크릿에 대한 재정의를 제공하는 보안을 지정합니다.
    3
    Data Grid Operator에서 캐시를 생성할 대상 Data Grid 클러스터의 이름을 지정합니다.
    4
    Data Grid 클러스터의 캐시 이름을 지정합니다.
    5
    캐시를 만들 XML 캐시 정의를 지정합니다. name 속성은 무시됩니다. 결과 캐시에는 spec.name 만 적용됩니다.
  2. Cache CR을 적용합니다. 예를 들면 다음과 같습니다.

    $ oc apply -f mycache.yaml
    cache.infinispan.org/mycachedefinition created

9.3. 템플릿에서 데이터 그리드 캐시 생성

캐시 구성 템플릿을 사용하여 Data Grid 서비스 클러스터에서 캐시를 생성하려면 다음 단계를 완료합니다.

사전 요구 사항

  • Data Grid 클러스터에 액세스하기 위한 유효한 사용자 인증 정보가 포함된 시크릿을 생성합니다.
  • 캐시에 사용할 캐시 구성 템플릿을 식별합니다. Data Grid Console에서 사용 가능한 구성 템플릿 목록을 찾을 수 있습니다.

프로세스

  1. 사용할 템플릿의 이름을 지정하는 Cache CR을 만듭니다.

    예를 들어 다음 CR은 org.infinispan.DIST_SYNC 캐시 구성 템플릿을 사용하는 "mycache"라는 캐시를 생성합니다.

    apiVersion: infinispan.org/v2alpha1
    kind: Cache
    metadata:
      name: mycachedefinition 1
    spec:
      adminAuth: 2
        secretName: basic-auth
      clusterName: example-infinispan 3
      name: mycache 4
      templateName: org.infinispan.DIST_SYNC 5
    1
    Cache CR의 이름을 지정합니다.
    2
    사용자 이름 및 암호 키가 포함된 인증 정보 또는 사용자 정의 인증 정보 시크릿에 대한 재정의를 제공하는 보안을 지정합니다.
    3
    Data Grid Operator에서 캐시를 생성할 대상 Data Grid 클러스터의 이름을 지정합니다.
    4
    Data Grid 캐시 인스턴스의 이름을 지정합니다.
    5
    캐시를 생성할 infinispan.org 캐시 구성 템플릿을 지정합니다.
  2. Cache CR을 적용합니다. 예를 들면 다음과 같습니다.

    $ oc apply -f mycache.yaml
    cache.infinispan.org/mycachedefinition created

9.4. 캐시에 백업 위치 추가

사이트 간 복제를 수행하도록 데이터 그리드 클러스터를 구성하면 캐시 구성에 백업 위치를 추가할 수 있습니다.

프로세스

  1. 각 사이트에 대해 동일한 이름으로 캐시 구성을 만듭니다.

    각 사이트의 캐시 구성은 다른 캐시 모드 및 백업 전략을 사용할 수 있습니다. Data Grid는 캐시 이름을 기반으로 데이터를 복제합니다.

  2. take-offline 요소를 사용하여 오프라인으로 전환하도록 백업 위치를 구성합니다.

    1. 백업 위치가 min-wait 특성으로 오프라인 상태가 되기 전에 시간(밀리초)을 설정합니다.
  3. 기타 유효한 캐시 구성을 정의합니다.
  4. 글로벌 클러스터의 모든 사이트의 이름이 지정된 캐시에 백업 위치를 추가합니다.

    예를 들어 LON 을 CryostatC의 백업으로 추가하는 경우 LON 의 백업으로 Cryo statC를 추가해야 합니다.

다음 구성 예제에서는 캐시의 백업 위치를 보여줍니다.

  • NYC

    <infinispan>
      <cache-container>
        <distributed-cache name="customers">
          <encoding media-type="application/x-protostream"/>
          <backups>
            <backup site="LON" strategy="SYNC">
              <take-offline min-wait="120000"/>
            </backup>
          </backups>
        </distributed-cache>
      </cache-container>
    </infinispan>
  • LON

    <infinispan>
      <cache-container>
        <replicated-cache name="customers">
          <encoding media-type="application/x-protostream"/>
          <backups>
            <backup site="NYC" strategy="ASYNC" >
                <take-offline min-wait="120000"/>
              </backup>
          </backups>
        </replicated-cache>
      </cache-container>
    </infinispan>

9.4.1. 백업 위치 오프라인으로 성능 고려 사항

원격 사이트를 사용할 수 없게 되면 백업 위치가 자동으로 오프라인 상태가 될 수 있습니다. 이렇게 하면 노드가 오프라인 백업 위치에 데이터를 복제하지 않으므로 오류가 발생하여 클러스터에 성능이 저하될 수 있습니다.

백업 위치가 오프라인 상태가 되기 전에 대기할 시간을 구성할 수 있습니다. 엄지의 좋은 규칙은 1~2분입니다. 그러나 다른 대기 기간을 테스트하고 성능에 미치는 영향을 평가하여 배포에 대한 올바른 값을 결정해야 합니다.

예를 들어 OpenShift가 사이트 마스터 Pod를 종료하면 Data Grid Operator가 새 사이트 마스터를 선택할 때까지 해당 백업 위치를 짧은 기간 동안 사용할 수 없게 됩니다. 이 경우 최소 대기 시간이 충분하지 않으면 백업 위치가 오프라인 상태가 됩니다. 그런 다음 해당 백업 위치를 온라인으로 가져오고 데이터가 동기화되었는지 확인하기 위해 상태 전송 작업을 수행해야 합니다.

마찬가지로 최소 대기 시간이 너무 길면 노드 CPU 사용량이 실패한 백업 시도에서 증가하여 성능 저하가 발생할 수 있습니다.

9.5. 영구 캐시 저장소 추가

데이터를 영구 볼륨에 저장하기 위해 Data Grid 서비스 노드에 단일 파일 캐시 저장소를 추가할 수 있습니다.

다음과 같이 지속성 요소를 사용하여 Data Grid 캐시 정의의 일부로 캐시 저장소를 구성합니다.

<persistence>
   <file-store/>
</persistence>

그런 다음 데이터 그리드는 /opt/infinispan/server/data 디렉터리에 단일 파일 캐시 저장소 .dat 파일을 생성합니다.

프로세스

  • 다음과 같이 캐시 구성에 캐시 저장소를 추가합니다.

    <infinispan>
      <cache-container>
        <distributed-cache name="customers" mode="SYNC">
          <encoding media-type="application/x-protostream"/>
          <persistence>
            <file-store/>
          </persistence>
        </distributed-cache>
      </cache-container>
    </infinispan>

추가 리소스

10장. 원격 클라이언트 연결 설정

Data Grid Console, CLI(명령줄 인터페이스) 및 원격 클라이언트에서 데이터 그리드 클러스터에 연결합니다.

10.1. 클라이언트 연결 세부 정보

Data Grid에 연결하려면 다음 정보를 검색해야 합니다.

  • 서비스 호스트 이름
  • 포트
  • 인증 인증 정보
  • 암호화를 사용하는 경우 TLS 인증서

서비스 호스트 이름

서비스 호스트 이름은 네트워크에서 Data Grid를 노출하는 방법 또는 클라이언트가 OpenShift에서 실행되는지 여부에 따라 달라집니다.

OpenShift에서 실행되는 클라이언트의 경우 Data Grid Operator가 생성하는 내부 서비스의 이름을 사용할 수 있습니다.

OpenShift 외부에서 실행되는 클라이언트의 경우 로드 밸런서를 사용하는 경우 서비스 호스트 이름은 위치 URL입니다. 노드 포트 서비스의 경우 서비스 호스트 이름은 노드 호스트 이름입니다. 경로의 경우 서비스 호스트 이름은 사용자 지정 호스트 이름 또는 시스템 정의 호스트 이름입니다.

포트

OpenShift 및 로드 밸런서를 통해 클라이언트 연결에서는 포트 11222 를 사용합니다.

노드 포트 서비스는 30000~60000 범위의 포트 사용합니다. 경로는 포트 80 (암호화되지 않음) 또는 443 (암호화)을 사용합니다.

10.2. 데이터 그리드 캐시 생성

OpenShift에서 Data Grid를 실행할 때 캐시를 생성하려면 다음을 수행할 수 있습니다.

  • 캐시 CR을 사용합니다.
  • Cache CR을 사용하지 않는 경우 Data Grid CLI를 사용하여 한 번에 여러 캐시를 생성합니다.
  • 데이터 그리드 콘솔에 액세스하고 캐시를 캐시 CR 또는 Data Grid CLI 대신 XML 또는 JSON 형식으로 만듭니다.
  • Hot Rod 클라이언트를 사용하여 프로그래밍 방식으로 또는 필요한 경우에만 캐시 속성을 통해 캐시를 생성합니다.

10.3. Data Grid CLI로 연결

CLI(명령줄 인터페이스)를 사용하여 Data Grid 클러스터에 연결하고 관리 작업을 수행합니다.

CLI는 서버 배포의 일부로 사용할 수 있으며, 로컬 호스트에서 실행하여 OpenShift의 Data Grid 클러스터에 대한 원격 연결을 설정할 수 있습니다.

참고

Data Grid 노드에 대한 원격 쉘을 열고 CLI에 액세스할 수 있습니다.

$ oc rsh example-infinispan-0

그러나 이러한 방식으로 CLI를 사용하면 컨테이너에 할당된 메모리를 사용하므로 메모리 부족 예외가 발생할 수 있습니다.

10.3.1. Data Grid CLI를 사용하여 캐시 생성

CLI를 사용하여 Data Grid 클러스터에 캐시를 추가합니다.

사전 요구 사항

  • CLI를 실행할 수 있도록 서버 배포를 다운로드합니다.
  • 필요한 클라이언트 연결 세부 정보를 검색합니다.

프로세스

  1. XML 또는 JSON 형식의 캐시 구성으로 파일을 생성합니다. 예를 들면 다음과 같습니다.

    cat > infinispan.xml<<EOF
    <infinispan>
       <cache-container>
          <distributed-cache name="mycache">
             <encoding>
                <key media-type="application/x-protostream"/>
                <value media-type="application/x-protostream"/>
             </encoding>
          </distributed-cache>
       </cache-container>
    </infinispan>
    EOF
  2. Data Grid 클러스터에 대한 CLI 연결을 생성합니다.

    $ bin/cli.sh -c https://$SERVICE_HOSTNAME:$PORT --trustall

    $SERVICE_HOSTNAME:$PORT 를 네트워크에서 Data Grid를 사용할 수 있는 호스트 이름 및 포트로 바꿉니다.

  3. 메시지가 표시되면 Data Grid 자격 증명을 입력합니다.
  4. create cache 명령과 --file 옵션을 사용하여 캐시를 추가합니다.

    [//containers/default]> create cache --file=infinispan.xml mycache
  5. ls 명령을 사용하여 캐시가 있는지 확인합니다.

    [//containers/default]> ls caches
    mycache
  6. 필요한 경우 describe 명령을 사용하여 캐시 구성을 검색합니다.

    [//containers/default]> describe caches/mycache

10.3.2. Batches에서 캐시 생성

Data Grid CLI를 사용하여 배치 작업으로 여러 캐시를 추가합니다.

사전 요구 사항

  • CLI를 실행할 수 있도록 서버 배포를 다운로드합니다.
  • 필요한 클라이언트 연결 세부 정보를 검색합니다.

프로세스

  1. XML 또는 JSON 형식의 캐시 구성으로 하나 이상의 파일을 생성합니다.
  2. 배치 파일을 생성합니다. 예를 들면 다음과 같습니다.

    cat > caches.batch<<EOF
    echo "connecting"
    connect --username=developer --password=dIRs5cAAsHIeeRIL
    echo "creating caches..."
    create cache firstcache --file=infinispan-one.xml
    create cache secondcache --file=infinispan-two.xml
    create cache thirdcache --file=infinispan-three.xml
    create cache fourthcache --file=infinispan-four.xml
    echo "verifying caches"
    ls caches
    EOF
  3. CLI를 사용하여 캐시를 만듭니다.

    $ bin/cli.sh -c https://$SERVICE_HOSTNAME:$PORT --trustall -f /tmp/caches.batch

    $SERVICE_HOSTNAME:$PORT 를 네트워크에서 Data Grid를 사용할 수 있는 호스트 이름 및 포트로 바꿉니다.

10.4. 데이터 그리드 콘솔에 액세스

콘솔에 액세스하여 캐시를 생성하고 관리 작업을 수행하고 Data Grid 클러스터를 모니터링합니다.

사전 요구 사항

  • 브라우저를 통해 콘솔에 액세스할 수 있도록 네트워크에 데이터 그리드를 노출합니다.
    예를 들어 로드 밸런서 서비스를 구성하거나 경로를 생성합니다.

프로세스

  1. $SERVICE_HOSTNAME:$PORT 에서 모든 브라우저에서 콘솔에 액세스합니다.

    $SERVICE_HOSTNAME:$PORT 를 네트워크에서 Data Grid를 사용할 수 있는 호스트 이름 및 포트로 바꿉니다.

  2. 메시지가 표시되면 Data Grid 자격 증명을 입력합니다.

10.5. 핫 로드 클라이언트

Hot Rod는 Data Grid가 원격 클라이언트와 함께 고성능 데이터 전송 기능을 제공하는 바이너리 TCP 프로토콜입니다.

클라이언트 인텔리전스

클라이언트 인텔리전스는 클라이언트가 Data Grid 노드에 요청을 찾고 보낼 수 있도록 Hot Rod 프로토콜이 제공하는 메커니즘을 나타냅니다.

OpenShift에서 실행되는 핫 Rod 클라이언트는 Data Grid 노드의 내부 IP 주소에 액세스할 수 있으므로 모든 클라이언트 인텔리전스를 사용할 수 있습니다. 기본 인텔리전스( HASH_DISTRIBUTION_AWARE )는 클라이언트가 기본 소유자로 요청을 라우팅하여 성능을 향상시킬 수 있기 때문에 권장됩니다.

OpenShift 외부에서 실행되는 핫 Rod 클라이언트는 BASIC 인텔리전스를 사용해야 합니다.

10.5.1. 핫 로드 설정 API

ConfigurationBuilder 인터페이스를 사용하여 Hot Rod 클라이언트 연결을 프로그래밍 방식으로 구성할 수 있습니다.

참고

$SERVICE_HOSTNAME:$PORT 는 Data Grid 클러스터에 액세스할 수 있는 호스트 이름과 포트를 나타냅니다. 이러한 변수를 환경의 실제 호스트 이름 및 포트로 교체해야 합니다.

On OpenShift

OpenShift에서 실행되는 핫 Rod 클라이언트는 다음 구성을 사용할 수 있습니다.

import org.infinispan.client.hotrod.configuration.ConfigurationBuilder;
import org.infinispan.client.hotrod.configuration.SaslQop;
import org.infinispan.client.hotrod.impl.ConfigurationProperties;
...

ConfigurationBuilder builder = new ConfigurationBuilder();
      builder.addServer()
               .host("$SERVICE_HOSTNAME")
               .port(ConfigurationProperties.DEFAULT_HOTROD_PORT)
             .security().authentication()
               .username("username")
               .password("password")
               .realm("default")
               .saslQop(SaslQop.AUTH)
               .saslMechanism("SCRAM-SHA-512")
             .ssl()
               .sniHostName("$SERVICE_HOSTNAME")
               .trustStorePath("/var/run/secrets/kubernetes.io/serviceaccount/service-ca.crt");
Outside OpenShift

OpenShift 외부에서 실행되는 핫 Rod 클라이언트는 다음 구성을 사용할 수 있습니다.

import org.infinispan.client.hotrod.configuration.ClientIntelligence;
import org.infinispan.client.hotrod.configuration.ConfigurationBuilder;
import org.infinispan.client.hotrod.configuration.SaslQop;
...

ConfigurationBuilder builder = new ConfigurationBuilder();
      builder.addServer()
               .host("$SERVICE_HOSTNAME")
               .port("$PORT")
             .security().authentication()
               .username("username")
               .password("password")
               .realm("default")
               .saslQop(SaslQop.AUTH)
               .saslMechanism("SCRAM-SHA-512")
             .ssl()
               .sniHostName("$SERVICE_HOSTNAME")
               .trustStorePath("/path/to/tls.crt");
      builder.clientIntelligence(ClientIntelligence.BASIC);

10.5.2. 핫 Rod 클라이언트 속성

애플리케이션 classpath에서 hotrod-client.properties 파일을 사용하여 Hot Rod 클라이언트 연결을 구성할 수 있습니다.

참고

$SERVICE_HOSTNAME:$PORT 는 Data Grid 클러스터에 액세스할 수 있는 호스트 이름과 포트를 나타냅니다. 이러한 변수를 환경의 실제 호스트 이름 및 포트로 교체해야 합니다.

On OpenShift

OpenShift에서 실행되는 핫 Rod 클라이언트는 다음 속성을 사용할 수 있습니다.

# Connection
infinispan.client.hotrod.server_list=$SERVICE_HOSTNAME:$PORT

# Authentication
infinispan.client.hotrod.use_auth=true
infinispan.client.hotrod.auth_username=developer
infinispan.client.hotrod.auth_password=$PASSWORD
infinispan.client.hotrod.auth_server_name=$CLUSTER_NAME
infinispan.client.hotrod.sasl_properties.javax.security.sasl.qop=auth
infinispan.client.hotrod.sasl_mechanism=SCRAM-SHA-512

# Encryption
infinispan.client.hotrod.sni_host_name=$SERVICE_HOSTNAME
# Path to the TLS certificate.
# Clients automatically generate trust stores from certificates.
infinispan.client.hotrod.trust_store_path=/var/run/secrets/kubernetes.io/serviceaccount/service-ca.crt
Outside OpenShift

OpenShift 외부에서 실행되는 핫 Rod 클라이언트는 다음 속성을 사용할 수 있습니다.

# Connection
infinispan.client.hotrod.server_list=$SERVICE_HOSTNAME:$PORT

# Client intelligence
infinispan.client.hotrod.client_intelligence=BASIC

# Authentication
infinispan.client.hotrod.use_auth=true
infinispan.client.hotrod.auth_username=developer
infinispan.client.hotrod.auth_password=$PASSWORD
infinispan.client.hotrod.auth_server_name=$CLUSTER_NAME
infinispan.client.hotrod.sasl_properties.javax.security.sasl.qop=auth
infinispan.client.hotrod.sasl_mechanism=SCRAM-SHA-512

# Encryption
infinispan.client.hotrod.sni_host_name=$SERVICE_HOSTNAME
# Path to the TLS certificate.
# Clients automatically generate trust stores from certificates.
infinispan.client.hotrod.trust_store_path=tls.crt

10.5.3. Hot Rod Client를 사용하여 캐시 생성

Hot Rod 클라이언트를 사용하여 OpenShift에서 실행되는 Data Grid 클러스터에서 원격으로 캐시를 생성할 수 있습니다. 그러나 Data Grid는 Hot Rod 클라이언트 대신 Data Grid Console, CLI 또는 Cache CR을 사용하여 캐시를 생성하는 것이 좋습니다.

프로그래밍 방식으로 캐시 생성

다음 예제에서는 ConfigurationBuilder 에 캐시 구성을 추가한 다음 RemoteCacheManager 를 사용하여 생성하는 방법을 보여줍니다.

import org.infinispan.client.hotrod.DefaultTemplate;
import org.infinispan.client.hotrod.RemoteCache;
import org.infinispan.client.hotrod.RemoteCacheManager;
...

      builder.remoteCache("my-cache")
             .templateName(DefaultTemplate.DIST_SYNC);
      builder.remoteCache("another-cache")
             .configuration("<infinispan><cache-container><distributed-cache name=\"another-cache\"><encoding media-type=\"application/x-protostream\"/></distributed-cache></cache-container></infinispan>");
      try (RemoteCacheManager cacheManager = new RemoteCacheManager(builder.build())) {
      // Get a remote cache that does not exist.
      // Rather than return null, create the cache from a template.
      RemoteCache<String, String> cache = cacheManager.getCache("my-cache");
      // Store a value.
      cache.put("hello", "world");
      // Retrieve the value and print it.
      System.out.printf("key = %s\n", cache.get("hello"));

이 예제에서는 XMLStringConfiguration() 메서드를 사용하여 CacheWithXMLConfiguration이라는 캐시를 만들어 캐시 구성을 XML로 전달하는 방법을 보여줍니다.

import org.infinispan.client.hotrod.RemoteCacheManager;
import org.infinispan.commons.configuration.XMLStringConfiguration;
...

private void createCacheWithXMLConfiguration() {
    String cacheName = "CacheWithXMLConfiguration";
    String xml = String.format("<infinispan>" +
                                  "<cache-container>" +
                                  "<distributed-cache name=\"%s\" mode=\"SYNC\">" +
                                    "<encoding media-type=\"application/x-protostream\"/>" +
                                    "<locking isolation=\"READ_COMMITTED\"/>" +
                                    "<transaction mode=\"NON_XA\"/>" +
                                    "<expiration lifespan=\"60000\" interval=\"20000\"/>" +
                                  "</distributed-cache>" +
                                  "</cache-container>" +
                                "</infinispan>"
                                , cacheName);
    manager.administration().getOrCreateCache(cacheName, new XMLStringConfiguration(xml));
    System.out.println("Cache with configuration exists or is created.");
}
핫 Rod 클라이언트 속성 사용

cacheManager.getCache() 가 존재하지 않는 캐시를 호출하면 Data Grid는 null을 반환하지 않고 핫 Rod 클라이언트 속성에서 생성합니다.

다음 예와 같이 Hot Rod 클라이언트 속성에 캐시 구성을 추가합니다.

# Add cache configuration
infinispan.client.hotrod.cache.my-cache.template_name=org.infinispan.DIST_SYNC
infinispan.client.hotrod.cache.another-cache.configuration=<infinispan><cache-container><distributed-cache name=\"another-cache\"/></cache-container></infinispan>
infinispan.client.hotrod.cache.my-other-cache.configuration_uri=file:/path/to/configuration.xml

10.6. REST API 액세스

Data Grid는 HTTP 클라이언트를 사용하여 상호 작용할 수 있는 RESTful 인터페이스를 제공합니다.

사전 요구 사항

  • REST API에 액세스할 수 있도록 네트워크에서 데이터 그리드를 노출합니다.
    예를 들어 로드 밸런서 서비스를 구성하거나 경로를 생성합니다.

프로세스

  • $SERVICE_HOSTNAME:$PORT/rest/v2 에서 모든 HTTP 클라이언트를 사용하여 REST API에 액세스합니다.

    $SERVICE_HOSTNAME:$PORT 를 네트워크에서 Data Grid를 사용할 수 있는 호스트 이름 및 포트로 바꿉니다.

추가 리소스

10.7. 캐시 서비스 노드에 캐시 추가

캐시 서비스 노드에는 권장되는 설정이 포함된 기본 캐시 구성이 포함되어 있습니다. 이 기본 캐시를 사용하면 캐시를 생성할 필요 없이 Data Grid를 사용할 수 있습니다.

참고

기본 캐시는 권장 설정을 제공하므로 캐시를 기본값의 사본으로만 생성해야 합니다. 사용자 지정 캐시를 여러 개 사용하려면 서비스 노드 캐시 대신 Data Grid 서비스 노드를 생성해야 합니다.

프로세스

  • Data Grid Console에 액세스하여 기본 구성의 사본을 XML 또는 JSON 형식으로 제공합니다.
  • Data Grid CLI를 사용하여 다음과 같이 기본 캐시에서 복사본을 만듭니다.

    [//containers/default]> create cache --template=default mycache

10.7.1. 기본 캐시 구성

캐시 서비스 노드의 기본 캐시는 다음과 같습니다.

<infinispan>
  <cache-container>
    <distributed-cache name="default" 1
                       mode="SYNC" 2
                       owners="2"> 3
      <memory storage="OFF_HEAP" 4
              max-size="<maximum_size_in_bytes>" 5
              when-full="REMOVE" /> 6
      <partition-handling when-split="ALLOW_READ_WRITES" 7
                          merge-policy="REMOVE_ALL"/> 8
    </distributed-cache>
  </cache-container>
</infinispan>
1
캐시 인스턴스의 이름을 "default"로 지정합니다.
2
클러스터 전체에서 데이터를 저장하기 위해 동기 배포를 사용합니다.
3
클러스터의 각 캐시 항목의 복제본 두 개를 구성합니다.
4
캐시 항목을 기본 메모리(off-heap)에 바이트로 저장합니다.
5
데이터 컨테이너의 최대 크기를 바이트 단위로 정의합니다. Data Grid Operator는 노드를 생성할 때 최대 크기를 계산합니다.
6
캐시 항목을 제거하여 데이터 컨테이너의 크기를 제어합니다. Data Grid Operator가 항목을 제거하는 대신 메모리 사용량이 증가할 때 노드를 추가하도록 자동 스케일링을 활성화할 수 있습니다.
7
세그먼트 소유자가 다른 파티션에 있는 경우에도 캐시 항목에 대한 읽기 및 쓰기 작업을 허용하는 충돌 해결 전략의 이름을 지정합니다.
8
Data Grid가 충돌을 감지할 때 캐시에서 항목을 제거하는 병합 정책을 지정합니다.

11장. Prometheus를 사용하여 데이터 그리드 모니터링

Data Grid는 Prometheus에 통계 및 이벤트를 제공하는 지표 끝점을 노출합니다.

11.1. Prometheus 서비스 모니터 생성

Data Grid 클러스터를 모니터링하도록 Prometheus를 구성하는 서비스 모니터 인스턴스를 정의합니다.

사전 요구 사항

  • OpenShift 클러스터에 Prometheus 스택을 설정합니다.

프로세스

  1. Prometheus가 Data Grid 클러스터로 인증할 수 있도록 Data Grid 인증 정보가 포함된 인증 보안을 생성합니다.

    apiVersion: v1
    stringData:
      username: developer 1
      password: dIRs5cAAsHIeeRIL 2
    kind: Secret
    metadata:
      name: basic-auth
    type: Opaque
    1
    애플리케이션 사용자를 지정합니다. Developer 는 기본값입니다.
    2
    해당 암호를 지정합니다.
  2. Prometheus 네임스페이스에 인증 보안을 추가합니다.

    $ oc apply -f basic-auth.yaml
  3. Data Grid 클러스터를 모니터링하도록 Prometheus를 구성하는 서비스 모니터를 생성합니다.

    apiVersion: monitoring.coreos.com/v1
    kind: ServiceMonitor
    metadata:
      labels:
        k8s-app: prometheus
      name: datagrid-monitoring 1
      namespace: infinispan-monitoring 2
    spec:
      endpoints:
        - targetPort: 11222 3
          path: /metrics 4
          honorLabels: true
          basicAuth:
            username:
              key: username
              name: basic-auth 5
            password:
              key: password
              name: basic-auth
          interval: 30s
          scrapeTimeout: 10s
          scheme: https 6
          tlsConfig:
            insecureSkipVerify: true
            serverName: example-infinispan 7
      namespaceSelector:
        matchNames:
          - infinispan 8
      selector:
        matchLabels:
          app: infinispan-service
          clusterName: example-infinispan 9
    1
    서비스 모니터 인스턴스의 이름을 지정합니다.
    2
    Prometheus 스택의 네임스페이스를 지정합니다.
    3
    Data Grid 메트릭 끝점에 대해 11222 포트를 설정합니다.
    4
    Data Grid가 메트릭을 표시하는 경로를 설정합니다.
    5
    Data Grid 자격 증명을 사용하여 인증 보안을 지정합니다.
    6
    데이터 그리드 클러스터에서 끝점 암호화를 사용하도록 지정합니다.
    7
    Data Grid 암호화를 위한 TLS 인증서의 CN(일반 이름)을 지정합니다. OpenShift 서비스 인증서를 사용하는 경우 CN은 Data Grid 클러스터의 metadata.name 리소스와 일치합니다.
    8
    Data Grid 클러스터의 네임스페이스를 지정합니다.
    9
    Data Grid 클러스터의 이름을 지정합니다.
  4. Prometheus 네임스페이스에 서비스 모니터 인스턴스를 추가합니다.

    $ oc apply -f service-monitor.yaml

12장. anti-Affinity를 사용하여 가용성 보장

Kubernetes에는 단일 장애 지점으로부터 워크로드를 보호하는 유사성 방지 기능이 포함되어 있습니다.

12.1. 유사성 방지 전략

클러스터의 각 Data Grid 노드는 클러스터의 OpenShift 노드에서 실행되는 Pod에서 실행됩니다. 각 Red Hat OpenShift 노드는 물리적 호스트 시스템에서 실행됩니다. 유사성 방지는 OpenShift 노드에 Data Grid 노드를 배포하여 작동하므로 하드웨어 오류가 발생한 경우에도 데이터 그리드 클러스터를 계속 사용할 수 있습니다.

Data Grid Operator는 두 가지 유사성 방지 전략을 제공합니다.

kubernetes.io/hostname
Data Grid 복제본 포드는 다른 OpenShift 노드에 예약됩니다.
topology.kubernetes.io/zone
Data Grid 복제본 포드는 여러 영역에 예약됩니다.
내결함성

유사성 방지 전략은 다양한 방식으로 클러스터 가용성을 보장합니다.

참고

다음 섹션의 공식은 OpenShift 노드 또는 영역의 수가 Data Grid 노드 수보다 큰 경우에만 적용됩니다.

다른 OpenShift 노드에서 포드 예약

다음과 같은 캐시 유형에 대해 x 노드 실패의 허용을 제공합니다.

  • replicated: x = spec.replicas - 1
  • 분산: x = num_owners - 1

여러 영역에서 Pod 예약

다음과 같은 캐시 유형에 대해 x 영역이 있는 경우 x 영역 실패의 허용을 제공합니다.

  • replicated: x = spec.replicas - 1
  • 분산: x = num_owners - 1
참고
spec.replicas
각 Data Grid 클러스터에서 Pod 수를 정의합니다.
num_owners
캐시의 각 항목에 대한 복제본 수를 정의하는 캐시 구성 속성입니다.

12.2. 유사성 방지 구성

OpenShift에서 Data Grid 클러스터의 Pod를 예약하여 가용성을 보장합니다.

프로세스

  1. Infinispan CR에 spec.affinity 블록을 추가합니다.
  2. 필요에 따라 유사성 방지 전략을 구성합니다.
  3. Infinispan CR을 적용합니다.

추가 리소스

12.3. 유사성 전략 구성

Infinispan CR에서 유사성 방지 전략을 구성하여 OpenShift에서 Data Grid 복제본 Pod를 예약하는 위치를 제어합니다.

다른 OpenShift 노드에 Pod 예약

다음은 Infinispan CR에서 spec.affinity 필드를 구성하지 않는 경우 Data Grid Operator가 사용하는 유사성 방지 전략입니다.

spec:
  affinity:
    podAntiAffinity:
      preferredDuringSchedulingIgnoredDuringExecution:
      - weight: 100 1
        podAffinityTerm:
          labelSelector:
            matchLabels:
              app: infinispan-pod
              clusterName: <cluster_name>
              infinispan_cr: <cluster_name>
          topologyKey: "kubernetes.io/hostname" 2
1
hostname 전략을 가장 선호하는 것으로 설정합니다.
2
다른 OpenShift 노드에서 Data Grid 복제본 포드를 예약합니다.

다른 노드 필요

spec:
  affinity:
    podAntiAffinity:
      requiredDuringSchedulingIgnoredDuringExecution: 1
      - labelSelector:
          matchLabels:
            app: infinispan-pod
            clusterName: <cluster_name>
            infinispan_cr: <cluster_name>
        topologyKey: "topology.kubernetes.io/hostname"

1
사용 가능한 다른 노드가 없는 경우 OpenShift는 Data Grid Pod를 예약하지 않습니다.
참고

다른 OpenShift 노드에서 Data Grid 복제본 포드를 예약하려면 사용 가능한 OpenShift 노드 수가 spec.replicas 값보다 커야 합니다.

여러 OpenShift 영역에서 Pod 예약

다음 예제에서는 Pod를 예약할 때 여러 영역을 선호합니다.

spec:
  affinity:
    podAntiAffinity:
      preferredDuringSchedulingIgnoredDuringExecution:
      - weight: 100 1
        podAffinityTerm:
          labelSelector:
            matchLabels:
              app: infinispan-pod
              clusterName: <cluster_name>
              infinispan_cr: <cluster_name>
          topologyKey: "topology.kubernetes.io/zone" 2
      - weight: 90 3
        podAffinityTerm:
          labelSelector:
            matchLabels:
              app: infinispan-pod
              clusterName: <cluster_name>
              infinispan_cr: <cluster_name>
          topologyKey: "kubernetes.io/hostname" 4
1
영역 전략을 가장 선호하는 것으로 설정합니다.
2
여러 영역에서 Data Grid 복제본 Pod를 예약합니다.
3
hostname 전략을 다음과 같이 설정합니다.
4
영역 간에 예약할 수 없는 경우 다른 OpenShift 노드에서 Data Grid 복제본 포드를 예약합니다.

여러 영역 필요

spec:
  affinity:
    podAntiAffinity:
      requiredDuringSchedulingIgnoredDuringExecution: 1
      - labelSelector:
          matchLabels:
            app: infinispan-pod
            clusterName: <cluster_name>
            infinispan_cr: <cluster_name>
        topologyKey: "topology.kubernetes.io/zone"

1
Data Grid 복제본 Pod를 예약하는 경우에만 영역 전략을 사용합니다.

13장. 데이터 그리드 로그 모니터링

로깅 카테고리를 다른 메시지 수준으로 설정하여 데이터 그리드 클러스터를 모니터링, 디버그 및 해결합니다.

13.1. 데이터 그리드 로깅 구성

프로세스

  1. Infinispan CR에서 spec.logging 을 사용하여 로깅 구성을 지정한 다음 변경 사항을 적용합니다.

    spec:
      ...
      logging: 1
        categories: 2
          org.infinispan: debug 3
          org.jgroups: debug
    1
    데이터 그리드 로깅을 구성합니다.
    2
    로깅 카테고리 추가.
    3
    로깅 카테고리 및 수준의 이름입니다.
    참고

    루트 로깅 카테고리는 org.infinispan 이며 기본적으로 INFO 입니다.

  2. 필요에 따라 Data Grid 노드에서 로그를 검색합니다.

    $ oc logs -f $POD_NAME

13.2. 로그 수준

로그 수준은 메시지의 특성과 심각도를 나타냅니다.

로그 수준설명

trace

애플리케이션 실행 상태에 대한 자세한 정보를 제공합니다. 이는 가장 자세한 로그 수준입니다.

debug

개별 요청 또는 작업의 진행 상황을 나타냅니다.

info

라이프사이클 이벤트를 포함하여 애플리케이션의 전반적인 진행 상황을 나타냅니다.

warn

오류 또는 성능이 저하될 수 있는 상황을 나타냅니다.

error

작업 또는 활동이 성공하지 못하지만 애플리케이션이 실행되지 않도록 방지하는 오류 조건을 나타냅니다.

14장. reference

Data Grid Operator를 사용하여 생성하는 Data Grid 서비스 및 클러스터에 대한 정보를 찾습니다.

14.1. 네트워크 서비스

내부 서비스

  • Data Grid 노드가 서로를 검색하고 클러스터를 형성하도록 허용합니다.
  • 동일한 OpenShift 네임스페이스에 있는 클라이언트에서 Data Grid 엔드포인트에 대한 액세스를 제공합니다.
Service포트프로토콜설명

<cluster_name>

11222

TCP

데이터 그리드 엔드포인트에 대한 내부 액세스

<cluster_name>-ping

8888

TCP

클러스터 검색

외부 서비스

OpenShift 외부의 클라이언트 또는 다른 네임스페이스에서 Data Grid 엔드포인트에 대한 액세스를 제공합니다.

참고

Data Grid Operator를 사용하여 외부 서비스를 생성해야 합니다. 기본적으로 사용할 수 없습니다.

Service포트프로토콜설명

<cluster_name>-external

11222

TCP

데이터 그리드 엔드포인트에 대한 외부 액세스.

사이트 간 서비스

Data Grid가 서로 다른 위치에 있는 클러스터 간에 데이터를 백업할 수 있도록 합니다.

Service포트프로토콜설명

<cluster_name>-site

7900

TCP

교차 사이트 통신을 위한 Cryostat RELAY2 채널.

법적 공지

Copyright © 2023 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.
Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

© 2024 Red Hat, Inc.