Redis主从复制和主从切换

  1. 配置主从复制
    1. 建立从文件夹,譬如 /usr/local/slaves/下建立 6380 6381 两个文件夹(两个从服务器)
    2. 复制redis.conf到刚建立的两个文件夹中
    3. 修改redis.conf 中的
      1. port 6380
      2. slaveof 127.0.0.1 6379  ------ip表示主服务器的ip  端口表示主服务器端口
      3. 保存退出,另一个从服务器做同样修改,如果端口不是6380,修改断开即可,此处修改为6381
    4. 启动主服务器 redis-server redis.conf
    5. 进入从服务器文件夹,启动从服务器
    6. 查看主服务器信息:redis-cli -p 6379 info Replication,可以看到有两个从服务器
    7. redis-cli -p 6379 进去主服务器,存储数据 set key val
    8. 进入从服务器,redis-cli -p 6380 查看数据 get key  查看是否能取出数据
  2. 配置主从切换
    1. 新建三个文件 6379-sentinel.conf 6380-sentinel.conf 6381-sentinel.conf
    2. 编辑文件
    3. ####master  sentinel.conf
      ##sentinel实例之间的通讯端口
      port 26379
      ####sentinel需要监控的master信息:<mastername> <masterIP> <masterPort> <quorum>.
      ####<quorum>应该小于集群中slave的个数,只有当至少<quorum>个sentinel实例提交"master失效" 才会认为master为ODWON("客观"失效) .
      sentinel monitor mymaster 127.0.0.1 6381 2
      ####授权密码,在安全的环境中可以不设置
      ##sentinel auth-pass mymaster luyx30
      ####master被当前sentinel实例认定为“失效”(SDOWN)的间隔时间
      sentinel failover-timeout mymaster 900000
      ####当新master产生时,同时进行“slaveof”到新master并进行同步复制的slave个数。
      ##在salve执行salveof与同步时,将会终止客户端请求。
      ##此值较大,意味着“集群”终止客户端请求的时间总和和较大。
      ##此值较小,意味着“集群”在故障转移期间,多个salve向客户端提供服务时仍然使用旧数据。
      sentinel config-epoch mymaster 4
      ####failover过期时间,当failover开始后,在此时间内仍然没有触发任何failover操作,当前sentinel将会认为此次failoer失败。
      sentinel leader-epoch mymaster 4
    4. 其他两个文件只需要修改端口即可
    5. 分别启动文件:redis-sentinel 6379-sentinel
  3. 通过java读写主从服务器
    1. 需要添加Spring配置和其他两个jar包
    2. <properties>
          <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
          <springVersion>3.2.9.RELEASE</springVersion>
      </properties>
      
      <dependencies>
          <dependency>
              <groupId>org.apache.commons</groupId>
              <artifactId>commons-pool2</artifactId>
              <version>2.4.2</version>
          </dependency>
      
          <dependency>
              <groupId>org.springframework.data</groupId>
              <artifactId>spring-data-redis</artifactId>
              <version>1.6.0.RELEASE</version>
          </dependency>
      
          <dependency>
              <groupId>org.springframework</groupId>
              <artifactId>spring-context</artifactId>
              <version>${springVersion}</version>
          </dependency>
          <dependency>
              <groupId>org.springframework</groupId>
              <artifactId>spring-tx</artifactId>
              <version>${springVersion}</version>
          </dependency>
          <dependency>
              <groupId>org.springframework</groupId>
              <artifactId>spring-context-support</artifactId>
              <version>${springVersion}</version>
          </dependency>
          <dependency>
              <groupId>cglib</groupId>
              <artifactId>cglib-nodep</artifactId>
              <version>3.1</version>
          </dependency>
      
          <dependency>
              <groupId>org.apache.commons</groupId>
              <artifactId>commons-lang3</artifactId>
              <version>3.1</version>
          </dependency>
          <dependency>
              <groupId>com.alibaba</groupId>
              <artifactId>fastjson</artifactId>
              <version>1.2.5</version>
          </dependency>
          <dependency>
              <groupId>org.aspectj</groupId>
              <artifactId>aspectjweaver</artifactId>
              <version>1.8.2</version>
          </dependency>
      
          <dependency>
              <groupId>junit</groupId>
              <artifactId>junit</artifactId>
              <version>4.8</version>
              <scope>test</scope>
          </dependency>
          <dependency>
              <groupId>net.sf.ehcache</groupId>
              <artifactId>ehcache</artifactId>
              <version>2.7.5</version>
          </dependency>
          <dependency>
              <groupId>org.slf4j</groupId>
              <artifactId>slf4j-api</artifactId>
              <version>1.6.6</version>
          </dependency>
          <dependency>
              <groupId>redis.clients</groupId>
              <artifactId>jedis</artifactId>
              <version>2.4.2</version>
          </dependency>
          <dependency>
              <groupId>commons-pool</groupId>
              <artifactId>commons-pool</artifactId>
              <version>1.6</version>
          </dependency>
          <dependency>
              <groupId>commons-logging</groupId>
              <artifactId>commons-logging</artifactId>
              <version>1.1.1</version>
          </dependency>
          <dependency>
              <groupId>org.slf4j</groupId>
              <artifactId>slf4j-log4j12</artifactId>
              <version>1.7.10</version>
              <scope>test</scope>
          </dependency>
      </dependencies>
    3. Spring配置
      1. <bean id="redisSentinelConfiguration" class="org.springframework.data.redis.connection.RedisSentinelConfiguration">
            <property name="master">
                <bean class="org.springframework.data.redis.connection.RedisNode">
                    <property name="name" value="mymaster"/>
                </bean>
            </property>
            <property name="sentinels">
                <set>
                    <bean class="org.springframework.data.redis.connection.RedisNode">
                        <constructor-arg name="host" value="127.0.0.1"></constructor-arg>
        
                        <constructor-arg name="port" value="26479"></constructor-arg>
                    </bean>
                    <bean class="org.springframework.data.redis.connection.RedisNode">
                        <constructor-arg name="host" value="127.0.0.1"></constructor-arg>
        
                        <constructor-arg name="port" value="26579"></constructor-arg>
                    </bean>
                </set>
            </property>
        </bean>
        
        <bean id="jeidsConnectionFactory"
        
              class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
        
            <constructor-arg ref="redisSentinelConfiguration"/>
        
        </bean>
        
        <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
            <property name="connectionFactory" ref="jeidsConnectionFactory"/>
        </bean>
    4. java测试
      1. import org.junit.Before;
        import org.junit.Test;
        import org.springframework.context.ApplicationContext;
        import org.springframework.context.support.ClassPathXmlApplicationContext;
        import org.springframework.dao.DataAccessException;
        import org.springframework.data.redis.connection.RedisConnection;
        import org.springframework.data.redis.core.RedisCallback;
        import org.springframework.data.redis.core.RedisTemplate;
        
        /**
         * Created by vincent on 15-10-13.
         */
        public class CommonTest {
        
            private ApplicationContext context ;
        
            private RedisTemplate redisTemplate;
            final String key ="key7";
        
            @Before
            public void init(){
                context = new ClassPathXmlApplicationContext("applicationContext.xml");
                redisTemplate= context.getBean("redisTemplate",RedisTemplate.class);
            }
        
            @Test
            public void test1(){
                redisTemplate.execute(new RedisCallback() {
                    @Override
                    public Long doInRedis(RedisConnection redisConnection) throws DataAccessException {
                         redisConnection.set(key.getBytes(),(System.currentTimeMillis()+"").getBytes());
                        return 1L;
                    }
                });
            }
        
            @Test
            public void  test2(){
                Object execute = redisTemplate.execute(new RedisCallback() {
                    @Override
                    public Object doInRedis(RedisConnection redisConnection) throws DataAccessException {
                        return redisConnection.get(key.getBytes());
                    }
                });
        
                System.out.println(new String((byte[])execute));
        
            }
        }
时间: 2024-08-29 22:03:12

Redis主从复制和主从切换的相关文章

redis的sentinel主从切换(failover)与Jedis线程池自动重连

本文介绍如何通过sentinel监控redis主从集群,并通过jedis自动切换ip和端口. 1.配置redis主从实例 10.93.21.21:6379 10.93.21.21:6389 10.93.21.21:6399 主从同步关系 master:10.93.21.21:6379 slave:10.93.21.21:6389,10.93.21.21:6399 master配置如下: # 实例ip和端口 bind 10.93.21.21 port 6379 # pid文件 pidfile re

[转]Redis哨兵模式(sentinel)学习总结及部署记录(主从复制、读写分离、主从切换)

Redis的集群方案大致有三种:1)redis cluster集群方案:2)master/slave主从方案:3)哨兵模式来进行主从替换以及故障恢复. 一.sentinel哨兵模式介绍Sentinel(哨兵)是用于监控redis集群中Master状态的工具,是Redis 的高可用性解决方案,sentinel哨兵模式已经被集成在redis2.4之后的版本中.sentinel是redis高可用的解决方案,sentinel系统可以监视一个或者多个redis master服务,以及这些master服务的

redis的主从复制,读写分离,主从切换

当数据量变得庞大的时候,读写分离还是很有必要的.同时避免一个redis服务宕机,导致应用宕机的情况,我们启用sentinel(哨兵)服务,实现主从切换的功能. redis提供了一个master,多个slave的服务. 准备三个redis服务,依次命名文件夹子master,slave1,slave2.这里为在测试机上,不干扰原来的redis服务,我们master使用6000端口. 配置文件(redis.conf) master配置修改端口: port 6000 requirepass 123456

Redis哨兵模式(sentinel)部署记录(主从复制、读写分离、主从切换)

部署环境: CentOS7.5  192.168.94.11 (master) 192.168.94.22 (slave0) 192.168.94.33 (slave1) 192.168.94.44 (slave2) 所有节点都需要安装redis+sentinel [[email protected] ~]# tar xf redis-4.0.11.tar.gz -C /usr/local/src/ [[email protected] ~]# cd /usr/local/src/redis-4

redis sentinel 主从切换(failover)解决方案,详细配置

主从复制简单来说就是把一台redis数据库中的数据同步到另一台redis数据库,并且按照数据流向,数据的发送者我们称作master,数据的接受者我们称作slave(master/slave的划分并不是那么一定的,譬如B可以作为A的slave,但同时也可以作为C的master),下面就从slave和master的角度分别说明主从复制流程. 首先是slave端,对于slave端来说,主从复制主要经历四个阶段: 第一阶段:与master建立连接 第二阶段:向master发起同步请求(SYNC) 第三阶

Redis(5)-----初识Redis-----主从复制.读写分离,主从切换(哨兵机制)

当数据量变得庞大的时候,读写分离还是很有必要的.同时避免一个redis服务宕机,导致应用宕机的情况,我们启用sentinel(哨兵)服务,实现主从切换的功能. https://www.cnblogs.com/jaycekon/p/6237562.html 一,主从分离(读写分离,主从复制) 首先我们默认已经安装了redis,然后复制master,slave1,slave2三个redis的文件.并把redis.conf拷贝到多个redis文件夹中来.不干扰原来的redis服务,我们master使用

redis主从配置及主从切换

环境描述:主redis:192.168.10.1 6379从redis:192.168.10.2 6380一.主从配置1.将主从redis配置文件redis.conf中的aemonize no 改为 yes2.修改从redis配置文件redis.conf中的port 6379 改为 6380,添加slaveof 192.168.10.1 6379 3.启动主从服务 主redis: [[email protected] redis-2.8.3]# src/redis-server /soft/re

redis主从切换的集群管理

网 站的访问量慢慢上来了.为了网站的性能方面,开始用了redis做缓存策略.刚开始的时候,redis是一个单点,当一台机器岩机的时候,redis的 服务完全停止,这时就会影响其他服务的正常运行.费话不多说了,下面利用redis sentinel做一个主从切换的集群管理.做这个集群管理的时候,查过很多资料才完全了解,他是怎么做的. java 客户端请看: http://blog.mkfree.com/posts/52b146e6479e5a64742fddd0 参考资料:http://redis.

redis配置读写分离以及利用哨兵sentinel进行自动主从切换

redis利用哨兵(sentinel)进行主从切换,断断续续,自己终于通过配置验证了一下该功能,其中遇到过一些的问题,也是耗费了大量的时间才解决,接下来分享下配置的过程以及遇到的问题和解决方法.希望对各位有所帮助. 首先说一下实验环境: redis软件:redis-3.2.1(安装在虚拟机的linux系统中) 宿主主机:window8.1 x64 secureCRT:宿主主机安装此软件来操作linux,这只是个人喜欢,大家可以不装. 对于redis在linux如何安装这里不进行说明,不懂的朋友可