Redis-cluster部署

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.

回显

1620445624727

1620445672294

6.验证

1620445715639

7.测试故障 主从切换

主:7001,7002,7004

从:7003,7005,7006

1620454508123

# redis-cli -p 7002 -a umeet,123! debug segfault

1620454649407

再启动7002

# cd 7002
# nohup ../redis/src/redis-server redis.conf &>/dev/null &

1620455327480

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!

1620458104874

1620458231471

分配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总数量

1620459006330

添加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

1620459235851

最后两个实例添加进来后,最终

1620459597163

其它.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 槽中的键 。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值