主要内容来自:https://www.cnblogs.com/xuchen0117/p/11678931.html
创建文件夹
mkdir redis-cluster-d
cd redis-cluster-d
vim redis-cluster.tmpl
port ${PORT}
masterauth 123456
requirepass 123456
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-announce-ip 106.52.41.56
cluster-announce-port ${PORT}
cluster-announce-bus-port 1${PORT}
appendonly yes
(1)port(端口号)
(2)masterauth(设置集群节点间访问密码,跟下面一致)
(3)requirepass(设置redis访问密码)
(4)cluster-enabled yes(启动集群模式)
(5)cluster-config-file nodes.conf(集群节点信息文件)
(6)cluster-node-timeout 5000(redis节点宕机被发现的时间)
(7)cluster-announce-ip(集群节点的ip,写主机ip,上面的ip是我随便写的)
(8)cluster-announce-port(集群节点的汇报port)
(9)cluster-announce-bus-port(集群节点的汇报bus-port)
(10) appendonly yes(开启aof)
生成节点文件
配置6个节点,3主3从
for port in `seq 6380 6385`; do \
mkdir -p ./${port}/conf \
&& PORT=${port} envsubst < ./redis-cluster.tmpl > ./${port}/conf/redis.conf \
&& mkdir -p ./${port}/data; \
done
使用tree查看文档结构,没有命令就安装
yum -y install tree
创建容器
可以用命令创建
for port in `seq 6380 6385`; do \
docker run -d --net=host \
-v /root/redis-cluster-d/${port}/conf/redis.conf:/etc/redis/redis.conf \
-v /root/redis-cluster-d/${port}/data:/data \
--restart always --name=redis-${port} redis \
redis-server /etc/redis/redis.conf; \
done
也可以使用docker-compose创建,要麻烦点
vim redis-cluster.yml
version: '3'
services:
redis:
image: redis
ports:
- "6380:6380"
container_name: "redis"
network_mode: "host"
volumes:
- "/root/docker/redis/redis-cluster-d/6380/conf/redis.conf:/etc/redis/redis.conf"
- "/root/docker/redis/redis-cluster-d/6380/data:/data"
- "/etc/localtime:/etc/localtime:ro"
command: redis-server /etc/redis/redis.conf
搭建集群
进入一个redis实例
docker exec -it redis-6380 bash
redis-cli -a 123456 --cluster create 106.52.41.56:6380 106.52.41.56:6381 106.52.41.56.78:6382 106.52.41.56:6383 106.52.41.56:6384 106.52.41.56:6385 --cluster-replicas 1
如果在箭头等待,要把服务器的安全组的端口放开,包括6380-6385、16380-16385
验证
redis-cli -c -a 123456 -p 6380
#批量停止
docker ps -a | grep -i "redis-*" | awk '{print $1}' | xargs docker stop
#批量删除
docker ps -a | grep -i "redis-*" | awk '{print $1}' | xargs docker rm -f