Redis: Kubernetes에서 마스터 복제 실행


임무는 Kubernetes 클러스터에서 Redis 인스턴스를 시작하는 것입니다.
마스터 종속 복제 설정 및 Sentinel을 사용하여 모니터링 및 페일오버 작업을 수행합니다.
자세한 내용은 Redis: replication, part 2 — Master-Slave replication, and Redis Sentinel 게시물을 참조하십시오.

Redis 클러스터 및 Redis 복제


Redis: replication, part 1 — an overview. Replication vs Sharding. Sentinel vs Cluster. Redis topology.Choose between Redis Helm Chart and Redis Cluster Helm Chart 참조
요컨대

  • 복제품 — 읽기 및 쓰기 작업을 수행하는 Redis 기본 인스턴스를 포함하고 읽기 전용 작업을 제공하는 Redis 종속 인스턴스로 데이터를 복사합니다.이 기간 동안 주약이 실패하면 주약을 올릴 수 있다.

  • 족족 — 당신의 Redis가 가지고 있는 데이터가 서버의 RAM을 초과할 때 느낌을 가져야 합니다.집단은 Sharding 데이터를 요청하는 클라이언트가 이 데이터를 저장하는 노드로 리디렉션됩니다.
  • Kubernetes에서 Redis를 실행하는 방법


    이 임무를 어떻게 집행하는지 봅시다 — Kubernetes 클러스터에서 복제된 Redis를 실행합니다.
  • 수동 설정 —  참조 How to Create a Primary-Replica Redis Cluster in Kubernetes
  • Redis 운영자  —  redis-operator
  • Redis 클러스터의 키 맵  — https://bitnami.com/stack/redis-cluster
  • Redis 마스터 복제가 있는 Helm  — https://bitnami.com/stack/redis(이 글에 대한 우리의 선택)
  • 현재 상황에서 우리는 데이터의 지속성을 걱정할 필요가 없다. 왜냐하면 우리의 Redis는 캐시 서비스로 사용될 것이기 때문에 우리는 필요하지 않다Kubernetes PersistentVolume.

    키맵 배치


    우선, 우리는 도표에서 Redis 서비스를 실행하고 간단명료하게 본 다음에 사용할 수 있는 서비스parameters를 계속 볼 것이다.
    투구에 Bitnami 저장소를 추가하려면:
    $ helm repo add bitnami https://charts.bitnami.com/bitnami
    “bitnami” has been added to your repositories
    
    Redis 차트 배포:
    $ helm install backend-redis bitnami/redis
    NAME: backend-redis
    LAST DEPLOYED: Tue Sep 22 14:48:02 2020
    NAMESPACE: default
    STATUS: deployed
    REVISION: 1
    TEST SUITE: None
    NOTES:
    
    \*\* Please be patient while the chart is being deployed \*\*
    
    Redis can be accessed via port 6379 on the following DNS names from within your cluster:
    
    backend-redis-master.default.svc.cluster.local for read/write operations
    backend-redis-slave.default.svc.cluster.local for read-only operations
    
    To get your password run:
    
    export REDIS\_PASSWORD=$(kubectl get secret — namespace default backend-redis -o jsonpath=”{.data.redis-password}” | base64 — decode)
    
    To connect to your Redis server:
    
    1. Run a Redis pod that you can use as a client:
    
    kubectl run — namespace default backend-redis-client — rm — tty -i — restart=’Never’ \
     — env REDIS\_PASSWORD=$REDIS\_PASSWORD \
     — image docker.io/bitnami/redis:6.0.8-debian-10-r0 — bash
    
    2. Connect using the Redis CLI:
    
    redis-cli -h backend-redis-master -a $REDIS\_PASSWORD
    redis-cli -h backend-redis-slave -a $REDIS\_PASSWORD
    
    To connect to your database from outside the cluster execute the following commands:
    
    kubectl port-forward — namespace default svc/backend-redis-master 6379:6379 &
    redis-cli -h 127.0.0.1 -p 6379 -a $REDIS\_PASSWORD
    
    차트 배포 중에 생성된 암호 가져오기:
    $ kubectl get secret — namespace default backend-redis -o jsonpath=”{.data.redis-password}” | base64 — decode
    TySS43UhAW
    
    실행port-forward Redis 기본 인스턴스에 연결:
    $ kubectl port-forward — namespace default svc/backend-redis-master 6379:6379
    Forwarding from [::1]:6379 -> 6379
    Forwarding from 127.0.0.1:6379 -> 6379
    
    연결:
    $ redis-cli -h 127.0.0.1 -p 6379 -a TySS43UhAW
    Warning: Using a password with ‘-a’ or ‘-u’ option on the command line interface may not be safe.
    127.0.0.1:6379>
    
    "그게 작용했어!"(с)
    여기에 어떤 서비스가 있는지 확인하십시오.
    $ kk get svc redis-service
    NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEredis-service NodePort 172.20.119.242 <none> 6379:32445/TCP 117d
    
    그것의 유형은 NodePort 이고, 우리는 하나LoadBalancer가 필요하다.
    또한 Redis Sentinel이 필요합니다. 기본적으로 닫혀 있습니다.

    sentinel.enabled Enable sentinel containers false


    알겠습니다. Sentinel을 사용하고 부하 평형기를 설정하는 옵션으로 넘어가겠습니다.

    Redis 옵션


    유용한 옵션 목록을 만듭니다.
    나로서는 다음과 같다.
  • 전 세계.redis.비밀번호
  • 지표:
  • 지표.사용 가능
  • 지표.serviceMonitor.사용 가능
  • 지표.serviceMonitor.네임스페이스
  • 지속:
  • 선장.꾸준하다사용 가능
  • 종기.꾸준하다사용 가능
  • 서비스
  • 선장.서비스유형
  • 선장.서비스설명
  • 종기.서비스유형
  • 종기.서비스설명
  • 보초병
  • 보초병.사용 가능
  • 보초병.서비스유형 — LBso가 필요한 고객은 운영/종속
  • 보초병.서비스설명
  • 필요한 매개변수를 유지하기 위해 새 파일~/Temp/redis-opts.yaml을 생성합니다.
    global:
      redis:
        password: "blablacar"
    
    metrics:
      enabled: true
      serviceMonitor:
        enabled: true
        namespace: "monitoring"
    
    master:
      persistence:
        enabled: false
      service:
        type: LoadBalancer
        annotations: 
          kubernetes.io/ingress.class: alb
          alb.ingress.kubernetes.io/scheme: internal 
    
    slave:
      persistence:
        enabled: false
      service:
        type: LoadBalancer
        annotations:
          kubernetes.io/ingress.class: alb
          alb.ingress.kubernetes.io/scheme: internal
    
    sentinel:
      enabled: true
      service:
        type: LoadBalancer
        annotations: 
          kubernetes.io/ingress.class: alb
          alb.ingress.kubernetes.io/scheme: internal
    
    -f를 사용하여 배포를 업데이트하여 매개변수 파일을 지정합니다.
    $ helm upgrade — install backend-redis bitnami/redis -f ~/Temp/redis-opts.yaml
    
    암호 확인:
    $ kubectl get secret — namespace default backend-redis -o jsonpath=”{.data.redis-password}” | base64 — decode
    blablacar
    
    및 로드 밸런서:
    $ kk get svc -l app=redis
    NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
    
    backend-redis LoadBalancer 172.20.204.235 af5e1294a4a73426692c7e25f7bb947d-915967.us-east-2.elb.amazonaws.com 
    6379:30647/TCP,26379:32523/TCP 80s
    
    backend-redis-headless ClusterIP None <none> 6379/TCP,26379/TCP 80s
    
    backend-redis-metrics ClusterIP 172.20.66.2 <none> 9121/TCP 80s
    
    연결:
    $ redis-cli -h af5e1294a4a73426692c7e25f7bb947d-915967.us-east-2.elb.amazonaws.com -a blablacar
    Warning: Using a password with ‘-a’ or ‘-u’ option on the command line interface may not be safe.\
    af5e1294a4a73426692c7e25f7bb947d-915967.us-east-2.elb.amazonaws.com:6379>
    
    네, 좋아요.
    그런데 왜 Load Balancer가 내부로 설정되었을 때 공공이었을까요?
    이것은 alb.ingress.kubernetes.io/scheme: internal ALB Ingress Controller 에 사용되고, 도표는 LoadBalancer 형식을 사용하여 간단한 Kubernetes 서비스를 만들었기 때문이다. 이 서비스는 AWS 클래식 부하 평형기를 만들 것이다.
    문서 읽기 —  https://kubernetes.io/docs/concepts/services-networking/service/#loadbalancer 및 메모 업데이트: 대체 alb.ingress.kubernetes.io/scheme: internal - 지정 service.beta.kubernetes.io/aws-load-balancer-internal: "true":
    ...
    master:
      service:
        type: LoadBalancer
        annotations: 
          service.beta.kubernetes.io/aws-load-balancer-internal: "true"
    
    slave:
      service:
        type: LoadBalancer
        annotations:
          service.beta.kubernetes.io/aws-load-balancer-internal: "true"
    
    sentinel:
      enabled: true
      service:
        type: LoadBalancer
        annotations: 
          service.beta.kubernetes.io/aws-load-balancer-internal: "true"
    
    배포 업데이트 및 재점검:
    $ kk get svc -l app=redis
    NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
    
    backend-redis LoadBalancer 172.20.178.72 internal-\*\*\*-1786016015.us-east-2.elb.amazonaws.com 6379:31192/TCP,26379:32239/TCP 17s\
    
    backend-redis-headless ClusterIP None <none> 6379/TCP,26379/TCP 17s
    
    backend-redis-metrics ClusterIP 172.20.35.163 <none> 9121/TCP 17s
    
    이제 쓰기 작업 — Redis 마스터 인스턴스에서 서비스를 제공해야 합니다.
    $ admin@bttrm-dev-app-1:~$ redis-cli -h internal-\*\*\*-1786016015.us-east-2.elb.amazonaws.com -p 6379 -a blablacar SET testkey testvalue
    OK
    
    및 읽기 작업:
    admin@bttrm-dev-app-1:~$ redis-cli -h internal-\*\*\*-1786016015.us-east-2.elb.amazonaws.com -p 6379 -a blablacar GET testkey
    “testvalue”
    
    복제 상태:
    admin@bttrm-dev-app-1:~$ redis-cli -h internal-\*\*\*-1786016015.us-east-2.elb.amazonaws.com -p 6379 -a blablacar info replication
    Replication
    role:master
    connected\_slaves:1
    slave0:ip=10.3.50.119,port=6379,state=online,offset=144165,lag=1
    …
    
    및 보초 상태:
    admin@bttrm-dev-app-1:~$ redis-cli -h internal-\*\*\*-1786016015.us-east-2.elb.amazonaws.com -p 26379 -a blablacar info sentinel
    Sentinel
    sentinel\_masters:1
    sentinel\_tilt:0
    sentinel\_running\_scripts:0
    sentinel\_scripts\_queue\_length:0
    sentinel\_simulate\_failure\_flags:0
    master0:name=mymaster,status=ok,address=10.3.33.107:6379,slaves=1,sentinels=2
    
    Sentinel을 통해 호스트 주소를 가져온 후 쓰기 작업을 수행해야 하지만
    admin@bttrm-dev-app-1:~$ redis-cli -h internal-\*\*\*-1786016015.us-east-2.elb.amazonaws.com -p 26379 -a blablacar sentinel get-master-addr-by-name mymaster
    1) “10.3.33.107”
    r2) “6379”
    
    검사documentation.
    완성
    최초 발표RTFM: Linux, DevOps, and system administration.

    좋은 웹페이지 즐겨찾기