1. Tổng quan.
Redis Cluster là một phiên bản của Redis, một hệ thống cơ sở dữ liệu key-value trong bộ nhớ, được thiết kế để cung cấp khả năng mở rộng và khả năng chịu lỗi. Redis Cluster cho phép bạn chia dữ liệu của mình thành nhiều node Redis khác nhau và tự động phân phối dữ liệu trên các node này để đảm bảo khả năng chịu lỗi và tăng cường hiệu suất.
Dưới đây là một số đặc điểm quan trọng của Redis Cluster:
- Phân phối dữ liệu: Dữ liệu được phân chia thành nhiều phần và lưu trữ trên các node khác nhau. Điều này giúp tận dụng được tài nguyên của nhiều máy chủ và tăng khả năng lưu trữ dữ liệu.
- Khả năng chịu lỗi: Redis Cluster cung cấp khả năng chịu lỗi bằng cách sao lưu dữ liệu trên nhiều node. Nếu một hoặc vài node gặp sự cố, hệ thống vẫn hoạt động và dữ liệu vẫn có thể truy cập thông qua các node còn lại.
- Auto Sharding: Redis Cluster hỗ trợ chia dữ liệu tự động (auto-sharding), tức là nó sẽ tự động phân phối dữ liệu cho các node dựa trên các key cụ thể. Điều này giúp tối ưu hóa việc sử dụng tài nguyên và cải thiện hiệu suất.
- Quản lý node và thảo luận: Redis Cluster có một quá trình quản lý node tự động và hỗ trợ các quá trình thảo luận giữa các node để đảm bảo sự nhất quán của dữ liệu trong môi trường phân tán.
- Hỗ trợ đọc đa node: Redis Cluster cho phép bạn thực hiện các hoạt động đọc từ nhiều node cùng một lúc, cung cấp hiệu suất đọc tốt hơn cho ứng dụng có nhiều yêu cầu đọc.
Redis Cluster là một lựa chọn tốt cho các ứng dụng cần khả năng mở rộng và chịu lỗi cao trong việc lưu trữ và truy xuất dữ liệu key-value.
2. Cách triển khai.
Bạn có thể sử dụng cú pháp dưới để thêm 1 Helm repo.
helm repo add [repo-name] [repo-address]
Ví dụ dưới đây mình sẽ thêm repo https://charts.bitnami.com/bitnami
và đặt tên cho nó là bitnami.
$ helm repo add bitnami https://charts.bitnami.com/bitnami
"bitnami" has been added to your repositories
Sau khi thêm repo xong bạn hãy cập nhật lại repo này.
$ helm repo update
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "longhorn" chart repository
...Successfully got an update from the "nginx-stable" chart repository
...Successfully got an update from the "bitnami" chart repository
Update Complete. ⎈Happy Helming!⎈
Sử dụng lệnh helm repo list sẽ giúp bạn xem danh sách các repo có trong hệ thống.
$ helm repo list
NAME URL
nginx-stable https://helm.nginx.com/stable
longhorn https://charts.longhorn.io
bitnami https://charts.bitnami.com/bitnami
Tìm kiếm repo của Redis cluster.
$ helm search repo redis
NAME CHART VERSION APP VERSION DESCRIPTION
bitnami/redis 17.15.6 7.2.0 Redis(R) is an open source, advanced key-value ...
bitnami/redis-cluster 8.7.2 7.2.0 Redis(R) is an open source, scalable, distribut...
Tải repo về máy.
helm fetch bitnami/redis-cluster --version=8.7.2
Kiểm tra xem repo đã tải thành công chưa.
$ ls -al *.tgz
-rw-r--r-- 1 root root 106030 Aug 22 02:13 redis-cluster-8.7.2.tgz
Giải nén nó và di chuyển vào thư mục vừa giải nén.
tar -zxvf *.tgz
cd redis-cluster/
Mở file values.yaml và chỉnh sửa một số thông tin như sau:
global:
storageClass: "longhorn"
redis:
password: "Hoanghd164"
namespace: "redis-cluster" <- tất cả các thông tin namespace
Tạo namespace.
kubectl create namespace redis-cluster
Triển khai nó bằng lệnh helm.
$ helm upgrade -i redis-cluster-server /home/redis-cluster -f /home/redis-cluster/values.yaml -n redis-cluster
Release "redis-cluster-server" does not exist. Installing it now.
NAME: redis-cluster-server
LAST DEPLOYED: Tue Aug 22 02:18:47 2023
NAMESPACE: redis-cluster
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
CHART NAME: redis-cluster
CHART VERSION: 8.7.2
APP VERSION: 7.2.0** Please be patient while the chart is being deployed **
To get your password run:
export REDIS_PASSWORD=$(kubectl get secret --namespace "redis-cluster" redis-cluster-server -o jsonpath="{.data.redis-password}" | base64 -d)
You have deployed a Redis® Cluster accessible only from within you Kubernetes Cluster.INFO: The Job to create the cluster will be created.To connect to your Redis® cluster:
1. Run a Redis® pod that you can use as a client:
kubectl run --namespace redis-cluster redis-cluster-server-client --rm --tty -i --restart='Never' \
--env REDIS_PASSWORD=$REDIS_PASSWORD \
--image docker.io/bitnami/redis-cluster:7.2.0-debian-11-r3 -- bash
2. Connect using the Redis® CLI:
redis-cli -c -h redis-cluster-server -a $REDIS_PASSWORD
Xác nhận các pod và dịch vụ đã tạo thành công.
$ kubectl get pod,svc,pvc -n redis-cluster
NAME READY STATUS RESTARTS AGE
pod/redis-cluster-server-0 1/1 Running 1 (2m44s ago) 4m5s
pod/redis-cluster-server-1 1/1 Running 0 4m5s
pod/redis-cluster-server-2 1/1 Running 1 (3m36s ago) 4m5s
pod/redis-cluster-server-3 1/1 Running 0 4m5s
pod/redis-cluster-server-4 1/1 Running 0 4m5s
pod/redis-cluster-server-5 1/1 Running 2 (3m25s ago) 4m4s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/redis-cluster-server ClusterIP 10.102.98.227 <none> 6379/TCP 4m5s
service/redis-cluster-server-headless ClusterIP None <none> 6379/TCP,16379/TCP 4m5s
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
persistentvolumeclaim/redis-data-redis-cluster-server-0 Bound pvc-a5bd72c5-9eba-4ceb-9c48-358721957a8d 8Gi RWO longhorn 4m5s
persistentvolumeclaim/redis-data-redis-cluster-server-1 Bound pvc-c70d2818-2ee6-422c-94b8-2728197fff1b 8Gi RWO longhorn 4m5s
persistentvolumeclaim/redis-data-redis-cluster-server-2 Bound pvc-dc567a3d-9379-496b-83a3-e1a73fb76ecd 8Gi RWO longhorn 4m5s
persistentvolumeclaim/redis-data-redis-cluster-server-3 Bound pvc-e236d650-6b56-4d7a-971b-a1b15e082e2b 8Gi RWO longhorn 4m5s
persistentvolumeclaim/redis-data-redis-cluster-server-4 Bound pvc-36a2aba2-d3d1-4bfd-9597-b44566b9e97d 8Gi RWO longhorn 4m5s
persistentvolumeclaim/redis-data-redis-cluster-server-5 Bound pvc-6bfc0451-1aec-4320-ae57-313eecb01636 8Gi RWO longhorn 4m5s
Sử dụng lệnh Edit để chuyển service sang NodePort.
kubectl edit service/redis-cluster-server -n redis-cluster
Kiểm tra lại type của Service.
$ kubectl get svc -n redis-cluster
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
redis-cluster-server NodePort 10.102.98.227 <none> 6379:32205/TCP 5m9s
redis-cluster-server-headless ClusterIP None <none> 6379/TCP,16379/TCP 5m9
Vậy là xong, kết nối thôi.