k8s部署redis哨兵的實現
一、準備redis鏡像
Dockerfile
FROM redis:6.0 MAINTAINER 運維@小兵 COPY *.conf /opt/conf/ COPY run.sh /opt/run.sh RUN apt update -y;apt-get install vim net-tools -y;apt-get clean && \ chmod +x /opt/run.sh CMD /opt/run.sh
redis配置文件redis.conf
#綁定到哪臺機器,0.0.0.0表示允許所有主機訪問 bind 0.0.0.0 #redis3.2版本之後加入的特性,yes開啟後,如果沒有配置bind則默認隻允許127.0.0.1訪問 protected-mode yes #對外暴露的訪問端口 port 6379 #登錄密碼 requirepass devops #主從同步認證密碼 masterauth devops #三次握手的時候server端接收到客戶端 ack確認號之後的隊列值 tcp-backlog 511 #服務端與客戶端連接超時時間,0表示永不超時 timeout 0 #連接redis的時候的密碼 hello #requirepass hello #tcp 保持會話時間是300s tcp-keepalive 300 #redis是否以守護進程運行,如果是,會生成pid daemonize yes supervised no #pid文件路徑 pidfile /var/run/redis_6379.pid #日志級別 loglevel notice logfile /var/log/redis.log #默認redis有幾個db庫 databases 32 #每間隔900秒,如果一個鍵值發生變化就觸發快照機制 save 900 1 save 300 10 save 60 10000 #快照出錯時,是否禁止redis寫入 stop-writes-on-bgsave-error no #持久化到rdb文件時,是否壓縮文件 rdbcompression no #持久化到rdb文件是,是否RC64開啟驗證 rdbchecksum no #持久化輸出的時候,rdb文件命名 dbfilename dump.rdb #持久化文件路徑 slave-serve-stale-data yes slave-read-only yes repl-diskless-sync no repl-diskless-sync-delay 5 repl-disable-tcp-nodelay no slave-priority 100 #是否開啟aof備份 appendonly yes #aof備份文件名稱 appendfilename "appendonly.aof" appendfsync everysec no-appendfsync-on-rewrite no auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb aof-load-truncated yes lua-time-limit 5000 slowlog-log-slower-than 10000 slowlog-max-len 128 latency-monitor-threshold 0 notify-keyspace-events "" hash-max-ziplist-entries 512 hash-max-ziplist-value 64 list-max-ziplist-size -2 list-compress-depth 0 set-max-intset-entries 512 zset-max-ziplist-entries 128 zset-max-ziplist-value 64 hll-sparse-max-bytes 3000 activerehashing yes client-output-buffer-limit normal 0 0 0 client-output-buffer-limit slave 256mb 64mb 60 client-output-buffer-limit pubsub 32mb 8mb 60 hz 10 aof-rewrite-incremental-fsync yes #客戶端最大連接數 maxclients 20000 lazyfree-lazy-eviction yes lazyfree-lazy-expire yes lazyfree-lazy-server-del yes slave-lazy-flush yes
redis哨兵配置文件sentinel.conf
# 哨兵sentinel實例運行的端口 默認26379 port 26379 # 哨兵sentinel的工作目錄 dir "/tmp" sentinel deny-scripts-reconfig yes sentinel monitor mymaster redis-0.redis 6379 2 sentinel auth-pass mymaster devops sentinel down-after-milliseconds mymaster 5000 sentinel failover-timeout mymaster 15000 # 設定5秒內沒有響應,說明服務器掛瞭,需要將配置放在sentinel monitor master 127.0.0.1 6379 下面 sentinel parallel-syncs mymaster 2 # 設定15秒內master沒有活起來,就重新選舉主 sentinel config-epoch mymaster 3 #.表示如果master重新選出來後,其它slave節點能同時並行從新master同步緩存的臺數有多少個,顯然該值越大,所有slave節點完成同步切換的整體速度越快,但如 果此時正好有人在訪問這些slave,可能造#成讀取失敗,影響面會更廣。最保定的設置為1,隻同一時間,隻能有一臺幹這件事,這樣其它slave還能繼續服務,但是所 有slave全部完成緩存更新同步的進程將變慢。 sentinel leader-epoch mymaster 3
啟動腳本run.sh
#!/bin/bash pod_seq=$(echo $POD_NAME | awk -F"-" '{print $2}') if [[ ${pod_seq} -ne 0 ]];then #為從機 sed -i '/^slaveof /d' /opt/conf/redis.conf echo "slaveof redis-0.redis 6379" >> /opt/conf/redis.conf #redis-0.redis代表第一個redis的訪問地址 fi /usr/local/bin/redis-server /opt/conf/redis.conf sleep 15 #如果redis-0沒起來,它裡面的哨兵也起不來,等待一段時間再啟動哨兵 /usr/local/bin/redis-sentinel /opt/conf/sentinel.conf & tail -f /var/log/redis.log
構建鏡像
docker build --pull -t 192.168.1.2/common/redis_sentinel:6.0 . docker push 192.168.1.2/common/redis_sentinel:6.0
二、準備k8s yml—redis-sentinel.yml
StatefulSet相關信息可以參考:K8S之StatefulSet有狀態服務
apiVersion: apps/v1 kind: StatefulSet metadata: name: redis namespace: redis-ns spec: serviceName: redis selector: matchLabels: app: redis replicas: 3 template: metadata: labels: app: redis spec: nodeSelector: productLine: redis-ns area: wuhan restartPolicy: Always containers: - name: redis image: 192.168.1.2/common/redis_sentinel:6.0 imagePullPolicy: Always env: - name: POD_NAME valueFrom: fieldRef: fieldPath: metadata.name livenessProbe: tcpSocket: port: 6379 initialDelaySeconds: 3 periodSeconds: 5 readinessProbe: tcpSocket: port: 6379 initialDelaySeconds: 3 periodSeconds: 5 ports: - containerPort: 6379 resources: requests: memory: 256Mi cpu: 50m limits: memory: 256Mi cpu: 200m --- apiVersion: v1 kind: Service metadata: name: redis namespace: redis-ns spec: type: NodePort ports: - name: redis port: 6379 targetPort: 6379 nodePort: 26380 selector: app: redis
kubectl apply -f redis-sentinel.yml
會創建三個redis pod
kubectl get pod -n redis-ns
三、查看redis哨兵信息
kubectl exec -it redis-0 -n redis-ns -- bash root@redis-0:/data# redis-cli 127.0.0.1:6379> AUTH devops 127.0.0.1:6379> info Replication #查看主從信息
127.0.0.1:6379> exit root@redis-0:/data# redis-cli -p 26379 127.0.0.1:26379> info sentinel #查看哨兵信息
四、連接redis哨兵
k8s其它命令空間的java進程連接redis哨兵
127.0.0.1:6379> exit root@redis-0:/data# redis-cli -p 26379 127.0.0.1:26379> info sentinel #查看哨兵信息
客戶端連接redis
node節點IP:26380 密碼:devops
到此這篇關於k8s部署redis哨兵的實現的文章就介紹到這瞭,更多相關k8s部署redis哨兵 內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- 解析高可用Redis服務架構分析與搭建方案
- 使用Docker配置redis sentinel哨兵的方法步驟
- Redis 單機安裝和哨兵模式集群安裝的實現
- Redis哨兵模式實現一主二從三哨兵
- Docker下Redis集群(主從+哨兵)安裝配置的實現步驟