redis三大集群使用看这篇就差不多了 | 主从&哨兵&Cluster

redis集群模式介绍:

redis分为三种集群方式:
1、主从复制:部署方式简单,主节点负责读和写入数据,从节点负责只负责读,同时主节点会定期将新增数据同步到各个从节点,一确保数据的一致性,类似OracleDG;
-------优点:1、主从复制:保证多节点的情况下的数据一致性;2、读写分离:主库负责写,从库负责读,在实际应用中,通常分为二八原则,百分之八十的消耗和操作大多是来源于查询,插入数据也有可能会多,这个具体要根据实际业务场景来区分,读写分离的话这样可以大大减少主库的压力;3、主节点与从节点之间采用的是非阻塞的方式,这样即使在同步期间,客户端也可以进行写入,从节点查询会把同步前的数据返回。
-------缺点:当主节点宕机后,需要手动去切换主节点并更换从节点对应的主节点地址,这样停机时间很多,从运维和可用性角度来说是致命的缺陷。
2、哨兵模式:在主从复制的基础上增加了哨兵,哨兵用于监控各个节点的集群状态,当主节点宕机时,哨兵会通过投票选举的方式来自动进行主从切换,所以哨兵必须为单数,最少要有3个哨兵。
-切换时又分为两步骤:一、哨兵领导选举,选举一个领导将由这个领导来决定哪台从节点将要被切换为主节点。二、领导选择主节点,通常会根据哪台从节点目前的健康状态和性能等最佳的来选择,如果都一样那么就会根据节点启动时超声的runid最小的来作为主节点;
-哨兵监控集群状态又分为一下两种:一、主观下线:哨兵会定期向节点发送ping做心跳检测,当A哨兵向节点1做心跳检测发现无响应或返回错误信息后,会进入主观下线。二、客观下线:当主观下线的哨兵过半就会触发客观下线,客观下线也就是认为这个主节点异常了需要做主从切换,才会触发开头说的哨兵领导选举等。。。。
-------优点:已主从为基础,增加了哨兵可以实时自动监控主节点的状态,并自动选举新的主节点,在原有基础上解决了需要手动修改主从切换的相关配置,增加了redis服务的高可用性。
-------缺点:所有节点都存着相同的数据,这对内存资源消耗很大。
3、Redis Cluster:集合了上述两个模式,拓展了分布式存储,每个节点都存储着不同的数据,并且每个节点互联,无需通过中间代理,客户端可直接连接redis任何一个节点即可,每个主节点都分配了相应的哈希槽,每插入键值对都会通过CRC16(key)算法来计算键值对所使用的哈希槽实现分布式存储

一、redis三大集群部署及使用

一、redis主从复制部署

操作系统IP角色端口号
Centos7.6192.168.28.254主-读写6379
Centos7.6192.168.28.254从-读6380
Centos7.6192.168.28.254从-读6381

一、redis主从复制部署及配置

#安装依赖
yum install -y gcc tcl
#下载并解压
wget http://download.redis.io/releases/redis-7.2.4.tar.gz
tar -zxvf redis-7.2.4.tar.gz
#移动redis
mv redis-7.2.4 /usr/local/redis
#编译
cd /usr/local/redis/
make
make test
#test时出现异常
[err]: Active defrag - AOF loading in tests/unit/memefficiency.tcl
#定位异常
vim tests/unit/memefficiency.tcl

#修改参数的最大时间,尽量大些,一共要修改4处
assert {$max_latency <= 1500}

#安装
mkdir -p /opt/server/redis-6379/{conf,logs,pid,data,sentinel}
mkdir -p /opt/server/redis-6380/{conf,logs,pid,data,sentinel}
mkdir -p /opt/server/redis-6381/{conf,logs,pid,data,sentinel}
make install PREFIX=/opt/server/redis-6379
make install PREFIX=/opt/server/redis-6380
make install PREFIX=/opt/server/redis-6381

#复制配置文件
cp redis.conf /opt/server/redis-6379/conf/redis-6379.conf

#主节点修改如下相关配置
vim /opt/server/redis-6379/conf/redis-6379.conf
#配置如下
bind 192.168.28.254
port 6379
protected-mode no
timeout 0
daemonize yes
appendonly yes
requirepass Redis123 
masterauth Redis123
pidfile /opt/server/redis-6379/pid/redis_6379.pid
loglevel debug
logfile "/opt/server/redis-6379/logs/redis_6379.log"
dir /opt/server/redis-6379/data

#拷贝修改过后的主节点配置文件到从节点
cp /opt/server/redis-6379/conf/redis-6379.conf /opt/server/redis-6380/conf/redis-6380.conf
cp /opt/server/redis-6379/conf/redis-6379.conf /opt/server/redis-6381/conf/redis-6381.conf
#修改从节点配置
vim /opt/server/redis-6380/conf/redis-6380.conf
#修改如下配置,其他的不用动
port 6380
pidfile /opt/server/redis-6380/pid/redis_6380.pid
dir /opt/server/redis-6380/data
slaveof 192.168.28.254 6379
slave-read-only yes 
slave-priority 80

#从节点二一样
vim /opt/server/redis-6381/conf/redis-6381.conf
#修改如下配置,其他的不用动
port 6381
pidfile /opt/server/redis-6381/pid/redis_6381.pid
dir /opt/server/redis-6381/data
slaveof 192.168.28.254 6379
slave-read-only yes 
slave-priority 80

#启动
./redis-server ../conf/redis-6379.conf
./redis-server ../conf/redis-6380.conf
./redis-server ../conf/redis-6381.conf

#验证
#进入redis-6379
[root@localhost bin]# ./redis-cli -h 192.168.28.254 -p 6379
#这里是输入redis密码
192.168.28.254:6379> auth redis123
OK
#这里是往redis中插入数据
192.168.28.254:6379> set haha right
OK
#这里是往redis中插入数据
192.168.28.254:6379> set xixi class2
OK
#查看redis中的数据
192.168.28.254:6379> keys *
1) "haha"
2) "xixi"
192.168.28.254:6379> 
#切换到redis-80
[root@localhost bin]# ./redis-cli -h 192.168.28.254 -p 6380
192.168.28.254:6380> auth redis123
OK
#查看redis中的数据,与6379主节点一直就说明主从已完成同步
192.168.28.254:6380> keys *
1) "haha"
2) "xixi"
#从节点默认是只读的,所有无法插入数据,同时也不建议修改,不然会导致主从数据不一致
192.168.28.254:6380> set haha right
(error) READONLY You can't write against a read only replica.

二、redis主从复制手动切换

#停用6379
./redis-cli -h 192.168.28.254 -p 6379 -a redis123 shutdown
#查看redis进程,6379已不见了
[root@localhost bin]# ps -ef |grep redis
root      17313      1  0 16:33 ?        00:00:02 ./redis-server 192.168.28.254:6380
root      17335      1  0 16:33 ?        00:00:02 ./redis-server 192.168.28.254:6381

#主从切换
[root@localhost bin]# ./redis-cli -h 192.168.28.254 -p 6380 -a redis123 slaveof NO ONE
[root@localhost bin]# ./redis-cli -h 192.168.28.254 -p 6380 -a redis123 
#插入数据验证
192.168.28.254:6380> set jiji new
OK
192.168.28.254:6380> 
#切换6381
[root@localhost bin]# ./redis-cli -h 192.168.28.254 -p 6381 -a redis123
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
#发现他的数据并没有同步到6380的,因为他是配置文件里指向的主节点还是6379
192.168.28.254:6381> keys *
1) "Li"
2) "ma"
192.168.28.254:6380> get jiji
"new"
#所以当6379恢复后,我们还是要尽量给他恢复到6379主节点,恢复前需先保存一下6381当前节点新增的数据
[root@localhost bin]# ./redis-cli -h 192.168.28.254 -p 6380 -a redis123 save

#将6380的数据文件拷贝到6379,避免6380作为主库新增的数据丢失
cp /opt/server/redis-6380/data/dump.rdb /opt/server/redis-6379/data/dump.rdb

#启动6379
[root@localhost bin]# ./redis-server ../conf/redis-6379.conf
[root@localhost bin]# ps -ef |grep redis
root      17313      1  0 16:33 ?        00:00:04 ./redis-server 192.168.28.254:6380
root      17335      1  0 16:33 ?        00:00:05 ./redis-server 192.168.28.254:6381
root      17760      1  0 17:06 ?        00:00:00 ./redis-server 192.168.28.254:6379
#将6380切为从,6379切为主
./redis-cli -h 192.168.28.254 -p 6380 -a redis123 slaveof 192.168.28.254 6379
#验证6380是否切换成功
[root@localhost bin]# ./redis-cli -h 192.168.28.254 -p 6380 -a redis123
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
#插入数据,提示异常不能对从库进行写入,说明6380没问题了
192.168.28.254:6380> set uiui lll
(error) READONLY You can't write against a read only replica.

查看redis相关配置信息
info replication
reole:slave #为当前节点角色
master_host、master_port… #为master节点信息
在这里插入图片描述
主节点主要信息
connectded_slaves:2 #当前正常从节点数量为2
在这里插入图片描述

二、redis哨兵模式部署

操作系统IP角色redis端口号哨兵端口
Centos7.6192.168.28.254主-读写637926379
Centos7.6192.168.28.254从-读638026380
Centos7.6192.168.28.254从-读638126381

一、redis哨兵模式部署及配置

#在完成主从复制部署后,再来该模块部署哨兵
#拷贝哨兵配置文件至主节点
cp /usr/local/redis/sentinel.conf /opt/server/redis-6379/conf/sentinel_6379.conf
#修改
vim /opt/server/redis-6379/conf/senticel_26379.conf
port 26379  #哨兵端口号
daemonize yes  #开启后台启动
logfile "/opt/server/redis-6379/logs/senticel_26379.log"  #哨兵日志路径
dir /opt/server/redis-6379/sentinel #哨兵数据目录/工作目录
sentinel monitor mymaster 192.168.28.254 6379 2 #主节点IP 端口 2表示当有两个哨兵主观下线就触发客观下线
sentinel down-after-milliseconds mymaster 30000  #哨兵在监控主节点未响应等超时异常触发主观下线
sentinel failover-timeout mymaster 180000  #在主从切换超过这个时间就会认为切换失败
sentinel parallel-syncs mymaster 2  #有多少个从节点在切换时对新的主节点同步
sentinel auth-pass mymaster redis123  #连接主从节点的密码

#同步剩下两个哨兵节点配置文件
cp sentinel_26379.conf /opt/server/redis-6380/conf/sentinel_26380.conf
cp sentinel_26379.conf /opt/server/redis-6381/conf/sentinel_26381.conf

#修改哨兵二配置
vim /opt/server/redis-6380/conf/senticel_26380.conf
port 26380  #哨兵端口号
logfile "/opt/server/redis-6380/logs/senticel_26380.log"  #哨兵日志路径
dir /opt/server/redis-6380/sentinel #哨兵数据目录/工作目录

#修改哨兵三配置
vim /opt/server/redis-6381/conf/senticel_26381.conf
port 26381  #哨兵端口号
logfile "/opt/server/redis-6381/logs/senticel_26381.log"  #哨兵日志路径
dir /opt/server/redis-6381/sentinel #哨兵数据目录/工作目录

二、redis哨兵模式验证主从切换

[root@localhost bin]# ./redis-cli -h 192.168.28.254 -p 6379
192.168.28.254:6379> auth redis123
#主节点插入一个键值对
192.168.28.254:6379> set haha sdada
OK
192.168.28.254:6379> keys *
1) "ma"
2) "new"
3) "haha"
4) "Li"
192.168.28.254:6379> exit
[root@localhost bin]# ./redis-cli -h 192.168.28.254 -p 6380 
192.168.28.254:6380> auth redis123
OK
#从节点验证已同步了主节点的数据
192.168.28.254:6380> keys *
1) "Li"
2) "ma"
3) "new"
4) "haha"
192.168.28.254:6380> exit
#模拟主节点宕机,关闭6379
[root@localhost bin]# ./redis-cli -h 192.168.28.254 -p 6379 -a redis123 shutdown
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.

#验证6397进程是否还存在
[root@localhost server]# ps -ef |grep redis
root      14163      1  0 11:48 ?        00:00:01 /opt/server/redis-6380/bin/redis-server 192.168.28.254:6380
root      14169      1  0 11:48 ?        00:00:01 /opt/server/redis-6381/bin/redis-server 192.168.28.254:6381
root      14175      1  0 11:48 ?        00:00:01 /opt/server/redis-6379/bin/redis-sentinel *:26379 [sentinel]
root      14181      1  0 11:48 ?        00:00:01 /opt/server/redis-6380/bin/redis-sentinel *:26380 [sentinel]
root      14187      1  0 11:48 ?        00:00:01 /opt/server/redis-6381/bin/redis-sentinel *:26381 [sentinel]
#随机登录一个节点,6380
[root@localhost bin]# ./redis-cli -h 192.168.28.254 -p 6380 
192.168.28.254:6380> auth redis123
OK
#先等待一会,之前配置里设置了失效时间的
192.168.28.254:6380> auth redis123
OK
#再次查询,master_port已更改为6381为主节点了
192.168.28.254:6380> info replication
# Replication
role:slave
master_host:192.168.28.254
master_port:6381
master_link_status:up
master_last_io_seconds_ago:0
master_sync_in_progress:0
slave_read_repl_offset:89088
slave_repl_offset:89088
slave_priority:100
slave_read_only:1
replica_announced:1
connected_slaves:0
master_failover_state:no-failover
master_replid:5a978a503a192a9b212dba4620d7193c38d7dc51
master_replid2:33c3311361be1b8ee9d26a95ceaa90f7d5b8fa65
master_repl_offset:89088
second_repl_offset:78128
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:882
repl_backlog_histlen:88207
192.168.28.254:6380> exit
#节点三
[root@localhost bin]# ./redis-cli -h 192.168.28.254 -p 6381 
192.168.28.254:6381> auth redis123
OK
#节点三也可以看到,当前的角色为master(主节点)
192.168.28.254:6381> info replication
# Replication
role:master
connected_slaves:1
slave0:ip=192.168.28.254,port=6380,state=online,offset=566841,lag=0
master_failover_state:no-failover
master_replid:5a978a503a192a9b212dba4620d7193c38d7dc51
master_replid2:33c3311361be1b8ee9d26a95ceaa90f7d5b8fa65
master_repl_offset:566984
second_repl_offset:78128
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:882
repl_backlog_histlen:566103
192.168.28.254:6381> 
#原主节点6379重新恢复后
[root@localhost bin]# ./redis-server ../conf/redis-6379.conf 
[root@localhost bin]# ./redis-cli -h 192.168.28.254 -p 6381 
192.168.28.254:6381> auth redis123
OK
#可以看到原主节点会被当做一个新的从节点运行
192.168.28.254:6381> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.28.254,port=6380,state=online,offset=614219,lag=0
slave1:ip=192.168.28.254,port=6379,state=online,offset=614076,lag=0
master_failover_state:no-failover
master_replid:5a978a503a192a9b212dba4620d7193c38d7dc51
master_replid2:33c3311361be1b8ee9d26a95ceaa90f7d5b8fa65
master_repl_offset:614219
second_repl_offset:78128
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:882
repl_backlog_histlen:613338
192.168.28.254:6381>
#同时我们也可以看到原先配置的哨兵配置文件内的sentinel monitor mymaster参数都变为了6381为主节点
[root@localhost conf]# cat /opt/server/redis-6379/conf/sentinel_26379.conf |grep monitor
# sentinel monitor <master-name> <ip> <redis-port> <quorum>
# Tells Sentinel to monitor this master, and to consider it in O_DOWN
-------6381为当前哨兵监控的主节点
sentinel monitor mymaster 192.168.28.254 6381 2
# Useful if there is a password set in the Redis instances to monitor.
# if you want to be able to monitor these instances with Sentinel.
# other messaging system, that there is something wrong with the monitored

总结:当6379原主节点异常时间超过失效时间后,哨兵选举其中正常的服务作为主节点,同时会自动将所有redis节点以及哨兵配置文件中关于master(主节点)信息作为更改来实现主从切换,原6379不会再作为主节点运行,而是变更为从节点同步现6381的主节点数据,如还想让6379作为主节点还是需手动修改相关配置的

三、Redis Cluster分片模式部署

操作系统IP角色redis端口号哈希槽主从关联关系
Centos7.6192.168.28.254主-读写63790-54606379(主)-6382(从)
Centos7.6192.168.28.254主-读写63805461-109226380(主)-6383(从)
Centos7.6192.168.28.254主-读写638110923-163836381(主)-6384(从)
Centos7.6192.168.28.254从-读63826379(主)-6382(从)
Centos7.6192.168.28.254从-读63836380(主)-6383(从)
Centos7.6192.168.28.254从-读6386381(主)-6384(从)

一、Redis Cluster部署

#安装依赖
yum install -y gcc tcl
#下载并解压
wget http://download.redis.io/releases/redis-7.2.4.tar.gz
tar -zxvf redis-7.2.4.tar.gz
#移动redis
mv redis-7.2.4 /usr/local/redis
#编译并支持并发支持
cd /usr/local/redis/
make MALLOC=jemalloc
make test
#test时出现异常
[err]: Active defrag - AOF loading in tests/unit/memefficiency.tcl
#定位异常
vim tests/unit/memefficiency.tcl

#修改参数的最大时间,尽量大些,一共要修改4处
assert {$max_latency <= 1500}

#安装
mkdir -p /opt/server/redis-6379/{conf,logs,pid,data}
mkdir -p /opt/server/redis-6380/{conf,logs,pid,data}
mkdir -p /opt/server/redis-6381/{conf,logs,pid,data}
mkdir -p /opt/server/redis-6382/{conf,logs,pid,data}
mkdir -p /opt/server/redis-6383/{conf,logs,pid,data}
mkdir -p /opt/server/redis-6384/{conf,logs,pid,data}
make install PREFIX=/opt/server/redis-6379
make install PREFIX=/opt/server/redis-6380
make install PREFIX=/opt/server/redis-6381
make install PREFIX=/opt/server/redis-6382
make install PREFIX=/opt/server/redis-6383
make install PREFIX=/opt/server/redis-6384

#拷贝配置文件至6379
cp redis.conf /opt/server/redis-6379/conf/redis-6379.conf
cp sentinel.conf /opt/server/redis-6379/conf/sentinel_26379.conf

#环境优化,启用大页面压缩
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
echo 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' >> /etc/rc.local
echo 'echo never > /sys/kernel/mm/transparent_hugepage/defrag' >> /etc/rc.local
#文件并发数
echo "* - nofile 10240" >> /etc/security/limits.conf 
#队列监听数
echo "net.core.somaxconn = 10240" >> /etc/sysctl.conf
#分配所有内存
echo "vm.overcommit_memory = 1" >> /etc/sysctl.conf 

#修改redis配置文件
vim /opt/server/redis-6379/conf/redis-6379.conf
#修改内容如下
bind 192.168.28.254
pidfile /opt/server/redis-6379/pid/redis_6379.pid
logfile "/opt/server/redis-6379/logs/redis_6379.log"
dir /opt/server/redis-6379/data/ 
protected-mode no
tcp-backlog 1024  #面对大量请求的并发积压
timeout 0  #客户端空闲多少秒关闭连接,0表示禁用
daemonize yes
loglevel notice #日志级别,该配置默认为生产级
databases 16  #数据库数量,默认16
replica-serve-stale-data yes
replica-read-only yes
repl-diskless-sync no  #无盘复制
no-appendfsync-on-rewrite no  #官方的解释如果有延迟就yes,但是从耐久性no是最安全的
requirepass Redis123 
masterauth Redis123
cluster-enabled yes
cluster-config-file nodes-6379.conf

#修改完成后,拷贝配置文件到各节点配置文件路径
cp /opt/server/redis-6379/conf/redis-6379.conf  /opt/server/redis-6380/conf/redis-6380.conf
cp /opt/server/redis-6379/conf/redis-6379.conf  /opt/server/redis-6381/conf/redis-6381.conf
cp /opt/server/redis-6379/conf/redis-6379.conf  /opt/server/redis-6382/conf/redis-6382.conf
cp /opt/server/redis-6379/conf/redis-6379.conf  /opt/server/redis-6383/conf/redis-6383.conf
cp /opt/server/redis-6379/conf/redis-6379.conf  /opt/server/redis-6384/conf/redis-6384.conf
#修改其余节点配置文件内的参数,如port
sed -i 's/6379/6380/g' /opt/server/redis-6380/conf/redis-6380.conf
sed -i 's/6379/6381/g' /opt/server/redis-6381/conf/redis-6381.conf
sed -i 's/6379/6382/g' /opt/server/redis-6382/conf/redis-6382.conf
sed -i 's/6379/6383/g' /opt/server/redis-6383/conf/redis-6383.conf
sed -i 's/6379/6384/g' /opt/server/redis-6384/conf/redis-6384.conf

#启动所有redis节点服务,由于节点很多启动起来太麻烦了,所有我这里写成了一个脚本,可以参考一下
[root@localhost server]# ./redis-start.sh
#脚本内容
#/bin/bash
#redis启动
/opt/server/redis-6379/bin/redis-server /opt/server/redis-6379/conf/redis-6379.conf
/opt/server/redis-6380/bin/redis-server /opt/server/redis-6380/conf/redis-6380.conf
/opt/server/redis-6381/bin/redis-server /opt/server/redis-6381/conf/redis-6381.conf
/opt/server/redis-6382/bin/redis-server /opt/server/redis-6382/conf/redis-6382.conf
/opt/server/redis-6383/bin/redis-server /opt/server/redis-6383/conf/redis-6383.conf
/opt/server/redis-6384/bin/redis-server /opt/server/redis-6384/conf/redis-6384.conf
#哨兵启动
#/opt/server/redis-6379/bin/redis-sentinel /opt/server/redis-6379/conf/senticel_26379.conf
#/opt/server/redis-6380/bin/redis-sentinel /opt/server/redis-6380/conf/senticel_26380.conf
#/opt/server/redis-6381/bin/redis-sentinel /opt/server/redis-6381/conf/senticel_26381.conf
=====================================================================================
#启动完成后查看进程
[root@localhost server]# ps -ef |grep redis

可以看出所有端口都起来了,并且是以cluster集群启动的
在这里插入图片描述

#配置主从关系,-a redis123(密码) --cluster create(创建集群) --cluster-replicas 1(每个master对应一个slav从节点)
./redis-cli -a redis123 --cluster create --cluster-replicas 1 192.168.28.254:6379 192.168.28.254:6380 192.168.28.254:6381 192.168.28.254:6382 192.168.28.254:6383 192.168.28.254:6384

在这里插入图片描述

#查看集群关系,进入6379
[root@localhost bin]# ./redis-cli -h 192.168.28.254 -p 6379 -a redis123
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
#查看节点信息
192.168.28.254:6379> INFO replication
# Replication
#当前6379为master角色
role:master
#对应的从节点:1
connected_slaves:1
#节点IP:端口
slave0:ip=192.168.28.254,port=6382,state=online,offset=1064,lag=1
master_failover_state:no-failover
master_replid:e8567d80f9b196740f59f8f05971d00c9e1a5c0c
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:1064
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:1064
#查看集群节点配比信息
192.168.28.254:6379> CLUSTER NODES
e4e25387b01925260afffd6a6f6214002a5bc7a4 192.168.28.254:6384@16384 slave 36f02cd63006eb77e044068d99844d32ad9fb48c 0 1715326443741 3 connected
8c793f547a1c72f9ab7363abb971118b1a380086 192.168.28.254:6380@16380 master - 0 1715326445755 2 connected 5461-10922
c72d05f28ef0884a11b584a03e9f3de83172bf98 192.168.28.254:6379@16379 myself,master - 0 1715326444000 1 connected 0-5460
36f02cd63006eb77e044068d99844d32ad9fb48c 192.168.28.254:6381@16381 master - 0 1715326445000 3 connected 10923-16383
212da48192c910d528f13b431cc540694c3fe55e 192.168.28.254:6382@16382 slave c72d05f28ef0884a11b584a03e9f3de83172bf98 0 1715326446761 1 connected
907955a3fc773437cc62c5c7997bad7e77340056 192.168.28.254:6383@16383 slave 8c793f547a1c72f9ab7363abb971118b1a380086 0 1715326446000 2 connected
#查看集群资源情况
192.168.28.254:6379> CLUSTER info
cluster_state:ok
#使用了多少槽位
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
#多少个nodes节点
cluster_known_nodes:6
cluster_size:3
cluster_current_epoch:6
cluster_my_epoch:1
cluster_stats_messages_ping_sent:1089
cluster_stats_messages_pong_sent:1046
cluster_stats_messages_sent:2135
cluster_stats_messages_ping_received:1041
cluster_stats_messages_pong_received:1089
cluster_stats_messages_meet_received:5
cluster_stats_messages_received:2135
total_cluster_links_buffer_limit_exceeded:0

此时我要在此集群内插入一个键值对,发现他报错了,错误的意思就是通过他的算法得出这个键值对的卡槽位是12706,那刚我们部署的时候说过,每个主节点他都分配了不同的卡槽位,那么我的6379他的卡槽位是0-5460,所以无法将这个卡槽为位12706的插入,我需要到6381里如插入数据,那这样就引出一个路由的东西,我们在连接cli的时候需要加的-c路由


192.168.28.254:6379> set k1 v1
(error) MOVED 12706 192.168.28.254:6381
[root@localhost bin]# ./redis-cli -h 192.168.28.254 -p 6379 -a redis123 -c
192.168.28.254:6379> set k1 v1
#此时就发现可以插入了,他通过路由重定向到了6381,所以说该集群与前面两种方式在数据存储上大不相同,
#每个节点都各自存着不同的数据,就避免的所有节点都存着同样的数据,导致资源消耗大
-> Redirected to slot [12706] located at 192.168.28.254:6381
OK
192.168.28.254:6381> get k1
"v1"

二、Redis Cluster验证主从切换

首先先确认下目前集群节点关联信息
在这里插入图片描述

#确认好后,我们把6379这个主节点给模拟宕机,关掉
[root@localhost bin]# ./redis-cli -h 192.168.28.254 -p 6379 -a redis123 -c
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
192.168.28.254:6379> SHUTDOWN
#查看进程,6379以不存在了,接下来就看,6379关联的6382这个从节点是否能上位
[root@localhost bin]# ps -ef |grep redis
root      44950      1  0 15:15 ?        00:00:08 /opt/server/redis-6380/bin/redis-server 192.168.28.254:6380 [cluster]
root      44960      1  0 15:15 ?        00:00:09 /opt/server/redis-6381/bin/redis-server 192.168.28.254:6381 [cluster]
root      44962      1  0 15:15 ?        00:00:09 /opt/server/redis-6382/bin/redis-server 192.168.28.254:6382 [cluster]
root      44972      1  0 15:15 ?        00:00:09 /opt/server/redis-6383/bin/redis-server 192.168.28.254:6383 [cluster]
root      44974      1  0 15:15 ?        00:00:09 /opt/server/redis-6384/bin/redis-server 192.168.28.254:6384 [cluster]
#进入6382
[root@localhost bin]# ./redis-cli -h 192.168.28.254 -p 6382 -a redis123 -c
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
#查询集群节点信息
192.168.28.254:6382> CLUSTER NODES
36f02cd63006eb77e044068d99844d32ad9fb48c 192.168.28.254:6381@16381 master - 0 1715329273090 3 connected 10923-16383
212da48192c910d528f13b431cc540694c3fe55e 192.168.28.254:6382@16382 myself,master - 0 1715329270000 7 connected 0-5460
c72d05f28ef0884a11b584a03e9f3de83172bf98 192.168.28.254:6379@16379 master,fail - 1715329175251 1715329171219 1 disconnected
907955a3fc773437cc62c5c7997bad7e77340056 192.168.28.254:6383@16383 slave 8c793f547a1c72f9ab7363abb971118b1a380086 0 1715329274097 2 connected
8c793f547a1c72f9ab7363abb971118b1a380086 192.168.28.254:6380@16380 master - 0 1715329273000 2 connected 5461-10922
e4e25387b01925260afffd6a6f6214002a5bc7a4 192.168.28.254:6384@16384 slave 36f02cd63006eb77e044068d99844d32ad9fb48c 0 1715329269000 3 connected

在这里插入图片描述

#6382插入一条数据
192.168.28.254:6382> set k2 v2
OK
#启动6379
[root@localhost bin]# ./redis-server ../conf/redis-6379.conf
#进入6379
[root@localhost bin]# ./redis-cli -h 192.168.28.254 -p 6379 -a redis123 -c
#查看集群节点信息
192.168.28.254:6379> CLUSTER NODES
c72d05f28ef0884a11b584a03e9f3de83172bf98 192.168.28.254:6379@16379 myself,slave 212da48192c910d528f13b431cc540694c3fe55e 0 1715329789000 7 connected
e4e25387b01925260afffd6a6f6214002a5bc7a4 192.168.28.254:6384@16384 slave 36f02cd63006eb77e044068d99844d32ad9fb48c 0 1715329792003 3 connected
212da48192c910d528f13b431cc540694c3fe55e 192.168.28.254:6382@16382 master - 0 1715329790000 7 connected 0-5460
907955a3fc773437cc62c5c7997bad7e77340056 192.168.28.254:6383@16383 slave 8c793f547a1c72f9ab7363abb971118b1a380086 0 1715329787000 2 connected
36f02cd63006eb77e044068d99844d32ad9fb48c 192.168.28.254:6381@16381 master - 0 1715329791000 3 connected 10923-16383
8c793f547a1c72f9ab7363abb971118b1a380086 192.168.28.254:6380@16380 master - 0 1715329791000 2 connected 5461-10922

此时就可以看到跟哨兵模式是一样的,主节点挂了,从节点自动上位,原主节点恢复后将作为新从节点运行,原从节点将一直作为主节点运行
在这里插入图片描述
那如果我不想让6382做主节点,我想把6379扶正,恢复成我原来的架构,那么接下来就会涉及到,从属调整也称为故障切换

#进入要切换的redis端口服务,执行如下命令
192.168.28.254:6379> CLUSTER FAILOVER
OK
#此时再查,6379以重新上位了
192.168.28.254:6379> CLUSTER NODES
c72d05f28ef0884a11b584a03e9f3de83172bf98 192.168.28.254:6379@16379 myself,master - 0 1715330397000 8 connected 0-5460
e4e25387b01925260afffd6a6f6214002a5bc7a4 192.168.28.254:6384@16384 slave 36f02cd63006eb77e044068d99844d32ad9fb48c 0 1715330400182 3 connected
212da48192c910d528f13b431cc540694c3fe55e 192.168.28.254:6382@16382 slave c72d05f28ef0884a11b584a03e9f3de83172bf98 0 1715330401190 8 connected
907955a3fc773437cc62c5c7997bad7e77340056 192.168.28.254:6383@16383 slave 8c793f547a1c72f9ab7363abb971118b1a380086 0 1715330402196 2 connected
36f02cd63006eb77e044068d99844d32ad9fb48c 192.168.28.254:6381@16381 master - 0 1715330400000 3 connected 10923-16383
8c793f547a1c72f9ab7363abb971118b1a380086 192.168.28.254:6380@16380 master - 0 1715330400000 2 connected 5461-10922
  • 7
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Redis 主从哨兵集群是一种高可用的解决方案,它使用哨兵(Sentinel)来监控和管理主从节点。哨兵会自动检测并切换故障的主节点,保证服务的连续性。以下是在 shell 中部署 Redis 主从哨兵集群的基本步骤: 1. **安装 Redis 和 Sentinel**: - 首先,确保你的系统已经安装了 Redis,如果没有,可以使用包管理器(如 apt-get 或 yum)安装。 - 安装 Sentinel,一般可以通过 Redis 的官方发行版或单独下载源码编译安装。 2. **配置 Sentinel**: - 在每个 Sentinel 服务器上编辑 `sentinel.conf` 文件,设置监听地址、集群名、哨兵角色等配置。例如: ``` sentinel monitor mycluster master 26379 2 10 ``` 这里 `mycluster` 是集群名称,`master` 是主节点的角色,`26379` 是主节点的端口,`2` 是当有多于两个 Sentinel 观察到主节点失败时的投票数,`10` 是在主节点失败后等待其他 Sentinel 同意切换的时间(秒)。 3. **配置主从节点**: - 对于主节点,设置 `protected-mode no`,允许外部客户端连接。 - 对于从节点,配置 `slaveof` 指令指向主节点,如: ``` redis-server --slaveof <master_ip> <master_port> ``` 4. **启动 Redis 和 Sentinel**: - 以守护进程模式启动 Redis 服务器,并指定 `sentinel` 插件,例如: ``` redis-server --sentinel <your_server_ip>:26379 ``` - 同样启动 Sentinel,监听不同的端口,如 `redis-server --sentinel` 5. **验证集群健康**: - 使用 Redis 命令行客户端 `redis-cli` 或者 `sentinel get-master-addr-by-name mycluster` 来检查哨兵是否能获取到正确的主节点地址。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值