Docker Compose搭建Redis一主二從三哨兵高可用集羣

Docker Compose搭建Redis一主二從三哨兵高可用集羣



相關內容原文地址: 博客園:陳大帥哥Ray:[Docker Compose搭建Redis一主二從三哨兵高可用集羣](https://www.cnblogs.com/ruiyeclub/p/12355073.html)

1、Docker Compose搭建Redis主從服務器

主從複製:主節點負責寫數據,從節點負責讀數據,主節點按期把數據同步到從節點保證數據的一致性。html

從性能方面,redis複製功能增長了讀的性能,理論上說,每增長一倍的服務器,整個系統的讀能力就增長一倍。redis

選擇好路徑,經過命令建立文件夾redis,而後進入文件夾建立docker-compose.yml,或者在本地建立,而後經過Xftp工具上傳至服務器。docker-compose.yml寫入以下內容。docker

version: '2'
services:
  master:
    image: redis    ## 鏡像
    container_name: redis-master    ##容器別名
    command: redis-server --requirepass 123456    ##redis密碼
    ports:
    - "6379:6379"    ##暴露端口
    networks:
    - sentinel-master
  slave1:
    image: redis
    container_name: redis-slave-1
    ports:
    - "6380:6379"
    command: redis-server --slaveof redis-master 6379 --requirepass 123456 --masterauth 123456 
    depends_on:
    - master
    networks:
    - sentinel-master
  slave2:
    image: redis
    container_name: redis-slave-2
    ports:
    - "6381:6379"
    command: redis-server --slaveof redis-master 6379 --requirepass 123456 --masterauth 123456
    depends_on:
    - master
    networks:
    - sentinel-master

啓動redis集羣:shell

docker-compose up -d

docker ps查看運行的實例,這裏咱們須要用到主節點的ip地址,注意不是電腦的ip,是節點的ip地址。服務器

docker inspect 主節點容器id。
在這裏插入圖片描述
哨兵須要綁定這個主節點的ip。markdown

2、哨兵sentinel模式搭建

當主服務器宕機後,須要手動把一臺服務器切換成主服務器,這裏須要人工干預,費事費力,還會形成一段時間內服務不可用。這不是一種推薦的方式,更多時候,咱們優先考慮哨兵模式。
哨兵是redis高可用的解決方案,由一個或多個Sentinel實例組成的Sentinel系統能夠監視任意多個主服務器以及這些主服務器屬下的全部從服務器,它可以在被監視的主服務器下線時,自動將該主服務器屬下的某個優先的從服務器升級爲新的主服務器,由這個主服務器代替已下線的主服務器繼續處理命令請求。ide

哨兵的功能:工具

  1. 監控:哨兵會不斷地監控檢測主節點和從節點是否運做正常。
  2. 自動故障轉移:當主節點不能正常工做時,哨兵會開始自動故障轉移操做,它會將失效主節點的其中一個從節點升級爲新的主節點,並 讓其餘從節點改成複製新的主節點。
  3. 通知:哨兵能夠將故障轉移的結果發送給客戶端。
  4. 配置提供者:客戶端在初始化時,經過鏈接哨兵來得到當前Redis服務的主節點地址。

建立sentinel文件夾,而後一樣編寫docker-compose.yml文件:性能

version: '2'
services:
  sentinel1:
    image: redis       ## 鏡像
    container_name: redis-sentinel-1
    ports:
    - "26379:26379"
    command: redis-sentinel /usr/local/etc/redis/sentinel.conf
    volumes:
    - "./sentinel.conf:/usr/local/etc/redis/sentinel.conf"
  sentinel2:
    image: redis                ## 鏡像
    container_name: redis-sentinel-2
    ports:
    - "26380:26379"           
    command: redis-sentinel /usr/local/etc/redis/sentinel.conf
    volumes:
    - "./sentinel2.conf:/usr/local/etc/redis/sentinel.conf"
  sentinel3:
    image: redis                ## 鏡像
    container_name: redis-sentinel-3
    ports:
    - "26381:26379"           
    command: redis-sentinel /usr/local/etc/redis/sentinel.conf
    volumes:
    - ./sentinel3.conf:/usr/local/etc/redis/sentinel.conf
networks:
  default:
    external:
      name: redis_sentinel-master

繼續在此目錄編寫文件,編寫sentinel.conf文件:測試

port 26379
dir /tmp
#172.18.0.3填寫本身的主節點ip
sentinel monitor mymaster 172.18.0.3 6379 2
sentinel auth-pass mymaster 123456 
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 10000  
sentinel deny-scripts-reconfig yes

第三行表示Redis監控一個叫作mymaster的運行在172.18.0.3:6379的master,投票達到2則表示master以及掛掉了。
第四行設置主節點的密碼。
第五行表示在一段時間範圍內sentinel向master發送的心跳PING沒有回覆則認爲master不可用了。
第六行的parallel-syncs表示設置在故障轉移以後,同時能夠從新配置使用新master的slave的數量。數字越低,更多的時間將會用故障轉移完成,可是若是slaves配置爲服務舊數據,你可能不但願全部的slave同時從新同步master。由於主從複製對於slave是非阻塞的,當中止從master加載批量數據時有一個片刻延遲。經過設置選項爲1,確信每次只有一個slave是不可到達的。
第七行表示10秒內mymaster還沒活過來,則認爲master宕機了。

建立好文件後,複製好三份。

cp sentinel.conf sentinel1.conf
cp sentinel.conf sentinel2.conf
cp sentinel.conf sentinel3.conf

啓動redis哨兵模式:

docker-compose up -d
3、故障轉移測試

哨兵能夠自動轉移故障,也就是當主節點宕機的時候,它們能經過選舉制度,在從節點中選出一個節點來代替主節點。

故障測試:
進入容器,再進入redis客戶端,再輸入密碼,而後使用info查看節點信息。
在這裏插入圖片描述
能夠看到這個節點的身份是master也就是主節點,而後有兩個鏈接着的從節點。
在這裏插入圖片描述
停掉這個節點,看看哨兵是否能夠實現故障轉移。

docker sotp <containerdId>

而後選擇其中一個從節點進入客戶端,輸入info查看信息。
在這裏插入圖片描述 發現其中一臺從節點已經變成主節點了,並且鏈接的從節點,也變成了一個。

相關文章
相關標籤/搜索