redis主从+哨兵

首先我们解释一下主从的区别:主对于数据可读可写。从默认是只读不写的。当从连接上主时,主会将数据同步到从上。

主从结构只能保证数据有备份,但是如果主挂掉了,怎么办,整个服务就不可用了,这显然是个大问题。当然redis也帮我们考虑到了这一点。解决方案就是哨兵。他可以作为一个第三方,监控着我们主节点的状态,当发现主挂掉后,就会从这个主的从服务器中进行选举,推选出一个新主,同时slave也切换成这个新主的slave,如果原来的主重启成功了也不会再次成为主了,而是作为slave挂到新主上。

spring集成哨兵配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd">
    <!-- 使用配置文件时使用 -->
    <!--     <context:property-placeholder location="classpath:redis.properties" />  -->

    <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
        <!-- 最大连接数, 默认8个 -->
        <property name="maxTotal" value="2048" />
        <!-- 最大空闲连接数, 默认8个 -->
        <property name="maxIdle" value="10" />
        <!-- 最小空闲连接数, 默认0 -->
        <property name="minIdle" value="0" />
        <!-- 每次逐出检查时 逐出的最大数目 如果为负数就是 : 1/abs(n), 默认3 -->
        <property name="numTestsPerEvictionRun" value="1024" />
        <!-- 表示idle object evitor两次扫描之间要sleep的毫秒数 300000毫秒,5分钟 -->
        <property name="timeBetweenEvictionRunsMillis" value="300000" />
        <!-- 逐出连接的最小空闲时间 -->
        <property name="minEvictableIdleTimeMillis" value="1800000" />
        <!-- 对象空闲多久后逐出, 当空闲时间>该值 且 空闲连接>最大空闲数 时直接逐出,不再根据MinEvictableIdleTimeMillis判断
            (默认逐出策略) -->
        <!-- 默认30分钟逐出连接-->
        <property name="softMinEvictableIdleTimeMillis" value="1800000" />
        <!-- 连接耗尽时是否阻塞, false报异常,ture阻塞直到超时, 默认true -->
        <property name="blockWhenExhausted" value="true" />
        <!-- 获取连接时的最大等待毫秒数(如果设置为阻塞时BlockWhenExhausted),如果超时就抛异常, 小于零:阻塞不确定的时间,
            默认-1 -->
        <property name="maxWaitMillis" value="1500" />
        <!-- 在获取连接的时候检查有效性, 默认false -->
        <property name="testOnBorrow" value="false" />
        <!-- 在空闲时检查有效性, 默认false -->
        <property name="testWhileIdle" value="true" />
        <!-- 在return给pool时,是否提前进行validate操作; -->
        <property name="testOnReturn" value="false" />
        <!-- 是否启用pool的jmx管理功能, 默认true -->
        <property name="jmxEnabled" value="true" />
        <property name="jmxNamePrefix" value="pool" />
        <!-- 是否启用后进先出, 默认true -->
        <property name="lifo" value="false" />
    </bean>

    <!--redis操作模版,使用该对象可以操作redis  -->
    <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate" >
        <property name="connectionFactory" ref="jedisConnectionFactory" />
        <!--如果不配置Serializer,那么存储的时候缺省使用String,如果用User类型存储,那么会提示错误User can‘t cast to String!!  -->
        <property name="keySerializer" >
            <bean class="org.springframework.data.redis.serializer.StringRedisSerializer" />
        </property>
        <property name="valueSerializer" >
            <bean class="org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer" />
        </property>
        <property name="hashKeySerializer">
            <bean class="org.springframework.data.redis.serializer.StringRedisSerializer"/>
        </property>
        <property name="hashValueSerializer">
            <bean class="org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer"/>
        </property>
        <!--开启事务  -->
        <!--  <property name="enableTransactionSupport" value="true"></property> -->
    </bean >

    <!-- redis集群配置 哨兵模式 -->
    <bean id="sentinelConfiguration" class="org.springframework.data.redis.connection.RedisSentinelConfiguration">
        <property name="master">
            <bean class="org.springframework.data.redis.connection.RedisNode">
                <!--  这个值要和Sentinel中指定的master的值一致,不然启动时找不到Sentinel会报错的   -->
                <property name="name" value="redis-sentinel"></property>
                <!-- 配置注master节点 主机节点,不需要配置从机节点-->
                <constructor-arg name="host" value="10.80.64.126"/>
                <constructor-arg name="port" value="7977"/>
            </bean>
        </property>
        <!--  记住了,这里是指定Sentinel的IP和端口,不是Master和Slave的   -->
        <property name="sentinels">
            <set>
                <bean class="org.springframework.data.redis.connection.RedisNode">
                    <constructor-arg name="host" value="10.80.64.126" />
                    <constructor-arg name="port" value="26377" />
                </bean>
                <bean class="org.springframework.data.redis.connection.RedisNode">
                    <constructor-arg name="host" value="10.80.64.126" />
                    <constructor-arg name="port" value="26378" />
                </bean>
                <bean class="org.springframework.data.redis.connection.RedisNode">
                    <constructor-arg name="host" value="10.80.64.126" />
                    <constructor-arg name="port" value="26379" />
                </bean>
            </set>
        </property>
    </bean>
    <bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
        <!--配置第几个库-->
        <property name="database" value="2"/>
        <constructor-arg name="sentinelConfig" ref="sentinelConfiguration" />
        <constructor-arg name="poolConfig" ref="jedisPoolConfig" />
    </bean>
    <bean id="redisService" class="com.kayak.kpl.frameservice.cache.jedis.RedisServiceImp">
    </bean>

</beans>

原文地址:https://www.cnblogs.com/tingxuelou/p/10382744.html

时间: 2024-11-08 15:30:55

redis主从+哨兵的相关文章

redis主从+哨兵模式

主从模式配置分为手动和配置文件两种方式进行配置,我现在有192.168.238.128(CentOS1).192.168.238.131(CentOS3).192.168.238.132(CentOS4)几台机器,只是配置文件的配置方式是降手动配置的命令放在配置文件中而已,本质是一致的.下面将对配置文件方式进行配置,我所述的案例,是基于我自己的另一篇博文<Redis的安装.服务配置>之上: 1.我将CentOS4作为主数据库,其他 模拟为从数据库 2.将CentOS1目录切换到/etc/red

Redis主从哨兵和集群搭建

主从哨兵和集群搭建 主从配置 哨兵配置 集群配置 1.主从: 国王和丞相,国王权力大(读写),丞相权利小(读) 2.哨兵: 国王和王子,国王死了(主服务挂掉),王子继位(从服务变主服务) 3.集群: 国王和国王,一个国王死了(节点挂掉),其他国王还活着,世界还没毁灭 主从配置 流程: 复制多份redis编译之后(make)的文件,分别命名为: xxx-6379 xxx-6380 xxx-6381 ... 开启6379服务和 6380服务 方式一: 在6380的客户端输入:slaveof 127.

Redis 主从+哨兵安装与部署

1 前言 redis集群常见的部署方式有: 采用主从复制 + sentinel(哨兵)监控的方式; 采用redis-cluster集群(去中心化分片集群)的方式 本文以笔者内部项目为例,采用主从复制+哨兵的方式部署. 2 版本说明 三台服务器(一主两从):192.168.1.60 为主服务器,192.168.1.59 和192.168.1.58 为从服务器 操作系统:CentOS Linux release 7.4.1708 (Core) JDK版本:jdk 1.8.0_171 REDIS版本:

Redis 主从哨兵模式搭建

安装单机版redis 1.编译redis cd /opt/ tar zxvf redis-3.0.6.tar.gz cd redis-3.0.6 make 2.创建redis目录 cd src/ mkdir /usr/local/redis cp redis-cli /usr/local/redis/ cp redis-server /usr/local/redis/ cd .. cp redis.conf /usr/local/redis/ 3.修改配置文件 cd /usr/local/red

部署redis主从集群并开启哨兵模式

一.部署环境系统:centos7通过在Linux系统上启动两个不同的redis实例来完成主从集群的部署yum源已部署 二.redis的下载与安装1.下载:官网下载2.安装创建/app/目录,redis安装在/app/目录下 [[email protected] ~]# mkdir /app [[email protected] ~]# cd /usr/local/src/ [[email protected] src]# ls redis-4.0.11.tar.gz [[email protec

redis主从集群搭建及容灾部署(哨兵sentinel)

Redis也用了一段时间了,记录一下相关集群搭建及配置详解,方便后续使用查阅. 提纲 l  Redis安装 l  整体架构 l  Redis主从结构搭建 l  Redis容灾部署(哨兵sentinel) l  Redis常见问题 Redis安装 发行版:CentOS-6.6 64bit 内核:2.6.32-504.el6.x86_64 CPU:intel-i7 3.6G 内存:2G 下载redis,选择合适的版本 [[email protected] software]# wget http:/

Redis主从以及哨兵集群搭建(二)

Redis主从以及哨兵集群搭建 一.前言 Redis主从同步原理同MySQL的主从原理十分相似,而解决Redis单点故障的哨兵机制(sentinel)又同解决MySQL单点故障的MHA十分相似.因此我们在学习Redis时,可以将学习MySQL的知识迁移,这样一来,有利于我们快速掌握Redis主从机制,Redis哨兵集群的搭建.Redis的Sentinel机制大概是这样的.sentinel即哨兵,作用即放哨.开个玩笑,其实哨兵有三个作用:监控.通知和自动故障转移.哨兵是用来监控Redis的mast

Redis 主从配置密码以及哨兵

Redis 主从介绍 主Redis写入数据时,从Redis会通过Redis Sync机制,同步数据,确保数据一致.并且Redis有哨兵(Sentinel)机制,Redis主挂掉会自动帮我们提升从为主. 主从同步类型以及哨兵介绍 级联复制 为避免主Redis同时读写压力过大,三个包括以上节点的Redis,可以配置为级联复制,如下图所示,节点4可以同步节点3数据,也可以同步节点2数据. 一主多从 需要两个以及以上节点.因为Redis是异步同步数据,数据写入主节点并返回客户端,并不代表从节点也已经写入

redis主从,哨兵回忆手册

redis主从 持久化的开启与主从集群是否生效无关系 Slave Server同样是以非阻塞的方式完成数据同步.在同步期间,如果有客户端提交查询请求,Redis则返回同步之前的数据(注意初次同步则会阻塞). Replication的工作原理: 如果Master和Slave之间的链接出现断连现象,Slave可以自动重连Master,但是在连接成功之后,一次完全同步将被自动执行. 缺点主节点挂了,那么就只能提供读操作了. 应用示例: 这里我们假设Master-Slave已经建立. #启动master