>
目錄
- redis集群概述
- 使用Docker搭建Redis 集群
- 測試哨兵
redis集群概述
Redis的集群方案大致有三種:
- redis cluster集群方案
- master/slave主從方案
- 使用哨兵模式來進行主從替換以及故障恢復
Sentinel系統可以監視一個或者多個redis master服務,以及master服務的所有從服務;當某個master服務下線時,自動將該master下的某個從服務升級為master服務替代已下線的master服務繼續處理請求。
使用Docker搭建Redis 集群
打開Windows Terminal 新建redis-sentinel主目錄,進入目錄內部,在新建一個sentinel目錄用來存放哨兵腳本。在sentinel目錄中新建 sentinel.conf 配置文件、Dockerfile、sentinel-entrypoint.sh腳本文件。
sentinel.conf 文件配置
# 哨兵sentinel實例運行的端口 默認26379 port 26379 sentinel monitor mymaster redis-master 6379 3 # 指定多少毫秒之后 主節點沒有應答哨兵sentinel 此時 哨兵主觀上認為主節點下線 默認30秒 sentinel down-after-milliseconds mymaster 5000 # 指定了在發生failover主備切換時最多可以有多少個slave同時對新的master進行同步,這個數字越小,完成failover所需的時間就越長 sentinel parallel-syncs mymaster 1 # 故障轉移的超時時間 sentinel failover-timeout mymaster 5000
sentinel-entrypoint.sh腳本文件配置
# 同步配置文件,啟動哨兵 sed -i "s/$SENTINEL_QUORUM/$SENTINEL_QUORUM/g" /etc/redis/sentinel.conf sed -i "s/$SENTINEL_DOWN_AFTER/$SENTINEL_DOWN_AFTER/g" /etc/redis/sentinel.conf sed -i "s/$SENTINEL_FAILOVER/$SENTINEL_FAILOVER/g" /etc/redis/sentinel.conf exec docker-entrypoint.sh redis-server /etc/redis/sentinel.conf --sentinel
Dockerfile文件配置
# 建立Dockerfile指定基礎鏡像,同時拷貝配置文件到鏡像內部 FROM redis EXPOSE 26379 ADD sentinel.conf /etc/redis/sentinel.conf RUN chown redis:redis /etc/redis/sentinel.conf COPY sentinel-entrypoint.sh /usr/local/bin/ RUN chmod +x /usr/local/bin/sentinel-entrypoint.sh ENTRYPOINT ["sentinel-entrypoint.sh"]
docker-compose.yml文件配置
# 搭建幾個從庫,就需要在services中配置幾個信息,開放相應端口 version: '2' networks: app-tier: driver: bridge services: redis: image: 'bitnami/redis:latest' environment: - REDIS_REPLICATION_MODE=master - REDIS_PASSWORD="" networks: - app-tier ports: - '6380:6379' redis-slave: image: 'bitnami/redis:latest' environment: - REDIS_REPLICATION_MODE=slave - REDIS_MASTER_HOST=redis - REDIS_MASTER_PASSWORD="" - REDIS_PASSWORD="" ports: - '6381:6379' depends_on: - redis networks: - app-tier redis-slave2: image: 'bitnami/redis:latest' environment: - REDIS_REPLICATION_MODE=slave - REDIS_MASTER_HOST=redis - REDIS_MASTER_PASSWORD="" - REDIS_PASSWORD="" ports: - '6382:6379' depends_on: - redis networks: - app-tier redis-slave3: image: 'bitnami/redis:latest' environment: - REDIS_REPLICATION_MODE=slave - REDIS_MASTER_HOST=redis - REDIS_MASTER_PASSWORD="" - REDIS_PASSWORD="" ports: - '6383:6379' depends_on: - redis networks: - app-tier redis-sentinel: image: 'bitnami/redis-sentinel:latest' environment: - REDIS_MASTER_PASSWORD="" depends_on: - redis - redis-slave - redis-slave2 - redis-slave3 ports: - '26379-26382:26379' networks: - app-tier
配置文件架構
redis-sentinel # 項目根路徑 ├── docker-compose.yml # docker-compose文件 └── sentinel # 存放初始化sentinel容器的相關文件 ├── Dockerfile # sentinel構建鏡像文件 ├── sentinel.conf # sentinel配置文件 └── sentinel-entrypoint.sh # sentinel.sh啟動腳本
啟動服務
# 在后面加 -d 為在后臺啟動 # compose啟動失敗可以嘗試手動啟動Containers docker-compose up --scale redis-sentinel=4
測試哨兵
打開4個Windows Terminal,連接redis,其中6380為master,6381、6382、6383為slave,此時只有master是有寫的權限的,當使用slava進行寫的時候會報 (error) READONLY You can't write against a read only replica.
錯誤,即為搭建成功。
? kill掉主庫容器進程,模擬宕機
# Kill掉主庫容器進程,模擬宕機 docker kill Containerid
這就是所謂的高負載高可用架構,在使用集群承擔高負載的同時,也能進行高可用的容災機制。
>