我從不知道什麼地方抄的node
redis-cluster.tmpl
redis
# redis端口 port ${PORT} # 關閉保護模式 protected-mode no # 開啓集羣 cluster-enabled yes # 集羣節點配置 cluster-config-file nodes.conf # 超時 cluster-node-timeout 5000 # 集羣節點IP cluster-announce-ip ${HOST} # 集羣節點端口 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 64mb
將配置模板推到服務器上(若是是直接在服務器上操做,則不須要這一步)docker
# 文件路徑看我的喜愛,我這兒圖個方便 scp ./redis-cluster.tmpl xxxx@xxx.xxx.xxx.xxx:/redis-cluster.tmpl
新建一個.sh
腳本文件redis-cluster-sh.sh
shell
#!/bin/bash # 通常來講建集羣至少須要6個redis節點 # 根據實際狀況設置{HOST}和{PORT} # 多臺服務器記得更換{HOST} # 經過$1傳入HOST大概能夠更加靈活一點 export HOST=$1 for port in $(seq 7501 7506); do \ mkdir -p /home/redis-cluster/"$port"/conf \ && PORT="$port" envsubst < /redis-cluster.tmpl > \ /home/redis-cluster/"$port"/conf/redis.conf \ && mkdir -p /home/redis-cluster/"$port"/data; \ done
若是是直接在服務器上操做bash
source /redis-cluster-sh.sh xxx.xxx.xxx.xxx
查看生成的文件服務器
tree /home/redis-cluster/
若是不在服務器上,則能夠執行app
ssh root@xxx.xxx.xxx.xxx -C "/bin/bash -s" < ./redis-cluster-sh.sh xxx.xxx.xxx.xxx
建立一個.sh
腳本文件create-redis-container.sh
ssh
for port in $(seq 7501 7506); do \ docker run -itd -p "$port":"$port" -p 1"$port":1"$port" \ -v /home/redis-cluster/"$port"/conf/redis.conf:/usr/local/etc/redis/redis.conf \ -v /home/redis-cluster/"$port"/data:/data \ --restart always --name redis-"$port" \ redis redis-server /usr/local/etc/redis/redis.conf; \ done
若是是直接在服務器上操做rest
source /create-redis-container.sh
查看docker容器code
docker ps -a
若是不在服務器上,則能夠執行
# 遠程執行本地的腳本文件 ssh xxxx@xxx.xxx.xxx.xxx < ./create-redis-container.sh # 查看docker ssh xxxx@xxx.xxx.xxx.xxx "docker ps -a"
上述步驟能夠在多臺服務器上進行,以建立6/12/18/.../6*N個節點
以後選擇其中的一個容器進行集羣的建立,把涉及到的節點所有添加到進來
# 選擇任意一個redis容器 docker exec -it redis-750* redis-cli --cluster \ create xxx.xxx.xxx.xxx:7501 \ xxx.xxx.xxx.xxx:7502 xxx.xxx.xxx.xxx:7503 \ xxx.xxx.xxx.xxx:7504 xxx.xxx.xxx.xxx:7505 \ xxx.xxx.xxx.xxx:7506 --cluster-replicas 1
預覽一下主從信息,以後鍵入 yes
確認建立
若是不在服務器上,則能夠執行
# 選擇任意一個redis容器 ssh -t xxxx@xxx.xxx.xxx.xxx "docker exec -it redis-750* \ redis-cli --cluster create xxx.xxx.xxx.xxx:7501 \ xxx.xxx.xxx.xxx:7502 xxx.xxx.xxx.xxx:7503 \ xxx.xxx.xxx.xxx:7504 xxx.xxx.xxx.xxx:7505 \ xxx.xxx.xxx.xxx:7506 --cluster-replicas 1"
至此,redis-cluster 集羣就算是建立完成了
上述方法會建立3主3從(1:1)的集羣,主節點掛掉以後對應的從節點會頂上來
若是以爲從節點太少,建立集羣的時候能夠經過修改 --cluster-replicas
來調整每一個主節點的從節點數量,好比3主6從(1:2)什麼的,可是須要增長節點數量(從6節點增長到9節點)