Redis sentinel 哨兵模式集群方案配置
一、sentinel介绍
Sentinel作用:
1):Master状态检测
2):如果Master异常,则会进行Master-Slave切换,将其中一个Slave作为Master,将之前的Master作为Slave
3):Master-Slave切换后,master_redis.conf、slave_redis.conf和sentinel.conf的内容都会发生改变,即master_redis.conf中会多一行slaveof的配置,sentinel.conf的监控目标会随之调换
Sentinel工作方式:
1):每个Sentinel以每秒钟一次的频率向它所知的Master,Slave以及其他 Sentinel 实例发送一个 PING 命令
2):如果一个实例(instance)距离最后一次有效回复 PING 命令的时间超过 down-after-milliseconds 选项所指定的值, 则这个实例会被 Sentinel 标记为主观下线。
3):如果一个Master被标记为主观下线,则正在监视这个Master的所有 Sentinel 要以每秒一次的频率确认Master的确进入了主观下线状态。
4):当有足够数量的 Sentinel(大于等于配置文件指定的值)在指定的时间范围内确认Master的确进入了主观下线状态, 则Master会被标记为客观下线
5):在一般情况下, 每个 Sentinel 会以每 10 秒一次的频率向它已知的所有Master,Slave发送 INFO 命令
6):当Master被 Sentinel 标记为客观下线时,Sentinel 向下线的 Master 的所有 Slave 发送 INFO 命令的频率会从 10 秒一次改为每秒一次
7):若没有足够数量的 Sentinel 同意 Master 已经下线, Master 的客观下线状态就会被移除。
8):若 Master 重新向 Sentinel 的 PING 命令返回有效回复, Master 的主观下线状态就会被移除。
主观下线和客观下线
主观下线:Subjectively Down,简称 SDOWN,指的是当前 Sentinel 实例对某个redis服务器做出的下线判断。
客观下线:Objectively Down, 简称 ODOWN,指的是多个 Sentinel 实例在对Master Server做出 SDOWN 判断,并且通过 SENTINEL is-master-down-by-addr 命令互相交流之后,得出的Master Server下线判断,然后开启failover.
通俗来讲就是:
redis的sentinel系统用来管理多个redis服务器,可以实现一个功能上实现HA的集群。该系统主要执行三个任务:
①监控( Monitoring ): Redis Sentinel实时监控主服务器和从服务器运行状态。
②提醒(notification): 当被监控的某个 Redis 服务器出现问题时, Redis Sentinel 可以向系统管理员发送通知, 也可以通过 API 向其他程序发送通知
一个简单的主从结构加sentinel集群的架构图如下:
上图是一主两从节点,sentinel集群之间会互相通信,沟通交流redis节点的状态,做出相应的判断并进行处理,这里的主观下线状态和客观下线状态是比较重要的状态,它们决定了是否进行故障转移 可以 通过订阅指定的频道信息,当服务器出现故障得时候通知管理员 客户端可以将 Sentinel 看作是一个只提供了订阅功能的 Redis 服务器,你不可以使用 PUBLISH 命令向这个服务器发送信息,但你可以用 SUBSCRIBE 命令或者 PSUBSCRIBE 命令, 通过订阅给定的频道来获取相应的事件提醒。
一个频道能够接收和这个频道的名字相同的事件。 比如说, 名为 +sdown 的频道就可以接收所有实例进入主观下线(SDOWN)状态的事件。
二、搭建redis-sentinel 集群环境
1、下载redis编译安装包:redis-2.8.19.tar.gz,然后解压缩进行编译安装。将redis安装到/opt/redis目录下。
[root@idxs21- redis]# mkdir bin #redis脚本文件
[root@idxs21- redis]# mkdir conf #redis配置文件
[root@idxs21- redis]# mkdir data #redis的本地数据存放
[root@idxs21- redis]# mkdir logs #redis日志文件
[root@idxs21- redis]# tar zxvf redis-2.8..tar.gz cd redis-2.8.
[root@idxs21- redis]# make PREFIX=/opt/redis install cp *.conf /opt/redis/conf #把安装源文件中的.conf配置文件拷贝一份到安装目录下的conf目录中。
[root@idxs21- redis]# cd /opt/redis/conf cp redis.cof redis.conf.bak cp sentinel.conf sentinel.conf.bak
2.在安装redis成功后,可以在/opt/redis/bin目录下看到以下内容:
[root@idxs21- bin]# ll
total
-rwxr-xr-x root root Mar redis-benchmark
-rwxr-xr-x root root Mar redis-check-aof
-rwxr-xr-x root root Mar redis-check-dump
-rwxr-xr-x root root Mar redis-cli
lrwxrwxrwx root root Jun : redis-sentinel -> /opt/redis/bin/redis-server
-rwxr-xr-x root root Mar redis-server
3、修改master机器配置文件(这里直接使用的sed命令做的替换):
# -- redis.conf #修改redis.conf
sed -i 's/daemonize no/daemonize yes/g' redis.conf #使用后台方式运行
sed -i 's/logfile ""/logfile "/opt/redis/logs/redis.log"/g' redis.conf #配置日志路径
# no AOF and RDB for master #配置数据同步策略,master节点注释关闭掉dump数据同步
sed -i 's/save 900 1/# save 900 1/g' redis.conf
sed -i 's/save 300 10/# save 300 10/g' redis.conf
sed -i 's/save 60 10000/# save 60 10000/g' redis.conf
sed -i 's/appendonly no/appendonly yes/g' redis.conf #打开aof同步
sed -i 's/dir \.\//dir "/opt/redis/data/"/g' redis.conf #配置数据文件存放路径
sed -i 's/slowlog-log-slower-than 10000/slowlog-log-slower-than 5000/g' redis.conf
sed -i 's/slowlog-max-len 128/slowlog-max-len 1000/g' redis.conf # -- sentinel.conf #修改sentinel.conf文件
echo 'daemonize yes' >> sentinel.conf #后台方式运行sentinel
echo 'logfile /opt/redis/logs/sentinel.log' >> sentinel.conf
sed -i 's/sentinel monitor mymaster 127.0.0.1 6379 2/sentinel monitor mymaster 10.135.40.118 6379 2/g' sentinel.conf #配置哨兵模式
4、修改slave机器配置文件,两台slave配置一样:
# -- redis.conf
sed -i 's/daemonize no/daemonize yes/g' redis.conf
sed -i 's/logfile ""/logfile "/opt/redis/logs/redis.log"/g' redis.conf
sed -i 's/# save ""/save ""/g' redis.conf
sed -i 's/appendonly no/appendonly yes/g' redis.conf
sed -i 's/dir \.\//dir "/opt/redis/data/"/g'redis.conf # SLOWLOG GET or SLOWLOG GET number
sed -i 's/slowlog-log-slower-than 10000/slowlog-log-slower-than 5000/g' redis.conf
sed -i 's/slowlog-max-len 128/slowlog-max-len 1000/g' redis.conf
echo "slaveof 10.135.40.118 6379" >> redis.conf #指定master节点 # -- sentinel.conf
echo 'daemonize yes' >> sentinel.conf
echo 'logfile /opt/redis/logs/sentinel.log' >> sentinel.conf
sed -i 's/sentinel monitor mymaster 127.0.0.1 6379 2/sentinel monitor mymaster 10.135.40.118 6379 2/g' sentinel.conf
5、配置文件修改完成之后启动redis服务,从master开始启动,所有节点的启动方式和命令都是一样的。
启动redis服务和sentinel服务:
[root@idxs21-108 redis]# /opt/redis/bin/redis-server /opt/redis/conf/redis.conf
[root@idxs21-108 redis]# /opt/redis/bin/redis-sentinel /opt/redis/conf/sentinel.conf
查看服务进程状态:
[root@idxs21- redis]# ps -ef | grep redis
root : pts/ :: grep redis
root Jul28 ? :: /opt/redis/bin/redis-sentinel *:
root Jul28 ? :: /opt/redis/bin/redis-server *:
6、测试
1>.测试数据同步
主redis写入数据:
[root@idxs40- redis]# redis-cli -p
127.0.0.1:> set name abc
OK
127.0.0.1:> get name
"abc"
127.0.0.1:>
从redis读取数据:
[root@idxs40- redis]# redis-cli -p
127.0.0.1:> get name
"abc"
127.0.0.1:>
从redis读取数据:
[root@idxs40- redis]# redis-cli -p
127.0.0.1:> get name
"abc"
127.0.0.1:>
2>.redis默认是读写分离的,只有master能写,slave只能读:
[root@idxs40- ~]# redis-cli -p
127.0.0.1:> set name
(error) READONLY You can't write against a read only slave.
这里可看到,slave节点默认只有读的权限,无法进行写入操作。
7、sentinel一些命令介绍 要使用sentinel的命令,我们需要用redis-cli命令进入到sentinel:
[root@idxs21- redis]# redis-cli -h 10.135.40.118 -p
①INFO sentinel的基本状态信息
②SENTINEL masters 列出所有被监视的主服务器,以及这些主服务器的当前状态
③SENTINEL slaves 列出给定主服务器的所有从服务器,以及这些从服务器的当前状态
④SENTINEL get-master-addr-by-name 返回给定名字的主服务器的 IP 地址和端口号
⑤SENTINEL reset 重置所有名字和给定模式 pattern 相匹配的主服务器。重置操作清除主服务器目前的所有状态, 包括正在执行中的故障转移, 并移除目前已经发现和关联的, 主服务器的所有从服务器和 Sentinel 。
⑥SENTINEL failover 当主服务器失效时, 在不询问其他 Sentinel 意见的情况下, 强制开始一次自动故障迁移,但是它会给其他sentinel发送一个最新的配置,其他sentinel会根据这个配置进行更新
8、如果master节点宕机,会从两台slave中自动选举出一台机器接替master角色。后期如果老的master节点重新恢复,重新加入集群中,也只能是salve节点。
Redis sentinel 哨兵模式集群方案配置的更多相关文章
- redis sentinel哨兵模式集群搭建教程
1.环境说明 我们将使用192.168.220.128.192.168.220.129两台机器搭建sentinel交叉主从为例 当前我们已在192.168.220.128上按redis安装教程安装了r ...
- Redis-sentinel哨兵模式集群方案配置
一.sentinel介绍 Redis Sentinel Sentinel(哨兵)是用于监控redis集群中Master状态的工具,其已经被集成在redis2.4+的版本中 Sentinel作用: 1) ...
- 一文掌握Redis的三种集群方案
在开发测试环境中,我们一般搭建Redis的单实例来应对开发测试需求,但是在生产环境,如果对可用性.可靠性要求较高,则需要引入Redis的集群方案.虽然现在各大云平台有提供缓存服务可以直接使用,但了解一 ...
- Redis 哨兵(sentinel)模式集群配置(5.0.3版本)
一.准备工作 1.系统环境:centos6.4 2.服务器六台(1主5从): 192.168.1.161(master) 192.168.1.162(slave) 192.168.1.163(slav ...
- 生产环境上,哨兵模式集群Redis版本升级应用实战
背景: 由于生产环境上所使用的Redis版本并不一致,好久也没有更新,为了避免版本不同对Redis集群造成影响,从而升级为统一Redis版本! 1.集群架构 一主两从三哨兵: 2.升级方案 (1)升级 ...
- activemq+Zookeper高可用集群方案配置
在高并发.对稳定性要求极高的系统中,高可用的是必不可少的,当然ActiveMQ也有自己的集群方案.从ActiveMQ 5.9开始,ActiveMQ的集群实现方式取消了传统的Master-Slave方式 ...
- Redis主从哨兵和集群搭建
主从配置 哨兵配置 集群配置 1.主从: 国王和丞相,国王权力大(读写),丞相权利小(读) 2.哨兵: 国王和王子,国王死了(主服务挂掉),王子继位(从服务变主服务) 3.集群: 国王和国王,一个国王 ...
- 架构师必备:Redis的几种集群方案
结论 有以下几种Redis集群方案,先说结论: Redis cluster:应当优先考虑使用Redis cluster. codis:旧项目如果仍在使用codis,可继续使用,但也推荐迁移到Redis ...
- Redis 的 3 种集群方案对比
数据持久化 主从复制 自动故障恢复 集群化 数据持久化本质上是为了做数据备份,有了数据持久化,当Redis宕机时,我们可以把数据从磁盘上恢复回来,但在数据恢复之前,服务是不可用的,而且数据恢复的时间取 ...
随机推荐
- Java 容器在实际项目开发中应用
前言:在java开发中我们离不开集合数组等,在java中有个专有名词:"容器" ,下面会结合Thinking in Java的知识和实际开发中业务场景讲述一下容器在Web项目中的用 ...
- Vuejs——Vue生命周期,数据,手动挂载,指令,过滤器
版权声明:出处http://blog.csdn.net/qq20004604 目录(?)[+] 原教程: http://cn.vuejs.org/guide/instance.html htt ...
- 學習 DT device tree 以 ST 的開發板 STM32F429i-disc1 為例
目標 因為對 device tree 不是很熟悉, 所以就將 device tree, 設為學習目標. 啟動 注意, 這篇隨筆的解說都放在最下面,會標 Explanation_XX,只要搜尋 Expl ...
- webgl自学笔记——光照
在Webgl中我们使用顶点着色器和片元着色器来为我们的场景创建光照模型.着色器允许我们使用数学模型来控制如何照亮我们的场景. 最好有线性代数的相关知识. 本章中: 光源.法线.材料 光照和着色的区别 ...
- 关于移动APP与Web APP的测试重点以及区别
Web app测试重点: 1. 功能测试:功能的实现是否满足需求. 2. 性能测试: 2.1 链接速度测试:测试页面链接的速度 2.2 负载测试:web应用系统能允许多少个用户同时在线?超过这个数量会 ...
- Vue2.0 生产环境部署
简要:继上次搭建vue环境后,开始着手vue的学习;为此向大家分享从开发环境部署到生产环境(线上)中遇到的问题和解决办法,希望能够跟各位VUE大神学习探索,如果有不对或者好的建议告知下:*~*! 一. ...
- web开发之负载均衡的简单架构
负载均衡 负载均衡的核心思想就是:请求分担 最简单的配置: 一台负载均衡服务器 两台webserver服务器 两台webserver服务器需要配置相同的服务器环境,设置相同的域名指向 负载均衡服务器需 ...
- 玩玩微信公众号Java版之二:接收、处理及返回微信消息
前面已经配置了微信服务器,那么先开始最简单的接收微信消息吧~ 可以用我们的微信号来直接进行测试,下面先看测试效果图: 这是最基本的文本消息的接收.处理及返回,来看看是怎么实现的吧! 首先可 ...
- 【NOIP模拟】Grid(字符串哈希)
题目背景 SOURCE:NOIP2016-RZZ-1 T3 题目描述 有一个 2×N 的矩阵,矩阵的每个位置上都是一个英文小写字符. 现在需要从某一个位置开始,每次可以移动到一个没有到过的相邻位置,即 ...
- date——sql查询
场景:在数据库中要删除一条记录,但是该记录的唯一性只能通过插入数据库的系统时间来确定,字段为date类型,格式是:2016/10/19 17:17:29. 1 解决 在百度上找到的方法是使用to_ch ...