Redis高可用部署-搭建redis哨兵模式

背景

最近在使用中有遇到redis的哨兵模式,這種模式能夠做到主節(jié)點(diǎn)異常自動(dòng)切換,保證了服務(wù)的高可用,在生產(chǎn)部署使用比較多。為更深入了解相關(guān)模式和配置,以及熟悉和方便問題的排查,在本地部署一套redis服務(wù)。

準(zhǔn)備工作

基礎(chǔ)信息

版本為7.0.0 , 部署方式為docker。

部署

部署主從模式

version: '3'
services:
  master:
    image: redis
    container_name: redis-master
    command: redis-server --requirepass redis_pwd  --masterauth redis_pwd
    ports:
      - 6380:6379
  slave1:
    image: redis
    container_name: redis-slave-1
    ports:
      - 6381:6379
    command:  redis-server --slaveof redis-master 6379 --requirepass redis_pwd --masterauth redis_pwd
  slave2:
    image: redis
    container_name: redis-slave-2
    ports:
      - 6382:6379
    command: redis-server --slaveof redis-master 6379 --requirepass redis_pwd --masterauth redis_pwd

啟動(dòng)后如圖

image.png

部署哨兵

version: '3.7'
services:
  sentinel1:
    image: redis
    container_name: redis-sentinel-1
    restart: always
    ports:
      - 26379:26379
    command: redis-sentinel /usr/local/etc/redis/conf/sentinel1.conf
    volumes:
      # - ./conf1/sentinel1.conf:/usr/local/etc/redis/conf/sentinel.conf
      - ./data1:/data
      - ./conf1:/usr/local/etc/redis/conf
  sentinel2:
    image: redis
    container_name: redis-sentinel-2
    restart: always
    ports:
    - 26380:26379
    command: redis-sentinel /usr/local/etc/redis/conf/sentinel2.conf
    volumes:
      # - ./conf2/sentinel2.conf:/usr/local/etc/redis/conf/sentinel.conf
      - ./data2:/data
      - ./conf2:/usr/local/etc/redis/conf
  sentinel3:
    image: redis
    container_name: redis-sentinel-3
    ports:
      - 26381:26379
    command: redis-sentinel /usr/local/etc/redis/conf/sentinel3.conf
    volumes:
      # - ./conf3/sentinel3.conf:/usr/local/etc/redis/conf/sentinel.conf
      - ./data3:/data
      - ./conf3:/usr/local/etc/redis/conf
networks:
  default:
    external:
      name: redis_default

注意!
哨兵模式在部署的時(shí)候掛載配置文件使用目錄的形式,否則會(huì)有文件無權(quán)修改的警告!

sentinel模式配置文件

//三個(gè)節(jié)點(diǎn)都一致

# 自定義集群名,其中10.80.20.22 為 redis-master 的 "主機(jī)" ip,6379 為 redis-master 的端口,2 為最小投票數(shù)(因?yàn)橛?3 臺(tái) Sentinel 所以可以設(shè)置成 2)
port 26379
dir "/tmp"
sentinel monitor mymaster 10.80.20.22 6380 2
sentinel auth-pass mymaster redis_pwd
sentinel deny-scripts-reconfig yes

#如下是自動(dòng)生成的
# Generated by CONFIG REWRITE
latency-tracking-info-percentiles 50 99 99.9
user default on nopass sanitize-payload ~* &* +@all
sentinel myid a9c271090d6ea265ab42cf63a1655b64eef17a7d
sentinel config-epoch mymaster 0
sentinel leader-epoch mymaster 0
sentinel current-epoch 0

sentinel known-replica mymaster 172.22.0.2 6379

sentinel known-replica mymaster 172.22.0.3 6379

sentinel known-sentinel mymaster 172.21.0.3 26379 69603b62ad821b18a5fae6646ace568ef53d0630

sentinel known-sentinel mymaster 172.21.0.2 26379 b6567ba64e321991b85762a0707c51d173b998e0

注意其中的
sentinel monitor mymaster 10.80.20.22 6380 2
10.80.20.22 是宿主機(jī)的IP,如果配置容器IP,可能導(dǎo)致外部無法訪問。

啟動(dòng)后如圖

image.png

驗(yàn)證

登錄主從

# Replication
role:master
connected_slaves:2
slave0:ip=172.22.0.2,port=6379,state=online,offset=468205,lag=1
slave1:ip=172.22.0.3,port=6379,state=online,offset=468341,lag=0
master_failover_state:no-failover
master_replid:a6d8f07d488ea5769117bc4497d05f38f438aa30
master_replid2:7dd4ecc3aabefbf7cf6ac859eb6c24fd03ae6321
master_repl_offset:468477
second_repl_offset:225
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:225
repl_backlog_histlen:468253

登錄哨兵

# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_tilt_since_seconds:-1
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=10.80.20.22:6380,slaves=2,sentinels=4

參考

  1. luckyxue.github.io
  2. https://www.developers-notebook.com/development/using-redis-sentinel-with-docker-compose/
  3. cloud.tencent.com/developer/article/1615281
  4. https://redis.io/docs/management/replication/
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容