zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    资源管理与调度系统-资源管理系统Mesos
    hive介绍及架构设计
    企业微信号注册步骤详解及zabbix报警媒介配置
    zabbix Server 4.0 监控Nginx
    zabbix Server 4.0 监控TCP的12种状态
    资源管理与调度系统-YARN资源隔离及以YARN为核心的生态系统
    资源管理与调度系统-YARN的资源调度器
    资源管理与调度系统-YARN的基本架构与原理
    批处理引擎MapReduce应用案例
    批处理引擎MapReduce内部原理
  • 原文地址:https://www.cnblogs.com/lqmblog/p/15235842.html
Copyright © 2011-2022 走看看