博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
学会Redis主从与哨兵模式一篇就够了!
阅读量:2026 次
发布时间:2019-04-28

本文共 8325 字,大约阅读时间需要 27 分钟。

文章目录

一:redis主从和哨兵模式简介

采用主从架构的模式,可以实现当主redis进行数据存储操作时,从redis也同样进行存储,实现了数据的备份;再结合哨兵模式,监控所有redis节点,当主redis宕机后,如果超过一半数量的哨兵都检测到主宕机,就会在从redis中选举出新的主redis,于是从redis切换为新的主服务器,继续提供redis服务,解决了单点故障的问题。

二:哨兵模式原理和作用

哨兵模式原理

哨兵(sentinel) 是一个分布式系统,用于对主从结构中的每台服务器进行监控,当出现故障时通过投票机制选择新的master并将所有slave连接到新的master。所以整个运行哨兵的集群的数量不得少于3个节点。

哨兵模式的作用

① 监控
不断的检查master和slave是否正常运行。
master存活检测、master与slave运行情况检测
② 通知(提醒)
当被监控的服务器出现问题时,向其他(哨兵间,客户端)发送通知。
③ 自动故障转移
断开master与slave连接,选取一个slave作为master,将其他slave连接到新的master,并告知客户端新的服务器地址
PS:哨兵也是一台redis服务器,只是不提供数据服务
哨兵的启动依赖于主从模式,所以须把主从模式安装好的情况下再去做哨兵模式,所有节点上都需要部署哨兵模式,哨兵模式会监控所有的redis工作节点是否正常,当master出现问题的时候,因为其他节点与主节点失去联系,因此会投票,投票过半就认为这个master的确出现问题,然后会通知哨兵间,然后从slaves中选取一个作为新的master

三:主从部署

3.1:案例环境

三台服务器都安装redis,安装方法

在这里插入图片描述

3.2: 主从模式配置

修改配置文件(三个节点都需要修改)

主机名 ip
master 192.168.158.10
slave 192.168.158.20
slave 192.168.158.30

3.3:Redis安装

所有服务器上安装,在master上演示

[root@server1 ~]# tar xf redis-5.0.7.tar.gz [root@server1 ~]# cd redis-5.0.7/[root@server1 redis-5.0.7]# make[root@server1 redis-5.0.7]# make PREFIX=/usr/local/redis install[root@server1 redis-5.0.7]# ln -s /usr/local/redis/bin/* /usr/local/bin/[root@server1 redis-5.0.7]# cd utils/[root@server1 utils]# ./install_server.shWelcome to the redis service installerThis script will help you easily set up a running redis serverPlease select the redis port for this instance: [6379] Selecting default: 6379Please select the redis config file name [/etc/redis/6379.conf] Selected default - /etc/redis/6379.confPlease select the redis log file name [/var/log/redis_6379.log] Selected default - /var/log/redis_6379.logPlease select the data directory for this instance [/var/lib/redis/6379] Selected default - /var/lib/redis/6379Please select the redis executable path [/usr/local/bin/redis-server] Selected config:Port           : 6379Config file    : /etc/redis/6379.confLog file       : /var/log/redis_6379.logData dir       : /var/lib/redis/6379Executable     : /usr/local/bin/redis-serverCli Executable : /usr/local/bin/redis-cliIs this ok? Then press ENTER to go on or Ctrl-C to abort.Copied /tmp/6379.conf => /etc/init.d/redis_6379Installing service...Successfully added to chkconfig!Successfully added to runlevels 345!Starting Redis server...Installation successful!

3.4:修改主配置文件

[root@server1 ~]# vim /etc/redis/6379.conf#70行 修改监听地址为192.168.158.10(在实验环境使用),现网环境建议绑定从服务器IP地址bind 192.168.158.10#136行 开启守护进程daemonize yes#171行 修改日志文件目录logfile /var/log/redis_6379.log#263行 修改工作目录dir /var/lib/redis/6379#700行 开启AOF持久化功能appendonly yes[root@master utils]# /etc/init.d/redis_6379 restart      #开启Redis[root@server1 ~]# netstat -anpt | grep redistcp        0      0 192.168.158.10:6379     0.0.0.0:*               LISTEN      11447/reds-server

3.5:修改从配置文件

vim /etc/redis/6379.conf#70行 修改监听地址为192.168.158.20(在实验环境使用),现网环境建议绑定从服务器IP地址bind 192.168.158.20#136行 开启守护进程daemonize yes#171行 修改日志文件目录logfile /var/log/redis_6379.log#263行 修改工作目录dir /var/lib/redis/6379#700行 开启AOF持久化功能appendonly yes#287行  修改IP和端口replicaof 192.168.158.10 6379[root@client1 utils]# netstat -anpt | grep redistcp        0      0 192.168.158.20:6379     0.0.0.0:*               LISTEN      19152/redis-server  tcp        0      0 192.168.158.20:42646    192.168.158.10:6379     ESTABLISHED 19152/redis-server

3.6:master上验证从节点

查看master日志

[root@master utils]# /etc/init.d/redis_6379 restart      #开启Redis[root@server1 utils]# redis-cli -h 192.168.158.10 -p 6379192.168.158.10:6379> info replication# Replicationrole:masterconnected_slaves:2slave0:ip=192.168.158.20,port=6379,state=online,offset=490,lag=1slave1:ip=192.168.158.30,port=6379,state=online,offset=490,lag=1
[root@server1 ~]# vi /var/log/redis_6379.log #省略部分11447:M 11 Nov 2020 21:50:41.027 * Ready to accept connections11447:M 11 Nov 2020 21:53:24.410 * Replica 192.168.158.20:6379 asks for synchronization11447:M 11 Nov 2020 21:53:24.410 * Full resync requested by replica 192.168.158.20:637911447:M 11 Nov 2020 21:53:24.410 * Starting BGSAVE for SYNC with target: disk11447:M 11 Nov 2020 21:53:24.411 * Background saving started by pid 1153511535:C 11 Nov 2020 21:53:24.417 * DB saved on disk11535:C 11 Nov 2020 21:53:24.418 * RDB: 4 MB of memory used by copy-on-write11447:M 11 Nov 2020 21:53:24.476 * Background saving terminated with success11447:M 11 Nov 2020 21:53:24.477 * Synchronization with replica 192.168.158.20:6379 succeeded11447:M 11 Nov 2020 21:55:32.438 * Replica 192.168.158.30:6379 asks for synchronization11447:M 11 Nov 2020 21:55:32.438 * Full resync requested by replica 192.168.158.30:637911447:M 11 Nov 2020 21:55:32.439 * Starting BGSAVE for SYNC with target: disk11447:M 11 Nov 2020 21:55:32.439 * Background saving started by pid 1156511565:C 11 Nov 2020 21:55:32.441 * DB saved on disk11565:C 11 Nov 2020 21:55:32.441 * RDB: 4 MB of memory used by copy-on-write11447:M 11 Nov 2020 21:55:32.465 * Background saving terminated with success11447:M 11 Nov 2020 21:55:32.465 * Synchronization with replica 192.168.158.30:6379 succeeded

验证主从

master192.168.158.10:6379> set name suxiOK192.168.158.10:6379> set score 77OK192.168.158.10:6379> keys *1) "score"2) "name"slave1[root@client1 utils]# redis-cli -h 192.168.158.20192.168.158.20:6379> keys *1) "score"2) "name"192.168.158.20:6379> get name"suxi"slave2[root@server3 utils]# redis-cli -h 192.168.158.30192.168.158.30:6379> keys *1) "name"2) "score"192.168.158.30:6379> get score"77"

四:Redis哨兵模式

4.1:Redis sentinel介绍

Redis Sentinel是Redis高可用的实现方案。Sentinel是一个管理多个Redis实例的工具,它可以实现对Redis的监控、通知、自动故障转移。

哨兵模式的作用

  • 监控

不断的检查master和slave是否正常运行。master存活检测、master与slave运行情况检测

  • 通知(提醒)

当被监控的服务器出现问题时,向其他(哨兵间,客户端)发送通知。

  • 自动故障转移

断开master与slave连接,选取一个slave作为master,将其他slave连接到新的master,并告知客户端新的服务器地址

PS:哨兵也是一台redis服务器,只是不提供数据服务

哨兵的启动依赖于主从模式,所以须把主从模式安装好的情况下再去做哨兵模式,所有节点上都需要部署哨兵模式,哨兵模式会监控所有的redis工作节点是否正常,当master出现问题的时候,因为其他节点与主节点失去联系,因此会投票,投票过半就认为这个master的确出现问题,然后会通知哨兵间,然后从slaves中选取一个作为新的master,至少需要3个或3个以上服务器

4.2:哨兵模式配置

所有节点都需要修改

[root@master ~]# vi redis-5.0.7/sentinel.conf17行/protected-mode no                                  #关闭保护模式26行/daemonize yes                                      #指定sentinel为后台启动36行/logfile "/var/log/sentinel.log"                    #指定日志存放路径65行/dir "/var/lib/redis/6379"                          #指定数据库存放路径84行/sentinel monitor mymaster 20.0.0.10 6379 2         #至少几个哨兵检测到主服务器故障了,才会进行故障迁移,全部指向masterIP113行/sentinel down-after-milliseconds mymaster 30000    #判定服务器down掉的时间周期,默认30000毫秒(30秒)146行/sentinel failover-timeout mymaster 180000         #故障节的的最大超时时间为180000(180秒)

4.3:启动查看哨兵模式

先启master,再启slave

[root@client1 ~]# redis-sentinel redis-5.0.7/sentinel.conf &[1] 11412[root@server1 ~]# redis-cli -h 192.168.158.10 -p 26379 info Sentinel# Sentinelsentinel_masters:1sentinel_tilt:0sentinel_running_scripts:0sentinel_scripts_queue_length:0sentinel_simulate_failure_flags:0master0:name=mymaster,status=ok,address=192.168.158.10:6379,slaves=2,sentinels=1[1]+  完成                  redis-sentinel redis-5.0.7/sentinel.conf[root@client1 ~]# redis-sentinel redis-5.0.7/sentinel.conf &[1] 19227[root@client1 ~]# redis-cli -h 192.168.158.20 -p 26379 info Sentinel# Sentinelsentinel_masters:1sentinel_tilt:0sentinel_running_scripts:0sentinel_scripts_queue_length:0sentinel_simulate_failure_flags:0master0:name=mymaster,status=ok,address=192.168.158.10:6379,slaves=2,sentinels=2[1]+  完成                  redis-sentinel redis-5.0.7/sentinel.conf[root@server3 ~]# redis-sentinel redis-5.0.7/sentinel.conf &[1] 10647[root@server3 ~]# redis-cli -h 192.168.158.30 -p 26379 info Sentinel# Sentinelsentinel_masters:1sentinel_tilt:0sentinel_running_scripts:0sentinel_scripts_queue_length:0sentinel_simulate_failure_flags:0master0:name=mymaster,status=ok,address=192.168.158.10:6379,slaves=2,sentinels=3[1]+  完成                  redis-sentinel redis-5.0.7/sentinel.conf

4.4:故障模拟

查看master进程号[root@server1 ~]# ps -ef | grep redisroot      11412      1  0 23:11 ?        00:00:01 /usr/local/bin/redis-server 127.0.0.1:6379root      11719      1  0 23:27 ?        00:00:00 redis-sentinel *:26379 [sentinel]root      11764  11481  0 23:32 pts/1    00:00:00 grep --color=auto redis[root@server1 ~]# kill -9 11412

在这里插入图片描述

也可查看状态

[root@server1 ~]# redis-cli -p 26379 info Sentinel# Sentinelsentinel_masters:1sentinel_tilt:0sentinel_running_scripts:0sentinel_scripts_queue_length:0sentinel_simulate_failure_flags:0master0:name=mymaster,status=ok,address=192.168.158.20:6379,slaves=2,sentinels=3

转载地址:http://kfdaf.baihongyu.com/

你可能感兴趣的文章
新人讨论一:事务和两阶段提交
查看>>
HTTP高并发测试
查看>>
日期时间变量的处理
查看>>
c++启动另一个软件
查看>>
autorun.inf 配置说明
查看>>
linux下c编程之内存共享shemget函数的实现及案例-bmi体重身高测试2
查看>>
enum枚举介绍
查看>>
Flask:初见
查看>>
Flask:静态文件&模板(0.1)
查看>>
《大道至简》的幕后故事(3):“愚公移山记”事物篇
查看>>
《大道至简》的幕后故事(5):“愚公移山记”军事谋略篇
查看>>
架构师的能力模型(图)
查看>>
能力要成体系
查看>>
Qomo 2.0 beta1 发布说明及新功能
查看>>
英语突击队里程碑
查看>>
软工视频总结
查看>>
Map/reduce
查看>>
mysql 存储过程,临时表,游标
查看>>
Ehcache配置分布式缓存
查看>>
js 对象json用法举例
查看>>