redis-cluster集群搭建
准备配置文件模板
我从不知道什么地方抄的
redis-cluster.tmpl
# 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
将配置模板推到服务器上(如果是直接在服务器上操作,则不需要这一步)
# 文件路径看个人喜好,我这儿图个方便
scp ./redis-cluster.tmpl xxxx@xxx.xxx.xxx.xxx:/redis-cluster.tmpl
生成对应节点的conf和data
新建一个.sh
脚本文件redis-cluster-sh.sh
#!/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
如果是直接在服务器上操作
source /redis-cluster-sh.sh xxx.xxx.xxx.xxx
查看生成的文件
tree /home/redis-cluster/
如果不在服务器上,则可以执行
ssh root@xxx.xxx.xxx.xxx -C "/bin/bash -s" < ./redis-cluster-sh.sh xxx.xxx.xxx.xxx
使用docker创建redis节点
创建一个.sh
脚本文件create-redis-container.sh
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
如果是直接在服务器上操作
source /create-redis-container.sh
查看docker容器
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节点)