Redis: Kubernetes에서 마스터 복제 실행
11497 단어 redistutorialkubernetesdatabase
임무는 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를 실행합니다.
키맵 배치
우선, 우리는 도표에서 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 옵션
유용한 옵션 목록을 만듭니다.
나로서는 다음과 같다.
~/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.
Reference
이 문제에 관하여(Redis: Kubernetes에서 마스터 복제 실행), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/setevoy/redis-running-master-slave-replication-in-kubernetes-1hp6텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)