Helm으로 k8s에 Redis 추가하기
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update
helm에서 redis repo을 가지고 온다.
helm install my-redis bitnami/redis --set auth.password=my-password
이렇게 해주면 비번까지 설정할 수 있다.
redis에 중요한 데이터를 넣지는 않겠지만 그래도 데이터베이스 비번 설정은 중요하니 넣어주자.
kubectl exec -it [pod 이름] -- redis-cli
redis에 접속하자.
ping이라도 해보려고 했더니 (error) NOAUTH Authentication required가 나온다.
kubectl exec -it [pod 이름] -- redis-cli -a [설정한 비번]
비번을 뒤에 넣어줘야지 ping을 할 수 있다.
NodeJS에서 Redis 연결하기
const client = redis.createClient({
url: 'redis://[redis service 이름].default.svc.cluster.local:6379',
password:[비밀번호],
retry_strategy: function(options) {
return new Error('No retry, as only one attempt is allowed');
}
});
redis를 nodejs에서 사용할 경우 host와 port을 지정해줘야 한다.
mongodb랑 다른 점인데 k8s에서 redis 내부 통신을 해주기 위해서는 [service-name].[namespace-name].svc.cluster.local로 해줘야 한다.
service 이름을 모르겠다면 kubectl get svc 해주면 되고 나처럼 helm으로 했다면 redis-master일거다.
그럼 redis-master.svc.cluster.local을 적어주면 된다 👍
그리고 host, port로 했는데 안 되고 url로 해야한다.
추가로 retry_strategy에 나와 같이 해주면 연결 실패시 재연결을 시도하지 않는다.
+) hset을 쓰고 싶다면
Redis는 key-value 이렇게가 한 쌍이기 때문에 여러개를 한 번에 넣고 싶다면 hset을 써야 한다.
client.hset(`code:${id}`,
'num', 'ber', (err, res) => {
if (err) {
...
} else {
...
}
});
이렇게 코드를 만들었는데 TypeError: client.hset is not a function가 나왔다.
client.hSet(`code:${id}`, 'num', 'ber');
Redis 공식문서를 참고해서 수정하니 잘 됐다.
https://redis.io/docs/connect/clients/nodejs/
잘 들어갔는지 확인하고 싶다면 터미널에서 Redis에 접속하고 HGETALL [key이름]을 넣으면 된다.
+) 몇 초 후 자동으로 필드 삭제하고 싶다면
client.expire(`code:${id}`, TTL);
TTL은 Time-To-Live로 300을 넣으면 5분을 의미한다.
60을 넣으면 1분이다.
fin.
'Back Side > etc' 카테고리의 다른 글
[zipkin] TypeError: fetchImpl is not a function fix (0) | 2024.01.17 |
---|---|
prometheus Error: connect ECONNREFUSED 127.0.0.1:9090 fix (0) | 2024.01.09 |
MSA 서비스 시리즈 1탄 : 서버간 오류 어떻게 해야할까 🤔 (3) | 2023.09.15 |
모니터링 시스템 구축하기 (1) prometheus (0) | 2023.07.06 |
눈물겨운도커 이미지 사이즈 줄이기 🥹 #1 Azure CLI 사용하기 (0) | 2023.05.09 |
댓글