亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

Docker如何搭建Redis Cluster集群環境

發布時間:2021-11-16 16:30:45 來源:億速云 閱讀:189 作者:小新 欄目:云計算

這篇文章將為大家詳細講解有關Docker如何搭建Redis Cluster集群環境,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

  使用 Docker 搭建 Redis Cluster,最重要的環節就是容器通信的問題,這一塊我們在之前的文章中已經給大家解決了《Docker 網絡模式詳解及容器間網絡通信》,本篇文章主要練習使用多個容器完成 Redis Cluster 集群環境的搭建,順便為學習 Docker Compose 鋪鋪路。俗話說沒有對比就沒有傷害,通過對比才能感受到 Docker Compose 的好處 ????。

  關于 Redis Cluster 集群更多的內容請閱讀《最通俗易懂的 Redis 架構模式詳解》。

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

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

Docker如何搭建Redis Cluster集群環境

環境

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

  • 192.168.10.10

  • 192.168.10.11

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

  • CentOS 7.8.2003

  • Docker version 19.03.12

Docker如何搭建Redis Cluster集群環境

搭建

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

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

  • 編寫 Redis 配置文件;

  • 創建 Redis 容器;

  • 創建 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如何搭建Redis Cluster集群環境

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

Docker如何搭建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 ==============================

創建 Redis 容器

創建容器

  將宿主機的 6371 ~ 6376 之間的端口與 6 個 Redis 容器映射,并將宿主機的目錄與容器內的目錄進行映射(目錄掛載)。記得指定網絡模式,使用 host 網絡模式。

  在 192.168.10.10 機器執行以下命令:

for port in $(seq 6371 6373); do \
  docker run -di --restart always --name redis-${port} --net host \
  -v /usr/local/docker-redis/redis-cluster/${port}/conf/redis.conf:/usr/local/etc/redis/redis.conf \
  -v /usr/local/docker-redis/redis-cluster/${port}/data:/data \
  redis redis-server /usr/local/etc/redis/redis.conf; \
done

  在 192.168.10.11 機器執行以下命令:

for port in $(seq 6374 6376); do \
  docker run -di --restart always --name redis-${port} --net host \
  -v /usr/local/docker-redis/redis-cluster/${port}/conf/redis.conf:/usr/local/etc/redis/redis.conf \
  -v /usr/local/docker-redis/redis-cluster/${port}/data:/data \
  redis redis-server /usr/local/etc/redis/redis.conf; \
done

  在 192.168.10.10 機器執行 docker ps -n 3 查看容器是否創建成功。

Docker如何搭建Redis Cluster集群環境

  在 192.168.10.11 機器執行 docker ps -n 3 查看容器是否創建成功。

Docker如何搭建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如何搭建Redis Cluster集群環境

  集群創建成功如下:

Docker如何搭建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: 299cf79ddafc83dced27f628f1f82dac483fbc4e 192.168.10.10:6371
   slots:[0-5460] (5461 slots) master
M: ac805b90b6e20e26dc4268454bb2855beea6cc19 192.168.10.10:6372
   slots:[10923-16383] (5461 slots) master
S: db35494fcc5db0c88d27da7885c817e6cdcc9373 192.168.10.10:6373
   replicates 7013270480d37eeab79b9cd0272e934d4548136a
M: 7013270480d37eeab79b9cd0272e934d4548136a 192.168.10.11:6374
   slots:[5461-10922] (5462 slots) master
S: 8435e1b0d51f2690c5f94f9a5682a4ac34e94326 192.168.10.11:6375
   replicates ac805b90b6e20e26dc4268454bb2855beea6cc19
S: 7b13c16fa6fe8e13cdc0b4846b87edffed55c62e 192.168.10.11:6376
   replicates 299cf79ddafc83dced27f628f1f82dac483fbc4e
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: 299cf79ddafc83dced27f628f1f82dac483fbc4e 192.168.10.10:6371
   slots:[0-5460] (5461 slots) master
   1 additional replica(s)
S: 8435e1b0d51f2690c5f94f9a5682a4ac34e94326 192.168.10.11:6375
   slots: (0 slots) slave
   replicates ac805b90b6e20e26dc4268454bb2855beea6cc19
S: db35494fcc5db0c88d27da7885c817e6cdcc9373 192.168.10.10:6373
   slots: (0 slots) slave
   replicates 7013270480d37eeab79b9cd0272e934d4548136a
S: 7b13c16fa6fe8e13cdc0b4846b87edffed55c62e 192.168.10.11:6376
   slots: (0 slots) slave
   replicates 299cf79ddafc83dced27f628f1f82dac483fbc4e
M: 7013270480d37eeab79b9cd0272e934d4548136a 192.168.10.11:6374
   slots:[5461-10922] (5462 slots) master
   1 additional replica(s)
M: ac805b90b6e20e26dc4268454bb2855beea6cc19 192.168.10.10:6372
   slots:[10923-16383] (5461 slots) master
   1 additional replica(s)
[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如何搭建Redis Cluster集群環境

查看集群狀態

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

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

檢查集群狀態

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

Docker如何搭建Redis Cluster集群環境

查看集群信息和節點信息

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

Docker如何搭建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如何搭建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如何搭建Redis Cluster集群環境

客戶端連接

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

Docker如何搭建Redis Cluster集群環境

Docker如何搭建Redis Cluster集群環境

關于“Docker如何搭建Redis Cluster集群環境”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

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

AI

长兴县| 南昌县| 神农架林区| 苏尼特右旗| 鸡西市| 双城市| 西林县| 南城县| 威宁| 乐昌市| 绥中县| 错那县| 明溪县| 成都市| 千阳县| 保定市| 林甸县| 潍坊市| 岳阳市| 德保县| 贵德县| 昌江| 姚安县| 芒康县| 班戈县| 安化县| 枝江市| 无锡市| 通州市| 酒泉市| 璧山县| 梁山县| 屏边| 潜江市| 尚义县| 叙永县| 舞阳县| 河北区| 珠海市| 英吉沙县| 开阳县|