Redis 集群配置
密码:redis123456
备份:未开启
保护模式(protected-mode):未开启。如果开启,需要指定bind: 0.0.0.0,否则应用连接集群会报错
网络规划
IP | PORT | 描述 |
---|---|---|
192.123.2.1 | 6380、16380 | 6380端口:用于客户端连接。16380集群总线端口:用于集群进行故障检测、配置更新、故障转移授权等 |
192.123.2.1 | 6381、16381 | 同上 |
192.123.2.2 | 6380、16380 | 同上 |
192.123.2.2 | 6381、16381 | 同上 |
192.123.2.3 | 6380、16380 | 同上 |
192.123.2.3 | 6381、16381 | 同上 |
搭建Redis节点服务
以下操作分别在192.123.2.1、192.123.2.2、192.123.2.3机器上都操作一遍。
注意: cluster-announce-ip需要改成对应机器的IP
redis-cluster.tmpl
用于自动生成redis.conf配置文件
1 | # 节点端口 |
如果需要监听 session 销毁事件,需要开启 notify-keyspace-events 值为 KEA,否则 HttpSessionListener 收不到销毁事件
1 | notify-keyspace-events 的参数可以是以下字符的任意组合,它指定了服务器该发送哪些类型的通知: |
redids-cluster.sh
还行本脚本,会自动根据redis-cluster.tmpl模板文件生产Redis集群节点的redis.conf文件。其中6380 6381为redis节点的端口
1 | for port in `seq 6380 6381`; do \ |
生成文件
执行redis-cluster.sh脚本,生成文件树如下
1 | [grg@i-8A5B7366 redis-cluster]$ tree |
docker-compose.yml
1 | version: '3.8' |
启动节点
1 | docker-compose up -d |
搭建集群
创建集群
在任意一台服务器上执行以下命令
1 | docker exec -it redis-6380 redis-cli -p 6380 -a redis123456 --cluster create 192.123.2.1:6380 192.123.2.1:6381 192.123.2.2:6380 192.123.2.2:6381 192.123.2.3:6380 192.123.2.3:6381 --cluster-replicas 1 |
出现以下信息
1 | >>> Performing hash slots allocation on 6 nodes... |
输入“yes”
1 | Can I set the above configuration? (type 'yes' to accept): yes |
出现本信息说明集群创建成功。
集群验证
连接至集群任意节点
1 | # 登录容器 |
查看集群信息
1 | cluster info |
查看集群节点信息
1 | cluster nodes |
容灾演练
原理,根据集群节点信息,docker stop掉任意一个master节点,看看它的slave节点是否会被选举为master节点。然后再重新重启stop掉的节点,看看它是否会变成slave节点。
1 | 192.123.2.1:6380> cluster nodes |
根据以上信息,可以知道192.123.2.3:6381是master节点,192.123.2.2:6380是它的slave节点。
登录192.123.2.3服务器,执行
1 | docker stop redis-6381 |
在查询节点信息,可以发现 192.123.2.3:6381已经是fail状态,而 192.123.2.2:6380已经变成master节点。
1 | 192.123.2.1:6380> cluster nodes |
重启fail节点
1 | docker start redis-6381 |
可以发现 192.123.2.3:6381变成了 192.123.2.2:6380 master节点的slave节点。
1 | 192.123.2.1:6380> cluster nodes |
简单压测
1 | redis-benchmark -h 192.123.2.1 -p 6380 -t set -c 100 -n 50000 -d 20 |