Redis3.x HA 方案(基于 Sentinel 方式)
第一部分 Redis-HA 搭建
一、Redis-HA 拓扑
一主两从,主从复制,故障时主从切换
三个Redis节点 + Sentinel 节点
Master 127.0.0.1 6379
Slave1 127.0.0.1 6380
Slave2 127.0.0.1 6381
二、环境准备
1 操作系统
CentOS 6.5
2 相关软件
jdk8
Tomcat8
Redis-3.2.8.tar.gz (官网下载)
三、Redis 主从配置
1 将redis-3.2.8.tar.gz 版本,并上传到 Redis 部署服务器上
注:使用xftp 或者 winscp等软件,上传至/opt/softwareRes/ 目录下。
2 建Redis 安装目录
mkdir -p /opt/stools/redis/redis-3.2.8.master/
mkdir -p /opt/stools/redis/redis-3.2.8.slave-1/
mkdir -p /opt/stools/redis/redis-3.2.8.slave-2/
分别解压安装包到 Redis 安装目录
cd /opt/softwareRes/
tar zxvf redis-3.2.8.tar.gz -C /opt/stools/redis/redis-3.2.8.master/ --strip-components 1
tar zxvf redis-3.2.8.tar.gz -C /opt/stools/redis/redis-3.2.8.slave-1/ --strip-components 1
tar zxvf redis-3.2.8.tar.gz -C /opt/stools/redis/redis-3.2.8.slave-2/ --strip-components 1
3 分别进入 master、slave-1、slave-2 下的src 文件夹,安装及测试
以master为例
cd /opt/stools/redis/redis-3.2.8.master/src
make
make test
测试通过会提示:All tests passed without errors!
注:如果提示 you need tcl .. 可以使用 yum -y install tcl 进行安装。
注:之后再slave-1、slave-2 下的src分别执行安装测试。
4 配置
master 节点 redis.conf 配置内容(未涉及的保持不变)
# 绑定地址(可配置多个,内外网)
bind 17.13.11.10 127.0.0.1
# 服务端口
port 6379
# pid文件位置
pidfile /var/run/redis_6379.pid
# 日志文件位置
logfile "/data/logs/redis.master.log"
#
daemonize yes
# 保护模式
protected-mode no
#
masterauth "spads"
# 访问数据秘钥
requirepass "spads"
slave1 节点 redis.conf 配置内容(未涉及的保持不变)
# 绑定地址(可配置多个,内外网)
bind 17.13.11.10 127.0.0.1
# 服务端口
port 6380
# pid文件位置
pidfile /var/run/redis_6380.pid
# 日志文件位置
logfile "/data/logs/redis.master.log"
#
daemonize yes
# 保护模式
protected-mode no
#
masterauth "spads"
# 访问数据秘钥
requirepass "spads"
# 从
slaveof 17.13.11.10 6379
slave2 节点 redis.conf 配置内容(未涉及的保持不变)
# 绑定地址(可配置多个,内外网)
bind 17.13.11.10 127.0.0.1
# 服务端口
port 6381
# pid文件位置
pidfile /var/run/redis_6381.pid
# 日志文件位置
logfile "/data/logs/redis.master.log"
#
daemonize yes
# 保护模式
protected-mode no
#
masterauth "spads"
# 访问数据秘钥
requirepass "spads"
# 从
slaveof 17.13.11.10 6379
5启动
cd /opt/stools/redis/redis-3.2.8.master/
./src/redis-server redis.conf
cd /opt/stools/redis/redis-3.2.8.slave-1/
./src/redis-server redis.conf
cd /opt/stools/redis/redis-3.2.8.slave-2/
./src/redis-server redis.conf
6 测试
(1)测试主从同步:
使用客户端连接主节点,添加key-value, 使用客户端连接从节点,按key取value
redis-cli -h 17.13.11.10 -p 6379 -a spads
set name zzz
exit
redis-cli -h 17.13.11.10 -p 6380 -a spads
get name
# 检验是否可以取出 “zzz”
(2)测试从节点不可写:
redis-cli -h 17.13.11.10 -p 6380 -a spads
set name xxx
#检验是否提示如下内容
(error) READONLY You can't write against a read only slave.
四、Sentinel 配置
1 配置
cd /opt/stools/redis/redis-3.2.8.master/
sentinel.conf 配置文件
--------------------------------------
sentinel monitor mymaster 17.13.11.10 6379 1
# 定义监控的Redis 主节点
# mymaster 为自定义的主节点名称,需保证与之后的配置一致
# 17.13.11.10 为主节点IP地址
# 6379 为主节点服务端口
# 1 为 sentinel 节点数量(quorum )。。。
--------------------------------------
sentinel down-after-milliseconds mymaster 60000
# 表示当master redis 60s 没有应答时,就可以断定master挂掉了,但需要结合上面配置的quorum一起
--------------------------------------
sentinel auth-pass mymaster spads
# 设置主节点的秘钥
--------------------------------------
sentinel config-epoch mymaster 9
# 选项指定了在执行故障转移时, 最多可以有多少个从服务器同时对新的主服务器进行同步, 这个数字越小, 完成故障转移所需的时间就越长
--------------------------------------
2 启动
cd /opt/stools/redis/redis-3.2.8.master/
./src/redis-server sentinel.conf --sentinel &
3 测试
可以在几个节点都启动情况下,杀掉主节点服务,检验是否更换主节点并生效提供服务。
第二部分 Tomcat 集群下 Session 共享
Nginx + 2 * Tomcat 环境下 的Session 共享。此处直接在Tomcat 中配置 Redis Session存储。
1 各节点Tomcat lib 下增加如下库
commons-pool2-2.3.jar、jedis-2.7.2.jar、redissessionjar.jar、tomcat-juli-8.5.13.jar、commons-logging-1.1.3.jar
其中 redissessionjar.jar
出处 https://github.com/jcoleman/tomcat-redis-session-manager
需下载到本地,然后构建,并修改其中 RedisSessionManager.java 代码。
步骤 1> github 下载 tomcat-redis-session-manager 项目
2> eclipse 创建maven工程,并将 src/main/java/com/orangefunction/tomcat/redissessions/ 拷贝到工程。
3> 增加依赖包
Tomcat8 下面的所有lib (检查是否存在 tomcat-juli-8.5.13.jar,没有需单独下载)/ jedis-2.7.2.jar / commons-pool2-2.3.jar / commons-logging-1.1.3.jar
4> 修改 RedisSessionManager.java

5>右键工程 export 导出jar包
2 各节点Tomcat 在 conf 下 context.xml,增加如下内容
<Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />
<Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"
<!-- host="17.13.11.10" -->
<!-- port="6378" -->
database="0"
password="spads"
maxInactiveInterval="60"
sentinelMaster="mymaster"
sentinels="17.13.11.10:26379"
/>
第三部分 JedisSentinelPool 客户端连接 Redis - HA
jedis.xml 文件配置
<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
<property name="maxTotal" value="30" />
<property name="maxIdle" value="30" />
<property name="maxWaitMillis" value="30000" />
<property name="testOnBorrow" value="false" />
<property name="testOnReturn" value="true" />
</bean>
<bean id="jedisSentinelPool" class="redis.clients.jedis.JedisSentinelPool">
<constructor-arg index="0" value="mymaster" />
<constructor-arg index="1">
<set>
<value>17.13.11.10:26379</value>
</set>
</constructor-arg>
<constructor-arg index="2" ref="jedisPoolConfig" />
<constructor-arg index="3" value="20000" />
<constructor-arg index="4" value="spads" />
</bean>
java 程序中可以通过 resource 注解,获取到 jedisSentinel实例进行缓存操作。
Redis3.x HA 方案(基于 Sentinel 方式)的更多相关文章
- ActiveMQ笔记(3):基于Networks of Brokers的HA方案
上一篇介绍了基于ZK的ActiveMQ HA方案,虽然理解起来比较容易,但是有二个不足: 1) 占用的节点数过多,1个zk集群至少3个节点,1个activemq集群也至少得3个节点,但其实正常运行时 ...
- ActiveMQ笔记(2):基于ZooKeeper的HA方案
activemq官网给出了3种master/slave的HA方案,详见:http://activemq.apache.org/masterslave.html,基于共享文件目录,db,zookeepe ...
- 基于Networks of Brokers的HA方案
上一篇介绍了基于ZK的ActiveMQ HA方案,虽然理解起来比较容易,但是有二个不足: 1) 占用的节点数过多,1个zk集群至少3个节点,1个activemq集群也至少得3个节点,但其实正常运行时 ...
- 基于使用ISCSI存储的ibmmq通过heartbeat实现HA方案以及碰到的问题总结
一.背景 ibmmq是一种传统架构的mq产品,运行稳定,有其自身优点,但在高可用(HA)这一块需要使用公司根据自身需求选用高可用(HA)产品,但由于市面HA商业产品较贵,所以使用linux操作系统级的 ...
- Hadoop HA方案调研
原文成文于去年(2012.7.30),已然过去了一年,很多信息也许已经过时,不保证正确,与Hadoop学习笔记系列一样仅为留做提醒. ----- 针对现有的所有Hadoop HA方案进行调研,以时间为 ...
- Zabbix 6.0:原生高可用(HA)方案部署
Blog:博客园 个人 本部署文档适用于CentOS 8.X/RHEL 8.X/Anolis OS 8.X/AlmaLinux 8.X/Rockey Linux 8.X. 原生的HA方案终于来了 相比 ...
- hadoop2.x通过Zookeeper来实现namenode的HA方案以及ResourceManager单点故障的解决方案
我们知道hadoop1.x之前的namenode存在两个主要的问题:1.namenode内存瓶颈的问题,2.namenode的单点故障的问题.针对这两个问题,hadoop2.x都对它进行改进和解决.其 ...
- 技术实战:基于 MHA 方式实现 MySQL 的高可用(转)
转自:http://os.51cto.com/art/201307/401702_all.htm MHA故障转移可以很好的帮我们解决从库数据的一致性问题,同时最大化挽回故障发生后的数据.本文分享了基于 ...
- svg操纵方案 基于 D3 还是 angular?
之前还是想简单了, 现在重新写这篇.把逻辑拆分粒度的辨析,放到外面去. 问题提出:svg控制方案 基于 D3 还是 angular 根据这个,html 4种展现样式:普通的html,svg,2D ca ...
随机推荐
- Docker 存储引擎
可插拔存储引擎架构 这种可插拔式的存储架构.可以让你很灵活的去选择适合自己环境的存储引擎. 每个存储引擎都是以Linux 文件系统为基础的.此外,每个存储引擎都以自己的方式自由的管理image ...
- 【java】Map、Set、List不同数据结构的各种不同循环迭代的效率对比,使用场景
Map.Set.List不同数据结构的各种不同循环迭代的效率对比,使用场景 引申一个地址:Map迭代的使用keySet和entitySet的效率
- 【spring boot】6.idea下springboot打包成jar包和war包,并且可以在外部tomcat下运行访问到
接着上一章走呗:http://www.cnblogs.com/sxdcgaq8080/p/7712874.html 然后声明一点,下面打包的过程中,scope一直都是使用默认的范围 <!--用于 ...
- ThinkPHP模板包含功能(转载)
对于一些有共同属性的页面(如页脚),可以单独制作成一个模板,再利用 ThinkPHP 提供的模板包含功能包含进来.这样,当要修改这些公共页面时,只需修改对应的模板即可而不必修改每一个页面.模板的包含使 ...
- Android HAL实例解析
一.概述 本文希望通过分析台湾的Jollen的mokoid 工程代码,和在s5pc100平台上实现过程种遇到的问题,解析Andorid HAL的开发方法. 二.HAL介绍 现有HAL架构由Patric ...
- Spark原理小总结
1.spark是什么? 快速,通用,可扩展的分布式计算引擎 2.弹性分布式数据集RDD RDD(Resilient Distributed Dataset)叫做分布式数据集,是Spark中最基本的数据 ...
- 转:maven2创建一个eclipse工程,设置M2_REPO
from: http://tonychanhoho.iteye.com/blog/1584324 M2_REPO是一个用来定义 maven 2仓库在硬盘中的存储位置,windows默认是C:\User ...
- 将App发布到WasLiberty的较稳妥方法
1.将应用解压放到一个目录 具体步骤: 1.1 建立目录,假设应用包为app.war且和新建目录sp在同一目录下 #mkdir sp 1.2 将app.war 改名为app.zip,这是为了解压#mv ...
- 关于rtsp转码rtmp播放的两种方式,客户端直接转,远程服务器转
需求 一.场景 用户多家门店有监控探头,设备是海康的和大华的.用户总部和门店不在一个网络下,并且总部要能实时调用查看门店监控,和门店回放画面.我们知道监控摄像机获取的视频是 rtsp 流的格式. 只能 ...
- Build Your Hexo Blog (On Github)
超简单,比jekyll好多了! 看个Demo http://kevinjmh.github.io/ 了解Hexo Hexo是一个由Node.js驱动的,简单.快速.强大的Blog框架.可以快速的生成静 ...