Docker-compose搭建Redis集群(Sentinel)的實(shí)現(xiàn)
redis集群概述
Redis的集群方案大致有三種:
- redis cluster集群方案
- master/slave主從方案
- 使用哨兵模式來(lái)進(jìn)行主從替換以及故障恢復(fù)
Sentinel系統(tǒng)可以監(jiān)視一個(gè)或者多個(gè)redis master服務(wù),以及master服務(wù)的所有從服務(wù);當(dāng)某個(gè)master服務(wù)下線時(shí),自動(dòng)將該master下的某個(gè)從服務(wù)升級(jí)為master服務(wù)替代已下線的master服務(wù)繼續(xù)處理請(qǐng)求。
使用Docker搭建Redis 集群
打開Windows Terminal 新建redis-sentinel主目錄,進(jìn)入目錄內(nèi)部,在新建一個(gè)sentinel目錄用來(lái)存放哨兵腳本。在sentinel目錄中新建 sentinel.conf 配置文件、Dockerfile、sentinel-entrypoint.sh腳本文件。
sentinel.conf 文件配置
# 哨兵sentinel實(shí)例運(yùn)行的端口 默認(rèn)26379 port 26379 sentinel monitor mymaster redis-master 6379 3 # 指定多少毫秒之后 主節(jié)點(diǎn)沒(méi)有應(yīng)答哨兵sentinel 此時(shí) 哨兵主觀上認(rèn)為主節(jié)點(diǎn)下線 默認(rèn)30秒 sentinel down-after-milliseconds mymaster 5000 # 指定了在發(fā)生failover主備切換時(shí)最多可以有多少個(gè)slave同時(shí)對(duì)新的master進(jìn)行同步,這個(gè)數(shù)字越小,完成failover所需的時(shí)間就越長(zhǎng) sentinel parallel-syncs mymaster 1 # 故障轉(zhuǎn)移的超時(shí)時(shí)間 sentinel failover-timeout mymaster 5000
sentinel-entrypoint.sh腳本文件配置
# 同步配置文件,啟動(dòng)哨兵 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指定基礎(chǔ)鏡像,同時(shí)拷貝配置文件到鏡像內(nèi)部 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文件配置
# 搭建幾個(gè)從庫(kù),就需要在services中配置幾個(gè)信息,開放相應(yīng)端口 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
配置文件架構(gòu)
redis-sentinel # 項(xiàng)目根路徑 ├── docker-compose.yml # docker-compose文件 └── sentinel # 存放初始化sentinel容器的相關(guān)文件 ├── Dockerfile # sentinel構(gòu)建鏡像文件 ├── sentinel.conf # sentinel配置文件 └── sentinel-entrypoint.sh # sentinel.sh啟動(dòng)腳本
啟動(dòng)服務(wù)
# 在后面加 -d 為在后臺(tái)啟動(dòng) # compose啟動(dòng)失敗可以嘗試手動(dòng)啟動(dòng)Containers docker-compose up --scale redis-sentinel=4
測(cè)試哨兵
打開4個(gè)Windows Terminal,連接redis,其中6380為master,6381、6382、6383為slave,此時(shí)只有master是有寫的權(quán)限的,當(dāng)使用slava進(jìn)行寫的時(shí)候會(huì)報(bào) (error) READONLY You can't write against a read only replica.
錯(cuò)誤,即為搭建成功。
? kill掉主庫(kù)容器進(jìn)程,模擬宕機(jī)
# Kill掉主庫(kù)容器進(jìn)程,模擬宕機(jī) docker kill Containerid
這就是所謂的高負(fù)載高可用架構(gòu),在使用集群承擔(dān)高負(fù)載的同時(shí),也能進(jìn)行高可用的容災(zāi)機(jī)制。
到此這篇關(guān)于Docker-compose搭建Redis集群(Sentinel)的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Docker-Compose搭建Redis集群內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Docker跨服務(wù)器通信Overlay解決方案(上)之 Consul單實(shí)例
這篇文章主要介紹了Docker跨服務(wù)器通信Overlay解決方案(上)之 Consul單實(shí)例,本文通過(guò)場(chǎng)景分析實(shí)例代碼相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-12-12docker 安裝ElasticSearch 6.x的教程詳解
這篇文章主要介紹了docker 安裝ElasticSearch 6.x的教程,非常不錯(cuò),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下2019-04-04docker搭建本地私有倉(cāng)庫(kù)的實(shí)現(xiàn)
有時(shí)候使用Docker Hub這樣的公共倉(cāng)庫(kù)可能不方便,這種情況下用戶可以使用registry創(chuàng)建一個(gè)本地倉(cāng)庫(kù)供私人使用,本文主要介紹了docker搭建本地私有倉(cāng)庫(kù)的實(shí)現(xiàn),感興趣的可以了解一下2023-12-12ubuntu22通過(guò)docker安裝wechat啟動(dòng)后無(wú)界面的問(wèn)題及解決方法
這篇文章主要介紹了ubuntu22通過(guò)docker安裝wechat啟動(dòng)后無(wú)界面的解決方法,通過(guò)微信創(chuàng)建腳本發(fā)現(xiàn)一系列問(wèn)題,最終在小編的努力下順利解決,下面把解決過(guò)程分享給大家,需要的朋友可以參考下2022-07-07ubuntu如何在docker容器中安裝strongswan
這篇文章主要介紹了ubuntu如何在docker容器中安裝strongswan,起動(dòng)一個(gè)ubuntu容器,我是用的docker compose啟動(dòng)的,compose的配置文件為ipsec-strongswan.yml,感興趣的朋友跟隨小編一起看看吧2024-04-04