helm安裝redis+Sentinel集群搭建


一、redis集群特點

數據 在多個Redis節點之間自動分片

 sentinel特點:

它的主要功能有以下幾點

不時地監控redis是否按照預期良好地運行;
如果發現某個redis節點運行出現狀況,能夠通知另外一個進程(例如它的客戶端);
能夠進行自動切換。當一個master節點不可用時,能夠選舉出master的多個slave(如果有超過一個slave的話)中的一個來作為新的master,其它的slave節點會將它所追隨的master的地址改為被提升為master的slave的新地址。

 sentinel配置文件詳解

參考:https://segmentfault.com/a/1190000002680804

 

主節點down了,從節點選舉機制如下:

  https://blog.csdn.net/tr1912/article/details/81265007

 

二、redis端口

對於每個節點,要使Redis群集正常工作,您需要:

為客戶端提供服務的普通Redis TCP端口,例如6379
集群總線例如:16379(客戶端端口+ 10000

 

三、安裝

  3.1  多台機器 創建pv且大於60g,pv.yaml(ps:不能在一台機器運行所有,因為每個pod都有podAntiAffinity:實現每台機器只能有一個redis)

apiVersion: v1
kind: PersistentVolume
metadata:
  name: data
  labels:
    app: redis-ha #pv和pvc測試過,不需要name和labels識別,調度器會為pvc自動選擇合適容量的pv
spec:
  capacity:
    storage: 60Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: /opt/data

        kubectl create -f pv.yaml

  安裝啟動redis集群

#修改本機path路徑,授權用戶(1000)具備創建目錄權限
helm install --set hostPath.path=/opt  --name=redis-ha stable/redis-ha  

       

      3.2  單機實現redis集群,需要取消affinity

    redis-ha-values-custom.yaml

## Node labels, affinity, and tolerations for pod assignment
## ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#nodeselector
## ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#taints-and-tolerations-beta-feature
## ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity
# Just for local develop environment
affinity: {}

  啟動

helm install --set hostPath.path=/opt  --name=redis-ha -f ./redis-ha-values-custom.yaml stable/redis-ha #通過取消affinity單機實現redis集群 

看看service文件,每個redis通過本svc識別其他redis

apiVersion: v1
kind: Service
metadata:
  labels:
    app: redis-ha
    chart: redis-ha-3.3.3
  name: redis-ha-announce-0
  namespace: default
spec:
  clusterIP: 10.102.130.11
  ports:
  - name: server
    port: 6379
    protocol: TCP
    targetPort: redis - name: sentinel
    port: 26379
   protocol: TCP
targetPort: sentinel
type: ClusterIP
selector:
app: redis-ha
release: redis-ha
statefulset.kubernetes.io/pod-name: redis-ha-server-0

 

 

 四、測試

 kubectl  get svc |grep redis,如下

redis-ha ClusterIP None <none> 6379/TCP,26379/TCP 37m
redis-ha-announce-0 ClusterIP 10.102.130.11 <none> 6379/TCP,26379/TCP 37m  #默認這個為redis主
redis-ha-announce-1 ClusterIP 10.105.223.197 <none> 6379/TCP,26379/TCP 37m
redis-ha-announce-2 ClusterIP 10.106.29.241 <none> 6379/TCP,26379/TCP 37m

 

kubectl  get pod -o wide|grep redis,如下

redis-ha-server-0 2/2 Running 0 41m 10.244.0.11 hostname-test 
redis-ha-server-1 2/2 Running 0 37m 10.244.0.12 hostname-test 
redis-ha-server-2 2/2 Running 0 35m 10.244.0.13 hostname-test

進入pod為redis-ha-server-1,容器為sentinel 
kubectl exec -it redis-ha-server-1 -c sentinel sh
容器里面$ redis-cli  -h  redis-ha-announce-0 -p 26379

 

容器里面$ redis-cli  -h  redis-ha-announce-0 -p 6379

 

 

 

故障轉移實驗

停止主redis:

#1、在主上故障轉移測試,使主down掉
redis-cli -h redis-ha-announce-0 -p 6379 debug segfault

#2、然后進入redis容器或sentinel容器
kubectl exec -it redis-ha-server-2 -c redis sh
kubectl exec -it redis-ha-server-0 -c sentinel sh

#3、容器里面使用redis客戶端連接redis服務端
redis-cli -h redis-ha-announce-1 -p 6379 
redis-cli -h redis-ha-announce-2 -p 6379
#容器里面使用redis客戶端連接Sentinel服務端
redis-cli -h redis-ha-announce-0 -p 26379


#4、redis查看主從狀態
info replication
#sentinel查看狀態 
INFO Sentinel

#5、查看日志
kubectl logs -f  redis-ha-server-0 -c redis
kubectl logs -f  redis-ha-server-1 -c redis
kubectl logs -f  redis-ha-server-2 -c redis

#主前任主上查看redis主從狀態如下,10.106.29.241是第三台redis的ip,說轉換成功了 

 

 

 

 #測試添加一台redis實驗,如下:

   1、修改文件redis-ha-values-upgrade.yaml

replicas: 4
affinity: {}
hostPath:
path:/opt

  2、創建pv4

apiVersion: v1
kind: PersistentVolume
metadata:
      name: data03
spec:
 capacity:
  storage: 10Gi
 accessModes:
  - ReadWriteOnce
 hostPath:
  path: /opt/data03

ps:如果單機部署集群,每個redis的pv的路徑不能相同,否則會報錯 

 

3、升級

helm upgrade -f redis-ha-values-upgrade.yaml redis-ha stable/redis-ha

  4、報錯可以回滾

helm rollback redis-ha 1

 

 

五、刪除

helm ls --all
helm del --purge redis-ha

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM