redis cluster集羣搭建

redis-cluster集羣搭建

準備配置文件模板

我從不知道什麼地方抄的node

redis-cluster.tmplredis

# 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

生成對應節點的conf和data

新建一個.sh腳本文件redis-cluster-sh.shshell

#!/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

使用docker建立redis節點

建立一個.sh腳本文件create-redis-container.shssh

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"

建立redis-cluster集羣

上述步驟能夠在多臺服務器上進行,以建立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節點)

相關文章
相關標籤/搜索