Thursday, November 21, 2024

Triển khai Redis Cluster trên Kubernetes Cluster

-

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.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

4,956FansLike
256FollowersFollow
223SubscribersSubscribe
spot_img

Related Stories