Redis-cluster安装
原理概述可参考:https://www.cnblogs.com/jian0110/p/14002555.html
1.实验环境
node01:192.168.29.177 (7001,7002,7003)+7011,7012
node02:192.168.29.178 (7004,7005,7006)+7014,7015
2.安装
官网下载最新版本:
# wget http://download.redis.io/releases/redis-5.0.10.tar.gz
目录规划
node01:
# mkdir -p /opt/redis-cluster/700{1,2,3}
node02:
# mkdir -p /opt/redis-cluster/700{4,5,6}
编译安装
yum install -y gcc gcc-c++
tar xf redis-5.0.10.tar.gz
mv redis-5.0.10 /opt/redis-cluster/redis
cd /opt/redis-cluster/redis
make
3.配置
redis.conf配置文件
port 7001 #修改项
pidfile /var/run/redis_7001.pid #修改项
bind 0.0.0.0
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
protected-mode yes
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize no
supervised no
loglevel notice
logfile ""
databases 16
always-show-logo no
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir ./
replica-serve-stale-data yes
replica-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
replica-priority 100
requirepass "umeet,123!"
masterauth "umeet,123!"
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
aof-use-rdb-preamble yes
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
stream-node-max-bytes 4096
stream-node-max-entries 100
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit replica 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
dynamic-hz yes
aof-rewrite-incremental-fsync yes
rdb-save-incremental-fsync yes
4.启动redis
启动脚本
# cd /opt/redis-cluster/
# vi start-all.sh
node01:
#!/bin/bash
cd 7001
nohup ../redis/src/redis-server redis.conf &>/dev/null &
cd ../7002
nohup ../redis/src/redis-server redis.conf &>/dev/null &
cd ../7003
nohup ../redis/src/redis-server redis.conf &>/dev/null &
node02:
#!/bin/bash
cd 7004
nohup ../redis/src/redis-server redis.conf &>/dev/null &
cd ../7005
nohup ../redis/src/redis-server redis.conf &>/dev/null &
cd ../7006
nohup ../redis/src/redis-server redis.conf &>/dev/null &
启动
# cd /opt/redis-cluster/
# ./start-all.sh
开机启动
# vi /etc/rc.local
cd /opt/redis-cluster/
sh start-all.sh
5.cluster初始化
redis-cli --cluster create 192.168.29.177:7001 192.168.29.177:7002 192.168.29.177:7003 192.168.29.178:7004 192.168.29.178:7005 192.168.29.178:7006 --cluster-replicas 1 -a umeet,123!
#WARNING: redis-trib.rb is not longer available!
You should use redis-cli instead.
All commands and features belonging to redis-trib.rb have been moved
to redis-cli.
In order to use them you should call redis-cli with the --cluster
option followed by the subcommand name, arguments and options.
回显
6.验证
7.测试故障 主从切换
主:7001,7002,7004
从:7003,7005,7006
# redis-cli -p 7002 -a umeet,123! debug segfault
再启动7002
# cd 7002
# nohup ../redis/src/redis-server redis.conf &>/dev/null &
8.集群扩容
3主3从模式,扩容至5主5从,参考 https://blog.csdn.net/weixin_42440345/article/details/95048739
1.启动redis实例
node01:
# cd /opt/redis-cluster
# mkdir 7011 7012
# cp 7001/redis.conf 7011
# cp 7001/redis.conf 7012
# vi 7011/redis.conf
# cd 7011
# nohup ../redis/src/redis-server redis.conf &>/dev/null &
# cd ..
# vi 7012/redis.conf
# cd 7012
# nohup ../redis/src/redis-server redis.conf &>/dev/null &
node02: 7014 7015,同上
2.加入集群,注意hash槽的分配
添加master7011加入cluster
# redis-cli --cluster add-node 192.168.29.177:7011 192.168.29.177:7001 -a umeet,123!
分配slot
# redis-cli --cluster reshard 192.168.29.177:7011 --cluster-from 813e45fdeca3f3be3c2dd0e2d2347879b18d0f0c,47297c4291fc0291451f083e1aa2621735720303,c9d6772ed58977a9b435be16ef36ebc9296d974b --cluster-to 424b9116c878bcb71bcabe051ff91fd6ca07aad4 --cluster-slots 1024 -a umeet,123!
--cluster-from:表示slot目前所在的节点的node ID,多个ID用逗号分隔
--cluster-to:表示需要新分配节点的node ID(貌似每次只能分配一个)
--cluster-slots:分配的slot总数量
添加slave 7014
redis-cli --cluster add-node 192.168.29.178:7014 192.168.29.177:7011 --cluster-slave --cluster-master-id 424b9116c878bcb71bcabe051ff91fd6ca07aad4 -a umeet,123!
add-node: 后面的分别跟着新加入的slave和slave对应的master
cluster-slave:表示加入的是slave节点
--cluster-master-id:表示slave对应的master的node ID
最后两个实例添加进来后,最终
其它.cluster相关命令
附所有redis-cluster相关的集群命令:参考https://www.cnblogs.com/jian0110/p/14002555.html
cluster info :打印集群的信息
cluster nodes :列出集群当前已知的所有节点( node),以及这些节点的相关信息。
cluster meet <ip> <port> :将 ip 和 port 所指定的节点添加到集群当中。
cluster forget <node_id> :从集群中移除 node_id 指定的节点。
cluster replicate <master_node_id> :将当前从节点设置为 node_id 指定的master节点的slave节点。只能针对slave节点操作。
cluster saveconfig :将节点的配置文件保存到硬盘里面。
cluster addslots <slot> [slot ...] :将一个或多个槽( slot)指派( assign)给当前节点。
cluster delslots <slot> [slot ...] :移除一个或多个槽对当前节点的指派。
cluster flushslots :移除指派给当前节点的所有槽,让当前节点变成一个没有指派任何槽的节点。
cluster setslot <slot> node <node_id> :将槽 slot 指派给 node_id 指定的节点,如果槽已经指派给
cluster setslot <slot> migrating <node_id> :将本节点的槽 slot 迁移到 node_id 指定的节点中。
cluster setslot <slot> importing <node_id> :从 node_id 指定的节点中导入槽 slot 到本节点。
cluster setslot <slot> stable :取消对槽 slot 的导入( import)或者迁移( migrate)。
cluster keyslot <key> :计算键 key 应该被放置在哪个槽上。
cluster countkeysinslot <slot> :返回槽 slot 目前包含的键值对数量。
cluster getkeysinslot <slot> <count> :返回 count 个 slot 槽中的键 。
importing <node_id> :从 node_id 指定的节点中导入槽 slot 到本节点。
cluster setslot stable :取消对槽 slot 的导入( import)或者迁移( migrate)。
cluster keyslot :计算键 key 应该被放置在哪个槽上。
cluster countkeysinslot :返回槽 slot 目前包含的键值对数量。
cluster getkeysinslot :返回 count 个 slot 槽中的键 。