最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

5分鐘教你實(shí)現(xiàn)用docker搭建Redis集群模式和哨兵模式

 更新時(shí)間:2021年09月30日 09:09:14   作者:程序員阿牛  
本文主要介紹了5分鐘實(shí)現(xiàn)用docker搭建Redis集群模式和哨兵模式,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

如果讓你為開發(fā)、測試環(huán)境分別搭一套哨兵和集群模式的redis,你最快需要多久,或許你需要一天?2小時(shí)?事實(shí)是可以更短。 是的,你已經(jīng)猜到了,用docker部署,真的只需要十幾分鐘。

一.準(zhǔn)備工作

拉取redis鏡像

運(yùn)行如下命令:

docker pull redis

該命令拉取的鏡像是官方鏡像,當(dāng)然你可以搜索其他的鏡像,這里不做深入
查看鏡像情況:

二.部署redis哨兵主從模式

什么是哨兵模式?--請自行百度

1、什么是docker compose?

Docker Compose 可以理解為將多個(gè)容器運(yùn)行的方式和配置固化下來!

就拿最簡單的例子來說吧,如果我們要為我們的應(yīng)用容器準(zhǔn)備一個(gè) MySQL 容器和一個(gè) Redis 容器,那么在每次啟動(dòng)時(shí),我們先要將 MySQL 容器和 Redis 容器啟動(dòng)起來,再將應(yīng)用容器運(yùn)行起來。這其中還不要忘了在創(chuàng)建應(yīng)用容器時(shí)將容器網(wǎng)絡(luò)連接到 MySQL 容器和 Redis 容器上,以便應(yīng)用連接上它們并進(jìn)行數(shù)據(jù)交換。

這還不夠,如果我們還對容器進(jìn)行了各種配置,我們最好還得將容器創(chuàng)建和配置的命令保存下來,以便下次可以直接使用。

針對這種情況,我們就不得不引出在我們開發(fā)中最常使用的多容器定義和運(yùn)行軟件,也就是 Docker Compose 了。

2、編寫reids主從docker-compose.yml

version: '3.7'
services:
  master:
    image: redis
    container_name: redis-master
    restart: always
    command: redis-server --requirepass redispwd  --appendonly yes
    ports:
      - 6379:6379
    volumes:
      - ./data1:/data
  slave1:
    image: redis
    container_name: redis-slave-1
    restart: always
    command: redis-server --slaveof redis-master 6379  --requirepass redispwd --masterauth redispwd  --appendonly yes
    ports:
      - 6380:6379
    volumes:
      - ./data2:/data
  slave2:
    image: redis
    container_name: redis-slave-2
    restart: always
    command: redis-server --slaveof redis-master 6379  --requirepass redispwd --masterauth redispwd  --appendonly yes
    ports:
      - 6381:6379
    volumes:
      - ./data3:/data

名詞解釋:

3、啟動(dòng)主從redis

進(jìn)入redis對應(yīng)的docker-compose.yml的目錄,執(zhí)行命令:

docker-compose up -d

-d表示后臺(tái)運(yùn)行
使用命令docker ps命令查看啟動(dòng)結(jié)果:


出現(xiàn)截圖所示,表示運(yùn)行成功

4.編寫哨兵docker-compose.yml

version: '3.7'
services:
  sentinel1:
    image: redis
    container_name: redis-sentinel-1
    restart: always
    ports:
      - 26379:26379
    command: redis-sentinel /usr/local/etc/redis/sentinel.conf
    volumes:
      - ./sentinel1.conf:/usr/local/etc/redis/sentinel.conf
  sentinel2:
    image: redis
    container_name: redis-sentinel-2
    restart: always
    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_default

5.編寫哨兵sentinel.conf

# 自定義集群名,其中172.19.0.3 為 redis-master 的 ip,6379 為 redis-master 的端口,2 為最小投票數(shù)(因?yàn)橛?3 臺(tái) Sentinel 所以可以設(shè)置成 2)
port 26379
dir /tmp
sentinel monitor mymaster 172.19.0.3 6379 2
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
sentinel auth-pass mymaster redispwd
sentinel failover-timeout mymaster 180000
sentinel deny-scripts-reconfig yes

將上述文件分別拷貝3份分別命名為sentinel1.conf、sentinel2.conf、sentinel3.conf與docker-compose.yml中的配置文件對應(yīng),然后放置和哨兵的docker-compose.yml在同一目錄

6.啟動(dòng)哨兵

進(jìn)入哨兵docker-compose.yml所在目錄,執(zhí)行命令:

docker-compose up -d

查看容器,可以看到哨兵和主從redis都起來了

6.1哨兵啟動(dòng)日志


上述日志中可以看出,哨兵監(jiān)聽master和slave節(jié)點(diǎn)

6.2關(guān)掉master節(jié)點(diǎn)

通過命令停止redis的master節(jié)點(diǎn)

docker stop redis-master


通過上述日志,我們可以看到sdown,odown,他們是什么意思呢?
sdown是主觀宕機(jī),就一個(gè)哨兵如果自己覺得一個(gè)master宕機(jī)了,那么就是主觀宕機(jī)
odown是客觀宕機(jī),如果quorum數(shù)量的哨兵都覺得一個(gè)master宕機(jī)了,那么就是客觀宕機(jī)
然后就是開始選舉,從日志可以看出兩個(gè)哨兵選擇了同一個(gè)slave節(jié)點(diǎn),這時(shí)候滿足了我們配置最小投票數(shù),那么這臺(tái)slave就被選為新的master。

6.3重開master節(jié)點(diǎn)


上述日志表明哨兵檢測到原master重新啟動(dòng),將原master節(jié)點(diǎn)變成新master的從節(jié)點(diǎn)

三.部署redis集群模式

1、創(chuàng)建目錄和文件

├── docker-compose.yml
├── redis-6371
│   ├── conf
│   │   └── redis.conf
│   └── data
├── redis-6372
│   ├── conf
│   │   └── redis.conf
│   └── data
├── redis-6373
│   ├── conf
│   │   └── redis.conf
│   └── data
├── redis-6374
│   ├── conf
│   │   └── redis.conf
│   └── data
├── redis-6375
│   ├── conf
│   │   └── redis.conf
│   └── data
└── redis-6376
    ├── conf
    │   └── redis.conf
    └── data

2、redis.conf 配置文件

port 6371
cluster-enabled yes
cluster-config-file nodes-6371.conf
cluster-node-timeout 5000
appendonly yes
protected-mode no
requirepass 1234
masterauth 1234
cluster-announce-ip 10.12.12.10 # 這里是宿主機(jī)IP
cluster-announce-port 6371
cluster-announce-bus-port 16371

每個(gè)節(jié)點(diǎn)的配置只需改變端口。

3、docker-compose 配置文件

version: "3"

# 定義服務(wù),可以多個(gè)
services:
  redis-6371: # 服務(wù)名稱
    image: redis # 創(chuàng)建容器時(shí)所需的鏡像
    container_name: redis-6371 # 容器名稱
    restart: always # 容器總是重新啟動(dòng)
    volumes: # 數(shù)據(jù)卷,目錄掛載
      - ./redis-6371/conf/redis.conf:/usr/local/etc/redis/redis.conf
      - ./redis-6371/data:/data
    ports:
      - 6371:6371
      - 16371:16371
    command:
      redis-server /usr/local/etc/redis/redis.conf

  redis-6372:
    image: redis
    container_name: redis-6372
    volumes:
      - ./redis-6372/conf/redis.conf:/usr/local/etc/redis/redis.conf
      - ./redis-6372/data:/data
    ports:
      - 6372:6372
      - 16372:16372
    command:
      redis-server /usr/local/etc/redis/redis.conf

  redis-6373:
    image: redis
    container_name: redis-6373
    volumes:
      - ./redis-6373/conf/redis.conf:/usr/local/etc/redis/redis.conf
      - ./redis-6373/data:/data
    ports:
      - 6373:6373
      - 16373:16373
    command:
      redis-server /usr/local/etc/redis/redis.conf
      
  redis-6374:
    image: redis
    container_name: redis-6374
    restart: always
    volumes:
      - ./redis-6374/conf/redis.conf:/usr/local/etc/redis/redis.conf
      - ./redis-6374/data:/data
    ports:
      - 6374:6374
      - 16374:16374
    command:
      redis-server /usr/local/etc/redis/redis.conf

  redis-6375:
    image: redis
    container_name: redis-6375
    volumes:
      - ./redis-6375/conf/redis.conf:/usr/local/etc/redis/redis.conf
      - ./redis-6375/data:/data
    ports:
      - 6375:6375
      - 16375:16375
    command:
      redis-server /usr/local/etc/redis/redis.conf

  redis-6376:
    image: redis
    container_name: redis-6376
    volumes:
      - ./redis-6376/conf/redis.conf:/usr/local/etc/redis/redis.conf
      - ./redis-6376/data:/data
    ports:
      - 6376:6376
      - 16376:16376
    command:
      redis-server /usr/local/etc/redis/redis.conf

編寫完成后使用docker-compose up -d啟動(dòng)容器 ,這里沒有使用主機(jī)模式(host),而是使用 NAT 模式,因?yàn)橹鳈C(jī)模式可能導(dǎo)致外部客戶端無法連接。

4、進(jìn)入容器,創(chuàng)建集群

上面只是啟動(dòng)了 6 個(gè) Redis 實(shí)例,并沒有構(gòu)建成 Cluster 集群。
執(zhí)行docker exec -it redis-6371 bash進(jìn)入一個(gè) Redis 節(jié)點(diǎn)容器,隨便哪個(gè)都行。
繼續(xù)執(zhí)行以下命令創(chuàng)建集群:

# 集群創(chuàng)建命令
redis-cli -a 1234 --cluster create 10.35.30.39:6371 10.35.30.39:6372 10.35.30.39:6373 10.35.30.39:6374 10.35.30.39:6375 10.35.30.39:6376 --cluster-replicas 1
# 執(zhí)行過后會(huì)有以下輸出
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 10.35.30.39:6375 to 10.35.30.39:6371
Adding replica 10.35.30.39:6376 to 10.35.30.39:6372
Adding replica 10.35.30.39:6374 to 10.35.30.39:6373
>>> Trying to optimize slaves allocation for anti-affinity
[WARNING] Some slaves are in the same host as their master
M: e9a35d6a9d203830556de89f06a3be2e2ab4eee1 10.35.30.39:6371
   slots:[0-5460] (5461 slots) master
M: 0c8755144fe6a200a46716371495b04f8ab9d4c8 10.35.30.39:6372
   slots:[5461-10922] (5462 slots) master
M: fcb83b0097d2a0a87a76c0d782de12147bc86291 10.35.30.39:6373
   slots:[10923-16383] (5461 slots) master
S: b9819797e98fcd49f263cec1f77563537709bcb8 10.35.30.39:6374
   replicates fcb83b0097d2a0a87a76c0d782de12147bc86291
S: f4660f264f12786d81bcf0b18bc7287947ec8a1b 10.35.30.39:6375
   replicates e9a35d6a9d203830556de89f06a3be2e2ab4eee1
S: d2b9f265ef7dbb4a612275def57a9cc24eb2fd5d 10.35.30.39:6376
   replicates 0c8755144fe6a200a46716371495b04f8ab9d4c8
Can I set the above configuration? (type 'yes' to accept): yes # 這里輸入 yes 并回車 確認(rèn)節(jié)點(diǎn) 主從身份 以及 哈希槽的分配
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join
.
>>> Performing Cluster Check (using node 10.35.30.39:6371)
M: e9a35d6a9d203830556de89f06a3be2e2ab4eee1 10.35.30.39:6371
   slots:[0-5460] (5461 slots) master
   1 additional replica(s)
M: 0c8755144fe6a200a46716371495b04f8ab9d4c8 10.35.30.39:6372
   slots:[5461-10922] (5462 slots) master
   1 additional replica(s)
S: b9819797e98fcd49f263cec1f77563537709bcb8 10.35.30.39:6374
   slots: (0 slots) slave
   replicates fcb83b0097d2a0a87a76c0d782de12147bc86291
M: fcb83b0097d2a0a87a76c0d782de12147bc86291 10.35.30.39:6373
   slots:[10923-16383] (5461 slots) master
   1 additional replica(s)
S: f4660f264f12786d81bcf0b18bc7287947ec8a1b 10.35.30.39:6375
   slots: (0 slots) slave
   replicates e9a35d6a9d203830556de89f06a3be2e2ab4eee1
S: d2b9f265ef7dbb4a612275def57a9cc24eb2fd5d 10.35.30.39:6376
   slots: (0 slots) slave
   replicates 0c8755144fe6a200a46716371495b04f8ab9d4c8
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

看到上面的輸出即為 Cluster 集群配置完成。且為 3 主 3 從。

總結(jié):

以上就是通過docker compose方式部署哨兵模式和集群模式的全過程,redis部署在docker中,適用于本地、開發(fā)、測試等環(huán)境,生產(chǎn)環(huán)境請慎用,除非你對docker有很強(qiáng)的掌控力。

到此這篇關(guān)于5分鐘教你實(shí)現(xiàn)用docker搭建Redis集群模式和哨兵模式的文章就介紹到這了,更多相關(guān)docker搭建Redis集群模式和哨兵模式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • docker部署Vaultwarden密碼共享管理系統(tǒng)的實(shí)現(xiàn)(圖文)

    docker部署Vaultwarden密碼共享管理系統(tǒng)的實(shí)現(xiàn)(圖文)

    Vaultwarden是一個(gè)開源的密碼管理器,它提供了類似于Bitwarden的功能,允許用戶安全地存儲(chǔ)和管理密碼、敏感數(shù)據(jù)和身份信息,本文主要介紹了docker部署Vaultwarden密碼共享管理系統(tǒng)的實(shí)現(xiàn),感興趣的可以了解一下
    2023-10-10
  • docker常用命令操作方法

    docker常用命令操作方法

    最近幾天都在研究docker,今天給大家分享docker一些常用的命令,需要的朋友可以參考下
    2017-11-11
  • 多云環(huán)境下的Docker部署策略實(shí)現(xiàn)

    多云環(huán)境下的Docker部署策略實(shí)現(xiàn)

    在多云環(huán)境下,Docker容器技術(shù)為應(yīng)用程序的部署提供了高度的靈活性和可擴(kuò)展性,本文就來介紹一下多云環(huán)境下的Docker部署策略實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-01-01
  • 詳解使用?docker?compose?部署?golang?的?Athens?私有代理問題

    詳解使用?docker?compose?部署?golang?的?Athens?私有代理問題

    這篇文章主要介紹了使用?docker-compose?部署?golang?的?Athens?私有代理,幫助大家快速學(xué)習(xí)athens 如何構(gòu)建私有代理,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-04-04
  • docker-cli源碼窺探(推薦)

    docker-cli源碼窺探(推薦)

    最近一直在使用docker,在這做下記錄,本文我將以docker?ps?-a?命令為例探究docker命令在?client側(cè)的執(zhí)行過程,源碼的版本為20.10,對docker-cli源碼知識(shí)感興趣的朋友一起學(xué)習(xí)下吧
    2022-11-11
  • 解決Docker Desktop運(yùn)行一直轉(zhuǎn)問題

    解決Docker Desktop運(yùn)行一直轉(zhuǎn)問題

    遇到Docker啟動(dòng)報(bào)錯(cuò)、Docker Desktop運(yùn)行不正常等問題,常見解決方案包括以管理員身份運(yùn)行CMD,重啟Docker服務(wù),恢復(fù)Docker Desktop出廠設(shè)置,啟用Windows功能等,最終通過運(yùn)行cmd命令"netsh winsock reset"解決問題,但需注意此操作可能導(dǎo)致Docker鏡像丟失
    2024-09-09
  • docker實(shí)踐之從新鏡像啟動(dòng)容器報(bào)錯(cuò)解決

    docker實(shí)踐之從新鏡像啟動(dòng)容器報(bào)錯(cuò)解決

    這篇文章主要介紹了docker實(shí)踐之從新鏡像啟動(dòng)容器報(bào)錯(cuò)解決,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-08-08
  • 使用Docker將容器打成鏡像的方法步驟

    使用Docker將容器打成鏡像的方法步驟

    本文主要介紹了使用Docker將容器打成鏡像的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • docker修改未啟動(dòng)容器的配置信息操作

    docker修改未啟動(dòng)容器的配置信息操作

    這篇文章主要介紹了docker修改未啟動(dòng)容器的配置信息操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • 利用Dockerfile部署SpringBoot項(xiàng)目的方法

    利用Dockerfile部署SpringBoot項(xiàng)目的方法

    這篇文章主要介紹了利用Dockerfile部署SpringBoot項(xiàng)目的方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-10-10

最新評(píng)論

娄底市| 任丘市| 金昌市| 周口市| 灵川县| 天台县| 翁源县| 汕头市| 永嘉县| 邵阳市| 宝丰县| 巩留县| 兰西县| 深泽县| 赣州市| 万荣县| 上高县| 松溪县| 高雄市| 广河县| 临江市| 同心县| 文水县| 安丘市| 阜新市| 嘉善县| 和林格尔县| 通渭县| 尉氏县| 新巴尔虎右旗| 镇坪县| 稻城县| 沙湾县| 沾益县| 丽水市| 阳谷县| 安国市| 三都| 寻乌县| 洱源县| 龙门县|