redis从入门到精通(十五)——— docker redis-sentinel哨兵集群及java实战

本文详细介绍了如何在Docker环境下搭建Redis-Sentinel集群,包括VM安装CentOS-7、安装Docker、配置Redis主从和哨兵,以及Java应用程序的集成和测试。通过哨兵实现高可用性和故障切换,确保Redis服务的稳定运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

docker redis-sentinel哨兵集群及java实战

一、docker环境准备

1、VM安装centos-7

安装详情见https://blog.youkuaiyun.com/chaojiangroke/article/details/108660782

 

2、安装centos-7版docker

安装详细见https://blog.youkuaiyun.com/chaojiangroke/article/details/108666791

 

3、为redis集群自定义网段

docker network create --subnet=172.18.0.0/16 net-redis

二、redis主从(一主两从)

1、下载redis镜像

docker pull redis:version

 

2、查看镜像

docker images

 

3、修改准备好的redis.conf配置文件

具体配置详见:https://blog.youkuaiyun.com/chaojiangroke/article/details/108485270

讲解几个重要配置:

1)bind配置,如果bind选项为空或0.0.0.0的话,那会接受所有来自于可用网络接口的连接

bind 0.0.0.0

2)守护进程的方式进行启动:daemonize yes

3)配置密码: requirepass 123456

4)配置docker宿主机IP作为哨兵模式暴露的ip

cluster-announce-ip 192.168.233.128  #我的docker宿主机ip

 

Master:

端口:port 6379

关闭镜像rdb持久化,注释掉所有的save配置;

#save 900 1

#save 300 10

#save 60 10000

 

关闭aof持久化,appendonly no

 

Slave:

端口:port 6380 和 6381

开启rdb持久化和aof持久化;

save 900 1

save 300 10

save 60 10000

 

配置master: replicaof masterIp masterPort

配置master的访问密码:masterauth 123456

配置从只读:replica-read-only yes

 

4、分别启动启动redis redis-slave1 redis-slave2

docker run -p 6379:6379 --name redis -v /home/docker/redis/conf/redis.conf:/etc/redis/redis.conf -v /home/docker/redis/data:/data -d redis:6.0.7 redis-server /etc/redis/redis.conf --restart=always

 

docker run -p 6380:6380 --name redis-slave1 -v /home/docker/redis1/conf/redis.conf:/etc/redis/redis.conf -v /home/docker/redis1/data:/data -d redis:6.0.7 redis-server /etc/redis/redis.conf --restart=always

 

docker run -p 6381:6381 --name redis-slave2 -v /home/docker/redis2/conf/redis.conf:/etc/redis/redis.conf -v /home/docker/redis2/data:/data -d redis:6.0.7 redis-server /etc/redis/redis.conf --restart=always

 

 

启动后进入一个slave1

查看主从信息

#进入容器

[root@localhost ~]# docker exec -ti redis-slave2 /bin/bash

#进入redis客户端

root@4d0073ebf147:/data# redis-cli

#获取权限

127.0.0.1:6379> auth 123456

OK

#查询主从信息

127.0.0.1:6379> info replication

# Replication

role:slave

master_host:172.17.0.3

master_port:6379

master_link_status:down

master_last_io_seconds_ago:-1

master_sync_in_progress:0

slave_repl_offset:1

master_link_down_since_seconds:1600420233

slave_priority:100

slave_read_only:1

connected_slaves:0

master_replid:67e5639423b505a3e15942a1f65acef248a6acaf

master_replid2:0000000000000000000000000000000000000000

master_repl_offset:0

second_repl_offset:-1

repl_backlog_active:0

repl_backlog_size:1048576

repl_backlog_first_byte_offset:0

repl_backlog_histlen:0

 

可以看到这台主的ip是172.17.0.3

然后自行验证

 

三、sentinel哨兵集群

哨兵可多个配置几乎一致,这里只举例一个哨兵

 

  1. 修改准备好的sentinel.conf配置文件

1)bind配置,如果bind选项为空或0.0.0.0的话,那会接受所有来自于可用网络接口的连接

bind 0.0.0.0

 

2)配置master地址 sentinel monitor <master-name> <ip> <port> <quorum>

sentinel monitor mymaster 192.168.233.128 6379 1

Sentinel节点会定期监控主节点,所以从配置上必然也会有所体现,本

 

配置说明Sentinel节点要监控的是一个名字叫做,ip地址和端

 

口为的主节点。代表要判定主节点最终不可达所需要的票数。一

 

般建议将其设置为Sentinel节点的一半加1。

 

同时还与Sentinel节点的领导者选举有关,至少要有max(quorum,num(sentinels)/2+1)个Sentinel节点参与选举,才能选出领导者Sentinel,从而完成故障转移。例如有5个Sentinel节点,quorum=4,那么至少要有max(quorum,num(sentinels)/2+1)=4个在线Sentinel节点才可以进行领导者选举

 

3)配置密码:requirepass 123456

 

4)配置master的访问密码:sentinel auth-pass mymaster 123456

 

5)protected-mode yes开启保护模式 (需要密码访问,jedis在这种模式下无法运行)

 

6)port 26379

 

4、启动redis-sentinel

docker run -p 26379:26379 --name redis-sentinel -v /home/docker/redis-sentinel/conf:/etc/redis -v /home/docker/redis-sentinel/data:/data -d redis:6.0.7 redis-sentinel /etc/redis/sentinel.conf --restart=always

 

四、spring boot继承redis sentinel

1、下载依赖包

#单元测试jar

<dependency>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-starter-test</artifactId>

            <scope>test</scope>

            <exclusions>

                <exclusion>

                    <groupId>org.junit.vintage</groupId>

                    <artifactId>junit-vintage-engine</artifactId>

                </exclusion>

            </exclusions>

 </dependency>

 

#spring boot redis sentinel依赖jar

<dependency>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-starter-data-redis</artifactId>

</dependency>

 

 

2、配置文件

spring:

  redis:

    #哨兵配置

    sentinel:

      #主节点名称

      master: mymaster

      #sentinel密码

      password: 123456

      #节点ip:port 多个以逗号隔开

      nodes: 192.168.233.128:26379

    jedis:

      @线程池配置

      pool:

        max-active: 8

        min-idle: 0

        max-idle: 8

        max-wait: 1

    #访问密码

password: 123456

 

3、redis服务类

@Service

public class RedisService {

 

@Resource //

private StringRedisTemplate stringRedisTemplate;

    @Resource  // RedisTemplate,可以进行所有的操作

    private RedisTemplate<Object,Object> redisTemplate;

 

    public void set(String key, String value){

        stringRedisTemplate.opsForValue().set(key, value);

    }

 

 

    public String get(String key){

        return stringRedisTemplate.opsForValue().get(key);

    }

}

 

4、测试类

@SpringBootTest

class RedisSentinelApplicationTests {

 

    @Autowired

    private RedisService redisService;

 

    @Test

    void redsSentinel() throws InterruptedException {

        int i = 0;

        while (true) {

            redisService.set("sentinel测试"+(++i), i+"");

            System.out.println(redisService.get("sentinel测试"+i));

            Thread.sleep(500);

        }

    }

}

 

5、测试

开始执行redsSentinel方法

 

停掉master

 

发现短暂连接埠上后主从切换,又可以正常使用了,至此哨兵集群搭建完毕

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值