缓存雪崩---》大部分数据失效---》设置过期时间----》错开
过期时间错开、搭建高可用集群rediscluster分散数据io
集群搭建:
1.修改配置文件
bind 0.0.0.0
#使用的bind后保护模式可以不用关闭
protected-mode yes
port 6379
daemonize yes
pidfile /var/run/redis_6379.pid
logfile "/data/redis/logs/redisxxx.log"
dir /data/redis/data
#集群相关配置
#master主机密码,从机连接主机时要用到
masterauth 123456
#本机的密码
requirepass 123456
#开启集群模式
cluster-enabled yes
#集群信息的存放位置
cluster-config-file nodes-6379.conf
#没有从节点接替的情况下master主机挂掉了,当前集群还是否可用的配置项
#yes代表不可用 no代表可用
cluster-require-full-coverage no
linux命令:sed 's/7000/7001/g' redis7000/redis.conf > redis7001/redis.conf
连接redis集群:reids-cli -h 192.168.29.134 -p 7001 -a 123456
2.启动多个redis实例
/usr/local/bin/redis-server ./redis7000/redis.conf
/usr/local/bin/redis-server ./redis7001/redis.conf
/usr/local/bin/redis-server ./redis7002/redis.conf
/usr/local/bin/redis-server ./redis7003/redis.conf
/usr/local/bin/redis-server ./redis7004/redis.conf
/usr/local/bin/redis-server ./redis7005/redis.conf
以上启动是启动了六个相互孤立的cluster集群,每个集群下有一个实例
3.分配主从,分配槽位
[root@nodeo2 src]# redis-cli --cluster help
Cluster Manager Commands:
create host1:port1 ... hostN:portN
--cluster-replicas <arg>
check host:port
--cluster-search-multiple-owners
info host:port
fix host:port
--cluster-search-multiple-owners
reshard host:port
--cluster-from <arg>
--cluster-to <arg>
--cluster-slots <arg>
--cluster-yes
--cluster-timeout <arg>
--cluster-pipeline <arg>
--cluster-replace
rebalance host:port
--cluster-weight <node1=w1...nodeN=wN>
--cluster-use-empty-masters
--cluster-timeout <arg>
--cluster-simulate
--cluster-pipeline <arg>
--cluster-threshold <arg>
--cluster-replace
add-node new_host:new_port existing_host:existing_port
--cluster-slave
--cluster-master-id <arg>
del-node host:port node_id
call host:port command arg arg .. arg
set-timeout host:port milliseconds
import host:port
--cluster-from <arg>
--cluster-copy
--cluster-replace
help
/usr/local/bin/redis-cli -h 192.168.29.134 -p 7000 -a 123456 --cluster help
/usr/local/bin/redis-cli
--cluster create 192.168.29.134:7000 192.168.29.134:7001 192.168.29.134:7002 192.168.29.134:7003 192.168.29.134:7004 192.168.29.134:7005
--cluster-replicas 1 -a 123456
说明:--cluster-replicas 1 意思就是1:1 会判定7000\7001\7002为主节点,
7003 7004 7005是从节点,从节点的主节点随机分配。槽位平均分配(redis总槽位是16384个0~16383)。
集群搭建完成后客户端需要以集群方式连接及命令后多加一个 -c,不然key如果落在其他节点设置不进去.
-c参数可以自动重定向到其他节点,但java客户单jedis是没有这种功能的。
/usr/local/bin/redis-cli -h 192.168.29.134 -p 7000 -a 123456 -c
192.168.29.134:7000>cluster keyslot k2 可以算出k2的槽位是多少
4.集群的扩容
启动需要扩容的节点
/usr/local/bin/redis-server ./redis7006/redis.conf
/usr/local/bin/redis-server ./redis7007/redis.conf
加入到集群
/usr/local/bin/redis-cli --cluster add-node 192.168.29.134:7006 192.168.29.134:7000 -a 123456
加入从节点
/usr/local/bin/redis-cli --cluster add-node 192.168.29.134:7007 192.168.29.134:7006 --cluster-slave --cluster-master-id 7006的nodeid -a 123456
/#查看集群的节点(包含个节点的nodeid)
192.168.29.134>cluster nodes
重新分配槽位
比如新加入的分配300个槽位,可以选择从某一个或者某几个node上分出来300个曹给新加入的节点
也可以,选择从所有的节点上每个节点上分出来一些组成300个分给新增加的节点,
重新分配出去的槽位以及槽位上的数据会转移到新的节点上。
/usr/local/bin/redis-cli --cluster reshard 192.168.29.134:7000 -a 123456
5.主节点挂掉,从节点会变成主节点(故障转移)
故障转移期间,集群不可用。
cluster-require-full-coverage no 这个参数值no时集群部分可用,故障转移的那个节点槽位不可用,
其他节点可用。 yes所有节点故障转移期间都不可用。
6.集群的缩容
去除节点7007的槽位(槽位迁移)
/usr/local/bin/redis-cli --cluster reshard --cluster-from nodeid1 --cluster-to nodeid2 -a 123456
删除节点
/usr/local/bin/redis-cli --cluster del-node 192.168.29.134:7000 7007node_id -a 123456
/usr/local/bin/redis-cli --cluster del-node 192.168.29.134:7000 7006node_id -a 123456
网友评论