Redis哨兵

风流意气都作罢 提交于 2020-01-26 02:11:58

  1. 需求

    如果搭建redis分片,如果其中一台服务器宕机.则导致整个分片不能正常使用.

    需求:能否实现服务器尽可能”不宕机”.(高可用)

  2. Redis哨兵工作原理

    

    前提:如果需要实现redis高可用,必须先配置主从结构:

    1. 用户通过哨兵之后连接当前集群中的主机;

    2. 哨兵通过心跳检测机制实时向主机发出心跳检测:PING-PONG。如果连续3次没有收到主机的回执,则发现主机宕机,开始进行推选;

    3. 哨兵通过连接主机时已经获取了主机的全部信息。如果主机宕机,哨兵通过推选的机制选择一台从机当做新的主机,之后将其他的服务器改为当前主机的从机;

  3. 哨兵高可用搭建

    1. 复制目录 cp -r shards sentinel

    2. 删除持久化文件

      因为redis节点的配置文件名称都是一致的,启动redis时会导致内存数据都是相同,所以必须先删除持久化文件:rm -f dump.rdb appendonly.aof

    3. 主从搭建

      a. 启动三台redis

      b. 检查redis节点状态( 执行命令 src/redis-cli -p 6379 进入redis操作界面 ,执行 info replication 查看节点状态)

        

 

       c. 主从配置(进入6380操作界面,执行 slaveof 192.168.2.102 6379 ,将6380绑定为6379的从机)

        

 

      d. 主从测试

        搭建完成主从结构之后,在主机中添加数据,检查从机中的数据是否与主机一致,如果一致表示主从结构搭建成功。

 

 

 

         

 

     

  4. 编辑哨兵配置文件

    1. 从根目录复制哨兵的配置文件(cp sentinel.conf sentinel

    2. 关闭保护模式

      

    3. 开启后台启动

      

    4. 设定哨兵监控

      mamaster:表示当前主机的变量名称;Host port:当前主机的信息;1:表示当前哨兵选举的票数(几票生效)。规则:一般涉及选举的服务器,一般都是奇数个。

      

    5. 修改选举时间(主机宕机多长时间后开始选举,单位:毫秒)

      

 

  5. 哨兵测试

    1. 启动哨兵:src/redis-sentinel sentinel/sentinel.conf

    2. redis高可用测试

      6379宕机,检查6380/6381是否当主机,再次开启6379,检查6379是否为从。

      

 

       ps:不清楚为啥会出现重启6379后,第一次状态查询显示主机,第二次查询才显示是从机,可能是刚开机所以卡了一下???

   6.Spring测试哨兵

    

 /**

        * 测试哨兵

        * 调用原理:

        * 用户通过哨兵,连接redis的主机,进行操作

        * masterName:主机的变量名称

        * sentinels: 哨兵节点信息  Set<String> 

        */

       @Test

       public void testSentinel() {

          Set<String> sentinels = new HashSet<>();

          sentinels.add("192.168.2.102:26379");

          JedisSentinelPool sentinelPool =

                 new JedisSentinelPool("mymaster", sentinels);

          Jedis jedis = sentinelPool.getResource();

          jedis.set("tsvv", "哨兵测试成功!!!!");

          System.out.println(jedis.get("tsvv"));

       }

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!