Redis主从复制和主从切换

Stella981
• 阅读 617
  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. 新建文件 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 1
       sentinel down-after-milliseconds mymaster 1000
       sentinel failover-timeout mymaster 180000
       sentinel parallel-syncs mymaster 1
      
    4. 其他两个文件只需要修改端口即可

    5. 启动redis-sentinel sentinel.conf &

  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));
         
             }
         }
        

参考文档:

    http://redis.readthedocs.org/en/latest/topic/sentinel.html

加个广告:

    各位ITer如果身边有朋友,亲人做工程的,请推荐一下我们的这个网站 www.17heli.com 免费提供工程信息,同时使用APP可以提供在线人工客服找项目,介绍人脉,成功率高。谢谢啦。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
3年前
Ubuntu18开启redis服务自启动
设置redis服务开机自启动。1.创建配置文件夹sudomkdir/etc/redissudocp/usr/local/redis/redis.conf/etc/redissudocp/etc/redis/redis.conf/etc/redis/6379.conf2.
Stella981 Stella981
3年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Stella981 Stella981
3年前
Python之time模块的时间戳、时间字符串格式化与转换
Python处理时间和时间戳的内置模块就有time,和datetime两个,本文先说time模块。关于时间戳的几个概念时间戳,根据1970年1月1日00:00:00开始按秒计算的偏移量。时间元组(struct_time),包含9个元素。 time.struct_time(tm_y
Easter79 Easter79
3年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这