当前位置: 首页 > news >正文

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 

               Image

        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实例进行缓存操作。

转载于:https://www.cnblogs.com/driftingshine/p/6906679.html

相关文章:

  • android自带的处理Bitmap out Memory 的处理,我仅仅是改变了些写法成为自己用的东西...
  • 卫星宽带
  • Tomcat Manager用户名和密码
  • 《嵌入式系统可靠性设计技术及案例解析》读书笔记(四)
  • POJ 1700 经典过河问题(贪心)
  • 猴子 JDFZ模拟赛
  • 从输入URL到页面加载发生了什么
  • Filter配置多个url-pattern
  • 单元测试初入
  • Django 博客开发教程 10 - 页面侧边栏:使用自定义模板标签
  • python爬虫从入门到放弃(六)之 BeautifulSoup库的使用
  • 基于 Postgres 的数据库通过美国政府安全认证
  • PID 控制的“开源咖啡机”
  • 2017 Perl 开发者调查,vim 是他们最爱的编辑工具
  • Linux串口IO模式的一些心得
  • [case10]使用RSQL实现端到端的动态查询
  • 【腾讯Bugly干货分享】从0到1打造直播 App
  • 2017-08-04 前端日报
  • CentOS 7 防火墙操作
  • css的样式优先级
  • ECMAScript入门(七)--Module语法
  • HashMap ConcurrentHashMap
  • HTTP中GET与POST的区别 99%的错误认识
  • JAVA SE 6 GC调优笔记
  • javascript从右向左截取指定位数字符的3种方法
  • learning koa2.x
  • LeetCode541. Reverse String II -- 按步长反转字符串
  • storm drpc实例
  • uva 10370 Above Average
  • 基于Volley网络库实现加载多种网络图片(包括GIF动态图片、圆形图片、普通图片)...
  • 技术胖1-4季视频复习— (看视频笔记)
  • 力扣(LeetCode)357
  • 前端学习笔记之原型——一张图说明`prototype`和`__proto__`的区别
  • 译有关态射的一切
  • [Shell 脚本] 备份网站文件至OSS服务(纯shell脚本无sdk) ...
  • 移动端高清、多屏适配方案
  • ###C语言程序设计-----C语言学习(6)#
  • #if 1...#endif
  • (13):Silverlight 2 数据与通信之WebRequest
  • (7)STL算法之交换赋值
  • (android 地图实战开发)3 在地图上显示当前位置和自定义银行位置
  • (c语言)strcpy函数用法
  • (JSP)EL——优化登录界面,获取对象,获取数据
  • (板子)A* astar算法,AcWing第k短路+八数码 带注释
  • (动手学习深度学习)第13章 计算机视觉---微调
  • (附源码)python旅游推荐系统 毕业设计 250623
  • (牛客腾讯思维编程题)编码编码分组打印下标(java 版本+ C版本)
  • (三)docker:Dockerfile构建容器运行jar包
  • (自适应手机端)响应式新闻博客知识类pbootcms网站模板 自媒体运营博客网站源码下载
  • *setTimeout实现text输入在用户停顿时才调用事件!*
  • .net core IResultFilter 的 OnResultExecuted和OnResultExecuting的区别
  • .net core 客户端缓存、服务器端响应缓存、服务器内存缓存
  • .Net Remoting(分离服务程序实现) - Part.3
  • .net(C#)中String.Format如何使用
  • .NET构架之我见