中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Docker Compose怎么搭建 Redis Cluster集群環境

發布時間:2021-12-10 19:21:17 來源:億速云 閱讀:205 作者:柒染 欄目:大數據

Docker Compose怎么搭建 Redis Cluster集群環境,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。

 下面使用 Docker Compose 再帶大家搭建一遍,其目的主要是為了讓大家感受 Docker Compose 所帶來的便捷之處。

  按照 Redis 官網:https://redis.io/topics/cluster-tutorial 的提示,為了使 Docker 與 Redis Cluster 兼容,您需要使用 Docker 的 host 網絡模式。

  host 網絡模式需要在創建容器時通過參數 --net host 或者 --network host 指定,host 網絡模式可以讓容器共享宿主機網絡棧,容器將不會虛擬出自己的網卡,配置自己的 IP 等,而是使用宿主機的 IP 和端口。

  關于 Docker 網絡模式更多的內容請閱讀《Docker 網絡模式詳解及容器間網絡通信》。

Docker Compose怎么搭建 Redis Cluster集群環境

環境

  為了讓環境更加真實,本文使用多機環境:

  • 192.168.10.10

  • 192.168.10.11

  每臺機器所使用的基礎設施環境如下:

  • CentOS 7.8.2003

  • Docker version 19.03.12

Docker Compose怎么搭建 Redis Cluster集群環境

搭建

  整體搭建步驟主要分為以下幾步:

  • 下載 Redis 鏡像(其實這步可以省略,因為創建容器時,如果本地鏡像不存在,就會去遠程拉取);

  • 編寫 Redis 配置文件;

  • 編寫 Docker Compose 模板文件;

  • 創建并啟動所有服務容器;

  • 創建 Redis Cluster 集群。

編寫 Redis 配置文件

創建目錄及文件

  分別在 192.168.10.10192.168.10.11 兩臺機器上執行以下操作。

# 創建目錄
mkdir -p /usr/local/docker-redis/redis-cluster
# 切換至指定目錄
cd /usr/local/docker-redis/redis-cluster/
# 編寫 redis-cluster.tmpl 文件
vi redis-cluster.tmpl
編寫配置文件

  192.168.10.10 機器的 redis-cluster.tmpl 文件內容如下:

port ${PORT}
requirepass 1234
masterauth 1234
protected-mode no
daemonize no
appendonly yes
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 15000
cluster-announce-ip 192.168.10.10
cluster-announce-port ${PORT}
cluster-announce-bus-port 1${PORT}

  192.168.10.11 機器的 redis-cluster.tmpl 文件內容如下:

port ${PORT}
requirepass 1234
masterauth 1234
protected-mode no
daemonize no
appendonly yes
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 15000
cluster-announce-ip 192.168.10.11
cluster-announce-port ${PORT}
cluster-announce-bus-port 1${PORT}
  • port:節點端口;

  • requirepass:添加訪問認證;

  • masterauth:如果主節點開啟了訪問認證,從節點訪問主節點需要認證;

  • protected-mode:保護模式,默認值 yes,即開啟。開啟保護模式以后,需配置 bind ip 或者設置訪問密碼;關閉保護模式,外部網絡可以直接訪問;

  • daemonize:是否以守護線程的方式啟動(后臺啟動),默認 no;

  • appendonly:是否開啟 AOF 持久化模式,默認 no;

  • cluster-enabled:是否開啟集群模式,默認 no;

  • cluster-config-file:集群節點信息文件;

  • cluster-node-timeout:集群節點連接超時時間;

  • cluster-announce-ip:集群節點 IP,填寫宿主機的 IP;

  • cluster-announce-port:集群節點映射端口;

  • cluster-announce-bus-port:集群節點總線端口。

  每個 Redis 集群節點都需要打開兩個 TCP 連接。一個用于為客戶端提供服務的正常 Redis TCP 端口,例如 6379。還有一個基于 6379 端口加 10000 的端口,比如 16379。

  第二個端口用于集群總線,這是一個使用二進制協議的節點到節點通信通道。節點使用集群總線進行故障檢測、配置更新、故障轉移授權等等。客戶端永遠不要嘗試與集群總線端口通信,與正常的 Redis 命令端口通信即可,但是請確保防火墻中的這兩個端口都已經打開,否則 Redis 集群節點將無法通信。

  在 192.168.10.10 機器的 redis-cluster 目錄下執行以下命令:

for port in `seq 6371 6373`; do \
  mkdir -p ${port}/conf \
  && PORT=${port} envsubst < redis-cluster.tmpl > ${port}/conf/redis.conf \
  && mkdir -p ${port}/data;\
done

  在 192.168.10.11 機器的 redis-cluster 目錄下執行以下命令:

for port in `seq 6374 6376`; do \
  mkdir -p ${port}/conf \
  && PORT=${port} envsubst < redis-cluster.tmpl > ${port}/conf/redis.conf \
  && mkdir -p ${port}/data;\
done

上面兩段 shell for 語句,意思就是循環創建 6371 ~ 6376 相關的目錄及文件。

  在 192.168.10.10 機器執行查看命令結果如下,如果沒有 tree 命令先安裝 yum install -y tree

Docker Compose怎么搭建 Redis Cluster集群環境

  在 192.168.10.11 機器執行查看命令結果如下。

Docker Compose怎么搭建 Redis Cluster集群環境

  以下內容為每個節點的配置文件詳細信息。

============================== 192.168.10.10 ==============================
[root@localhost redis-cluster]# cat /usr/local/docker-redis/redis-cluster/637{1..3}/conf/redis.conf
port 6371
requirepass 1234
masterauth 1234
protected-mode no
daemonize no
appendonly yes
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 15000
cluster-announce-ip 192.168.10.10
cluster-announce-port 6371
cluster-announce-bus-port 16371

port 6372
requirepass 1234
masterauth 1234
protected-mode no
daemonize no
appendonly yes
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 15000
cluster-announce-ip 192.168.10.10
cluster-announce-port 6372
cluster-announce-bus-port 16372

port 6373
requirepass 1234
masterauth 1234
protected-mode no
daemonize no
appendonly yes
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 15000
cluster-announce-ip 192.168.10.10
cluster-announce-port 6373
cluster-announce-bus-port 16373
============================== 192.168.10.10 ==============================

============================== 192.168.10.11 ==============================
[root@localhost redis-cluster]# cat /usr/local/docker-redis/redis-cluster/637{4..6}/conf/redis.conf
port 6374
requirepass 1234
masterauth 1234
protected-mode no
daemonize no
appendonly yes
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 15000
cluster-announce-ip 192.168.10.11
cluster-announce-port 6374
cluster-announce-bus-port 16374

port 6375
requirepass 1234
masterauth 1234
protected-mode no
daemonize no
appendonly yes
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 15000
cluster-announce-ip 192.168.10.11
cluster-announce-port 6375
cluster-announce-bus-port 16375

port 6376
requirepass 1234
masterauth 1234
protected-mode no
daemonize no
appendonly yes
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 15000
cluster-announce-ip 192.168.10.11
cluster-announce-port 6376
cluster-announce-bus-port 16376
============================== 192.168.10.11 ==============================

編寫 Docker Compose 模板文件

  在 192.168.10.10 機器的 /usr/local/docker-redis 目錄下創建 docker-compose.yml 文件并編輯。

# 描述 Compose 文件的版本信息
version: "3.8"

# 定義服務,可以多個
services:
  redis-6371: # 服務名稱
    image: redis # 創建容器時所需的鏡像
    container_name: redis-6371 # 容器名稱
    restart: always # 容器總是重新啟動
    network_mode: "host" # host 網絡模式
    volumes: # 數據卷,目錄掛載
      - /usr/local/docker-redis/redis-cluster/6371/conf/redis.conf:/usr/local/etc/redis/redis.conf
      - /usr/local/docker-redis/redis-cluster/6371/data:/data
    command: redis-server /usr/local/etc/redis/redis.conf # 覆蓋容器啟動后默認執行的命令

  redis-6372:
    image: redis
    container_name: redis-6372
    network_mode: "host"
    volumes:
      - /usr/local/docker-redis/redis-cluster/6372/conf/redis.conf:/usr/local/etc/redis/redis.conf
      - /usr/local/docker-redis/redis-cluster/6372/data:/data
    command: redis-server /usr/local/etc/redis/redis.conf

  redis-6373:
    image: redis
    container_name: redis-6373
    network_mode: "host"
    volumes:
      - /usr/local/docker-redis/redis-cluster/6373/conf/redis.conf:/usr/local/etc/redis/redis.conf
      - /usr/local/docker-redis/redis-cluster/6373/data:/data
    command: redis-server /usr/local/etc/redis/redis.conf

  在 192.168.10.11 機器的 /usr/local/docker-redis 目錄下創建 docker-compose.yml 文件并編輯。

# 描述 Compose 文件的版本信息
version: "3.8"

# 定義服務,可以多個
services:
  redis-6374: # 服務名稱
    image: redis # 創建容器時所需的鏡像
    container_name: redis-6374 # 容器名稱
    restart: always # 容器總是重新啟動
    network_mode: "host" # host 網絡模式
    volumes: # 數據卷,目錄掛載
      - /usr/local/docker-redis/redis-cluster/6374/conf/redis.conf:/usr/local/etc/redis/redis.conf
      - /usr/local/docker-redis/redis-cluster/6374/data:/data
    command: redis-server /usr/local/etc/redis/redis.conf # 覆蓋容器啟動后默認執行的命令

  redis-6375:
    image: redis
    container_name: redis-6375
    network_mode: "host"
    volumes:
      - /usr/local/docker-redis/redis-cluster/6375/conf/redis.conf:/usr/local/etc/redis/redis.conf
      - /usr/local/docker-redis/redis-cluster/6375/data:/data
    command: redis-server /usr/local/etc/redis/redis.conf

  redis-6376:
    image: redis
    container_name: redis-6376
    network_mode: "host"
    volumes:
      - /usr/local/docker-redis/redis-cluster/6376/conf/redis.conf:/usr/local/etc/redis/redis.conf
      - /usr/local/docker-redis/redis-cluster/6376/data:/data
    command: redis-server /usr/local/etc/redis/redis.conf

創建并啟動所有服務容器

  分別在 192.168.10.10192.168.10.11 機器的 /usr/local/docker-redis 目錄下執行以下命令:

docker-compose up -d

Docker Compose怎么搭建 Redis Cluster集群環境

Docker Compose怎么搭建 Redis Cluster集群環境

創建 Redis Cluster 集群

  請先確保你的兩臺機器可以互相通信,然后隨便進入一個容器節點,并進入 /usr/local/bin/ 目錄:

# 進入容器
docker exec -it redis-6371 bash
# 切換至指定目錄
cd /usr/local/bin/

  接下來我們就可以通過以下命令實現 Redis Cluster 集群的創建。

redis-cli -a 1234 --cluster create 192.168.10.10:6371 192.168.10.10:6372 192.168.10.10:6373 192.168.10.11:6374 192.168.10.11:6375 192.168.10.11:6376 --cluster-replicas 1

  出現選擇提示信息,輸入 yes,結果如下所示:

Docker Compose怎么搭建 Redis Cluster集群環境

  集群創建成功如下:

Docker Compose怎么搭建 Redis Cluster集群環境

  以下內容是創建集群時返回的詳細信息,也就是上兩幅圖中的所有內容。

root@localhost:/usr/local/bin# redis-cli -a 1234 --cluster create 192.168.10.10:6371 192.168.10.10:6372 192.168.10.10:6373 192.168.10.11:6374 192.168.10.11:6375 192.168.10.11:6376 --cluster-replicas 1
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 192.168.10.11:6376 to 192.168.10.10:6371
Adding replica 192.168.10.10:6373 to 192.168.10.11:6374
Adding replica 192.168.10.11:6375 to 192.168.10.10:6372
M: 04444afa3ca66de6af4a182984c79d4d140293d7 192.168.10.10:6371
   slots:[0-5460] (5461 slots) master
M: fb76ada83a70ea8d367f22f8a6436d427f12022c 192.168.10.10:6372
   slots:[10923-16383] (5461 slots) master
S: 20f6913a4b08afe3b4092a4f6c70fddd9506f2fa 192.168.10.10:6373
   replicates c130120ffbd7c4e442ac9fc9870e977dc801cb54
M: c130120ffbd7c4e442ac9fc9870e977dc801cb54 192.168.10.11:6374
   slots:[5461-10922] (5462 slots) master
S: d4d5f7fd94fcd2239e82e481f0529380b288ff51 192.168.10.11:6375
   replicates fb76ada83a70ea8d367f22f8a6436d427f12022c
S: e08b8f629e2dfa474a836910634052d83c77d06a 192.168.10.11:6376
   replicates 04444afa3ca66de6af4a182984c79d4d140293d7
Can I set the above configuration? (type 'yes' to accept): yes
>>> 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 192.168.10.10:6371)
M: 04444afa3ca66de6af4a182984c79d4d140293d7 192.168.10.10:6371
   slots:[0-5460] (5461 slots) master
   1 additional replica(s)
S: 20f6913a4b08afe3b4092a4f6c70fddd9506f2fa 192.168.10.10:6373
   slots: (0 slots) slave
   replicates c130120ffbd7c4e442ac9fc9870e977dc801cb54
S: d4d5f7fd94fcd2239e82e481f0529380b288ff51 192.168.10.11:6375
   slots: (0 slots) slave
   replicates fb76ada83a70ea8d367f22f8a6436d427f12022c
M: fb76ada83a70ea8d367f22f8a6436d427f12022c 192.168.10.10:6372
   slots:[10923-16383] (5461 slots) master
   1 additional replica(s)
M: c130120ffbd7c4e442ac9fc9870e977dc801cb54 192.168.10.11:6374
   slots:[5461-10922] (5462 slots) master
   1 additional replica(s)
S: e08b8f629e2dfa474a836910634052d83c77d06a 192.168.10.11:6376
   slots: (0 slots) slave
   replicates 04444afa3ca66de6af4a182984c79d4d140293d7
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

  至此一個高可用的 Redis Cluster 集群搭建完成,如下圖所示,該集群中包含 6 個 Redis 節點,3 主 3 從。三個主節點會分配槽,處理客戶端的命令請求,而從節點可用在主節點故障后,頂替主節點。

Docker Compose怎么搭建 Redis Cluster集群環境

查看集群狀態

  我們先進入容器,然后通過一些集群常用的命令查看一下集群的狀態。

# 進入容器
docker exec -it redis-6371 bash
# 切換至指定目錄
cd /usr/local/bin/

檢查集群狀態

redis-cli -a 1234 --cluster check 192.168.10.11:6375

Docker Compose怎么搭建 Redis Cluster集群環境

查看集群信息和節點信息

# 連接至集群某個節點
redis-cli -c -a 1234 -h 192.168.10.11 -p 6376
# 查看集群信息
cluster info
# 查看集群結點信息
cluster nodes

Docker Compose怎么搭建 Redis Cluster集群環境

SET/GET

  在 6371 節點中執行寫入和讀取,命令如下:

# 進入容器并連接至集群某個節點
docker exec -it redis-6371 /usr/local/bin/redis-cli -c -a 1234 -h 192.168.10.10 -p 6371
# 寫入數據
set name mrhelloworld
set aaa 111
set bbb 222
# 讀取數據
get name
get aaa
get bbb

Docker Compose怎么搭建 Redis Cluster集群環境

  別著急,讓我來解釋一下上圖中的操作過程:

  • 首先進入容器并連接至集群某個節點;

  • 然后執行第一個 set 命令 set name mrhelloworldname 鍵根據哈希函數運算以后得到的值為 [5798]。當前集群環境的槽分配情況為:[0-5460] 6371節點[5461-10922] 6374節點[10923-16383] 6372節點,所以該鍵的存儲就被分配到了 6374 節點上;

  • 再來看第二個 set 命令 set aaa,這里大家可能會有一些疑問,為什么看不到 aaa 鍵根據哈希函數運算以后得到的值?因為剛才重定向至 6374 節點插入了數據,此時如果還有數據插入,正好鍵根據哈希函數運算以后得到的值也還在該節點的范圍內,那么直接插入數據即可;

  • 接著是第三個 set 命令 set bbbbbb 鍵根據哈希函數運算以后得到的值為 [5287],所以該鍵的存儲就被分配到了 6371 節點上;

  • 然后是讀取操作,第四個命令 get namename 鍵根據哈希函數運算以后得到的值為 [5798],被重定向至 6374 節點讀取;

  • 第五個命令 get aaaaaa 鍵根據哈希函數運算以后得到的值也在 6374 節點,直接讀取;

  • 第六個命令 get bbbbbb 鍵根據哈希函數運算以后得到的值為 [5287],被重定向至 6371 節點讀取。

  通過以上操作我們得知 name 鍵的存儲被分配到了 6374 節點,如果直接連接 6374 節點并獲取該值會怎么樣?沒錯,不需要重定向節點,因為數據就在該節點,所以直接讀取返回。

Docker Compose怎么搭建 Redis Cluster集群環境

客戶端連接

  最后來一波客戶端連接操作,隨便哪個節點,看看可否通過外部訪問 Redis Cluster 集群。

Docker Compose怎么搭建 Redis Cluster集群環境

Docker Compose怎么搭建 Redis Cluster集群環境

看完上述內容,你們掌握Docker Compose怎么搭建 Redis Cluster集群環境的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

宜昌市| 阿拉尔市| 扎兰屯市| 西峡县| 犍为县| 海林市| 清涧县| 始兴县| 图们市| 白银市| 宁海县| 安化县| 同德县| 进贤县| 平南县| 九寨沟县| 河西区| 蓬莱市| 修文县| 南木林县| 白沙| 东丰县| 梨树县| 南开区| 基隆市| 九龙县| 宝丰县| 阿巴嘎旗| 东光县| 晋宁县| 鹤壁市| 清河县| 洱源县| 南阳市| 广河县| 常德市| 松桃| 奉化市| 南宁市| 商南县| 介休市|