• redis的主从、哨兵配置


    当数据量变得庞大的时候,读写分离还是很有必要的。同时避免一个redis服务宕机,导致应用宕机的情况,我们启用sentinel(哨兵)服务,实现主从切换的功能。redis提供了一个master,多个slave的服务。

    一、Master&Slave是什么?

    也就是我们所说的主从复制,主机数据更新后根据配置和策略,自动同步到备机

    的master/slaver机制,Master以写为主,Slave以读为主。

    二、它能干嘛?

    1、读写分离;

    2、容灾恢复

    我们在用java连接redis要关闭linux的防火墙

    1、关闭防火墙:service iptables stop

    2、配置主节点redis.conf

    #masterRedis端口(主节点)
    port 6379
    # 守护进程模式
    daemonize yes
    #关闭保护模式
    protected-mode no
    #不注释掉只能本机连接,注释掉后并且没有设置密码会启用保护模式
    bind 192.168.0.123
    #日志文件
    logfile var/redis/logs/redis-6379.log
    #以RDB格式持久化的文件名称
    bfilename dump6379.rdb
    #redis的密码
    requirepass admin123
    #Pid文件名字
    pidfile var/redis/pids/redis-6379.pid
    #从节点是否是只读节点
    slave-read-only yes

    3、#slaveRedis端口(从节点)

    从节点的配置基本和主节点的配置一致,只不过从节点需要配置主节点的IP和密码,主节点和从节点的密码最好保持一致,在从节点的redis.config的配置文件中加入,

    slaveof 192.168.0.123 6379(主节点的IP 端口)

    masterauth admin123 (主节点的密码)

    上面就是redis的主从配置,下面我们启动redis的服务,进行下验证

    如果我们需要三台redis服务,只需要将redis.cofng复制三份,命名为:redis-6379.conf ,redis-7000.conf ,redis-7001.conf ,修改下文件中的端口和其它配置,在启动redis服务的时候指定下redis.conf 的文件路径,下面这两句命令就启动了三台redis

    启动redis服务:./redis-server ../redis/config-6379.conf 主

    ./redis-server ../redis/config-7000.conf 从

    ./redis-server ../redis/config-7001.conf 从

    连接redis客户端:./redis-cli -h 192.168.0.187 -a Ninestar123 -p 6379

    客户端参数说明:-h 连接redis的IP -a redis的密码 -p redis的端口

    至此我们已经启动里三台redis,(一主两从)连接主节点 我这里7000是主节点 不要晕了

    连接后 输入命令 info 然后回车

    查看Replication参数 如果打印出这些参数 则说明主从配置成功


    role:是否主节点 master主节点 slave从节点

    connected_slaves:从节点的个数

    slave0...从节点的ip 端口

    slave1...从节点的ip 端口

    三、搭建哨兵集群

    3.1、port 哨兵端口

    3.2、配置监听主redis (mymaster只是给这个redis起个名字 可以自定义)1表示为一个哨兵认为这个主redis死了 则会从 从redis中重新选举个主redis

    3.3、配置主redis的密码 (mymaster 要和3.2中的名字保持一致)

    3.4、已守护进程启动,日志文件输入路径(注意:这两个参数在sentinel.config可能会没有,我们只需要手动加进去)

    遇到的问题:这个是搭建哨兵集群遇到的问题 并不是配置哨兵的步骤

    四、java通过哨兵模式动态链接redis

    4.1:需要spring-data-redis.jar

    4.2:下面配置通过sentinel连接主redis(要看配置的注释)

    <!-- Jedis线程 -->
    <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
    <property name="maxIdle" value="${redis.maxIdle}" />
    <property name="minIdle" value="${redis.minIdle}" />
    <property name="maxTotal" value="${redis.maxTotal}" />
    <property name="testOnBorrow" value="${redis.testOnBorrow}" />
    </bean>

    <!-- 哨兵 -->
    <bean id="sentinelConfig"
    class="org.springframework.data.redis.connection.RedisSentinelConfiguration">
    <property name="master">
    <bean class="org.springframework.data.redis.connection.RedisNode">
    <property name="name" value="mymaster"></property><!-- 主节点的名字 同3.2的名字 注意:主从的名字要一致 -->
    </bean>
    </property>

    <!-- 哨兵的ip和端口 -->
    <property name="sentinels">
    <set>
    <bean class="org.springframework.data.redis.connection.RedisNode">
    <constructor-arg name="host"
    value="${redis.sentinel1.ip}"></constructor-arg>
    <constructor-arg name="port"
    value="${redis.sentinel1.port}"></constructor-arg>
    </bean>
    <bean class="org.springframework.data.redis.connection.RedisNode" >
    <constructor-arg name="host"
    value="${redis.sentinel2.ip}"></constructor-arg>
    <constructor-arg name="port"
    value="${redis.sentinel2.port}"></constructor-arg>
    </bean>
    <bean class="org.springframework.data.redis.connection.RedisNode" >
    <constructor-arg name="host"
    value="${redis.sentinel3.ip}"></constructor-arg>
    <constructor-arg name="port"
    value="${redis.sentinel3.port}"></constructor-arg>
    </bean>
    </set>
    </property>
    </bean>

    <bean id="jedisConnectionFactory"
    class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
    <constructor-arg ref="sentinelConfig" />
    <constructor-arg ref="jedisPoolConfig" />
    <property name="password" value="${redis.password}"></property><!-- redis的密码 主从要一致 -->
    </bean>

    <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
    <property name="connectionFactory" ref="jedisConnectionFactory" />
    <property name="keySerializer" ref="stringRedisSerializer"></property>
    </bean>

    <bean id="stringRedisTemplate" class="org.springframework.data.redis.core.StringRedisTemplate">
    <property name="connectionFactory" ref="jedisConnectionFactory" />
    </bean>
    我是通过redisTemplate对redis进行操作的

    notify-keyspace-events(键空间通知)
    ————————————————
    版权声明:本文为CSDN博主「da鹏鹏」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/qq_37090962/article/details/81218859

  • 相关阅读:
    leetcode 104. Maximum Depth of Binary Tree 二叉树的最大深度(简单)
    leetcode 105. Construct Binary Tree from Preorder and Inorder Traversal 从前序与中序遍历序列构造二叉树(中等)
    leetcode 83. Remove Duplicates from Sorted List 删除排序链表中的重复元素(简单)
    leetcode 637. Average of Levels in Binary Tree 二叉树的层平均值(简单)
    Fiddler的安装与使用
    Redis
    开发那些事儿:如何解决js打包文件体积过大导致的网页加载慢问题?
    AI人工智能识别技术如何助力构建风险监测预警系统?
    H.265流媒体播放器EasyPlayer切换播放协议时,快照无法消失如何处理?
    AI人脸检测/行为识别智能分析网关8大智慧应用场景分析
  • 原文地址:https://www.cnblogs.com/lqmblog/p/15235842.html
Copyright © 2020-2023  润新知