第一部分 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 方式)的更多相关文章

  1. ActiveMQ笔记(3):基于Networks of Brokers的HA方案

    上一篇介绍了基于ZK的ActiveMQ HA方案,虽然理解起来比较容易,但是有二个不足: 1)  占用的节点数过多,1个zk集群至少3个节点,1个activemq集群也至少得3个节点,但其实正常运行时 ...

  2. ActiveMQ笔记(2):基于ZooKeeper的HA方案

    activemq官网给出了3种master/slave的HA方案,详见:http://activemq.apache.org/masterslave.html,基于共享文件目录,db,zookeepe ...

  3. 基于Networks of Brokers的HA方案

    上一篇介绍了基于ZK的ActiveMQ HA方案,虽然理解起来比较容易,但是有二个不足: 1)  占用的节点数过多,1个zk集群至少3个节点,1个activemq集群也至少得3个节点,但其实正常运行时 ...

  4. 基于使用ISCSI存储的ibmmq通过heartbeat实现HA方案以及碰到的问题总结

    一.背景 ibmmq是一种传统架构的mq产品,运行稳定,有其自身优点,但在高可用(HA)这一块需要使用公司根据自身需求选用高可用(HA)产品,但由于市面HA商业产品较贵,所以使用linux操作系统级的 ...

  5. Hadoop HA方案调研

    原文成文于去年(2012.7.30),已然过去了一年,很多信息也许已经过时,不保证正确,与Hadoop学习笔记系列一样仅为留做提醒. ----- 针对现有的所有Hadoop HA方案进行调研,以时间为 ...

  6. Zabbix 6.0:原生高可用(HA)方案部署

    Blog:博客园 个人 本部署文档适用于CentOS 8.X/RHEL 8.X/Anolis OS 8.X/AlmaLinux 8.X/Rockey Linux 8.X. 原生的HA方案终于来了 相比 ...

  7. hadoop2.x通过Zookeeper来实现namenode的HA方案以及ResourceManager单点故障的解决方案

    我们知道hadoop1.x之前的namenode存在两个主要的问题:1.namenode内存瓶颈的问题,2.namenode的单点故障的问题.针对这两个问题,hadoop2.x都对它进行改进和解决.其 ...

  8. 技术实战:基于 MHA 方式实现 MySQL 的高可用(转)

    转自:http://os.51cto.com/art/201307/401702_all.htm MHA故障转移可以很好的帮我们解决从库数据的一致性问题,同时最大化挽回故障发生后的数据.本文分享了基于 ...

  9. svg操纵方案 基于 D3 还是 angular?

    之前还是想简单了, 现在重新写这篇.把逻辑拆分粒度的辨析,放到外面去. 问题提出:svg控制方案 基于 D3 还是 angular 根据这个,html 4种展现样式:普通的html,svg,2D ca ...

随机推荐

  1. (持续集成)win7上部署Jenkins+MSBuild+Svn+SonarQube+SonarQube Scanner for MSBuild (一)

    一.Jenkins介绍 jenkins是一个广泛用于持续构建的可视化web工具,持续构建说得更直白点,就是各种项目的”自动化”编译.打包.分发部署.jenkins可以很好的支持各种语言(比如:java ...

  2. andriod 支付宝类似界面图片加文字

    <?xml version="1.0" encoding="utf-8"?> <GridView xmlns:android="ht ...

  3. 【工具类】Date、Long、String 类型互转

    开发常常遇到Date.Long.String 三种类型数据须要互转的问题.以此记录. public static void main(String[] args) throws ParseExcept ...

  4. Java 使用StringBuffer注意

    Stringbuffer使用注意   问题背景: 模拟客户端使用Socket请求服务器核心系统,核心系统正常响应,内容较大,近2715KB,大于2.6M多. 使用指定编码GBK来接收响应内容到过程中没 ...

  5. React学习之受控和非受控组件

    受控组件是通过事件完成对元素value的控制,反之就是非受控组件. 1.受控组件的value通过onChange事件来改变,非受控不需要通过事件来改变value. 2.受控组件通过事件通过setSta ...

  6. python判断字符串类型

    s为字符串 s.isalnum() 所有字符都是数字或者字母,为真返回 Ture,否则返回 False.(重点,这是字母数字一起判断的!!) s.isalpha() 所有字符都是字母,为真返回 Tur ...

  7. Linux远程无密码登陆并远程执行脚本

    假设 A (192.168.20.59)为客户机器,B(192.168.20.60)为目标机: 要达到的目的: A机器ssh登录B机器无需输入密码: 加密方式选 rsa|dsa均可以,默认dsa ss ...

  8. CSU - 1556 Jerry&#39;s trouble(高速幂取模)

    [题目链接]:click here [题目大意]:计算x1^m+x2^m+..xn^m(1<=x1<=n)( 1 <= n < 1 000 000, 1 <= m < ...

  9. java String概述

    class StringDemo { public static void main(String[] args)  {  String s1 = "abc";//s1 是一个类类 ...

  10. Hadoop关于Wrong FS错误

    关于使用java api上传文件. 在定义一个FileSystem变量的时候伪分布式和单机版的方法是不一样的,单机版使用的是FileSystem类的静态函数 FileSystem hdfs = Fil ...