docker-compose搭建redis僞集羣

docker-compose搭建redis僞集羣

1、端口的安排

搭建三主三從,所以需要6個端口

server_ip=192.168.43.23(自己的主機的ip地址)

master-1:16379

master-2:16380

master-3:16381

slave-1:16389

slave-2:16390

slave-3:16391

這裏雖然用到了6個端口,其實還需要佔用3個集羣總線的端口,就是master的端口+1000,也就是26379,26380,26381端口,需要查看端口是否被佔用以及防火牆是否開啓

2、創建文件及文件夾

(1)創建/docer-data/redis-cluster

我的所有的redis集羣的文件都是放到該文件夾下面的,裏面包含如下內容:

文件:docker-compose.yaml

文件夾:master-1、master-2、master-3、slave-1、slave-2、slave-3

其中,docker-compose.yaml是docker-compose啓動redis集羣的配置文件

下面的文件夾,是存放每個redis服務的資源以及生成數據或者log等

(2)文件內容

docker-compose.yaml

version: '3'

services:
 master-1:
  container_name: master-1
  image: redis:5.0.8
  command: redis-server /etc/usr/local/redis.conf
  network_mode: "host"
  restart: always
  volumes:
   - ./master-1/redis.conf:/etc/usr/local/redis.conf
   - ./master-1/redis.log:/usr/local/redis/logs/redis-server.log
   - ./master-1/data:/data

 master-2:
  container_name: master-2
  command: redis-server /etc/usr/local/redis.conf
  image: redis:5.0.8
  network_mode: "host"
  restart: always
  volumes:
   - ./master-2/redis.conf:/etc/usr/local/redis.conf
   - ./master-2/redis.log:/usr/local/redis/logs/redis-server.log
   - ./master-2/data:/data

 master-3:
  container_name: master-3
  image: redis:5.0.8
  command: redis-server /etc/usr/local/redis.conf
  network_mode: "host"
  restart: always
  volumes:
   - ./master-3/redis.conf:/etc/usr/local/redis.conf
   - ./master-3/redis.log:/usr/local/redis/logs/redis-server.log
   - ./master-3/data:/data

 slave-1:
  container_name: slave-1
  image: redis:5.0.8
  command: redis-server /etc/usr/local/redis.conf
  network_mode: "host"
  restart: always
  volumes:
   - ./slave-1/redis.conf:/etc/usr/local/redis.conf
   - ./slave-1/redis.log:/usr/local/redis/logs/redis-server.log
   - ./slave-1/data:/data

 slave-2:
  container_name: slave-2
  image: redis:5.0.8
  command: redis-server /etc/usr/local/redis.conf
  network_mode: "host"
  restart: always
  volumes:
   - ./slave-2/redis.conf:/etc/usr/local/redis.conf
   - ./slave-2/redis.log:/usr/local/redis/logs/redis-server.log
   - ./slave-2/data:/data

 slave-3:
  container_name: slave-3
  image: redis:5.0.8
  command: redis-server /etc/usr/local/redis.conf
  network_mode: "host"
  restart: always
  volumes:
   - ./slave-3/redis.conf:/etc/usr/local/redis.conf
   - ./slave-3/redis.log:/usr/local/redis/logs/redis-server.log
   - ./slave-3/data:/data

上面的配置文件注意一下幾點:

1、網絡模式使用host模式

2、需要在指定的宿主機創建文件,如redis.conf、redis.log,上面的volumes上面已經指定好了創建在宿主機的路徑,每個redis實例都需要創建,所以需要創建6個(三主三從)

其中redis.conf的可以從其他的redis中copy一份過來,在上面只需要修改如下幾項即可

port 16379 #這裏填每臺redis的端口號
bind 0.0.0.0 #綁定ip 0.0.0.0 指可以外網訪問
cluster-enabled yes #開啓集羣
logfile "/usr/local/redis/logs/redis-server.log" #指定日誌文件
requirepass htl123456 #密碼

特別留意端口,上面的端口配置與前面端口安排是一致的

輸入docker-compose up -d

如果沒有意外的話6個redis實例會成功啓動,嘗試是否能夠連接,如果不能連接需要自己查看日誌,排查問題

3、構建集羣

上面的步驟如果都成功了,僅僅說明是搭建了6個redis的實例,但是之間沒有任何聯繫,下面就是如果使他們構建集羣

docker exec -it master-1 redis-cli  -h <server_ip> -p 16379 -a htl123456 --cluster create <server_ip>:16379 <server_ip>:16380 <server_ip>:16381 <server_ip>:16389 <server_ip>:16390 <server_ip>:16391 --cluster-replicas 1

上面的docker命令不能直接使用,需要給<server_ip>具體值,另外端口要根據自己上面安排的端口設計,以及密碼。最後就是如果運行失敗了,那麼久看看是不是格式錯誤(空格啥的)

在這裏插入圖片描述

如果出現上圖,那麼恭喜你,搭建完成

我們可以使用下面的語句測試一下

docker exec -it master-1 redis-cli -c -p16379 -a htl123456

坑:

一直顯示:waiting for the cluster to join…

開始以爲是分槽需要那麼多時間,後來運行了幾個小時,還是這樣顯示

原來有redis集羣總線的概念:redis集羣總線端口爲redis客戶端端口加上10000,比如說你的redis 6379端口爲客戶端通訊端口,那麼16379端口爲集羣總線端口

我搭建的redis集羣中端口號是從 16379 ~ 16381爲主節點端口, 16389~16391 從節點端口,這裏需要將主端口+10000端口防火牆開放(我是用了阿里雲的服務器,需要開放端口,如果是虛擬機可以直接關閉防火牆)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章