下载新版 redis
redis 地址
1 2 3 4 5
| cd /usr/local/redis/ wget https://download.redis.io/releases/redis-6.0.9.tar.gz tar xzf redis-6.0.9.tar.gz cd redis-6.0.9 make
|
创建路径
1 2 3
| mkdir /usr/local/redis-cluster cd redis-cluster/ mkdir -p 7000/data 7001/data 7002/data 7003/data 7004/data 7005/data
|
复制 redis 脚本
1 2 3
| mkdir /usr/local/redis-cluster/bin cd /usr/local/redis/src cp mkreleasehdr.sh redis-benchmark redis-check-aof redis-check-dump redis-cli redis-server redis-trib.rb /usr/local/redis-cluster/bin
|
复制实例并修改配置
1 2
| cp /usr/local/redis/redis-6.0.9/* /usr/local/redis-cluster/7000/ vim /usr/local/redis-cluster/7000/redis.conf
|
注意修改下列配置文件项,其余自行决定修改
1 2 3 4 5 6 7 8 9
| port 7000(每个节点的端口号) daemonize yes bind 192.168.119.131(绑定当前机器 IP,默认本机 127.0.0.1) dir /usr/local/redis-cluster/7000/data/(数据文件存放位置) pidfile /var/run/redis_7000.pid(pid 7000和port要对应) cluster-enabled yes(启动集群模式) cluster-config-file nodes7000.conf(7000和port要对应) cluster-node-timeout 15000 appendonly yes
|
最重要的 cluster 三个配置项 取消注释
重复另外5个节点。可以将 7000/ 复制到其他的目录。vim 进入后可以全局替换
启动集群
1 2 3 4 5 6
| /usr/local/redis-cluster/bin/redis-server /usr/local/redis-cluster/7000/redis.conf /usr/local/redis-cluster/bin/redis-server /usr/local/redis-cluster/7001/redis.conf /usr/local/redis-cluster/bin/redis-server /usr/local/redis-cluster/7002/redis.conf /usr/local/redis-cluster/bin/redis-server /usr/local/redis-cluster/7003/redis.conf /usr/local/redis-cluster/bin/redis-server /usr/local/redis-cluster/7004/redis.conf /usr/local/redis-cluster/bin/redis-server /usr/local/redis-cluster/7005/redis.conf
|
创建集群
1
| /usr/local/redis-cluster/bin/redis-cli --cluster create 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 --cluster-replicas 1
|
期间会询问主从节点,是否同意?一般没特殊的,前三个主节点,后3个从节点。
调试
注意使用 -c 参数来启动集群模式
1
| /usr/local/redis-cluster/bin/redis-cli -c -h 127.0.0.1 -p 7000
|
动态扩容、增加节点和减少节点,重新分配槽大小等
redis集群有 16384 个slot。
新增节点很方便
1 2 3 4 5
| //新增了主节点 redis-cli --cluster add-node 127.0.0.1:7006 127.0.0.1:7001
//新增从节点 redis-cli --cluster add-node 127.0.0.1:7007 127.0.0.1:7001 --cluster-slave --cluster-master-id *****
|
新增后需要重新分配 slot
1
| redis-cli --cluster reshard 127.0.0.1:7000 --cluster-from 1c08b1c921ab1e646323474c09113de627491c11 --cluster-to 8537eee4ae61a744feb1c805e5d0df18ffd5b00a --cluster-slots 1024 --cluster-yes --cluster-timeout 50000 --cluster-replace
|
动态扩容可以写脚本,或者一般云服务提供商都有成熟方案。
期间有几个致命问题
1 2 3
| 1.整体搬迁延迟,大 Key 的问题。需要设定阈值,超过阈值不搬迁,但这不是很好的方案,而且阈值不好定 2.搬迁过程中,多 key 会存在访问错误。mget/mset 会报错,slave 读取会出现空数据或者 loading 错误 3.扩容速度会占用 cpu。单个 redis qps 上限8万,每秒搬1万个,就至少占用12.5的
|