redis(十):redis Sentinel

1.主从复制的问题

(1)主从复制中,如果master宕机了,必须手动去选出一个master,再继续转移数据到改master上。
(2)读写能力受到限制。只有一个master可以存储数据,其他的只能当作读数据库。

2.redis sentinel

(1)client访问redis时,在client访问地址是sentinel集群的一个sentinel(这里的sentinel其实就类似于zookeeper监控hadoop组件)
(2)sentinel会对master进行一个调节,sentinel可以区分谁是master,谁是slave。一旦出现master宕机,sentinel就会转移故障。
在这里插入图片描述
(1)一旦master宕机了,就会选举出一个新的master,选举算法,后面再讲解。
(2)如果选出新的master以后,原来的master又重新启动了,就让它成为一个slave去连接新的master。
在这里插入图片描述
一个sentinel可以监控多个master-slave集群,每套master-slave会有一个master-name作为标识。
在这里插入图片描述

3.redis 主从配置

在一个机器上模拟3台redis,配置的架构图。
在这里插入图片描述
在redis的config目录下:(需要手动新建config文件)

vi redis-7000.conf

redis-7000.conf的内容

port 7000
daemonize yes 
pidfile /usr/local/redis/data/redis-7000.pid 
logfile "/usr/local/redis/logs/redis-7000.log"
dir "/usr/local/redis/data" #工作目录,也就是rdb文件存放的地方

复制

sed "s/7000/7001/g" redis-7000.conf > redis-7001.conf #并将文件中的7000全局替换成7001
sed "s/7000/7002/g" redis-7000.conf > redis-7002.conf

查看配置
在这里插入图片描述
设置redis-7000为主节点

echo "slaveof 127.0.0.1 7000" >> redis-7001.conf
echo "slaveof 127.0.0.1 7000" >> redis-7002.conf

启动redis-7000
在这里插入图片描述
用同样的方式启动其他配置

redis-server redis-7001.conf
redis-server redis-7002.conf

查看后台进程

ps -ef | grep redis-server | grep 700

在这里插入图片描述
查看主从关系

redis-cli -p 7000 info replication

在这里插入图片描述

4. redis sentinel配置

将sentinel.conf拷贝到config目录

cp sentinel.conf config/

删除所有的注释

 cat sentinel.conf | grep -v "#" | grep -v "^$"

在这里插入图片描述
写入到配置文件

cat sentinel.conf | grep -v "#" | grep -v "^$" > redis-sentinel-26379.conf

配置redis-sentinel-26379.conf,在redis-sentinal中我们只需要配置master就行,redis-sentinel会通过info replication自动获取从节点信息

redis-sentinel中mymaster 用于标识不同的master-slave集群

port 26379
dir /usr/local/redis/data
logfile "/usr/local/redis/logs/redis-sentinel-26379.log"
sentinel monitor mymaster 127.0.0.1 7000 2
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000
daemonize yes

启动redis-sentinel

 redis-sentinel redis-sentinel-26379.conf 

查看是否启动

ps -ef | grep redis-sentinel

在这里插入图片描述
连接redis-sentinel

redis-cli -p 26379

在这里插入图片描述
直接在客户端使用info

127.0.0.1:26379> info
# Server
redis_version:4.0.2
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:295a0ed66cd7604a
redis_mode:sentinel
os:Linux 2.6.32-573.el6.x86_64 x86_64
arch_bits:64
multiplexing_api:epoll
atomicvar_api:sync-builtin
gcc_version:4.4.7
process_id:3657
run_id:e0de9acefe48b6f5b0bacd58340037f96b9cb6cb
tcp_port:26379
uptime_in_seconds:199
uptime_in_days:0
hz:11
lru_clock:8666370
executable:/usr/local/redis/config/redis-sentinel
config_file:/usr/local/redis/config/redis-sentinel-26379.conf

# Clients
connected_clients:1
client_longest_output_list:0
client_biggest_input_buf:0
blocked_clients:0

# CPU
used_cpu_sys:0.20
used_cpu_user:0.17
used_cpu_sys_children:0.00
used_cpu_user_children:0.00

# Stats
total_connections_received:1
total_commands_processed:0
instantaneous_ops_per_sec:0
total_net_input_bytes:31
total_net_output_bytes:32
instantaneous_input_kbps:0.00
instantaneous_output_kbps:0.00
rejected_connections:0
sync_full:0
sync_partial_ok:0
sync_partial_err:0
expired_keys:0
evicted_keys:0
keyspace_hits:0
keyspace_misses:0
pubsub_channels:0
pubsub_patterns:0
latest_fork_usec:0
migrate_cached_sockets:0
slave_expires_tracked_keys:0
active_defrag_hits:0
active_defrag_misses:0
active_defrag_key_hits:0
active_defrag_key_misses:0

# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=127.0.0.1:7000,slaves=2,sentinels=1

退出客户端
在这里插入图片描述
此时再查看,配置信息已经更新,配置文件中自动生成了slave相关的信息

cat redis-sentinel-26379.conf

在这里插入图片描述
变成redis-sentinel集群

生成其他两个sentinel的配置

sed "s/26379/26381/g" redis-sentinel-26379.conf > redis-sentinel-26381.conf 
sed "s/26379/26380/g" redis-sentinel-26379.conf > redis-sentinel-26380.conf

启动这两个sentinel

redis-sentinel redis-sentinel-26380.conf 
redis-sentinel redis-sentinel-26381.conf 

查看

ps -ef | grep redis-sentinel | grep 263

在这里插入图片描述
连接查看

redis-cli -p 26379
127.0.0.1:26379> info #在redis客户端中使用该命令行

在这里插入图片描述

5. redis-sentinel内部原理

三个定时任务保证master,slave和sentinel之间数据的交互
在这里插入图片描述

6.sentinel的主观下线和客观下线

下面是客观下线和主观下线的命令:
在这里插入图片描述
sentinel is-master-down-by-addr可以询问其他sentinel节点是否也认为该master或者slave也需要客观下线。

7.领导者选举

为了完成故障转移,需要选举一个sentinel去完成领导者的选举。
sentinel is-master-down-by-addr命令的另一个作用:选举成为领导者
在这里插入图片描述

8.sentinel完成故障转移

在这里插入图片描述
那什么是“合适的”节点,可以被作为master呢?
ps:runId最小的节点就是启动最早的节点。
在这里插入图片描述

9.手动下线

手动下线master,直接在某个sentinel上执行,sentinel会自动完成故障转移的过程
在这里插入图片描述
节点上线
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值