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

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:从节点的个数

slave...从节点的ip   端口 

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

3.1:需要spring-data-redis.jar

<!-- 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><!--    主节点的名字  注意:主从的名字要一致 -->
            </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进行操作的

猜你喜欢

转载自blog.csdn.net/qq_37090962/article/details/81218859