Docker搭建Redis5.0偽叢集帶密碼
Docker搭建Redis5.0偽叢集
前言
我的叢集檔案都在/data/docker/redis-cluster
目錄下,下面的操作都是在/data/docker/redis-cluster
目錄下進行的。
環境介紹
操作平臺:騰訊雲
作業系統:CentOS Linux release 7.7.1908 (Core)
核心版本:5.4.13-1.el7.elrepo.x86_64
Docker版本資訊:19.03.6
建立預設配置檔案
建立模版配置檔案
vim /data/docker/redis-cluster/redis-cluster.tmpl
將下面的配置內容複製到redis-cluster.tmpl
中
注意:1. 要將下面的127.0.0.1
cluster-node-timeout 5000 # 叢集節點IP host模式為宿主機IP cluster-announce-ip 127.0.0.1 # 叢集節點埠 7001 - 7006 cluster-announce-port ${PORT} cluster-announce-bus-port 1${PORT} # 開啟 appendonly 備份模式 appendonly yes # 每秒鐘備份 appendfsync everysec # 對aof檔案進行壓縮時,是否執行同步操作 no-appendfsync-on-rewrite no # 當目前aof檔案大小超過上一次重寫時的aof檔案大小的100%時會再次進行重寫 auto-aof-rewrite-percentage 100 # 重寫前AOF檔案的大小最小值 預設 64mb auto-aof-rewrite-min-size 5120mb # 關閉快照備份 save ""
生成配置檔案和資料存放目錄(直接執行一下命令):
for port in `seq 7001 7006`; do \
mkdir -p ./${port}/conf \
&& PORT=${port} envsubst < ./redis-cluster.tmpl > ./${port}/conf/redis${port}.conf \
&& mkdir -p ./${port}/data; \
done
這一段的意思就是:建立7001-7006目錄以及下面的conf和data目錄,並將redis-cluster.tmpl中的${port}替換為7001-7006分別複製到各自的conf下的redis7001.conf到redis7006.conf中。
建立網路橋接網絡卡
建立橋接網絡卡,網絡卡名叫:redis-cluster-network-bridge,網絡卡使用橋接模式
docker network create --driver bridge redis-cluster-network-bridge
建立docker-redis容器
建立7001-7006一共6個容器(直接執行命令):
for port in `seq 7001 7006`; do \
docker run -d -it --memory=1G \
-p ${port}:${port} -p 1${port}:1${port} \
-v /data/docker/redis-cluster/${port}/conf/redis${port}.conf:/usr/local/etc/redis/redis.conf \
-v /data/docker/redis-cluster/${port}/data:/data \
--restart always --name redis-cluster-${port} --net redis-cluster-network-bridge \
--sysctl net.core.somaxconn=1024 redis:5.0 redis-server /usr/local/etc/redis/redis.conf; \
done
這一段的意思就是:建立名稱為redis-cluster-7001到redis-cluster--7006這6個容器, 每個容器的最大記憶體為1G超過會被程序殺死 (執行時可能會出現...Memory limited without swap...這個警告,可以忽略。如不需要限制記憶體,可以去掉--memeory引數), 埠分別為7001-7006, 叢集埠分別為17001-17006, 將硬碟上的 /data/docker/redis-cluster/7001/conf/redis7001.conf
檔案對映為容器 redis-cluster-7001
的 /usr/local/etc/redis/redis.conf
檔案 (redis-cluster-7002
到 redis-cluster-7006
相同), 將 /data/docker/redis-cluster/7001/data
目錄對映為容器 redis-cluster-7001
的 /data目錄
(redis-cluster-7002
到 redis-cluster-7006
相同), 容器伴隨 docker
啟動, 使用 redis-cluster-network-bridge
做為網路連線方式, 最大連線數支援1024, 使用redis:5.0
映象做為容器預設啟動, 使用容器中的/usr/local/etc/redis/redis.conf
檔案做為預設啟動檔案
此時可以使用docker ps -a
檢視剛才建立的容器是否已啟動完成。
搭建叢集
開啟任何一個容器的bash命令列:docker exec -it redis-cluster-7001 bash
注意:1. 要將下面的127.0.0.1
替換成你的外網IP;
特別注意:一定要將你的伺服器的外網7001-7006埠和17001-17006埠放開,否則下面一定是"Waiting for the cluster to join.....",當你看到一堆省略號的時候,不用等待了,做下面三件事:
- 關閉叢集中的所有例項
for port in `seq 7001 7006`; do docker stop redis-cluster-${port}; done
; - 於此同時刪除掉每個節點檔案下的 demp.rdb和nodes.conf檔案
rm -rf 700*/data/*
; - 然後開放你redis例項埠號+10000的埠,這就需要你去配置安全策略了。
搭建叢集(直接執行命令):
redis-cli --cluster create 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006 --cluster-replicas 1
注意:搭建叢集只需要在其中任意一臺執行上面這條語句就可以了,不要每臺都去執行。
exit退出容器即可。
此時你就可以使用這個叢集了,但是現在是沒有密碼的,下面我們還需要新增密碼。
配置密碼
授權允許訪問每個容器對應的conf配置檔案:
for port in `seq 7001 7006`; do \
chmod a+w /data/docker/redis-cluster/${port}/conf/redis${port}.conf; \
done
進入每一個容器的bash命令列: docker exec -it redis-cluster-7001 redis-cli -c -p 7001
執行如下命令設定每個容器中Redis密碼(設定密碼為123456):
config set masterauth 123456
config set requirepass 123456
auth 123456
config rewrite
注意:這兒是要進入redis-cluster-7001到redis-cluster-7006全部都要執行一遍的,不是隻在其中一臺執行。
刪除容器
如果你在其中任何一個步驟出錯,可以使用下面的命令刪除容器
for port in `seq 7001 7006`; do \
docker stop redis-cluster-${port}; \
docker rm redis-cluster-${port}; \
done