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.)