首頁  >  文章  >  資料庫  >  基於Docker的Redis集群如何搭建

基於Docker的Redis集群如何搭建

王林
王林轉載
2023-05-30 12:46:071371瀏覽

環境:Docker ( Redis:5.0.5 * 3 )

1、拉取映像

docker  pull  redis:5.0.5

基於Docker的Redis集群如何搭建

##2、建立Redis容器

建立三個redis 容器:

  • redis-node1:6379

  • redis-node2:6380

  • redis-node3:6381

  • docker create --name redis-node1 -v /data/redis-data/node1:/data -p 6379:6379 redis:5.0.5 --cluster-enabled yes --cluster-config-file nodes-node-1.conf
    
    docker create --name redis-node2 -v /data/redis-data/node2:/data -p 6380:6379 redis:5.0.5 --cluster-enabled yes --cluster-config-file nodes-node-2.conf
    
    docker create --name redis-node3 -v /data/redis-data/node3:/data -p 6381:6379 redis:5.0.5 --cluster-enabled yes --cluster-config-file nodes-node-3.conf

基於Docker的Redis集群如何搭建

3、啟動並組成叢集

啟動容器
#先透過指令

docker start來啟動3個Redis容器:

基於Docker的Redis集群如何搭建

執行完執行指令後檢查一下容器的啟動狀況:

基於Docker的Redis集群如何搭建

如果出現上圖情況,

Exited (1) 3 seconds ago,可以透過 docker logs 查看:

基於Docker的Redis集群如何搭建

如上提示的是權限問題,我們嘗試修改一下權限:

chmod -R  777 /data

基於Docker的Redis集群如何搭建

組成集群

查看3個Redis在Docker中分配的ip結點資訊:

执行「docker inspect redis-node1」得到 redis-node1 ip 信息为:172.17.0.4 
执行「docker inspect redis-node2」得到 redis-node2 ip 信息为:172.17.0.3 
执行「docker inspect redis-node3」得到 redis-node3 ip 信息为:172.17.0.2
基於Docker的Redis集群如何搭建

拿到ip 資訊後(每個人的ip資訊可能不一樣),接下來進入某一個容器進行組成群集:

# 这里以进入 node1 为例
docker exec -it redis-node1 /bin/bash

# 接着执行组建集群命令(请根据自己的ip信息进行拼接)
redis-cli --cluster create 172.17.0.2:6379  172.17.0.3:6379  172.17.0.4:6379 --cluster-replicas 0
基於Docker的Redis集群如何搭建

ok,此時叢集搭建完了,我們接下來測試一下。
測試叢集

使用 redis-cli -c

 指令連接到叢集結點,然後set 值,set 值之後會自動重新導向到0.2 ip位址,然後透過get 取得一下,取得成功證明叢集有效。

基於Docker的Redis集群如何搭建

4、存在的問題

按照如上的步驟,雖然群集搭建成功了,但其實還是有點問題的,由於群集結點中的ip位址 是docket內部分配的,如:172.17.0.2 等,如果使用 redis叢集

 的專案跟叢集不在一台伺服器上,那麼專案是沒辦法使用叢集的,因為是存取不通的。

基於Docker的Redis集群如何搭建

一個解決方案是讓Docker使用 host模式 的網路連線類型,Docker在使用host模式下建立的容器是沒有自己獨立的網路命名空間的,是跟實體機共用一個網路空間,進而可以共用實體機的所有埠與IP

,這樣就可以讓公共網路直接存取容器了,儘管這種方式有安全隱患,但目前來說還沒找到其他可行性模式。

就存在的問題我們重新採用 host模式

,重新建立容器:
1、停止已執行的容器
docker stop redis-node1 redis-node2 redis-node3
2、刪除先前建立的容器
docker rm redis-node1 redis-node2 redis-node3

# 清空上面创建的配置文件
rm -rf /data/redis-data/node*
3、重新基於host模式建立

docker create --name redis-node1 --net host -v /data/redis-data/node1:/data redis:5.0.5 --cluster-enabled yes --cluster-config-file nodes-node-1.conf --port 6379

docker create --name redis-node2 --net host -v /data/redis-data/node2:/data redis:5.0.5 --cluster-enabled yes --cluster-config-file nodes-node-2.conf --port 6380

docker create --name redis-node3 --net host -v /data/redis-data/node3:/data redis:5.0.5 --cluster-enabled yes --cluster-config-file nodes-node-3.conf --port 6381
跟先前建立指令不同,一是指定了 --net 網路類型為  host,二是這種情況下就不需要連接埠對映了,例如 -p 6379:6379,因為此時需要對外共用容器連接埠服務,所以只需要指定對外暴露的連接埠 -p 6379-p 6380

 等。

基於Docker的Redis集群如何搭建

4、啟動容器並組成叢集

# 启动命令
docker start redis-node1 redis-node2 redis-node3

# 进入某一个容器
docker exec -it redis-node1 /bin/bash

# 组建集群,10.211.55.4为当前物理机的ip地址
redis-cli --cluster create 10.211.55.4:6379  10.211.55.4:6380  10.211.55.4:6381 --cluster-replicas 0
基於Docker的Redis集群如何搭建

#5、查看叢集資訊
root@CentOS7:/data# redis-cli
127.0.0.1:6379> cluster nodes
72c291c32815194b64d1f6d0fdf771f5cc04e14a 10.211.55.4:6380@16380 master - 0 1590905997358 2 connected 5461-10922
6a595b67bbff15c94e5874c2d2cd556d6a6a6c17 10.211.55.4:6381@16381 master - 0 1590905998362 3 connected 10923-16383
4e3dbdc8f835dcbc38291c88f08165ee51d53d3d 10.211.55.4:6379@16379 myself,master - 0 1590905997000 1 connected 0-5460
127.0.0.1:6379>
6.測試群集

使用 redis-cli -c 連接到叢集上,set

一個值,然後從其他節點再取得值來查看是否成功:

root@CentOS7:/data# redis-cli -c
127.0.0.1:6379> set wxiaowei 123
-> Redirected to slot [7515] located at 10.211.55.4:6380
OK
10.211.55.4:6380> get wxiaowei
"123"
基於Docker的Redis集群如何搭建

###

以上是基於Docker的Redis集群如何搭建的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:yisu.com。如有侵權,請聯絡admin@php.cn刪除